深入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.