2

我已经构建了一个应该具有访问密钥的自定义控件。也就是说,在控件的文本部分中,当键盘用于导航时,其中一个字母带有下划线,并且按下访问键应该使控件聚焦。

问题是按访问键没有任何作用。我并不感到特别惊讶,因为我还没有编写任何代码来实现这一点。但是我搜索了 MSDN 和 Stack Overflow,找不到任何信息告诉我如何做到这一点。

有人可以指出我正确的方向吗?我猜我需要响应来自窗口管理器的消息,告诉它我的控件应该响应哪些访问键,并且我还猜测某处有一个 WinApi 函数可以从字符串中提取访问键,例如“&Commit ”。

4

1 回答 1

4

您必须为组件实现 CM_DialogChar 的 Messagehandler。
此处的示例是使用插入器类进行演示,并带有硬编码的“&Hallo”

  TShape=Class(Extctrls.TShape)
   procedure CMDialogChar(var Message: TCMDialogChar);message CM_DialogChar;
  End;

  TForm5 = class(TForm)
    Shape1: TShape;
    Label1: TLabel;
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form5: TForm5;

implementation

{$R *.dfm}
procedure TShape.CMDialogChar(var Message: TCMDialogChar);
begin    
    if IsAccel(Message.CharCode, '&Hallo') then
      begin
        Showmessage('Hallo');
        Message.Result := 1;
      end;
end;
于 2014-04-11T15:07:54.917 回答