一、用Enter鍵實現物件的焦點切換 在PowerBuilder中已定義許多事件所對應的MessageID,而在其所提供的元件, 大部分有對應的keydown事件,其ID值不一定相同,例如在datawindow->pbm_dwnkey, singlelineedit->pbm_keydown,其他參考使用手冊。因此先對使用的元件新增key 的使用者事件,當user在元件上按任何按鍵時,將會觸發此keydown事件。
你將獲得所傳的參數key(按鍵代碼)、keyflags(復合鍵代碼),當所按的 是Enter時,你就把焦點切換到下一元件或下一欄位。
1.選擇要處理的datawindowcontrol,然後選擇menu的declare的userevents, 此時會顯示一個使用者事件box; 2.于eventname設定使用者事件名稱例如:ue_checkkey,然后在eventID填入 pbm_dwnkey(或從Pasteevent選擇),然后按OK; 3.你可在datawindowcontrols的script中selectevent里發現多了一個使用者 事件 ue_checkkey,并且此事件會傳遞2個參數keycodekey,unsignedlongkeyflags; 4.在script中可以如下填寫: choose case key case KeyTab!//響應按Tab鍵 //writeyourcode case KeyEnter!//響應按Enter鍵 //writeyourcode case KeyEscape!//響應按Esc鍵 //writeyourcode end choose 注意:(1)keycode是Enumeratedatatype,可在onlinehelp或browers中獲得其屬性; (2)你可以設定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視窗內加入其他Controls,并使其在sheets視窗中正確顯示 把MDIWindow的ClientArea打開(Resize)。ClientArea可視為一種Control,PB將 它的名字內定為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打開後,區域內的Control會被蓋掉。 三、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中實現列標題覆蓋多列 選中某列的標題title,點右鍵,選properties\position\layer, 選中foreground。這時你可以改變標題的大小。同時禁止用戶在運行程序時移動列的權利, 在腳本中寫入:dw_1.Modify(“DataWindow.Grid.ColumnMove=No”)
|