自定义控制感应accelchar
custom control sensing accelchar
我正在尝试弄清楚如何让我的自定义控件(基于静态文本)响应加速键(delphi,我使用它,将其命名为 accelchar)按下。通过响应我的意思是添加一些代码。我想出的最好办法是处理 WM_SYSKEYUP 并手动检查标题和字符代码。我怀疑一定有更简单、更可靠的解决方案。
你说你的控件是基于TStaticText的。如果您查看 TStaticText(或其祖先,实际上是 TCustomStaticText),您将看到一个消息处理程序,它处理聚焦另一个控件的默认行为:
procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
在它的实现中,你可以看到它是如何验证自己的状态的:
if (FFocusControl <> nil) and Enabled and ShowAccelChar and
IsAccel(Message.CharCode, Caption) then
在基本实现中,当输入 if
时焦点控件将获得焦点,但在您的实现中,您可以简单地创建一个新的消息处理程序,其中包含相同的 if,并添加您自己的实施。
我正在尝试弄清楚如何让我的自定义控件(基于静态文本)响应加速键(delphi,我使用它,将其命名为 accelchar)按下。通过响应我的意思是添加一些代码。我想出的最好办法是处理 WM_SYSKEYUP 并手动检查标题和字符代码。我怀疑一定有更简单、更可靠的解决方案。
你说你的控件是基于TStaticText的。如果您查看 TStaticText(或其祖先,实际上是 TCustomStaticText),您将看到一个消息处理程序,它处理聚焦另一个控件的默认行为:
procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
在它的实现中,你可以看到它是如何验证自己的状态的:
if (FFocusControl <> nil) and Enabled and ShowAccelChar and
IsAccel(Message.CharCode, Caption) then
在基本实现中,当输入 if
时焦点控件将获得焦点,但在您的实现中,您可以简单地创建一个新的消息处理程序,其中包含相同的 if,并添加您自己的实施。