• 学习 Message(2): 发送 WM_MOUSEMOVE 消息


    本例效果图:



    代码文件:
    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls;
    
    type
      TForm1 = class(TForm)
        Panel1: TPanel;
        Button1: TButton;
        Button2: TButton;
        Button3: TButton;
        procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
        procedure Button3Click(Sender: TObject);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    {鼠标在 Panel1 中移动时, 我做了如下处理:}
    {1、显示鼠标在 Panel1 中的坐标}
    {2、显示是否同时按住了 Shift、Ctrl、Alt}
    procedure TForm1.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
      Y: Integer);
    var
      List: TStringList;
    begin
      List := TStringList.Create;
      if ssShift in Shift then List.Add('Shift');
      if ssCtrl  in Shift then List.Add('Ctrl');
      if ssAlt   in Shift then List.Add('Alt');
    
      if List.Count > 0 then
        Panel1.Caption := Format('%s: %d, %d', [List.CommaText, X, Y])
      else
        Panel1.Caption := Format('%d, %d', [X, Y]);
    
      List.Free;
    end;
    
    {向 Panel1 发送 WM_MOUSEMOVE 消息}
    {第一个消息参数是 0, 表示没有按任何辅助键}
    {第二个消息参数是 0, 相当于把鼠标移动到(0,0)坐标}
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      Panel1.Perform(WM_MOUSEMOVE, 0, 0);
    end;
    
    {向 Panel1 发送 WM_MOUSEMOVE 消息}
    {第二个消息参数在 WM_MOUSEMOVE 消息中表示鼠标坐标位置; 参数是32位整数, 低16位是X, 高16位是Y}
    {这里给的坐标是控件的中心点}
    procedure TForm1.Button2Click(Sender: TObject);
    var
      x,y,LParam: Integer;
    begin
      x := Panel1.ClientWidth div 2;
      y := Panel1.ClientHeight div 2;
      LParam := y shl 16 or x;
      Panel1.Perform(WM_MOUSEMOVE, 0, LParam);
    end;
    
    {向 Panel1 发送 WM_MOUSEMOVE 消息}
    {消息的第一个参数是表示正在按下哪个辅助键和鼠标的状态}
    {这里发送的消息是: 按着 Shift 键, 鼠标移动到 (20,10) 处}
    procedure TForm1.Button3Click(Sender: TObject);
    const
      x = 20;
      y = 10;
    begin
      Panel1.Perform(WM_MOUSEMOVE, MK_SHIFT, y shl 16 or x);
    end;
    
    end.
    
    窗体文件:
    object Form1: TForm1
      Left = 0
      Top = 0
      Caption = 'Form1'
      ClientHeight = 198
      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 Panel1: TPanel
        Left = 8
        Top = 8
        Width = 237
        Height = 121
        Caption = 'Panel1'
        TabOrder = 0
        OnMouseMove = Panel1MouseMove
      end
      object Button1: TButton
        Left = 8
        Top = 152
        Width = 75
        Height = 25
        Caption = 'Button1'
        TabOrder = 1
        OnClick = Button1Click
      end
      object Button2: TButton
        Left = 89
        Top = 152
        Width = 75
        Height = 25
        Caption = 'Button2'
        TabOrder = 2
        OnClick = Button2Click
      end
      object Button3: TButton
        Left = 170
        Top = 152
        Width = 75
        Height = 25
        Caption = 'Button3'
        TabOrder = 3
        OnClick = Button3Click
      end
    end
    

    摘自万一的 Delphi 博客

  • 相关阅读:
    Andrew Ng
    Matlab 常用语法速记 1
    jQuery 中的常用函数
    JS 删除数组中指定的某个元素的方法
    layer 插件 在子页面关闭自身的方法
    U方法
    读取配置和动态配置(C方法)
    TP框架控制器和对应方法创建
    ThinkPHP基础(1)
    利用ThinkPHP做项目步骤
  • 原文地址:https://www.cnblogs.com/hackpig/p/1667982.html
Copyright © 2020-2023  润新知