深入delphi编程理解之消息(四)使用TWMSysCommand结构体的WM_SysCommand消息应用

  通过以下实例拦截窗体WM_SysCommand消息,我们可以获取到很多有趣的数据。

      一、程序界面

  二、程序代码

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    ListBox1: TListBox;
  private
    { Private declarations }
    procedure MyWMSysCommand(var AMessage: TWMSysCommand); message WM_SysCommand;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
procedure Tform1.MyWMSysCommand(var AMessage: TWMSysCommand);
var
  str: string;
begin
  case AMessage.CmdType of       //可能通过查找TWMSysCommand结构体查找wParam以下参数
    SC_SIZE:
      str := 'SIZE         ';
    SC_MOVE:
      str := 'MOVE         ';
    SC_MINIMIZE:
      str := 'MINIMIZE     ';
    SC_MAXIMIZE:
      str := 'MAXIMIZE     ';
    SC_NEXTWINDOW:
      str := 'NEXTWINDOW   ';
    SC_PREVWINDOW:
      str := 'PREVWINDOW   ';
    SC_CLOSE:
      str := 'CLOSE        ';
    SC_VSCROLL:
      str := 'VSCROLL      ';
    SC_HSCROLL:
      str := 'HSCROLL      ';
    SC_MOUSEMENU:
      str := 'MOUSEMENU    ';
    SC_KEYMENU:
      str := 'KEYMENU      ';
    SC_ARRANGE:
      str := 'ARRANGE      ';
    SC_RESTORE:
      str := 'RESTORE      ';
    SC_TASKLIST:
      str := 'TASKLIST     ';
    SC_SCREENSAVE:
      str := 'SCREENSAVE   ';
    SC_HOTKEY:
      str := 'HOTKEY       ';
    SC_DEFAULT:
      str := 'DEFAULT      ';
    SC_MONITORPOWER:
      str := 'MONITORPOWER ';
    SC_CONTEXTHELP:
      str := 'CONTEXTHELP  ';
    SC_SEPARATOR:
      str := 'SEPARATOR    ';

    61441:
      str := '拖动左边框    ';
    61442:
      str := '拖动右边框    ';
    61443:
      str := '拖动上边框    ';
    61444:
      str := '拖动左上角    ';
    61445:
      str := '拖动右上角    ';
    61446:
      str := '拖动下边框    ';
    61447:
      str := '拖动左下角    ';
    61448:
      str := '拖动右下角    ';
    61458:
      str := '拖动标题栏    ';
    61558:
      str := '横向滚动条滚动';
    61574:
      str := '双击横向滚动条';
    61575:
      str := '纵向滚动条滚动';
    61559:
      str := '双击纵向滚动条';
    61587:
      str := '点击最小化图标';
    61490:
      str := '在非最大化时双击标题栏';
    61730:
      str := '在最大化时双击标题栏';
  end;
  ListBox1.Items.Add(str);
  ListBox1.Items.Add(Format('X:%dY:%2d', [AMessage.XPos, AMessage.YPos]));
  ListBox1.Perform(WM_VSCROLL, SB_BOTTOM, 0);  //移动到VScroll到底部,保证新加入的文字总是可见。可以通过查找 TWMScroll结构体查找第二个参数SB_XXXX
  inherited;   //注释这个一行,窗口将无法关闭
end;

end.
posted @ 2020-01-21 00:32  delphi学习园地  阅读(429)  评论(0编辑  收藏  举报