在窗体里如何响应F1,F2,F3的事件。(50分)

  • 主题发起人 主题发起人 huzhaowei
  • 开始时间 开始时间
H

huzhaowei

Unregistered / Unconfirmed
GUEST, unregistred user!
现在就是点击F1,form1上的label1.caption:='f1',类似的情况对于F2,F3
 
你的F1,F2.F3是什么?
 
是键盘上的键呀。
 
救急呀,下午就要用了,请大侠帮帮忙
 
先聲明以下几個過程
procedure WMHotKey_f1(var Msg: TMessage);
message WM_HOTKEY;
procedure WMHotKey_f2(var Msg: TMessage);
message WM_HOTKEY;
procedure WMHotKey_f3(var Msg: TMessage);
message WM_HOTKEY;
過程實現
procedure TForm1.FormCreate(Sender: TObject);
begin
//--registry system hotkey
RegisterHotkey(form1.Handle,$DDDDA,0, VK_F1);
//VK_F10 為f10
RegisterHotkey(form1.handle,$DDDDB,0,VK_F2);
RegisterHotkey(form1.handle,$DDDDC,0,VK_F3);
end;
//相應各熱鍵的事件
procedure Tform1.WMHotKey_f1(var Msg: TMessage);
begin
if Msg.WParam=$DDDDA then
label1.caption:='f1';
end;
Procedure Tform1.Wmhotkey_f2(var msg:Tmessage);
begin
if msg.wparam=$DDDDB then
showmessage('你按了F2鍵');
end;
Procedure TForm1.Wmhotkey_f3(var msg:Tmessage);
begin
if msg.wparam=$DDDDC then
showmessage('按了F3鍵');
end;
 
用ActionList控件
 
procedure WMHotKey_f1(var Msg: TMessage);
message WM_HOTKEY;
procedure WMHotKey_f2(var Msg: TMessage);
message WM_HOTKEY;
procedure WMHotKey_f3(var Msg: TMessage);
message WM_HOTKEY;

后两句编译不过:Duplicate message method index错误。请指教
 
你试一下:把Form的属性KeyPreview的值改为True,应该就可以了。
 
真的很急,请帮忙呀。分数可以再加
 
呵呵,我以为你要用热键呢,Sorry!
 
用ActionList控件
双击,增加Actions,修改每个Action的ShortCut为Fn就可以了。
然后在目的地,比如菜单项啦,或其他地方设置他的Action属性为ActionList里的项目即可。
 
它给的方法可以用,
public
{ Public declarations }
procedure WMHotKey_f1(var Msg: TMessage);
message WM_HOTKEY;
只要这一个,create里面也用只是这个不一样
procedure Tform1.WMHotKey_f1(var Msg: TMessage);
begin
if Msg.WParam=$DDDDA then
label1.caption:='f1';
if Msg.WParam=$DDDDB then
label1.Caption:='f2';
if Msg.WParam=$DDDDC then
label1.Caption:='f3';
end;

我这可以的,你试试
 
在Form的KeyDown事件中实现就可以了吧
procedure TForm1.FormKeyDown(Sender: TObject;
var Key: Word;
Shift: TShiftState);
begin
if key = VK_F1 then
label1.Caption := 'F1'
else
if key = VK_F2 then
label1.Caption := 'F2';
end;
 
多谢各位dfw,把Form的属性KeyPreview的值改为True,在keypress里写,
已经解决。再次感谢。
 
聲明過程
procedure WMHotKey(var Msg: TMessage);
message WM_HOTKEY;
過程實現
procedure TForm1.FormCreate(Sender: TObject);
begin
//--registry system hotkey
RegisterHotkey(form1.Handle,$DDDDA,0, VK_F1);
//VK_F10 為f10
RegisterHotkey(form1.handle,$DDDDB,0,VK_F2);
RegisterHotkey(form1.handle,$DDDDC,0,VK_F3);
end;
//相應各熱鍵的事件
procedure Tform1.WMHotKey(var Msg: TMessage);
begin
if Msg.WParam=$DDDDA then
label1.caption:='f1';
if msg.wparam=$DDDDB then
showmessage('你按了F2鍵');
if msg.wparam=$DDDDC then
showmessage('按了F3鍵');
end;
現在應該可以了
 
再次感谢各位相助。谢谢。
 
后退
顶部