程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SyBase數據庫 >> SyBase綜合文章 >> 在PB實現熱鍵的方法

在PB實現熱鍵的方法

編輯:SyBase綜合文章
如果你能在你的應用程序中添加一些熱鍵,就可以加快用戶的操作速度,特別是對那些熟練的操作人員,他們特別歡迎快捷鍵的操作方式。在不少大型應用軟件中,用戶可以通過使用Ctrl+Alt+F5之類的組合鍵來方便地進行功能切換和處理。那麼,我們在用PowerBuilder開發應用程序時,怎樣在其中實現需要的熱鍵功能呢?下面筆者就根據自身的經驗,介紹兩種實用的方法。
第一種方法:
該方法可以實現:無論何時,只要用戶按下熱鍵,都將觸發窗口中的事件。

1.聲明 API的外部函數
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參數用於指定使用本熱鍵的窗口句柄,id參數用於指定一個惟一的ID,fsModifIErs參數指明輔助鍵值(Alt、Ctrl、Shift等),vk參數指明虛擬鍵的ASCII碼。

2.對常量賦初值
Public:
constant integer MOD-ALT = 1
constant integer MOD-CONTROL = 2
constant integer MOD-SHIFT = 4

3.利用代碼在系統中注冊要使用的熱鍵
//在窗口的Open事件中
long ll-RC
string ls-str
ls-str = "My atom ID"
atomid = GlobalAddAtom(ls-str) //得到惟一的ID,保證不和其他應用程序發生沖突
ll-RC = RegisterHotKey(Handle(this), atomid, MOD-ALT + MOD-CONTROL, 65)
// 65為‘A’,注冊的熱鍵為Ctrl+Alt+A
if ll-RC = 0 then
messagebox("錯誤","錯誤信息")
end if

4.編寫按下熱鍵時的處理程序
//在窗口的Other事件中
IF wparam = atomid THEN
//在這裡編寫處理程序
END IF

第二種方法:

1.聲明 API的外部函數
function long SendMessageA(long lhWnd,uint uiMsg,long lwMsg,long lwParam) library ′user32.dll′

2.對常量賦初值
Public:
Constant Long WM-SETHOTKEY=50//設置熱鍵信息值
Constant Long HK-MYHOTKEY=1648 //熱鍵參數值
Constant Long SC-HOTKEY=61776//PB中的熱鍵信息
其中,HK-MYHOTKEY不是固定的,它根據用戶的需要而定。它的具體值的確定方法是:高8位字節與低8位字節組成16位字節,然後將它換算成十進制數,即得到所需的HK-MYHOTKEY值。高8位字節值為一些輔助鍵(Control、Alt、Shift等),低8位字節為使用鍵的ASCII碼。如果我們要使用Ctrl+Alt+A作為熱鍵,則A=65,轉換成十六進制為41,Ctrl+Alt=2+4=6,轉換成十六進制仍然是6,兩則組合即為641,再重新轉換回十進制得到1601;同樣,如果我們用Ctrl+Alt+F1作為熱鍵,F1=112,可以得到HK-MYHOTKEY值應為1648。

3.利用代碼告訴窗口我們的熱鍵
//在窗口的Open事件中
long ll-RC
ll-RC = SendMessageA(Handle(this), WM-SETHOTKEY, HK-MYHOTKEY, 0)
if ll-RC <> 1 then
messagebox("錯誤","錯誤信息")
end if

4.編寫按下熱鍵時的處理程序
//在窗口的Other事件中
IF wparam = SC-HOTKEY THEN
//在這裡編寫處理程序
END IF


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved