使資料視窗中的被選中行具有更好的外觀

hurcn發表於2007-08-13
大家都知道,在選擇資料視窗中的某一行時,如果使用pb提供的選擇函式SelectRow(),那麼的外觀真是不能恭維,單調而古板的藍色背景,可能和您的漂亮而生動的應用程式格格不入。有沒有辦法改變呢?當然有囉,請聽我慢慢道來。
   改變某一行的背景比較簡單,改變每一列的背景屬性(backgroundcolor)即可,可要根據滑鼠選擇情況自動改變,並可以返回被選中的行可能還需要一定的技巧。下面分單行選擇和多行選擇分辨說明。
單行選擇
  單行選擇比較簡單,我們只要將所有欄位的背景色的表示式改為:


if(GetRow()=CurrentRow(),RGB(255,126,0),RGB(0,0,0))

  其中第一個顏色為被選中的顏色,第二個顏色未被選中的顏色。然後用GetRow()代替GetSelectedRow()函式來得到被選中的行。

多行選擇

  多行選擇比較複雜,如果單純依靠改變資料視窗的屬性沒法實現,我們必須使用資料視窗屬性和程式碼結合起來才能實現

  首先,改變資料視窗的SQL語句,增加一個計算欄位:0 as flag,Select 語句改為:


Select col1,col2 ,1 as flag from tablename where .....,

  當返回資料視窗painter時,您就會發現多了一個欄位flag,我們就是利用這個欄位儲存行被選中的資訊。

  其次,修改各個欄位的背景顏色屬性,設定為:if(flag=1,RGB(255,126,0),RGB(255,255,255))

  第三:在資料視窗控制元件中,增加對clicked 事件的處理,程式碼如下:


if row<1 then return // setredraw(false)
if this.o b j e c t.flag[row]=1 then //如果該行被選中,撤銷選擇,否則選中該行
 this.Object.flag[row]=0
else
 this.Object.flag[row]=1
end if
setredraw(true)

您還可以定製本選中行的字型,文字屬性等等。原理相同,不再贅述。 

相關文章