zoukankan      html  css  js  c++  java
  • Receive Windows Messages In NonWindowed Control

    View Code
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs;
    
    type
    
      TMsgReceiver = class(TObject)
      private
        fMsgHandlerHWND : HWND;
    
        WM_MY_UNIQUE_MESSAGE : Cardinal;
    
        procedure WndMethod(var Msg: TMessage);
      public
        Point : TPoint;
    
        constructor Create;
        destructor Destroy; override;
      end;
    
      TClickSendForm = class(TForm)
        procedure FormCreate(Sender: TObject);
        procedure FormMouseDown(Sender: TObject; Button: TMouseButton;  Shift: TShiftState; X, Y: Integer);
        procedure FormDestroy(Sender: TObject);
      private
        WM_MY_UNIQUE_MESSAGE : Cardinal;
        fMsgReceiver: TMsgReceiver;
        function GetMsgReceiver: TMsgReceiver;
        property MsgReceiver : TMsgReceiver read GetMsgReceiver;
      public
        { Public declarations }
      end;
    
    var
      ClickSendForm: TClickSendForm;
    
    implementation
    
    {$R *.dfm}
    
    procedure TClickSendForm.FormCreate(Sender: TObject);
    begin
    
      //instantiate MsgReceiver
      MsgReceiver;
    
      WM_MY_UNIQUE_MESSAGE := RegisterWindowMessage('MSG_MY_UNIQUE_MESSAGE');
    end;
    
    { TMsgReceiver }
    
    constructor TMsgReceiver.Create;
    begin
      inherited Create;
    
      fMsgHandlerHWND := AllocateHWnd(WndMethod);
    
      WM_MY_UNIQUE_MESSAGE := RegisterWindowMessage('MSG_MY_UNIQUE_MESSAGE');
    
    end;
    
    destructor TMsgReceiver.Destroy;
    begin
      DeallocateHWnd(fMsgHandlerHWND);
      inherited;
    end;
    
    procedure TMsgReceiver.WndMethod(var Msg: TMessage);
    begin
      if Msg.Msg = WM_MY_UNIQUE_MESSAGE then
      begin
        Point.X := Msg.LParam;
        Point.Y := Msg.WParam;
    
        //just to receive some "output"
        Windows.Beep(Point.X, Point.Y);
      end
      else
        Msg.Result := DefWindowProc(fMsgHandlerHWND, Msg.Msg, Msg.wParam, Msg.lParam);
    end;
    
    procedure TClickSendForm.FormDestroy(Sender: TObject);
    begin
      FreeAndNil(fMsgReceiver);
    end;
    
    procedure TClickSendForm.FormMouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    begin
      PostMessage(HWND_BROADCAST, WM_MY_UNIQUE_MESSAGE, x, y);
    end;
    
    function TClickSendForm.GetMsgReceiver: TMsgReceiver;
    begin
      if fMsgReceiver = nil then fMsgReceiver := TMsgReceiver.Create;
      result := fMsgReceiver;
    end;
    
    end.
  • 相关阅读:
    fcc的高级算法题
    jq on方法绑定多个事件
    高效的jQuery代码编写技巧
    HTML 提高页面加载速度的方法
    link 和 import 导入外部样式的区别
    js将多个方法添加到window对象上的多种方法
    js 数组删去重复的加上没有的元素
    JS中定义对象原型的两种使用方法
    CSS 清除默认样式
    JavaScript中定义对象的四种方式 2012-5-10 15:19 阅读(0)
  • 原文地址:https://www.cnblogs.com/Jekhn/p/2461508.html
Copyright © 2011-2022 走看看