TListView 顯示顏色問題 |
答題得分者是:小傑克
|
sking
一般會員 發表:3 回覆:3 積分:1 註冊:2003-04-18 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
DrawColumnCell 參數中, DataCol 就是你要的,這個是控制第幾欄的
類似這樣 case datacol of 4: DBGrid1.Canvas.Font.Color := clRed; else DBGrid1.Canvas.Font.Color := clGreen; end; ===================引 用 sking 文 章=================== 我想請問在delphi7 中 TListView有辦法顯示某列中某個欄位的字型顏色嗎? 爬了很多文都是只有顯示整列的顏色, 例 欄位1 欄位2 欄位3 欄位4 A B C D E F G H 目前爬文看到都是 可以改變某列的顏色如(ABCD),如果我只想要改變D的字型顏色,要如何寫? 感謝各位大大的解答!!
------
額有朝天骨,眼中有靈光 |
sking
一般會員 發表:3 回覆:3 積分:1 註冊:2003-04-18 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
啊,我恍神了,心理想listview 眼睛看到dbgrid 了
ListView 也有一個function 用法一樣 CustomDrawSubItem(Sender: TCustomListView; Item: TListItem; SubItem: Integer; State: TCustomDrawState; var DefaultDraw: Boolean); case SubItem of 2: ListView1.Canvas.Font.Color := clred ; else ListView1.Canvas.Font.Color := clgreen ; end; 只不過vreport 型式中 第一欄是item , 第二欄是 subitem = 1 ,第三欄是subitem =2 以此類推,要改第一欄顏色要用CustomDrawItem
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-04-15 16:14:15, 註解 無‧
|
sking
一般會員 發表:3 回覆:3 積分:1 註冊:2003-04-18 發送簡訊給我 |
不好意思我用您說的方法試了一下,不知道哪裡沒改到,程式會出現錯誤,以下是我的程式碼
procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin (sender as TListView).Canvas.brush.Color:=$00CEFFCE; if ListView1.Items[Item.Index].SubItems[2] >ListView1.Items[Item.Index].SubItems[3] then begin case SubItem of //===此行出現錯誤==我將Subitem 改成 item 也是錯誤,麻煩小傑克大大幫我看一下,感謝了!! 2: ListView1.Canvas.Font.Color := clred ; else ListView1.Canvas.Font.Color := clgreen ; end; |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
是CustomDrawSubItem
我用的是Delphi 7, 以前的版本我忘了有沒有這個 ===================引 用 sking 文 章=================== 不好意思我用您說的方法試了一下,不知道哪裡沒改到,程式會出現錯誤,以下是我的程式碼 procedure TForm1.ListView1CustomDrawItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin (sender as TListView).Canvas.brush.Color:=$00CEFFCE; if ListView1.Items[Item.Index].SubItems[2] >ListView1.Items[Item.Index].SubItems[3] then begin case SubItem of //===此行出現錯誤==我將Subitem 改成 item 也是錯誤,麻煩小傑克大大幫我看一下,感謝了!! 2: ListView1.Canvas.Font.Color := clred ; else ListView1.Canvas.Font.Color := clgreen ; end;
------
額有朝天骨,眼中有靈光 |
sking
一般會員 發表:3 回覆:3 積分:1 註冊:2003-04-18 發送簡訊給我 |
非常感謝小傑克大大的解答,額外在問一下,如果說要在CustomDrawSubItem下更改第一欄 item 的顏色的話,之前小傑克大大有說要用CustomDrawItem ,這個是要寫在程式哪個部分,再次感謝!!
procedure TForm1.ListView1CustomDrawsubItem(Sender: TCustomListView; Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); begin (sender as TListView).Canvas.brush.Color:=$00CEFFCE; if ListView1.Items[Item.Index].SubItems[2] >ListView1.Items[Item.Index].SubItems[3] then begin case SubItem of //===是將Subitem 改成 CustomDrawItem 還是 item 都嘗試過還是出現錯誤(如果想更改第一欄的顏色) 2: ListView1.Canvas.Font.Color := clred ; else ListView1.Canvas.Font.Color := clgreen ; end; |
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
因為CustomDrawSubItem 只會在跑SubItem 才會執行
CustomDrawItem 是整個都會跑的 你可以在 CustomDrawItem 裡面用 ListView1.Canvas.Font.Color := clYellow ; 然後在 CustomDrawSubItem 裡面用 case SubItem of 2: ListView1.Canvas.Font.Color := clred ; else ListView1.Canvas.Font.Color := clgreen ; end; 結果就是畫到第一欄的時候是黃色,第二欄時變綠色,第三欄紅色 (因為DrawSubItem 在DrawItem 後面跑,後令蓋前令, 如果 DrawSubItem沒寫的話,全部欄位都會變黃色) 當然再配合參數 item 的控制的話,ListView 可以控制到每一個格子都不一樣
------
額有朝天骨,眼中有靈光
編輯記錄
小傑克 重新編輯於 2009-04-15 18:40:54, 註解 無‧
|
sking
一般會員 發表:3 回覆:3 積分:1 註冊:2003-04-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |