程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 學習 Message(7): OnMessage 只相應消息隊列中的消息

學習 Message(7): OnMessage 只相應消息隊列中的消息

編輯:Delphi

 Perform、SendMessage 會直接發送消息到窗體過程;

  PostMessage 是把消息放入消息隊列.

  因為 Application.OnMessage 只接收隊列中的消息,

  所以 Perform、SendMessage 發送的消息, OnMessage 收不到.

  測試如下:

  代碼文件:

unit Unit1;

interface

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

type
 TForm1 = class(TForm)
  ApplicationEvents1: TApplicationEvents;
  Button1: TButton;
  Button2: TButton;
  Button3: TButton;
  procedure ApplicationEvents1Message(var Msg: tagMSG; var Handled: Boolean);
  procedure Button1Click(Sender: TObject);
  procedure Button2Click(Sender: TObject);
  procedure Button3Click(Sender: TObject);
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{通過 ApplicationEvents1.OnMessage 接受鼠標雙擊窗體的消息; 可以雙擊窗體一試}
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
 var Handled: Boolean);
begin
 if Msg.message = WM_LBUTTONDBLCLK then
 begin
  ShowMessage('WM_LBUTTONDBLCLK');
  Handled := True;
 end;
end;

{通過 Perform 向窗體發送 WM_LBUTTONDBLCLK 消息; OnMessage 收不到}
procedure TForm1.Button1Click(Sender: TObject);
begin
 Self.Perform(WM_LBUTTONDBLCLK, 0, 0);
end;

{通過 SendMessage 向窗體發送 WM_LBUTTONDBLCLK 消息; OnMessage 收不到}
procedure TForm1.Button2Click(Sender: TObject);
begin
 SendMessage(Self.Handle, WM_LBUTTONDBLCLK, 0, 0);
end;

{通過 PostMessage 向窗體發送 WM_LBUTTONDBLCLK 消息; OnMessage 可以收到}
procedure TForm1.Button3Click(Sender: TObject);
begin
 PostMessage(Self.Handle, WM_LBUTTONDBLCLK, 0, 0);
end;

end.

窗體文件:

object Form1: TForm1
 Left = 0
 Top = 0
 Caption = 'Form1'
 ClIEntHeight = 145
 ClIEntWidth = 255
 Color = clBtnFace
 Font.Charset = DEFAULT_CHARSET
 Font.Color = clWindowText
 Font.Height = -11
 Font.Name = 'Tahoma'
 Font.Style = []
 OldCreateOrder = False
 PixelsPerInch = 96
 TextHeight = 13
 object Button1: TButton
  Left = 8
  Top = 97
  Width = 75
  Height = 25
  Caption = 'Button1'
  TabOrder = 0
  OnClick = Button1Click
 end
 object Button2: TButton
  Left = 89
  Top = 97
  Width = 75
  Height = 25
  Caption = 'Button2'
  TabOrder = 1
  OnClick = Button2Click
 end
 object Button3: TButton
  Left = 170
  Top = 97
  Width = 75
  Height = 25
  Caption = 'Button3'
  TabOrder = 2
  OnClick = Button3Click
 end
 object ApplicationEvents1: TApplicationEvents
  OnMessage = ApplicationEvents1Message
  Left = 128
  Top = 24
 end
end



  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved