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

如何判斷使用者操作狀態

答題得分者是:speedup
jumo
一般會員


發表:33
回覆:65
積分:24
註冊:2002-04-17

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-05-13 10:02:10 IP:203.204.xxx.xxx 未訂閱
目前我希望在使用者未操作一段時間後, 去執行一段副程式, 目前的做法是在每個元件的 KeyPress, MouseDown去做更新判斷的變數, 不過這樣覺得很麻煩, 有時候元件更換時怕會漏掉, 有沒有辦法去抓到所有在這個畫面上操作Keyboard & Mouse(除了 MouseMove)的系統訊息??
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-05-13 10:05:27 IP:210.243.xxx.xxx 未訂閱
或許可以自己寫這些事件的程序 然後在formcreate的時候動態指定
william
版主


發表:66
回覆:2535
積分:3048
註冊:2002-07-11

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-05-13 10:22:58 IP:147.8.xxx.xxx 未訂閱
Perhaps you should create your own application hook and hook to the WH_JOURNALRECORD hook.
jumo
一般會員


發表:33
回覆:65
積分:24
註冊:2002-04-17

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-05-13 10:27:44 IP:203.204.xxx.xxx 未訂閱
不管是動態或是靜態去指定, 如果沒注意到要去更改程式碼或元件Enent, 就會漏掉判斷了, 所以我是想把目前的做法改掉, 改成去抓系統的訊息.    ps. 雖然在 Form 有 Keypreview, 但是就是沒有 Mouse 的, 所以有關 Mouse 的部分目前在每個元件上面都要處理.    
引言: 或許可以自己寫這些事件的程序 然後在formcreate的時候動態指定
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-05-13 10:41:59 IP:61.224.xxx.xxx 未訂閱
Assign Event To Application.OnMessage eg  
procedure MyForm.AppMsgEvent(var Msg: TMsg; var Handled: Boolean);
begin
 if  (Msg.message <> WM_MOUSEMOVE) and
     ((Msg.message >= WM_KEYFIRST)and(Msg.message <= WM_KEYLAST))
      or
     ((Msg.message >= WM_MOUSEFIRST)and(Msg.message  <=WM_MOUSELAST))
 then begin
  //do something
 end; 
end;    procedure MyForm.FormCreate(Sender: TObject);
begin
 Application.OnMessage := AppMsgEvent;
end;     
混心雜欲 棄修身~唉
------
唉~
jumo
一般會員


發表:33
回覆:65
積分:24
註冊:2002-04-17

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-05-13 11:20:28 IP:203.204.xxx.xxx 未訂閱
以下的這段程式碼我試過了, 有幾點請教一下: 1. MouseMove 一樣會觸發, 要如何避開呢?? 2. WM_KEYFIRST、WM_KEYLAST、WM_MOUSEFIRST、WM_MOUSELAST這四個是什麼意思?? 我在 Help 裡面找不到.    
引言: Assign Event To Application.OnMessage eg
procedure MyForm.AppMsgEvent(var Msg: TMsg; var Handled: Boolean);
begin
 if  (Msg.message <> WM_MOUSEMOVE) and
     ((Msg.message >= WM_KEYFIRST)and(Msg.message <= WM_KEYLAST))
      or
     ((Msg.message >= WM_MOUSEFIRST)and(Msg.message  <=WM_MOUSELAST))
 then begin
  //do something
 end; 
end;    procedure MyForm.FormCreate(Sender: TObject);
begin
 Application.OnMessage := AppMsgEvent;
end;     
混心雜欲 棄修身~唉
speedup
資深會員


發表:19
回覆:259
積分:280
註冊:2003-07-04

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-05-13 12:06:17 IP:61.224.xxx.xxx 未訂閱
引言: 以下的這段程式碼我試過了, 有幾點請教一下: 1. MouseMove 一樣會觸發, 要如何避開呢?? 少個括號 2. WM_KEYFIRST、WM_KEYLAST、WM_MOUSEFIRST、WM_MOUSELAST這四個是什麼意思?? 我在 Help 裡面找不到. 鍵盤與滑鼠全部訊息的起始編號/結束編號,請自行參考Messages.pas原始碼或Windows SDK Help
引言: Assign Event To Application.OnMessage eg
procedure MyForm.AppMsgEvent(var Msg: TMsg; var Handled: Boolean);
begin     if  (Msg.message <> WM_MOUSEMOVE) and(
     ((Msg.message >= WM_KEYFIRST)and(Msg.message <= WM_KEYLAST))
      or
     ((Msg.message >= WM_MOUSEFIRST)and(Msg.message  <=WM_MOUSELAST))
     )
 then begin
  //do something
 end; 
end;    procedure MyForm.FormCreate(Sender: TObject);
begin
 Application.OnMessage := AppMsgEvent;
end;     
混心雜欲 棄修身~唉
混心雜欲 棄修身~唉
------
唉~
系統時間:2024-06-16 7:29:41
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!