Perform、SendMessage 會直接發送訊息到表單過程; PostMessage 是把訊息放入訊息佇列.因為 Application.OnMessage 只接收隊列中的訊息, 所以 Perform、SendMessage 發送的訊息, OnMessage 收不到.測試如下:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ExtCtrls;type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; Label2: TLabel; SpinEdit1:
下面是同樣的四段程式, 但分別使用了不同的三種訊息結構:TWMMouseMove、TWMMouse、TMessageunit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) protected procedure WMMouseMove(var Message:
本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Spin, ExtCtrls;type TForm1 = class(TForm) Panel1: TPanel; Label1: TLabel; Label2: TLabel; SpinEdit1:
傳遞訊息就是傳遞訊息資料, 資料是一組資料, 所以訊息是一個結構; 系統標準的訊息結構在 Delphi 中被定義為 TMsgPMsg = ^TMsg;tagMSG = packed record hwnd: HWND; message: UINT; wParam: WPARAM; lParam: LPARAM; time: DWORD; pt: TPoint;end;TMsg = tagMSG;MSG = tagMSG;但 TMsg 和 VCL 中的更多訊息結構如:
啟動強制回應視窗, 當前視窗會收到一條 WM_CancelMode 訊息; 改訊息無參數.本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Button2:
本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormMouseUp(Sender: TObject; Button:
和 TWMMouse 一致的訊息結構有:TWMLButtonDblClk {左鍵雙擊}TWMLButtonDown {左鍵按下}TWMLButtonUp {左鍵抬起}TWMMButtonDblClk {中鍵雙擊}TWMMButtonDown {中鍵按下}TWMMButtonUp {中鍵抬起}TWMMouseMove {滑鼠移動}TWMRButtonDblClk {右鍵雙擊}TWMRButtonDown {右鍵按下}TWMRButtonUp {右鍵抬起}
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) protected procedure WMLButtonDown(var Message: TWMLButtonDown); message WM_LBUTTONDOWN; procedure
本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) procedure FormPaint(Sender: TObject); procedure FormResize(Sender: TObject); end;var Form1:
本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm) protected procedure MyMouseDown(Msg: TWMMouse); procedure WMLButtonDown(var Message:
代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormMouseDown(Sender:
本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Button1: TButton; Button2: TButton; procedure FormMouseUp(Sender: TObject; Button:
KeyPreview := True; 即可, 它預設是 False; 這對一些快速鍵會有用.測試代碼:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm) Memo1: TMemo; procedure FormCreate(Sender:
本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;type TForm1 = class(TForm) Button1: TButton; ColorDialog1: TColorDialog; procedure
本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls;type TForm1 = class(TForm) Button1: TButton; TrackBar1: TTrackBar; procedure FormMouseUp(Sender:
目前對 $0118 號訊息的認識:1、微軟和 Delphi 都沒有給改訊息定義一個常量, 假如定義的話用 WM_SYSTIMER 比較合適;2、此訊息只在文本輸入類控制項(譬如: TMemo、TRichEdit、TEdit)獲得焦點時才會發出, 用於控制輸入游標;3、此訊息每秒一次, 和輸入游標同步;4、此訊息一旦達到目的立即就返回了, 所以用訊息方法和 WndProc、Dispatch 甚至 DefaultHandler 都不能響應;5、因為
本例:代碼檔案:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, ComCtrls, ExtCtrls;type TForm1 = class(TForm) Button1: TButton; TrackBar1: TTrackBar; LabeledEdit1:
已有定義的系統命令常數(感覺有些有問題):SC_SIZE = 61440;SC_MOVE = 61456;SC_MINIMIZE = 61472;SC_MAXIMIZE = 61488;SC_NEXTWINDOW = 61504;SC_PREVWINDOW = 61520;SC_CLOSE = 61536;SC_VSCROLL = 61552;SC_HSCROLL = 61568;SC_MOUSEMENU
WM_SYSCOMMAND 訊息的 LParam 參數是滑鼠位置, 低位是 X, 高位是 Y.下面三段程式是一樣的只是使用不同類型的訊息參數, 用 TWMSysCommand 更方便, 用 TMessage 更正統.程式一:unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs;type TForm1 = class(TForm)