如何在自己的按钮控件中加入快捷键!!如ctrl-a???(50分)

  • 主题发起人 主题发起人 wangwei200208
  • 开始时间 开始时间
W

wangwei200208

Unregistered / Unconfirmed
GUEST, unregistred user!
如题!!
 
例子:
button的属性caption:='确定(&O)'
按钮button的快捷键O。
 
不对,那是Alt+O,不是Ctrl
 
加ActionList控件,按钮和ActionList关联,ActionList里可以设
 
用个ActionList就好了
 
我想在这个问题的基础上问一个问题
在使用快捷键是为什么我的每次都得置一个焦点后才能用快捷键
这个问题怎么解决
 
可以在键盘事件中处理。判断按键
 
不是吧,不要压
 
我也遇到这个问题
 
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
Shift: TShiftState);
//Form.KeyPreview := True;
begin
if (ssCtrl in Shift) and (Char(Key) in ['A','a']) then Button1.Click;
end;
 
用AcionList可能是最好的了;可是如果要写一个这样的控件,该如何实现呢?[:D]
 
为什么非要用ctrl 而不用alt 呢
 
正如上面所说:
1。如果用Alt+字母 可以直接在caption中直接设置如:(&Q)
2。如果想用其它快捷键ctrl,shift等,或是想用组合键,则应该在form.onkeydown()事件中进行处理;记得要把form的keypreview设置为true;
 
用ActionList控件,加入事件Action,指定Button的Action属性。
 
我指的是自己编的控件中加入快捷键属性!!!
 
//看一下吧:
{procedure WMHOTKEY(var Message : TMessage); message WM_HOTKEY;
procedure WMDESTROY(var Message : TMessage); message WM_DESTROY;
function GetHotChar : Char;
procedure Loaded;override;}

function TButton1.GetHotChar: Char;
begin
Result := #0;
if (Pos('&', Caption) > 0) and
(Length(Copy(Caption, Pos('&', Caption) + 1, 1))>0) then
Result := Copy(Caption, Pos('&', Caption) + 1, 1)[1];
end;

procedure TButton1.Loaded;
begin
inherited;
if not (csDesigning in ComponentState) and (GetHotChar <> #0) then
RegisterHotKey(Handle, IDHOT_SNAPWINDOW, MOD_CONTROL, Ord(GetHotChar));
end;

procedure TButton1.WMDESTROY(var Message: TMessage);
begin
if not (csDesigning in ComponentState) then
UnregisterHotKey(Handle, IDHOT_SNAPWINDOW);
inherited;
end;

procedure TButton1.WMHOTKEY(var Message: TMessage);
function GetPWnd : THandle;
begin
Result := Handle;
repeat
Result := Windows.GetParent(Result);
until not IsWindow(Windows.GetParent(Result));
end;
begin
if (GetActiveWindow = GetPWnd) and (Message.WParam = IDHOT_SNAPWINDOW) and
(Message.LParamLo = MOD_CONTROL) and (Message.LParamHi = ord(GetHotChar))
then Click;
end;
 
我的按钮上没有CAPTION
 
要看你的自定义组件是怎样定义的啦,Caption是显示的标题,可以是其它的.
 
我加入了一个属性hotkey:Tshortcut
如何注册快捷键阿????
 
procedure TButton1.WMHOTKEY(var Message: TMessage);
function GetPWnd : THandle;
begin
Result := Handle;
repeat
Result := Windows.GetParent(Result);
until not IsWindow(Windows.GetParent(Result));
end;
begin
if (GetActiveWindow = GetPWnd) and (Message.WParam = IDHOT_SNAPWINDOW) and
(Message.LParamLo = MOD_CONTROL) and (Message.LParamHi = ord(GetHotChar))
then Click; 不判断直接Click可以吗?有什么副作用???
end;
 
后退
顶部