Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[34.239.150.167] |
|
Сообщ.
#1
,
|
|
|
Появилась необходимость в событии OnAfterFormShow, и я это реализовал вот так:
unit MainFormUnt; interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Classes, Vcl.Controls, Vcl.Forms, Vcl.StdCtrls; const WM_AFTER_SHOW = WM_USER + 331 ; type TFormX = class(TForm) private FOnAfterShow: TNotifyEvent; FOnShowBackUp: TNotifyEvent; procedure DoFormShow(Sender: TObject); procedure DoAfterShow( var aMessage : TMessage ); message WM_AFTER_SHOW; public constructor Create(AOwner: TComponent); override; property OnAfterShow: TNotifyEvent read FOnAfterShow write FOnAfterShow; end; TForm = class(TFormX); TMainForm = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormShow(Sender: TObject); procedure FormAfterShow(Sender: TObject); private { Private declarations } public { Public declarations } end; var MainForm: TMainForm; implementation {$R *.dfm} {$REGION ' TFormX '} procedure TFormX.DoAfterShow( var aMessage : TMessage ); begin if Assigned(FOnAfterShow) then FOnAfterShow(Self); end; procedure TFormX.DoFormShow(Sender: TObject); begin Inherited; if Assigned(FOnShowBackUp) then FOnShowBackUp(self); OnShow := FOnShowBackUp; PostMessage( Handle, WM_AFTER_SHOW, 0 , 0 ); // This will post a message to itself end; constructor TFormX.Create(AOwner: TComponent); begin inherited Create(AOwner); FOnShowBackUp := OnShow; OnShow := DoFormShow; end; {$ENDREGION} procedure TMainForm.FormShow(Sender: TObject); begin Memo1.Lines.Add('on show' ); end; procedure TMainForm.FormAfterShow(Sender: TObject); begin Memo1.Lines.Add('on after show' ); end; procedure TMainForm.FormCreate(Sender: TObject); begin OnAfterShow := FormAfterShow; end; end. Всё вроде работает, но на всякий случай хочу спросить, нет ли в такой реализации каких-то подводных граблей ? |