Delphi自定义按钮加速键

时间:2015-03-23 17:48:19

标签: delphi delphi-xe

我正在编写一个从tExCustomControl派生的自定义按钮,而这个按钮又来自tCustomControl。 tExCustomControl组件负责绘制和显示标题。我设法使用WinAPI显示带有下划线的加速字符的标题。我如何告诉Windows accel密钥与tExButton相关联,以便它可以处理事件?

1 个答案:

答案 0 :(得分:2)

你什么都不告诉Windows。当用户键入加速器时,Windows会向您的应用发送WM_SYSCHAR消息,VCL会自动处理该消息。当VCL搜索哪个控件处理加速器时,您的组件将收到一条CM_DIALOGCHAR消息,您需要回复该消息,例如:

type
  TMyCustomButton = class(tExCustomControl)
  private
    procedure CMDialogChar(var Message: TCMDialogChar); message CM_DIALOGCHAR;
  end;

procedure TMyCustomButton.CMDialogChar(var Message: TCMDialogChar);
begin
  if IsAccel(Message.CharCode, Caption) and Enabled and Visible and
    (Parent <> nil) and Parent.Showing then
  begin
    Click;
    Result := 1;
  end else
    inherited;
end;

IsAccel()Vcl.Forms单元中的公共函数:

function IsAccel(VK: Word; const Str: string): Boolean;

它从提供的Str值解析加速器,并将其与提供的VK值进行比较。

上面的代码正是TSpeedButton实现加速器的方式,例如。