TreeViewでノードごとにテキストカラーを変えたいのですが
どうすればいいでしょうか?
HELPのTCustomTreeView-OnCustomDrawItemは確認したのですが
フォントの色だけ変更させる方法がよくわかりません。
どなたかご存じの方教えていただけませんか。
TTreeView, TListViewのオーナードロー系イベントにはバグがあるみたいです。
フォントの色の変更だけなら、TreeView1.Canvas.Font.Colorに値を入れればOKです。
が、イベント後、フォントが壊れるらしく、文字が大きくなったりします。
解消方法はいくつかあるようですが、イベント時に
var
SavedDC: THandle; // 待避用
begin
SavedDC := SaveDC(TreeView1.Canvas.Handle);
...
TreeView1.Canvasに対する描画
...
RestoreDC(SavedDC);
end;
失礼しました。送信してしまいました。
1つ間違いです。
ReleaseDC(TreeView1.Canvas.Handle, SavedDC);
とすればOKだと思います。
にしのさんありがとうございます。
TreeView1.Canvas.Handleをsaveしてreleaseするのはどういう意味でしょう?
またフォントの色を変更するのにTreeView1.Canvas.Font.Colorに色を
セットすると全ノードがその色になってしまいますが、特定のノードに対してだけ有効にするにはどうしたらいいのでしょうか?
特定のノードの色だけ変えることができましたが、
やはりにしのさんのご指摘通り、変更したもの以外のフォントサイズが
大きくなってしまいます。
にしのさんのサンプルにあるsaveddc、ReleaseDCを入れたのですが、
変わりません。何か解決策はあるのでしょうか?
ListViewの場合ですが、次の一文を加えると修正できるようです。
with Sender.Canvas do
if Assigned(Font.OnChange) then Font.OnChange(Font);
http://homepage1.nifty.com/beny/index.html
の、DEVELOPにありまsた。
TreeViewでもたぶん同じだと思います。
にしのさんありがとうございました。
確かにTreeViewでもうまくいきました。
今更ですが間違えてました。
ReleaseDCでなく、RestoreDCでいけると思います。
# ReleaseDCはGetDCしたときに「返す」関数です。SaveDCで保存したDCを、「元に戻す」のが、RestoreDCです
ツイート | ![]() |