數據窗口橫向滾動時用PB鎖定某列

一、問題的提出 貴報1997年第39期H23版《數據窗口橫向滾動時用PB鎖定某列》一文講述了實現數據窗 口橫向滾動時鎖定某列的一種方法,具有較好的實用效果,但是這種方法也有一定的缺點。第 一,用該方法鎖定的列是由程序預先決定的,也即是"靜"態的,在程序運行時無法改變。這樣 ,當用戶需要在不同時刻鎖定不同的列時,便無法實施。第二,該方法是用程序實現的,包含了 比較複雜的工作。通過仔細實驗,筆者發現了兩種更爲簡便的實現方法,可以無需編程或只需 簡單編程就可實現"動"態地鎖定某些列。 二、實現方法 假設用於顯示數據的數據窗口爲dw-1。 

方法一:在PowerBuilder集成環境的數據窗口畫筆(Datawindow Painter)中創建一數據 窗口控件dw-1,將鼠標移到該控件上,單擊鼠標右鍵,屏幕上將出現一彈出菜 單,選擇菜單項 Style,再從級聯菜單中選中Hscroll Bar、Vscroll Bar、Hsplit Scrolling三項,這樣即可 完成所要求的功能。 運行應用時,數據窗口dw-1的橫向滾動條最左邊有一小空隙,將鼠標移到該處,按住左鍵 不放,數據窗口中將有一"豎線"將數據窗口水平地一分爲二,然後拖動鼠標移動該"豎線"至所 需位置,數據窗口就被劃分爲兩個貌似獨立的並列的數據顯示區域,從外觀上看,一個數據窗 口變成了與原數據窗口一樣的兩個數據顯示區域。當點按一個區域的橫向滾動條時,另一區 域的數據顯示保持不動;當點按任一區域的豎向滾動條時,兩個區域的顯示同步滾動。這樣用 戶便可將需鎖定的列(一列或多列)置於一個區域,而另一區域作橫向滾動,並且在程序運行過 程中用戶可隨意調節所需鎖定的列。 

方法二:通過簡單編程也可實現上述效果,而且可以動態地禁止或允許這種效果。在Poe rbuilder中,數據窗口有一屬性HsplitScroll,用於決定是否將一個數據窗口一分爲二來顯示 數據。當它爲TURE時,允許此功能;當它爲FALSE時,禁止此功能。所以,當要允許此項鎖定功 能時,只需書寫一句dw-1.HsplitScroll=TRUE即可;當要禁止此項功能時,只需書寫一句d-1. HsplitScroll=FALSE即可,實現起來非常簡便。 三、小結 上述兩種方法,克服了原文的兩個缺點,可動態按需鎖定相應列,實現起來非常靈活、簡 單,用戶操作起來也更方便。   2. 鎖定某一列實現同Excel中的樣式 

     在Excel中,當列很多時,我們移動當前行到最後一項時,第一列就看不到了,那麼我們可以將第一列或者第一行的值鎖定,這樣,不管有多少行或者多少列我們都可以看到,以確保數據的準確性.這樣我們在pb中也很容易做到.具體代碼如下:  

 //鎖定的列爲ID,數據窗口爲dw_master dw_master.HSplitScroll = True

 dw_master.Object.DataWindow.HorizontalScrollSplit = dw_master.object.id.Width 

 dw_master.Object.DataWindow.HorizontalScrollPosition2 =   dw_master.object.id.Width   

3. 在數據窗口的constructor事件裏寫: 

dw_1.Object.DataWindow.HorizontalScrollSplit=integer(dw_1.describe("#1.width"))

  在數據窗口的scrollhorizontal事件裏寫: 

int i if pane = 1 then 

i = integer(this.OBJECT.datawindow.horizontalscrollposition2) if i < 1 or isnull(i) then return if scrollpos > 0 then

 this.OBJECT.datawindow.horizontalScrollPosition = 0

 end if else

 i = integer(this.Object.DataWindow.HorizontalScrollSplit) if i < 1 or isnull(i) then 

return if i > scrollpos then this.OBJECT.datawindow.horizontalScrollPosition2 = i 

end if 

end if

發佈了93 篇原創文章 · 獲贊 9 · 訪問量 26萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章