Re[3]: Отловить завершение создания формы.
От: snusmumrick  
Дата: 03.07.08 20:39
Оценка:
Здравствуйте, DarkMaster, Вы писали:

AC>>>Требуется "внутри" некоторого компонента поймать момент,

S>>Если компонент оконный, можно при создании посылать ему сообщение.

S>>
S>>procedure TMyComponent.AfterConstruction;
S>>begin
S>>    inherited;
S>>    PostMessage(Handle, WM_AFTER_CREATION, 0, 0);
S>>end;
S>>


Да, я ошибся. Не взлетит.

DM>Это сообщение будет послано после создания этого компонента на форме, а не всей формы


Разумеется.

DM>(в принципе если он последний в списке создания — тогда может быть). К тому же PostMessage() поставит сообщение в очередь и вернется.


Разумеется.

DM>Так что нет гарантии, что WM_AFTER_CREATION будет пойман/обработан именно в момент между Create и Show.


Объясняю. Почему-то я решил, что TForm.Show тоже позовёт PostMessage(), то есть сам показ формы будет асинхронным.
Если бы это было так, то сообщение, положенное в очередь раньше (WM_AFTER_CREATION) гарантированно отработало бы раньше.
Однако, TForm.Show на самом деле зовёт Perform, то есть вызов синхронный. В силу этого, TForm.Show
произойдёт раньше, чем обработчик WM_AFTER_CREATION. Факт. Признаю свою ошибку.

Топикстартеру мои извинения.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.