2014-04-11 24 views
2

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

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

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

回答

4

您必须为您的组件实现CM_DialogChar的Messagehandler。
这里的例子是使用示范一个中介类与硬编码“&喂”

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; 
+0

谢谢 - 正是我需要的。 'CM_DIALOGCHAR'和'IsAccel'。 –