Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Сделать активным компанент


Страницы:   1 2

Andrey K ©   (2016-07-07 16:53:00) 

Доброго времени суток.
Сделать активным компонент на форме понятно как. Есть другая ситуация.
На форме положен
pcProg: TPageControl;
На его страницы выкладывается фрейм TfrUn = class(TFrame) с набором TEdit
TfrUn = class(TFrame)
   edX1: TEdit;
   edX2: TEdit;
   ........

Делаю активным конкретный TEdit:
TfrUn(pcProg.ActivePage.Controls[0]).edX1.SetFocus; Проблем не возникает.

Проблема:
Программа ищет Sub: string; в эдитах, эдит в котором совпадение надо сделать активным.
Имя нужного эдита заношу в NamComp := 'edX1'
Вариант: TfrUn(pcProg.ActivePage.Controls[0]).FindComponent(NamComp).SetFocus; не работает. Ошибка.
Вариант: TfrUn(pcProg.ActivePage.Controls[0]).(FindComponent(NamComp) as TEdit).SetFocus; тоже ошибка.
Или может есть другой способ активировать нужный компонент?


Andrey K   (2016-07-07 21:17:00) [21]

>запомните этот эдит в переменной (только не его имя, а сам эдит)

Не очень понял. Кого типа должна быть переменная, TEdit? Если можно маленький примерчик вызова. Моя конструкция TfrUn(pcProg.ActivePage.Controls[0]). ... обращения подходит?


Юрий Зотов   (2016-07-07 21:12:00) [22]

> ладельцем фрейма на котором лежат все эдиты я делаю конкретную
> страницу pcProg, на которую выставляю фрейм. Отсюда обращение
> TfrUn(pcProg.ActivePage.Controls[0]).edX1.SetFocus; проходит нормально.

Похоже, Вы путаете владельца и родителя (Owner и Parent).


Юрий Зотов   (2016-07-07 21:07:00) [23]

> Она нашла нужный эдит.

Вот сразу и ставьте ему фокус. Или запомните этот эдит в переменной (только не его имя, а сам эдит), а потом поставите ему фокус, когда потребуется.

И сообщите, что выдает такой код:
ShowMessage(найденный_эдит.Parent.Name);
ShowMessage(найденный_эдит.Owner.Name);


Andrey K   (2016-07-07 20:56:00) [24]

Владельцем фрейма на котором лежат все эдиты я делаю конкретную страницу pcProg, на которую выставляю фрейм. Отсюда обращение TfrUn(pcProg.ActivePage.Controls[0]).edX1.SetFocus; проходит нормально. В другом компоненте, который не принадлежит pcProg, вызывается процедура  текущего фрейма на текущей странице pcProg, поиска эдита. Она нашла нужный эдит. Потом я должен передать фокус этому эдиту. Но в этот момент наступает событие pcProg onChange в нём я как раз и передаю фокус нужному эдиту. Может есть какой нибудь другой способ?


Юрий Зотов   (2016-07-07 18:16:00) [25]

NamComp - лишнее. При поиске Sub Вы же уже определили нужный Edit - вот ему и ставьте SetFocus.

А ошибка, похоже, из-за того, что владельцем (Owner) всех Edit'ов является не фрейм, а форма. Поэтому FindComponent ничего не находит.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо