![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Сделать активным компанент
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 ничего не находит.