unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 =class(TForm) mmo1: TMemo; btn2: TButton; btn3: TButton; procedure btn2Click(Sender: TObject); procedure btn3Click(Sender: TObject); private { Private declarations } procedure testPostMessage; procedure testSendMessage; public { Public declarations } end; var Form1: TForm1; implementation uses uFile; {$R *.dfm} var f: TFile; procedure TForm1.btn2Click(Sender: TObject); var i: Integer; begin testPostMessage; for i :=0 to 5000do begin mmo1.Lines.Add(IntToStr(i)+'======'); end; end; procedure TForm1.btn3Click(Sender: TObject); var i: Integer; begin testSendMessage; for i :=0 to 5000do begin mmo1.Lines.Add(IntToStr(i)+'======'); end; end; procedure TForm1.testPostMessage; var i: Integer; begin PostMessage(f.Handle, WM_TEST, 0, 0); for i :=0 to 5000do begin mmo1.Lines.Add(IntToStr(i)) end; end; procedure TForm1.testSendMessage; var i: Integer; begin SendMessage(f.Handle, WM_TEST, 0, 0); for i :=0 to 5000do begin mmo1.Lines.Add(IntToStr(i)) end; end; initialization if f = nil then f := TFile.Create; finalization if f <> nil then FreeAndNil(f);; end.
unit uFile; interface uses Classes, Windows, Forms, Messages; const WM_TEST = WM_USER +1; type TFile =class private FHandle: HWND; protected procedure WndProc(var Msg: TMessage); public procedure AfterConstruction; override; procedure BeforeDestruction; override; property Handle: HWND read FHandle; end; implementation { TFile } procedure TFile.AfterConstruction; begin inherited; FHandle := AllocateHWnd(WndProc); end; procedure TFile.BeforeDestruction; begin inherited; DeallocateHWnd(FHandle); end; procedure TFile.WndProc(var Msg: TMessage); begin if msg.Msg = WM_TEST then begin //娑堟伅澶勭悊鍐呭 Application.MessageBox('WM_TEST', 'WM_TEST', 0); end; windows.DefWindowProc(FHandle, Msg.Msg, Msg.wParam, Msg.lParam); end; end.