線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1458
推到 Plurk!
推到 Facebook!

關於熱鍵問題請教高手和行家

答題得分者是:Rain
tomc
一般會員


發表:41
回覆:35
積分:15
註冊:2003-07-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-08-04 18:00:57 IP:218.18.xxx.xxx 未訂閱
各位武林高手: Delphi中我想定義熱F1鍵執行sub_F1(),F2鍵執行sub_F2(),F3鍵執行sub_F3();該如何實現? 謝謝! 一只新菜鳥
------
交流.學習
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-08-04 18:17:18 IP:220.160.xxx.xxx 未訂閱
設置表單的KeyPreview屬性為True,在表單的KeyDown事件:
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_F1 then sub_F1();
  if Key = VK_F2 then sub_F2();
  if Key = VK_F3 then sub_F3();
end;
tomc
一般會員


發表:41
回覆:35
積分:15
註冊:2003-07-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-08-04 18:27:57 IP:218.18.xxx.xxx 未訂閱
謝了! 但我不一定是在窗體上按Key喔!比如在文本框中按F1也會執行相應的sub_F1(); 我很普通
------
交流.學習
Rain
資深會員


發表:31
回覆:236
積分:268
註冊:2003-02-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-08-04 18:44:05 IP:220.160.xxx.xxx 未訂閱
上面的代碼在文本框中也是可以的,只要在表單上的都可以,為何不試一下呢? 如果你只想在文本框中判斷,把代碼寫在文本框元件的KeyDown事件中就好。
sos_admin
版主


發表:121
回覆:697
積分:768
註冊:2003-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-08-04 19:30:50 IP:61.155.xxx.xxx 未訂閱
这样就可以了,不论在那个控件中按件均一样 unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls; type TForm1 = class(TForm) Memo1: TMemo; Button1: TButton; Edit1: TEdit; procedure FormCreate(Sender: TObject); private //一定要是OnMessage procedure OnMessage(var Msg: Tmsg; var Handled: Boolean); { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.OnMessage(var Msg: Tmsg; var Handled: Boolean); begin if Msg.message=WM_KEYDOWN then case msg.wParam of VK_F1: showmessage('F1'); VK_F2: showmessage('F2'); VK_F3: showmessage('F3'); VK_F4: showmessage('F4'); VK_F5: showmessage('F5'); end; inherited end; procedure TForm1.FormCreate(Sender: TObject); begin //一定要是OnMessage application.onMessage:=onMessage; end; end.
banson1716
高階會員


發表:55
回覆:182
積分:167
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-08-05 04:37:47 IP:218.175.xxx.xxx 未訂閱
private procedure WMHotKey(var a: TWMHotKey); message WM_HOTKEY; procedure TForm1.WMHotKey(var a: TWMHotKey); begin if a.HotKey = 0 then showmessage('F1'); if a.HotKey = 1 then showmessage('F2'); if a.HotKey = 2 then showmessage('F2'); .... end; procedure TForm1.FormCreate(Sender: TObject); begin RegisterHotKey(Handle,0,0,$70); RegisterHotKey(Handle,1,0,$71); RegisterHotKey(Handle,2,0,$72); .... end;
tomc
一般會員


發表:41
回覆:35
積分:15
註冊:2003-07-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-08-05 08:05:31 IP:218.18.xxx.xxx 未訂閱
非常感謝以上各位熱心專家!小弟在這裡多謝啦! 我很普通
------
交流.學習
領航天使
站長


發表:12216
回覆:4186
積分:4084
註冊:2001-07-25

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-18 16:50:16 IP:192.168.xxx.xxx 未訂閱
建議採用Delphi 6.0的 TActionList 來控制Hot Key 很好用喔 ~~~Delphi K.Top討論區站長~~~
------
~~~Delphi K.Top討論區站長~~~
系統時間:2024-05-03 16:23:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!