2012-03-02 47 views
4

我正在嘗試使用OnCustomDrawItem以4列的報告模式繪製列表視圖控件。簡單的TListView OwnerDraw文本字體大小和顏色示例?

當我嘗試更改Canvas.font.color,這就是我所做的,我沒有任何問題。

如果我設置了canvas.font.size,我發現控件繪製的文本的大小沒有變化。

如果我嘗試從OnCustomDrawItem中接管文字的繪畫,我發現我不能。我知道如何使用OnCustomDraw繪製背景區域,但我想自定義繪製一個ListView ITEM,以便我可以設置文本的顏色和字體名稱以及字體大小。

我知道在ListView所有者繪製的上下文中使用Canvas時存在一些問題,以及您在ListView中可以執行的操作的一些限制。

procedure TForm1.MyListViewCustomDrawItem(Sender: TCustomListView; 
    Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean); 
begin 
    Sender.Canvas.Font.Size := 13; // NO effect. 
    Sender.Canvas.Font.Color := clRed; // WORKS. 
    Sender.Canvas.Font.Style :=Sender.Canvas.Font.Style + [fsBold]; // WORKS! 
end; 
+0

相關但沒有字體大小更改:http://stackoverflow.com/questions/7696499/how-change-text-color-in-a-column-in-ttntlistview – 2012-03-02 17:27:29

+0

你想要不同的字體大小和字體的面不同的項目?這就是我無法解決的問題。 – 2012-03-02 18:05:25

+0

顯然,您可以更改字體大小,但當然,所有行高都必須相同,因此您只能更改範圍內的所有字體大小,以適應現有行高。 – 2012-03-02 18:28:55

回答

10

我在TDBGrid上遇到過類似的問題。

嘗試在重新分配Canvas.Font屬性後調用Canvas.Refresh

+0

你誤會了。刷新是爲畫布而不是列表。 「TCanvas.Refresh」。從文檔:「在調用刷新後調用畫布的任何繪圖方法將重新選擇字體,筆刷或鋼筆到HDC」 – 2012-03-02 17:48:59

+0

DBGrid和List,是兩個不同的世界。但畫布不是。這是兩個控件的HDC。 – 2012-03-02 17:50:10

+0

這工作,如果我把它後。其實它是中肯的。謝謝你,克里斯托弗。多奇怪的事情。 – 2012-03-02 18:06:02

相關問題