|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
||||
|
||||
Отправить сообщение главному окну программы
Доброго времени суток!
Небольшое описание: есть компонент, написанный своими руками (наследуется от TComponent). Компонент создается и загружается по событию формы OnCreate. Так вот тут проблема... В конструкторе (TMyComponent.Create) компонента есть такой момент: Код:
SendMessage(..., <нейкое сообщение>, <параметр 1>, <параметр 2>) Вот и весь вопрос: что нужно поставить вместо точек "...", чтобы отправить сообщение главному окну программы, если компонент создается во время создания формы? Пробовал следующие варианты: 1. Application.MainForm.Handle - моя любимая ошибка "Access violation" - тут все понятно, почему именно она... 2. Application.Handle - компилит, но не работает... 3. Просто поставить 0 - а фиг тебе, тоже ничего... Вариант "TMyComponent.Create(AOwner: TComponent; OwnerHandle: Cardinal)" не предлагать, т.к. компонент будет вскоре запихнут в библиотеку BPL. Заранее спасибо! |
#2
|
||||
|
||||
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TLostComponent = class(TComponent) public constructor Create(AOwner: TComponent); override; end; TForm1 = class(TForm) procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } procedure WMUSER(var Msg: TMessage); message WM_USER+1973; end; var Form1: TForm1; implementation {$R *.dfm} { TlostComponent } constructor TLostComponent.Create(AOwner: TComponent); begin inherited Create(AOwner); if AOwner is TForm then SendMessage(TForm(AOwner).Handle, WM_USER+1973, 0, 0) else SendMessage(Screen.Forms[0].Handle, WM_USER+1973, 0, 0); end; procedure TForm1.FormCreate(Sender: TObject); begin TLostComponent.Create(Application); TLostComponent.Create(Self); end; procedure TForm1.WMUSER(var Msg: TMessage); begin ShowMessage('ok'); end; end. Пишу программы за еду. __________________ |
#3
|
||||
|
||||
Большое спасибо. +1
|