PB 各種小技巧 七

2021-06-06 20:50:49 字數 3596 閱讀 3281

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 即可出現 這就是 自...