VCL的自定义消息

procedure CMWantSpecialKey(var Msg: TCMWantSpecialKey); message CM_WANTSPECIALKEY;
{说明:
CM_WANTSPECIALKEY - TCMWantSpecialKey - (CM_BASE + 30)
sent by TControl in response to CN_KEYDOWN and CN_KEYUP

拦截特殊键如:VK_TAB、VK_LEFT、VK_RIGHT、VK_UP、VK_DOWN、VK_RETURN、VK_EXECUTE 、
VK_ESCAPE 及 VK_CANCEL
CM_WANTSPECIALKEY 组件讯息提供你比拦截 WM_GETDLGCODE 窗口讯息更容易且灵活的判断
方法来决定是否需要某些特殊键的讯息。当控件收到任何一个特殊键时就会送出CM_WANTSPE
CIALKEY 组件讯息给控件。

举例:
procedure TCustomGrid.CMWantSpecialKey(var Msg: TCMWantSpecialKey);
begin
inherited;
if (goEditing in Options) and (Char(Msg.CharCode) = #13) then Msg.Result := 1;
end;

注意:
当处理 VK_TAB 时,按 TAB 键的效果被限定在本控件内,换句话说就是焦点不会被定为到下
一个控件上。

相关:
Windos消息 WM_GETDLGCODE
}
procedure CMDesignHitTest(var Msg: TCMDesignHitTest); message CM_DESIGNHITTEST;
{说明:
CM_DESIGNHITTEST - TCMDesignHittest - (CM_BASE + 28)
special message never sent from within the VCL (but from a designer DLL), used only at
design time to determine whether a control wants mouse and key input. Message.Result = 1
if the control behaves like at runtime else 0

处理此消息可以在组件中加入滚动条组件并让它在设计时期能动作。
你的组件必须以以下方法建立滚动条:
举例:
TMyScrollBar = class (TScrollBar)
procedure CMDesignHitTest(var Message: TCMDesignHitTest); message CM_DESIGNHITTEST;
end;
procedure TMyScrollBar.CMDesignHitTest( var Message: TCMDesignHitTest);
begin
Message.Result := 1;
end;
你的组件必须以以下方法建立滚动条:
TMyScrollBar.Create(nil);
而不是
TMyScrollBar.Create(Self);
}

procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM;
{说明:
procedure CNDrawItem(var Message: TWMDrawItem); message CN_DRAWITEM;
procedure CNMeasureItem(var Message: TWMMeasureItem); message CN_MEASUREITEM;
这两个消息息息相关,一起做说明--
参考本资料 "Delphi->应用技巧->Delphi的消息事件->Windows消息" 中对
procedure WMMeasureItem(var Message: TWMMeasureItem); message WM_MEASUREITEM;
procedure WMDrawItem(var Message: TWMDrawItem); message WM_DRAWITEM;
的说明

举例:
参考本资料 ""Delphi->应用技巧->在Delphi中控件的绘制->Delphi中编写OwnerDraw方式
按钮的方法以及注意点" 中提供的自定义按钮的实现代码。
}

时间: 2024-10-13 15:30:46

VCL的自定义消息的相关文章

VCL消息处理机制

http://www.cnblogs.com/railgunman/archive/2010/12/10/1902524.html#2868236 说到VCL中的消息处理就不能不提到TApplication,Windows会为每一个当前运行的程序建立一个消息队列,用来完成用户与程序的交互,正是通过Application完成了对Windows消息的集中处理! 首先通过Application.Run进入消息循环进行消息的处理,其中调用了HandleMessage. procedure TApplic

wParam与lParam的区别

Delphi中的消息 消息是Windows发出的一个通知,它告诉应用程序某个事件发生了.在Delphi中,大多数情况下Windows的消息被封装在VCL的事件中,我们只需处理相应的VCL事件就可以了,但如果我们需要编写自己的控件.截获或过滤消息就必须深入研究Win32的消息处理机制. 在Delphi中消息以TMessage记录的方式定义.打开Message.pas文件,我们可以看到Tmessage是这样定义的: type TMessage = packed record Msg: Cardina

delphi VCL研究之消息分发机制(转)

原文来源,http://blog.csdn.net/sushengmiyan/article/details/8635550 1.VCL 概貌 先看一下VCL类图的主要分支,如图4.1所示.在图中可以看到,TObject是VCL的祖先类,这也是Object Pascal语言所规定的.但实际上,TObject以及TObject声明所在的system.pas整个单元,包括在“编译器魔法”话题中提到的_ClassCreate等函数,都是编译器内置支持的.因此,无法修改.删除system.pas中的任何

Devexpress VCL Build v2014 vol 14.2.5 发布

和xe8 几乎同一天出来,但是目前官方不支持xe8. The following sections list all minor and major changes in DevExpress VCL 14.2.5. Note that products, controls and libraries which aren't mentioned in the list below are included in the unified installer for compatibility,

更新 Victor 串口控件详细说明 / Victor 串口控件 / C++ Builder 串口控件 / VCL 串口控件 / FMX 串口控件 / Firemonkey 串口控件 / BCB 串口控件

Victor 串口控件详细说明 类/函数 头文件 说明 TYbCommDevice Vcl.YbCommDevice.hFmx.YbCommDevice.h 串口控件 TVictorComm Vcl.VictorComm.hFmx.VictorComm.h 多线程的串口类 TCommQueue Vcl.VictorComm.hFmx.VictorComm.h 串口数据队列 (串口 FIFO 缓存) EVictorCommError Vcl.VictorComm.hFmx.VictorComm.h

Linux编程之自定义消息队列

我这里要讲的并不是IPC中的消息队列,我要讲的是在进程内部实现自定义的消息队列,让各个线程的消息来推动整个进程的运动.进程间的消息队列用于进程与进程之间的通信,而我将要实现的进程内的消息队列是用于有序妥当处理来自于各个线程请求,避免一窝蜂的请求而导致消息的异常丢失.想想socket编程里的listen函数吧,里面要设置一个队列长度的参数,其实来自网络的请求已经排成一个请求队列了,只是这个队列是系统帮我们做好了,我们看不到而已.如果系统不帮我们做这个等待队列的话,那就需要我们程序员在应用层实现了.

获取窗口句柄,并向窗口发送自定义消息

转载自:http://www.cnblogs.com/pen-ink/articles/1815306.html#commentform //①自定义消息//两个进程中定义相同的消息#define WM_COMM (WM_USER + 100) //发送窗口发送按钮处理,自定义消息为WM_COMM,接收窗口为DataRecvvoid CDataSendDlg::OnBnClickedOk(){ // TODO: 在此添加控件通知处理程序代码 CWnd *pWnd = CWnd::FindWind

利用消息机制实现VC与Delphi之间的通讯(发送自定义消息)

摘要: 本文介绍了使用Windows消息机制实现由不同语言编制的程序之间的相互通讯.联系,并以当前较为流行的两种语言Microsoft Visual C++ 6.0和Borland delphi 5.0为对象,用这两种语言各编制一应用程序,并能很好的通过消息进行交互. 关键字:vc++.delphi.消息 一. 引言 编制较大型的程序往往需要将一个项目分割成若干个模块,由若干个开发小组共同完成.笔者曾参加过几个大型项目的研发工作,根据需要往往要将项目分为解为几大部分,分到三.四家科研单位共同完成

Devexpress VCL Build v2015 vol 15.2 开始测试

增加了几个小玩意,与大版本变化根本无法匹配. 具体可以官网了解 https://www.devexpress.com/Subscriptions/New-2015.xml?product=vcl