我正在编写一个我从速度按钮派生的小组件。我需要做的就是覆盖paint方法,因为我想改变外观。 现在我已经达到了点击按钮时我想要提供不同背景颜色的程度。但是,我找不到在我的组件中捕获鼠标左键单击消息的方法。
到目前为止我用过的东西:
procedure KeyboardButton.WndProc(var Message: TMessage);
begin
if Message.LParam = VK_LBUTTON then
begin
//Some code
end
else
inherited;
end;
当我点击按钮Message.LParam不是1时,这不起作用。
我也试过......
procedure CMMouseLeave(var Message: TMessage); message CM_MOUSELEAVE;
嗯,我知道CM_MOUSELEAVE不是代表鼠标点击的消息。但也许有像CM_MOUSECLICK这样的消息???我找不到它。总之,任何人都可以告诉我什么是CM_XXXX,因为我找不到msdn的任何内容?看起来像Delphi特定的消息。
提前致谢!
答案 0 :(得分:4)
VCL已经为您跟踪WM_LBUTTONDOWN/UP
条消息。在组件的csLButtonDown
属性中启用ControlState
标志,同时在组件上按住鼠标左键(如果DragMode属性未设置为dmAutomatic
,则为)。您的Paint()
代码可以检查该标记并根据需要调整其背景图。
答案 1 :(得分:3)
您可以覆盖MouseDown和MouseUp方法。记得检查Button参数的值!
答案 2 :(得分:1)
您没有正确测试鼠标事件。试试这个:
if Message.Msg = WM_LBUTTONDOWN then
// Some code
else
inherited;
BTW,TMessage.LParam
和TMessage.WParam
是使用特定消息类型(如WM_LBUTTONDOWN
)传递的参数,具有不同的含义,具体取决于TMessage.Msg
实际上是什么。应该从不是您获得TMessage
等通用消息的情况,只检查WParam
或LParam
。