為什么視窗大小改變后,就會觸發 WM_SIZE 訊息????
Delphi中關鍵字message的用法???
怎么定義自己的訊息??
unit Form1Unit;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics,
Controls, Forms, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
procedure Refresh(var Msg: TMessage); message WM_SIZE;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ 此方法捕捉視窗尺寸被改變的訊息 }
procedure TForm1.Refresh(var Msg: TMessage);
begin
{ 先將視窗的尺寸顯示在標題欄中 }
Caption := IntToStr(Width) + ' - ' + IntToStr(Height);
{ 再呼叫默認訊息處理函式,重繪視窗 }
inherited;
end;
{ 隨機調整視窗的大小 }
procedure TForm1.Button1Click(Sender: TObject);
var
Size: Integer;
begin
{ 先將按鈕自身移到視窗左上角,以免視窗縮小后被遮擋 }
(Sender as TButton).Left := 0;
(Sender as TButton).Top := 0;
{ 獲取一個亂數,可正可負 }
Randomize;
Size := Random(100) - 50;
{ 設定視窗的新大小 }
Width := Width + Size;
Height := Height + Size;
{ 當視窗大小改變后,就會觸發 WM_SIZE 訊息,從而呼叫我們定義的 TForm1.Refresh }
end;
end.
uj5u.com熱心網友回復:
攔截訊息的方法定義:procedure 自定義方法名(var Msg: TMessage); message 待攔截的訊息常量;
當你想攔截某個訊息時,只需按上邊的方法結構宣告即可.
比如回應移動訊息的方法命名:
procedure CustMove(var Msg: TMessage); message WM_MOVE;
為什么視窗大小改變后,就會觸發 WM_SIZE 訊息????
Delphi中關鍵字message的用法???
怎么定義自己的訊息??
------------------------------------------------------
如果還有疑問的話繼續跟帖吧 :)
uj5u.com熱心網友回復:
先了解一下windows的訊息機制,然后看看比如vcl架構分析之類的書。uj5u.com熱心網友回復:
OnResize事件就是你寫的那個Refreshuj5u.com熱心網友回復:
問題一:這是 windows 系統的運行規則,不是 delphi 決定的。訊息其實就是一個整數而已,比 WM_USER 大一些的可以作為自定義的訊息。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/137925.html
標籤:VCL組件開發及應用
上一篇:語言問題
下一篇:新手求助!!!資料寫入,匯出TXT文本后,系統報錯the specified file was not found
