TreeViewでノードごとにテキストカラーを変えるには?

解決


彦蔵  2003-04-26 21:00:43  No: 3436

TreeViewでノードごとにテキストカラーを変えたいのですが
どうすればいいでしょうか?
HELPのTCustomTreeView-OnCustomDrawItemは確認したのですが
フォントの色だけ変更させる方法がよくわかりません。
どなたかご存じの方教えていただけませんか。


にしの  2003-04-26 22:40:59  No: 3437

TTreeView, TListViewのオーナードロー系イベントにはバグがあるみたいです。
フォントの色の変更だけなら、TreeView1.Canvas.Font.Colorに値を入れればOKです。
が、イベント後、フォントが壊れるらしく、文字が大きくなったりします。

解消方法はいくつかあるようですが、イベント時に
var
  SavedDC: THandle; // 待避用
begin
  SavedDC := SaveDC(TreeView1.Canvas.Handle);
  ...
  TreeView1.Canvasに対する描画
  ...
  RestoreDC(SavedDC);
end;


にしの  2003-04-26 22:42:11  No: 3438

失礼しました。送信してしまいました。

1つ間違いです。

ReleaseDC(TreeView1.Canvas.Handle, SavedDC);

とすればOKだと思います。


彦蔵  2003-04-26 23:15:28  No: 3439

にしのさんありがとうございます。
TreeView1.Canvas.Handleをsaveしてreleaseするのはどういう意味でしょう?
またフォントの色を変更するのにTreeView1.Canvas.Font.Colorに色を
セットすると全ノードがその色になってしまいますが、特定のノードに対してだけ有効にするにはどうしたらいいのでしょうか?


彦蔵  2003-04-26 23:50:03  No: 3440

特定のノードの色だけ変えることができましたが、
やはりにしのさんのご指摘通り、変更したもの以外のフォントサイズが
大きくなってしまいます。
にしのさんのサンプルにあるsaveddc、ReleaseDCを入れたのですが、
変わりません。何か解決策はあるのでしょうか?


にしの  2003-04-27 01:56:09  No: 3441

ListViewの場合ですが、次の一文を加えると修正できるようです。
with Sender.Canvas do
    if Assigned(Font.OnChange) then Font.OnChange(Font);

http://homepage1.nifty.com/beny/index.html
の、DEVELOPにありまsた。

TreeViewでもたぶん同じだと思います。


彦蔵  2003-04-27 19:40:55  No: 3442

にしのさんありがとうございました。
確かにTreeViewでもうまくいきました。


にしの  2003-04-28 07:42:10  No: 3443

今更ですが間違えてました。
ReleaseDCでなく、RestoreDCでいけると思います。
# ReleaseDCはGetDCしたときに「返す」関数です。SaveDCで保存したDCを、「元に戻す」のが、RestoreDCです


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加