2012-03-02 12 views
4

私は所有者がOnCustomDrawItemを使用して4列のレポートモードでリストビューコントロールを描画しようとしています。単純なTListView OwnerDrawテキストのフォントサイズと色の例?

Canvas.font.colorを変更しようとすると、それだけで問題はありません。

canvas.font.sizeを設定すると、コントロールによって描画されるテキストのサイズに変化がないことがわかります。

テキストのペイントを引き継ぐ場合、OnCustomDrawItem内から、私は見つけることができません。私はOnCustomDrawを使用して背景領域を描画する方法を知っていますが、テキストの色とフォント名とフォントサイズを設定できるように、カスタムでリストビュー項目を描画します。

私は、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 –

+0

あなたは異なるフォントサイズとフォントフェイスが必要ですか?別のアイテム?それは私がする方法を働くことができないものです。 –

+0

明らかに、フォントサイズは変更できますが、すべての行の高さは同じでなければならないため、既存の行の高さにすべて合う範囲内でのみフォントサイズを変更できます。 –

答えて

10

TDBGridで同様の問題が発生しました。

Canvas.Fontプロパティを再割り当てした後にCanvas.Refreshに電話してみてください。

+0

あなたは誤解しました。リフレッシュはキャンバスであり、リストではありません。 "TCanvas.Refresh"ドキュメントから: "Refreshを呼び出した後にキャンバスの描画メソッドを呼び出すと、Font、Brush、またはPenがHDCに再選択されます" –

+0

DBGridとList、yesは2つの異なる世界です。しかし、キャンバスはそうではありません。両方のコントロールのHDCです。 –

+0

それは私がそれを置いた後に働いた。実際それは適切です。ありがとう、クリストファー。何が奇妙なことか。 –

関連する問題