PowerBuilder編程技巧4則
發(fā)表時(shí)間:2024-06-15 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]一、用Enter鍵實(shí)現(xiàn)物件的焦點(diǎn)切換 在PowerBuilder中已定義許多事件所對(duì)應(yīng)的MessageID,而在其所提供的元件, 大部分有對(duì)應(yīng)的keydown事件,其ID值不一定相同,例如在datawindow->pbm_dwnkey, singlelineedit->pbm_ke...
一、用Enter鍵實(shí)現(xiàn)物件的焦點(diǎn)切換
在PowerBuilder中已定義許多事件所對(duì)應(yīng)的MessageID,而在其所提供的元件,
大部分有對(duì)應(yīng)的keydown事件,其ID值不一定相同,例如在datawindow->pbm_dwnkey,
singlelineedit->pbm_keydown,其他參考使用手冊(cè)。因此先對(duì)使用的元件新增key
的使用者事件,當(dāng)user在元件上按任何按鍵時(shí),將會(huì)觸發(fā)此keydown事件。
你將獲得所傳的參數(shù)key(按鍵代碼)、keyflags(復(fù)合鍵代碼),當(dāng)所按的
是Enter時(shí),你就把焦點(diǎn)切換到下一元件或下一欄位。
1.選擇要處理的datawindowcontrol,然後選擇menu的declare的userevents,
此時(shí)會(huì)顯示一個(gè)使用者事件box;
2.于eventname設(shè)定使用者事件名稱例如:ue_checkkey,然后在eventID填入
pbm_dwnkey(或從Pasteevent選擇),然后按OK;
3.你可在datawindowcontrols的script中selectevent里發(fā)現(xiàn)多了一個(gè)使用者
事件 ue_checkkey,并且此事件會(huì)傳遞2個(gè)參數(shù)keycodekey,unsignedlongkeyflags;
4.在script中可以如下填寫:
choose case key
case KeyTab!//響應(yīng)按Tab鍵
//writeyourcode
case KeyEnter!//響應(yīng)按Enter鍵
。痺riteyourcode
case KeyEscape!//響應(yīng)按Esc鍵
。痺riteyourcode
end choose
注意:(1)keycode是Enumeratedatatype,可在onlinehelp或browers中獲得其屬性;
(2)你可以設(shè)定returnvalue:0或1。
如果是在DataWindow上,可參考以下的方式:
在DataWindow宣告一userevent:
(1)如ue_enter,將EventID參考至pbm_dwnprocessenter;
(2)在ue_enter加入以下的程式碼
send(handle(this),256,9,long(0,0))
return
二、在MDI視窗內(nèi)加入其他Controls,并使其在sheets視窗中正確顯示
把MDIWindow的ClientArea打開(Resize)。ClientArea可視為一種Control,PB將
它的名字內(nèi)定為MDI_1。
//Example//m1,m2,r1,r2areallinteger.
//movetheclientareatobeginat(m1,m2).mdi_1.Move(WorkspaceX()+m1,WorkspaceY()+m2)
//Resizetheclientareabasedonthevalue(r1,r2)yougived.mdi_1.Resize(r1,r2)
需要注意的是ClientArea打開後,區(qū)域內(nèi)的Control會(huì)被蓋掉。
三、PowerBuilder與CommPort的連接
1.使用可以控制CommPort的OCX,
例如MicrosoftCommunicationsControl或pdqComm。
2.InitiatetheOCX。
//Script如下,ole_1為OCXName
ole_1.object.CommPort=2
ole_1.object.Settings=“9600,N,8,1”
ole_1.object.PortOpen=true
ole_1.object.InputLen=0
3.GetData or PutData。
//GetData
ole_1.object.input()
//PutData
ole_1.object.output=‘ATDT4125678’+char(13)
四、在 grid中實(shí)現(xiàn)列標(biāo)題覆蓋多列
選中某列的標(biāo)題title,點(diǎn)右鍵,選properties\position\layer,
選中foreground。這時(shí)你可以改變標(biāo)題的大小。同時(shí)禁止用戶在運(yùn)行程序時(shí)移動(dòng)列的權(quán)利,
在腳本中寫入:dw_1.Modify(“DataWindow.Grid.ColumnMove=No”)