![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отловить момент после создания новой формы?
Arc © (2005-07-11 00:07:00)Форма создается динамически,
например что-нить типа:
with TSomeForm.Create(Application) do
begin
.....
end;
В моем компоненте нужно кое-что сделать со всеми динамически создающимися формами, после их Create, или после их Show, не важно.
С формами создающимися при запуске приложения, проблем нет
for n := 0 to Application.ComponentCount - 1 do
if Application.Components[n] is TForm then
(Application.Components[n] as TForm). SomeProperty:= SomeValue;
А как быть с динамическими формами? Как мне отловить это событие?
PS. Вносить какой-либо дополнительный код в формы я не хочу. Компонент должен работать с уже созданными проектами.
Arc (2005-07-11 00:56:00) [1]О SetWindowsHookEx написано в хелпе. Вопрос исчерпан.
Arc (2005-07-11 00:41:00) [2]В конструкторе компонента ставим локальный хук, в нем отлавливаем WM_CREATE
Мда... а я пытался повсится на Application.OnMessage, но WM_CREATE до туда не доходит...
Хук значит. Никогда не делал, можно ссылочку, где об этом почитать можно
Arc (2005-07-11 00:32:00) [3]begin эта самая точка и есть.
:) Я знаю, но вот как раз там-то я и не хочу ничего изменять и как раз для того чтобы там ничего не изменять мне и нужен этот класс.
Вносить какой-либо дополнительный код в формы я не хочу. Компонент должен работать с уже созданными проектами.
Конечно я бы мог сделать наследника от TForm, в котором на OnCreate выполнял бы нужный мне код, но я не хочу переписывать ВСЕ динамические формы встречающиеся в моих проектах.
Юрий Зотов (2005-07-11 00:26:00) [4]В конструкторе компонента ставим локальный хук, в нем отлавливаем WM_CREATE, получаем ссылку на дельфишный объект через FindControl, проверяем его класс - и если это форма, то выполняем с ней нужные действия. В деструкторе компонента хук снимается.
Поскольку такой компонент нужен всего один на весь проект, лучше сделать его в виде синглтона (перекрыв NewInstance и FreeInstance).
Anatoly Podgoretsky (2005-07-11 00:15:00) [5]begin эта самая точка и есть.