![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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
|