如果你能在你的應(yīng)用程序中添加一些熱鍵,就可以加快用戶的操作速度,特別是對那些熟練的操作人員,他們特別歡迎快捷鍵的操作方式。在不少大型應(yīng)用軟件中,用戶可以通過使用Ctrl+Alt+F5之類的組合鍵來方便地進(jìn)行功能切換和處理。那么,我們在用PowerBuilder開發(fā)應(yīng)用程序時(shí),怎樣在其中實(shí)現(xiàn)需要的熱鍵功能呢?下面筆者就根據(jù)自身的經(jīng)驗(yàn),介紹兩種實(shí)用的方法。
第一種方法:
該方法可以實(shí)現(xiàn):無論何時(shí),只要用戶按下熱鍵,都將觸發(fā)窗口中的事件。
1.聲明 API的外部函數(shù)
FUNCTION Integer GlobalAddAtom(ref string lpString) LIBRARY "kernel32.dll" ALIAS FOR "GlobalAddAtomA"
FUNCTION ulong RegisterHotKey(ulong hwnd,ulong id,ulong fsModifiers,ulong vk) LIBRARY "user32.dll"
//hwnd參數(shù)用于指定使用本熱鍵的窗口句柄,id參數(shù)用于指定一個(gè)惟一的ID,fsModifiers參數(shù)指明輔助鍵值(Alt、Ctrl、Shift等),vk參數(shù)指明虛擬鍵的ASCII碼。
2.對常量賦初值
Public:
constant integer MOD-ALT = 1
constant integer MOD-CONTROL = 2
constant integer MOD-SHIFT = 4
3.利用代碼在系統(tǒng)中注冊要使用的熱鍵
//在窗口的Open事件中
long ll-RC
string ls-str
ls-str = "My atom ID"
atomid = GlobalAddAtom(ls-str) //得到惟一的ID,保證不和其他應(yīng)用程序發(fā)生沖突
ll-RC = RegisterHotKey(Handle(this), atomid, MOD-ALT + MOD-CONTROL, 65)
// 65為‘A’,注冊的熱鍵為Ctrl+Alt+A
if ll-RC = 0 then
messagebox("錯(cuò)誤","錯(cuò)誤信息")
end if
4.編寫按下熱鍵時(shí)的處理程序
//在窗口的Other事件中
IF wparam = atomid THEN
//在這里編寫處理程序
END IF
第二種方法:
1.聲明 API的外部函數(shù)
function long SendMessageA(long lhWnd,uint uiMsg,long lwMsg,long lwParam) library ′user32.dll′
2.對常量賦初值
Public:
Constant Long WM-SETHOTKEY=50//設(shè)置熱鍵信息值
Constant Long HK-MYHOTKEY=1648 //熱鍵參數(shù)值
Constant Long SC-HOTKEY=61776//PB中的熱鍵信息
其中,HK-MYHOTKEY不是固定的,它根據(jù)用戶的需要而定。它的具體值的確定方法是:高8位字節(jié)與低8位字節(jié)組成16位字節(jié),然后將它換算成十進(jìn)制數(shù),即得到所需的HK-MYHOTKEY值。高8位字節(jié)值為一些輔助鍵(Control、Alt、Shift等),低8位字節(jié)為使用鍵的ASCII碼。如果我們要使用Ctrl+Alt+A作為熱鍵,則A=65,轉(zhuǎn)換成十六進(jìn)制為41,Ctrl+Alt=2+4=6,轉(zhuǎn)換成十六進(jìn)制仍然是6,兩則組合即為641,再重新轉(zhuǎn)換回十進(jìn)制得到1601;同樣,如果我們用Ctrl+Alt+F1作為熱鍵,F(xiàn)1=112,可以得到HK-MYHOTKEY值應(yīng)為1648。
3.利用代碼告訴窗口我們的熱鍵
//在窗口的Open事件中
long ll-RC
ll-RC = SendMessageA(Handle(this), WM-SETHOTKEY, HK-MYHOTKEY, 0)
if ll-RC <> 1 then
messagebox("錯(cuò)誤","錯(cuò)誤信息")
end if
4.編寫按下熱鍵時(shí)的處理程序
//在窗口的Other事件中
IF wparam = SC-HOTKEY THEN
//在這里編寫處理程序
END IF