深入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.
深入delphi编程理解之消息(四)使用TWMSysCommand结构体的WM_SysCommand消息应用的更多相关文章
- 深入delphi编程理解之消息(一)WINDOWS原生窗口编写及消息处理过程
通过以sdk方式编制windows窗口程序,对理解windows消息驱动机制和delphi消息编程有很大的帮助. sdk编制windows窗口程序的步骤: 1.对TWndClass对象进行赋值; 2. ...
- 深入delphi编程理解之消息(二)发送消息函数及消息编号、消息结构体的理解
一.delphi发送消息的函数主要有以下三个: (一).SendMessage函数,其原型如下: function SendMessage( hWnd: HWND; {目标句柄} Msg: UINT; ...
- 深入delphi编程理解之消息(三)发送消息函数的一般应用实例
通过对消息函数(SendMessage.PostMessage.Perform)的一般应用,来说明sendmessage.postmessage函数和perform 方法调用方式和结果的区别. 一.程 ...
- Windows消息队列(优先队列,结构体中放比较函数)
Windows消息队列 消息队列是Windows系统的基础.对于每个进程,系统维护一个消息队列.如果在进程中有特定事件发生,如点击鼠标.文字改变等,系统将把这个消息加到队列当中.同时,如果队列不是空的 ...
- iOS学习笔记44-Swift(四)枚举和结构体
一.Swift的枚举 枚举是一系相关联的值定义的一个公共的组类型,同时能够让你在编程的时候在类型安全的情况下去使用这些值.Swift中的枚举比OC中的枚举强大得多, 因为Swift中的枚举是一等类型, ...
- 深入delphi编程理解之消息(六)无窗口单元消息的创建、接受及dispatch模式编程
一.程序界面 二.程序代码 (一).主界面代码 //========================================================================== ...
- 深入delphi编程理解之消息(五)重写(override)dispatch、wndproc方法和Application.OnMessage事件
dispatch.wndproc是VCL framework在TWinCtronl定义的虚拟方法,下面程序通过重写(override)这两函数拦截WM_LBUTTONDOWN消息,来与Applicat ...
- 深入delphi编程理解之接口(一)接口与类的异同及接口的声明和实现
一.抽象类与接口的异同 接口简单的理解可认为是一个抽象类,我们先定义一个抽象类和接口来对比之间的异同,代码如下: type IFormattedNumber = interface //定义接口 fu ...
- Delphi中运行时改变panel的位置及大小(WM_SysCommand消息配合参数使用,很奇妙) good
procedure TForm1.pnl1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Inte ...
随机推荐
- 17个IoC 软件包和项目
原文:17个IoC 软件包和项目 1.Autofac GitHub:https://github.com/autofac/Autofac 描述:An addictive .NET IoC contai ...
- AST抽象语法树——最基础的javascript重点知识,99%的人根本不了解
AST抽象语法树——最基础的javascript重点知识,99%的人根本不了解 javascriptvue-clicommonjswebpackast 阅读约 27 分钟 抽象语法树(AST),是一 ...
- ASP.NET Razor简介
Razor 不是一种编程语言.它是服务器端的标记语言. 什么是 Razor? Razor 是一种标记语法,可以让您将基于服务器的代码(Visual Basic 和 C#)嵌入到网页中. 基于服务器的代 ...
- oracle 锁表处理
1.查询 select object_name,machine,s.sid,s.serial#from v$locked_object l,dba_objects o ,v$session swher ...
- NetMQ用作IPC的实例
发送端/接收端 using System; using System.Threading; using NetMQ; using NetMQ.Sockets; namespace NetMQIPCSe ...
- 我竟然把today = new Date();写在了全局变量里面
let today = new Date();应该在每次用之前重新生成新的对象,因为对于例如 today.getTime() 这种方法,取得是today对象的time,而非调用today对象取得实时时 ...
- Apache Kafka(十)Partitions与Replication Factor 调整准则
Partitions与Replication Factor调整准则 Partition 数目与Replication Factor是在创建一个topic时非常重要的两个参数,这两个参数的取值会直接影响 ...
- Android 服务和广播的使用
Android 服务和广播的使用 服务的使用 创建服务类 创建一个java文件,取名 mService.java,继承Service. public class mService extends Se ...
- java位移运算符|And&,操作二进制
在java中 逻辑运算符有四种:& , |, &&, || &: 如果第一个条件是fasle,还会判断第二个条件,只要有一个条件不满足,结果就返回false; ...
- FIR滤波器工作原理(算法)以及verilog算法实现(包含与IIR的一些对比)
滤波器在2017年IC前端的笔试中,出现频率十分的高.不论今后是否会涉及,还是要记住一些会比较好.接下来就将从这四个方面来讲解,FIR数字滤波器的工作原理(算法)与verilog实现. ·什么是FIR ...