为什么窗口大小改变后,就会触发 WM_SIZE 消息????
Delphi中关键字message的用法???
怎么定义自己的消息??unit Form1Unit;interfaceuses
  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.

解决方案 »

  1.   

    拦截消息的方法定义:
    procedure 自定义方法名(var Msg: TMessage); message 待拦截的消息常量;当你想拦截某个消息时,只需按上边的方法结构声明即可.
    比如响应移动消息的方法命名:
    procedure CustMove(var Msg: TMessage); message WM_MOVE;
    为什么窗口大小改变后,就会触发 WM_SIZE 消息????
    Delphi中关键字message的用法???
    怎么定义自己的消息??
    ------------------------------------------------------
    如果还有疑问的话继续跟帖吧  :)
      

  2.   

    先了解一下windows的消息机制,然后看看比如vcl架构分析之类的书。
      

  3.   

    OnResize事件就是你写的那个Refresh
      

  4.   

    问题一:这是 windows 系统的运行规则,不是 delphi 决定的。
    消息其实就是一个整数而已,比 WM_USER 大一些的可以作为自定义的消息。