delphi 怎樣設定組合鍵
2010-04-16 21:32
問題是你要全域性的.還是要系統級的,還是要區域性的。
如果是全域性和區域性的,那麼在主窗體上(或其他控制項上)(form)的keypress等屬性上監控就行了..
如果是系統級的,那麼需要api了.
簡單**:
用到3個api函式
bool registerhotkey(
hwnd hwnd, //響應該熱鍵的視窗控制代碼
int id, //該熱鍵的唯一標識
uint fsmodifiers, //該熱鍵的輔助按鍵
uint vk //該熱鍵的鍵值
);
為了得到唯一標識,我們還將用到另乙個api函式
atom globaladdatom(
lpctstr lpstring //自己設定的乙個字串
);
因為我們還要在程式退出的時候,消除這個熱鍵, 所以需要宣告乙個全域性變數:
hotkeyid: integer;
第一步:
在視窗的create事件中,加入以下**
hotkeyid := globaladdatom('myhotkey') - $c000;
注: hotkeyid的合法取之範圍是0x0000到0xbfff之間, globaladdatom函式得到的值
在0xc000到0xffff之間,所以減掉0xc000來滿足呼叫要求。
第二步:
在上面的**下面加入:
registerhotkey(handle, hotkeyid, mod_alt, vk_f8);
熱鍵的輔助按鍵包括mod_ctrl 、mod_alt、mod_shift,對於windows相容鍵盤還支援windows
鍵,即其鍵面上有windows標誌的那個鍵,其值為mod_win。
上面 的**註冊了乙個熱鍵:alt+f8。當然如果你希望象takeit那樣,只用f8, 就這麼寫:
registerhotkey(handle, hotkeyid, 0, vk_f8);
注:handle是乙個特殊的變數,它表示當前視窗的控制代碼。
這個函式你應該能句舉一反三了吧。
原理:
一旦熱鍵設定成功,在程式應用過程中如果有相應的鍵被按下,windows系統都會給你的應
用程式傳送乙個訊息wm_hotkey,不管你的應用程式是否為當前活動的。其中wm_hotkey消
息的格式為:
idhotkey = (int) wparam; // 該引數在設定系統級的熱鍵有用,一般不予使用
fumodifiers = (uint) loword(lparam); //熱鍵的輔助按鍵
uvirtkey = (uint) hiword(lparam); //熱鍵的鍵值
第三步:
註冊了熱鍵,就該寫下響應**了。
首先,在程式頭部分的private段中加入宣告 (作用是宣告這個過程,和宣告變數類似。
procedure hotkeydown(var msg: tmessage); message wm_hotkey;
然後在程式中加入如下**:
procedure tfmain.hotkeydown(var msg: tmessage);
begin
if (msg.lparamlo = mod_alt) and (msg.lparamhi = vk_f8 then) // 假設熱鍵為alt+f8
begin
showmessage('f8');
end;
end;
最後一步:
在視窗的close事件中加入
unregisterhotkey(handle, hotkeyid); //登出hotkey, 釋放資源。
delphi 怎樣設定組合鍵
delphi 怎樣設定組合鍵 2010 04 16 21 32 問題是你要全域性的.還是要系統級的,還是要區域性的。如果是全域性和區域性的,那麼在主窗體上 或其他控制項上 form 的keypress等屬性上監控就行了.如果是系統級的,那麼需要api了.簡單 用到3個api函式 bool regis...
delphi 設定系統級的組合鍵
1.全域性或者區域性的組合快捷鍵 如果是全域性和區域性的,那麼用主窗體上 或其他控制項上 form 的keypress等屬性進行監控。2.如果是系統級的,那麼需要api了.1 bool registerhotkey hwnd hwnd,int id,uint fsmodifiers,uint vk ...
qt設定組合鍵
ctrl enter傳送資訊的實現 在現在的即時聊天程式中,一般都設定有快捷鍵來實現一些常用的功能,類似qq可以用ctrl enter來實現資訊的傳送。在qt4中,所有的事件都繼承與qevent這個類,以下是用qevent來實現快捷鍵的功能。首先所有qt類的基類qobject有乙個成員函式insta...