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

為何鍵盤的Tab 不會產生FormKeyDown事件

尚未結案
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-23 20:59:34 IP:61.70.xxx.xxx 未訂閱
為何鍵盤的Tab 不會產生FormKeyDown事件 但其它按鍵都可以 各位前輩幫幫我吧!!
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-23 21:54:35 IP:218.16.xxx.xxx 未訂閱
Tab 及 上下左右等要用 Key Press 不會在 FormKeyDown 出現的
jeffreck
高階會員


發表:247
回覆:340
積分:197
註冊:2003-01-23

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-23 22:36:01 IP:61.70.xxx.xxx 未訂閱
引言: Tab 及 上下左右等要用 Key Press 不會在 FormKeyDown 出現的
謝謝Justmade回覆,但是我試不行,不知謂何??
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-23 23:21:43 IP:61.70.xxx.xxx 未訂閱
你是要在 FORM 上去攔 TAB 的按鍵嗎~~ 請試著將 FORM.KeyPreview 設為 TRUE -- 聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-24 00:01:29 IP:218.16.xxx.xxx 未訂閱
Sorry 是我記錯了
  protected
    procedure WndProc( var msg : TMessage);override;    procedure TForm1.WndProc( var msg: TMessage );
begin
  inherited;
  case msg.Msg of
     CM_CHILDKEY:
     begin
        if msg.wParam = VK_Tab then
          ShowMessage('Tab');
     end;
  end;
end;
測試過可行 發表人 - Justmade 於 2003/06/24 00:02:28
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-24 06:51:49 IP:202.39.xxx.xxx 未訂閱
另一種方法: http://www.delphi32.com/info_facts/faq/faq_457.asp
type
  TForm1 = class(TForm)
  private
    procedure CMDialogKey(var msg: TCMDialogKey);
     message CM_DIALOGKEY;
  end;    var
  Form1: TForm1;    implementation    {$R *.DFM}    procedure TForm1.CMDialogKey(var msg: TCMDialogKey);
begin
  if msg.Charcode <> VK_TAB then
   inherited;
end;
  
procedure TForm1.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  if Key = VK_TAB then
    Form .Caption := 'Tab Key Down!';
end;
--- 每個人都是一本書
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-24 09:17:12 IP:211.23.xxx.xxx 未訂閱
SORRY 小弟失查~~我試了一下~~還真的攔不到 TAB 鍵~~    在這裡小弟再提供另一個解決的辦法~~    1.先放入 ApplicationEvents 元件(這個元件好像要DELPHI 6以上才有)    2.ApplicationEvents OnMessage 事件中
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
  var Handled: Boolean);
begin
 if Msg.message = WM_KEYDOWN then
  if Msg.wParam = VK_TAB then
   ShowMessage('Is TAB')
  else
   ShowMessage('Not TAB')
end;
OK 完成~收工 -- 聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
Justmade
版主


發表:94
回覆:1934
積分:2030
註冊:2003-03-12

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-24 10:29:09 IP:218.16.xxx.xxx 未訂閱
若用 ApplicationEvent 要小心 你用一個 Form 試時沒問題 若超過一個 Form 所有 Form 的都會被攔 若放在子視窗關閉時又沒取消該 Event 會出現Error 因 TForm1.ApplicationEvents1Message 已不存在 所以若你要是欄整個 Application 的 Tab 這是一個最簡單的好方法 但若只是針對某一/幾個 Form 的話其他兩個方法較好
Jasonwong
版主


發表:49
回覆:931
積分:581
註冊:2006-10-27

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-24 13:55:26 IP:211.23.xxx.xxx 未訂閱
引言: 若用 ApplicationEvent 要小心 你用一個 Form 試時沒問題 若超過一個 Form 所有 Form 的都會被攔 若放在子視窗關閉時又沒取消該 Event 會出現Error 因 TForm1.ApplicationEvents1Message 已不存在 所以若你要是欄整個 Application 的 Tab 這是一個最簡單的好方法 但若只是針對某一/幾個 Form 的話其他兩個方法較好
嗯嗯~~Justmade 大大說的沒錯~~因為他是針對整個 APPLICATION 去作業的~~ -- 聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心 傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
------
聰明的人,喜歡猜心;雖然每次都猜對了,卻失去了自己的心
傻氣的人,喜歡給心;雖然每次都被笑了,卻得到了別人的心
系統時間:2024-05-20 15:14:01
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!