PowerBuilder實(shí)用技巧八則(二)

字號:

五、數(shù)據(jù)窗口中實(shí)現(xiàn)自動折行
    有時為了界面的考慮需要將一些長字段折行顯示,但又不能確保在所有情況下都會出現(xiàn)長字段。比如,我們要求當(dāng)客戶地址超過50個字符時將它分兩行顯示,對于沒滿50個字符的客戶仍然按照正常格式顯示。
    具體如下:
    1、在數(shù)據(jù)窗口中選擇要自動折行的列Address。
    2、選擇位置屬性(Position)并選中Autosize Height選項(xiàng)
    3、 選擇編輯屬性(Edit)并去掉Auto Horz Scroll選項(xiàng)
    4、選擇數(shù)據(jù)窗口中細(xì)目帶的屬性Autosize Height選項(xiàng)。注意,是當(dāng)你拖動細(xì)目欄時出現(xiàn)的屬性。
    設(shè)置完畢后在左下角預(yù)覽窗口中將顯示圖例的結(jié)果。
    在進(jìn)行列自動折行顯示的時候,還要注意一點(diǎn),系統(tǒng)判斷自動折行的斷點(diǎn)是以空格或標(biāo)點(diǎn)符號為依據(jù)的,如果我們輸入一長串字符且中間沒有任何標(biāo)點(diǎn)符號或空隔的話,即使該字符串再長也無濟(jì)于事。因此,我們一定要提醒用戶在錄入時適當(dāng)?shù)募尤胍恍┛崭窕蚧剀嚒?BR>    六、數(shù)據(jù)窗口中記錄顏色的隔層顯示
    相信你一定見過這樣的顯示,第一行記錄的背景色是淺黃色,第二行記錄的背景色是白色,第三行又是淺黃色,第四行又是白色……,依次類推。
    要想讓顯示的數(shù)據(jù)達(dá)到上述效果,我們首先要知道的是這些數(shù)據(jù)存放在數(shù)據(jù)窗口中的什么地方。很顯然,數(shù)據(jù)窗口中的所有數(shù)據(jù)是在細(xì)目帶中列出的,因此只要在細(xì)目帶中設(shè)置一些數(shù)據(jù)屬性就會影響到這個細(xì)目帶中的所有內(nèi)容。具體實(shí)現(xiàn)如下:
    1、打開數(shù)據(jù)窗口,單擊細(xì)目帶(Detail),注意是點(diǎn)擊有“Detail”字的一欄,不是它存放數(shù)據(jù)的地方。點(diǎn)擊它鼠標(biāo)會出現(xiàn)上下小箭頭。
    2、選擇常規(guī)屬性,單擊顏色屬性(Color)旁邊的一個帶有紅色圖標(biāo)的小按鈕。
    3、在表達(dá)式一欄中輸入
    if ( Mod( GetRow(), 2) = 0, RGB(255, 255, 200), RGB(255, 255, 255))
    // RGB(255, 255, 200),淺黃色
    OK,預(yù)欄一下,效果不錯,大功告成。
    七、實(shí)現(xiàn)數(shù)據(jù)窗口的動態(tài)排序
    在用到Windows的資源管理器的時候,當(dāng)我們需要按照文件的類型或名稱排序的時候只要用鼠標(biāo)點(diǎn)擊一下相應(yīng)的標(biāo)題欄,系統(tǒng)會按照升序或降序交替排序,這完全取決于用戶鼠標(biāo)點(diǎn)擊的奇偶數(shù)。如此方便的操作何不用到我們的數(shù)據(jù)窗口中——實(shí)現(xiàn)按某列的動態(tài)排序。
    為了實(shí)現(xiàn)上述功能,程序首先需要用到一個全局變量(相對于PB來說可以用窗體變量),用它來控制連續(xù)兩次點(diǎn)擊之間的排序方向。因?yàn)樽侄蔚呐判蚍较蛑挥猩蚝徒敌騼煞N,所以我們可以用一個Boolean型。本例中是Boolean ib_flag。接著在數(shù)據(jù)窗口控件的Clicked事件中寫上如下代碼
    /*****************************程序代碼******************************/
    String ls_column, ls_sort
    ls_column = this.GetObjectAtPointer() // 得到鼠標(biāo)按下位置的對象名
    ls_column = left(ls_column, len(ls_column) - 2) // 得到列標(biāo)題名字
    if not Lower(right(ls_column, 2)) = "_t" then return// 如果不是缺省的列標(biāo)題,即以“_t”結(jié)尾或鼠標(biāo)根本沒有點(diǎn)在列標(biāo)題上則退出