-
Добрый день! Сделал компонент наследник от TComponent. Как отправить сообщение форме на которой размещен этот компонент?
SendMessage(Handle,INI_SAVE_MESSAGE,0,0);
откуда взять этот handle? parent у TComponent нет, есть Owner, но он тоже TComponent :(
-
ураа, получилось так
var msg:TMessage; begin msg.Msg:=INI_SAVE_MESSAGE; msg.WParam:=0; msg.LParam:=0; msg.Result:=0; TForm(Owner).Broadcast(msg); end;
-
Удалено модератором
-
Если вы его кинули в дизайнере, то Owner, а если создали динамически с Owner = nil, то либо прописать владельца в своё свойство либо никак
-
Надо учитывать, что Owner может быть не TForm, а например, TFrame или TDataModule. Поэтому надо проходить по цепочке владельцев и проверять их на то, являются ли они наследниками TForm. С другой стороны, может надо не TForm искать, а первый попавшийся наследник от TWinControl? Все зависит от цели.
-
Да и вообще, возможно Owner одна форма, а Parent другая. Какой форме рассылать сообщения ?
-
Компонент тут невизуальный, наследник TComponent, у него parent отсутствует. Другое дело, что владельцем может быть вообще любой компонент. Просто по определению. Поэтому в любом случае, нужно копаться в цепочке владельцев. А приведение владельца к TForm в перспективе ничего, кроме багов не даст.
|