如何做出快速鍵功能? |
尚未結案
|
shihchin
一般會員 發表:10 回覆:12 積分:4 註冊:2002-12-18 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 我想要做出可以讓使用者自訂快速鍵的功能,按下自訂的快速鍵之後就會帶出一字串,例如:按下Ctrl 1會帶出I Love You,Ctrl 1 2會帶出I Hate You, Ctrl按著之後,並不限定只能按一個鍵,而是可以自定按好幾個鍵,我只能抓出使用者按了Ctrl,沒辦法在抓到使用者按了1,請會的大大教我一下,或者教我如何著手,先謝謝各位大大, >>< face="Verdana, Arial, Helvetica"> shihchin 你好: 請問~~你所說的快速鍵是要用在什麼元件上呢?? 所謂的帶出字串又是什麼呢?? 你的意思是不是說,例如: 當 focus 在 Memo1 的時候,按下 Ctrl 1 就會自 動在 Memo1 裡面加上 I Love You 的字串呢?? < class="code"> void __fastcall TForm1::Memo1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if(Key=='1' && Shift.Contains(ssCtrl)) { Memo1->SetSelTextBuf("I Love You"); } } -- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/03/03 20:10:04
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
shihchin
一般會員 發表:10 回覆:12 積分:4 註冊:2002-12-18 發送簡訊給我 |
|
RaynorPao
版主 發表:139 回覆:3622 積分:7025 註冊:2002-08-12 發送簡訊給我 |
引言: 對,就是要做這樣的功能,而且是不只只是按一個鍵,而是可能一次按好幾個鍵,例如:Ctrl 1 2 OR Ctrl d k u,Ctrl後面是可以由使用者自訂,不限定幾個字,謝謝大大的回覆 >>< face="Verdana, Arial, Helvetica"> shihchin 你好: 以下是我大概想到的辦法,如果你覺得可以的話,就先這樣做吧< > 不過~~我認為做法上應該還有很大的改進空間,這點就留給你自己做了< >TStringList *slKey; //--------------------------------------------------------------------------- void __fastcall TForm1::Memo1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { int iIndex=slKey->IndexOf(IntToStr(Key)); if(iIndex==-1) { slKey->Add(IntToStr(Key)); } if(slKey->IndexOf(IntToStr('1'))!=-1 && slKey->IndexOf(IntToStr('2'))!=-1 && Shift.Contains(ssCtrl)) { Memo1->SetSelTextBuf("I Love You"); } } //--------------------------------------------------------------------------- void __fastcall TForm1::Memo1KeyUp(TObject *Sender, WORD &Key, TShiftState Shift) { int iIndex=slKey->IndexOf(IntToStr(Key)); if(iIndex!=-1) { slKey->Delete(iIndex); } } //--------------------------------------------------------------------------- void __fastcall TForm1::FormCreate(TObject *Sender) { slKey=new TStringList; } //--------------------------------------------------------------------------- void __fastcall TForm1::FormDestroy(TObject *Sender) { delete slKey; } //---------------------------------------------------------------------------備註: 有一個更簡單的方法 void __fastcall TForm1::Memo1KeyDown(TObject *Sender, WORD &Key, TShiftState Shift) { if(((GetKeyState('1') & 0x8000) || (GetKeyState(VK_NUMPAD1) & 0x8000)) && ((GetKeyState('2') & 0x8000) || (GetKeyState(VK_NUMPAD2) & 0x8000)) && ((GetKeyState('3') & 0x8000) || (GetKeyState(VK_NUMPAD3) & 0x8000)) && GetKeyState(VK_CONTROL) & 0x8000) { Memo1->SetSelTextBuf("I Love You"); } }-- Enjoy Researching & Developing -- 發表人 - RaynorPao 於 2003/03/05 15:40:55
------
-- 若您已經得到滿意的答覆,請適時結案!! -- -- 欲知前世因,今生受者是;欲知來世果,今生做者是 -- -- 一切有為法,如夢幻泡影,如露亦如電,應作如是觀 -- |
Royce520
高階會員 發表:18 回覆:157 積分:100 註冊:2002-09-13 發送簡訊給我 |
對,就是要做這樣的功能,而且是不只只是按一個鍵,而是可能一次按好幾個鍵,例如:Ctrl+1+2 OR Ctrl+d+k+u,Ctrl後面是可以由使用者自訂,不限定幾個字,謝謝大大的回覆 shihchin 你好:
你說要一次同時按好幾個按鍵, 例如 1 2 之類的, 就我所知是不可能辦到的因為這時從鍵盤送來的 scancode 只可能是 ctrl 1 或 ctrl 2 這樣, 所以你想要的功能看來很難做到, 不過你可以做循序按鍵的功能, 就是先ctrl 1 後ctrl 2 之類的功能, 然後 紀錄相關按鍵紀錄 以啟動相對的 function.
------
不要忘記呼吸,不要忘記編程! ∩__∩ |
aip999
初階會員 發表:10 回覆:63 積分:44 註冊:2002-03-29 發送簡訊給我 |
引言: 對,就是要做這樣的功能,而且是不只只是按一個鍵,而是可能一次按好幾個鍵,例如:Ctrl 1 2 OR Ctrl d k u,Ctrl後面是可以由使用者自訂,不限定幾個字,謝謝大大的回覆 shihchin 你好: 你說要一次同時按好幾個按鍵, 例如 1 2 之類的, 就我所知是不可能辦到的因為這時從鍵盤送來的 scancode 只可能是 ctrl 1 或 ctrl 2 這樣, 所以你想要的功能看來很難做到, 不過你可以做循序按鍵的功能, 就是先ctrl 1 後ctrl 2 之類的功能, 然後 紀錄相關按鍵紀錄 以啟動相對的 function.宣告一個bool keys[256]; 然後KeyDown那邊 keys[Key] = TRUE; 在KeyUp那邊 keys[Key] = FALSE; 然後可以在KeyDown那邊判斷 if (Keys['1'] && Keys['2'] && Keys['3']))... 這樣就可以了 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |