21.sendmessage api函式在powerbuilder中應用
一、引言
在powerbulider巧妙地呼叫api函式sendmessage,可以完成pb中的一些用常規的方法而很難實
現的功能,特將對該api函式在powerbuilder中的使用,例舉幾個方面的運用,以期起到拋磚引玉的效果(以下**完全可以使用powerbuilder中的send函式替代sendmessage 這個api函式,因起稿比較匆忙,**未經測試)
二、函式說明
sendmessage函式說明:
說明 呼叫乙個視窗的視窗函式,將一條訊息發給那個視窗。除非訊息處理完畢,否則該函式不會返回。sendmessagebynum, sendmessagebystring是該函式的"型別安全"宣告形式
返回值
long,由具體的訊息決定
參數列
引數 型別及說明
hwnd long,要接收訊息的那個視窗的控制代碼
wmsg long,訊息的識別符號
wparam long,具體取決於訊息
lparam any,具體取決於訊息
powerbuilder中已使用函式send函式對其進行了封裝
函式原形:send ( handle, message#, lowword, long )
send函式說明:
說明 呼叫乙個視窗的視窗函式,將一條訊息發給那個視窗。除非訊息處理完畢,否則該函式不會返回。
返回值
long,由具體的訊息決定
參數列
引數 型別及說明
handle long,要接收訊息的那個視窗的控制代碼
message# long,訊息的識別符號
lowword long,具體取決於訊息
long long,具體取決於訊息
3、 應用舉例
定義外部函式引用宣告:
funcation long sendmessage (long hwnd as long,long wmsg , long wparam,long lparam) library "user32.dll" alias for "sendmessagea"
funcation long releasecapture() library "user32.dll"
定義例項變數:
constant long lb_itemfrompoint = 425
constant long htcaption = 2
constant long wm_nclbuttondown = 161
constant long em_getline = 404
constant long em_getlinecount = 399
constant long em_getlinecount = 186
constant long em_getline = 196
constant long tvm_setitemheight = 4379
constant long em_linescroll = 182
constant long em_limittext=197
1、列表框中滑鼠移動時檢測位置項
powerscript:
在列表框的自定義事件ue_mousemove(pbm_mousemove)中寫入如下**:
pos = unitstopixels(parent.pointerx(),xunitstopixels!)+ unitstopixels(parent.pointery(),yunitstopixels!) * 65536
idx = sendmessage(handle(this), lb_itemfrompoint, 0, pos) if idx < 65536 then sle_1.text = lb_1.text(idx)
2、在列表框中查詢匹配的專案
powerscript:
視窗的open事件:
lb_1.additem ("軟體")
lb_1.additem("電腦遊戲")
lb_1.additem("電視機")
lb_1.additem("電視台")
lb_1.additem("電腦")
lb_1.additem("電腦遊戲軟體")
singlelineedit控制項的modified事件:
long li_index
li_index= sendmessage(handle(this), em_getlinecount, -1, sle_1.text)
lb_1.selectitem(li_index)
3、為listbox新增水平滾動條
powerscript:
視窗的open事件:
lb_1.additem("軟體")
lb_1.additem("電腦遊戲")
lb_1.additem("電視機")
lb_1.additem("電視台")
lb_1.additem("電腦")
lb_1.additem("電腦遊戲軟體")
sendmessage (handle(this), em_getline, 250, 0)
4、實現拖動無標題欄窗體
powerscript:
在視窗的自定義事件ue_lbuttondown(pbm_lbuttondown)
long returnval
x = releasecapture()
returnval = sendmessage(hwnd, wm_nclbuttondown, htcaption, 0)
5、獲取多行文字框行數
powerscript:
commandbutton的clicked事件
messagebox("", sendmessage(handle(mle_1), em_getlinecount, 0, 0))
6、設定樹型列表控制項標題行高度
powerscript:
tv_1的constructor事件:
sendmessage(handle(tv_1), tvm_setitemheight, 60, 0)
7、突破powerbuilder中的多行文字框32k的限制
powerscript:
sendmessage(handle(mle_1), em_limittext, 65534, 0)
8、用程式**控制文字框的滾行與滾列
powerscript:
sendmessage(handle(sle_1), em_linescroll, 0, 1)//下卷一行
sendmessage(handle(sle_1), em_linescroll, 0, -1)//上捲一行
sendmessage(handle(sle_1), em_linescroll, 1, 0)//右捲一列
sendmessage(handle(sle_1), em_linescroll, -1, 0)//左捲一列
三、結束語
在編寫powerbuilder應用時,應該充分呼叫相關的api函式來擴充pb的一些不足。
各種小技巧
在乙個單調的陣列vv中判斷是否有 l r的其中乙個數。二分找到 大於等於l 的下標 cc 二分找到大於 r 的下標dd 如果cc dd那麼就不存在 int cc lower bound vv.begin vv.end l vv.begin int dd upper bound vv.begin vv...
pb技巧收集
獲得的路徑的幾種方法 第一方法,表示當前路徑,表示父路徑。當前路徑下用 名稱.bmp,或者在當前目錄下建立bmp檔案,用 bmp 名稱.bmp 第二方法 建立bmp資料夾,直接使用bmp 名稱.bmp 第三方法,能找到的路徑就行,使用.pbr資源檔案,確認編譯時能找到,這樣打包後不需要檔案,檔案編譯...
關於COIDE的各種小技巧
coide是基於eclipse的開發環境,具有很多eclipse的各種人性化功能,下面一一介紹。1 新增 取消注釋 注釋前是這樣的 用滑鼠選擇這幾行,再點ctrl 是這樣的 注釋之後,再選擇這幾行,再點ctrl 可以去掉注釋符號。2 自動補全 在編輯介面下,隨便乙個地方點alt 即可出現 這就是 自...