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方式
按钮的方法以及注意点" 中提供的自定义按钮的实现代码。
}
原文地址:http://www.cnblogs.com/spiritofcloud/p/3978318.html