• delphi中Message消息的使用方法


    实例1

    unit Unit1;

    interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;

    const
    WM_ME=WM_USER+100; // 自定义消息;
    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    // 第一种消息处理方式 ; 只能处理常量消息;
    procedure wmme(var message:TMessage);message WM_ME; // 自定义消息处理过程,专门处理WM_ME 消息; private
    { Private declarations }
    public
    { Public declarations }
    // 第二种消息处理方式;可能处理常量或变量消息;
    procedure WndProc(var message:TMessage);override; // 重载窗口消息过程
    // 第三种消息处理方式
    procedure WMCommand(var Message: TWMCommand); message WM_COMMAND; // 命令消息处理过程
    procedure WMSysCommand(var Msg:TWMSysCommand);message WM_SYSCOMMAND; //处理系统性消息;
    end;
    var
    Form1: TForm1;
    implementation
    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    SendMessage(Handle,WM_ME,0,0); // 发送消息WM_ME ; 消息先由WndProc处理,再交给wmme处理;
    end;

    procedure TForm1.WMSysCommand(var Msg: TWMSysCommand);
    begin
    //下面代码的作用是,用户如果点击了标题栏上的最小化和关闭按钮,则隐藏窗体。
    if (Msg.CmdType=SC_MINIMIZE) or (Msg.CmdType=SC_CLOSE) then
    begin
    Self.Hide;
    end else
    DefaultHandler(Msg); //这句的作用是继续处理其它消息;
    end;

    procedure TForm1.WMCommand(var Message: TWMCommand);
    begin // 第三种消息处理方式
    if Message.NotifyCode = BN_CLICKED then
    if FindControl(Message.Ctl) = Button1 then showmessage(‘ 点击了 Button1’ );
    inherited;
    end;

    procedure TForm1.wmme(var message: TMessage);
    begin
    ShowMessage(IntToStr(Handle)+ ‘wmme’); // 第一种消息处理方式
    end;

    procedure TForm1.WndProc(var message: TMessage);
    begin
    if message.Msg=WM_ME then // 第二种消息处理方式
    ShowMessage(IntToStr(Handle)+ ‘WndProc’);
    inherited WndProc( Message); //这里inherited才会触发一次wmme消息;
    end;
    end.

    实例2/ 消息的广播方式 /
    /// 消息广播只能将消息传递到接收消息的主程序中, MDIChild 窗体不能接收到广播消息; /
    unit Unit1;
    interface
    uses
    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
    type
    TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    private
    { Private declarations }
    public
    { Public declarations }
    procedure WndProc(var message:TMessage); override;
    end;
    var
    Form1: TForm1;
    MyMessage: DWORD;
    implementation
    {$R *.dfm}
    { TForm1 }
    procedure TForm1.WndProc(var message: TMessage);
    begin
    if message.Msg=MyMessage then // 第 3 步:重载 Windows 消息处理过程,处理接收到的 MyMessage 消息;
    ShowMessage(FloatToStr(Handle)+ ‘MyMessage’);
    inherited WndProc( Message);
    end;

    procedure TForm1.Button1Click(Sender: TObject);
    begin
    SendMessage(HWND_BROADCAST,MyMessage,0,0); // 第 2 步:广播 MyMessage 消息;
    end;
    / 预先注册好 Windows 消息; 第一种方法
    procedure TForm1.FormCreate(Sender: TObject);
    begin
    // 同一字符串 , 如 ‘MyMessageMe’ 在不同的程序中调用 RegisterWindowMessage 注册消息时,返回的 MyMessage 结果是一样的。这样为在不同程序之间广播消息提供了可能。即不同程序注册消息时,必须注册相同的注符串。
    MyMessage:=RegisterWindowMessage( ‘MyMessageMe’); // 第 1 步:注册 Windows 消息,重点在于返回的值 MyMessage
    end;
    / 预先注册好 Windows 消息; 第二种方法
    { initialization
    MyMessage:=RegisterWindowMessage(‘MyMessageMe’);
    }

    //BroadcastSystemMessage,可以在进程之间广播消息;
    procedure TForm1.SendSMSMessage;
    var
    SMSMessage:Cardinal;
    recipt:Cardinal;
    begin
    try
    SMSMessage:=RegisterWindowMessage(‘SendSMSMessage’);
    recipt:=BSM_ALLDESKTOPS; //所以桌面程序都可以接收
    BroadcastSystemMessage(BSF_POSTMESSAGE,@recipt,SMSMessage,0,0);
    except

    end;
    end;

    end.
    ————————————————
    版权声明:本文为CSDN博主「qq_33728871」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/qq_33728871/article/details/120654380

  • 相关阅读:
    STM32单片机OLED贪吃蛇游戏记分计时
    C#源码 LIS实验室(检验科)信息系统源码 SaaS模式的Client/Server架构
    pandas写入MySQL
    植物大战僵尸杂交版破解C++实现
    阿里云存储解决方案,助力轻舟智航“将无人驾驶带进现实”
    微服务下怎么做权限管理
    骚操作之 持有 ReadOnlySpan 数据
    通过Gunicorn、Supervisor和Nginx更好地运行Django
    我的Go+语言初体验——祝福留言小系统,让她也可以感受到你的祝福
    更新UpdatePanel外部控件
  • 原文地址:https://blog.csdn.net/u013408061/article/details/126105659