TTreeViewを部分的に文字色を変えるには?

解決


みずき  2006-03-25 05:11:34  No: 20690

いつもお世話になっております。

以前、TTreeViewに画像を取り付けたいと言っていた者ですが、
そちらは、文字をダブルクリックして別画面で表示させる。
というところで落ち着きそうです。

で、画像を表示できる文字に対して装飾したいのです。
リンクしているような感じで。
文字色は青で、アンダーラインが入っているような。

過去ログから、TCustomDrawForm.TVCustomDrawItem
というのが使えるかも。と思ったのですが、
参考にしているソースでは、

  if Node.ImageIndex<=2 then Exit;

  i:=((Node.ImageIndex+1) div 2 )*2;
  if Node.HasChildren and Node.Expanded then begin
    Node.ImageIndex:=i;
    Node.SelectedIndex:=i;
  end       df
  else begin
    Node.ImageIndex:=i-1;
    Node.SelectedIndex:=i-1;
  end;

これだけしか書かれていませんでした。

で、実際にTreeViewを描画している箇所を探してみましたら、
TreeViewCreateというFunctionに、

sBuffNode2:=TV_Guide.Items.AddChild(sBuffNode1,'タイトル');

という感じで足していっているようでした。
ちなみにsBuffNode1とsBuffNode2はTTreeNodeで宣言されています。
(階層毎にBuffを用意しているようです)
※sBuffNode1は先頭でTV_Guide.Items.GetFirstNodeが入れられています。

この場合、部分的に文字色を変えるにはどうすればよいでしょうか??
ご教授願いますm(_ _)m

Delphy7  WindowsXP


igy  2006-03-25 07:12:56  No: 20691

試したわけではありませんが、
TTreeViewのOnCustomDrawItemイベントあたりで、
DefaultDrawをFalseにして、
ボタン,線,イメージ,およびテキストなど,すべての項目の描画を記述
すれば、できるかもしれません。
# Delphi7のヘルプでTTreeViewのOnCustomDrawItemにある例を参照


igy  2006-03-25 17:48:25  No: 20692

試したところ
DefaultDrawをFalseにしなくても、できそうな気がしますね。

procedure TForm1.TreeView1CustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
    if Node.AbsoluteIndex = 1 then    // <=実際に変更する条件を指定 
    begin
        with TreeView1.Canvas.Font do
        begin
            if not (cdsSelected in State) then
                Color := clBlue;
            Style := [fsUnderline];
        end;
    end;
end;


名前なし  2006-03-25 20:47:11  No: 20693

>リンクしているような感じで。
>文字色は青で、アンダーラインが入っているような。

これは簡単。
ズバリ、MouseMoveイベントで「そのノード」なら HotTrack := True;
もちろん、「リンクしているような感じ」になるだけで クリックしてもURLにトブわけじゃない。


みずき  2006-03-27 20:14:58  No: 20694

お返事ありがとうございます。
ご連絡遅くなり申し訳ありません。
(金曜に投稿してしばらく見ていたのですが
  土日はネット環境がないもので;)

>igyさん
別の修正が入ってしまったので、
igyさんのアドバイスも後ほどやってみたいと思います。
ありがとうございました。

>おなまえの記入がなかったので...
アドバイスを頂いた内容で簡単に出来ました!
こんな便利なプロパティ?(イベント?)があるんですね。
クリックしてというのはクリックイベントに既にあるので、
これに、クリック出来るデータの場合。
という条件をつければ要望通りに出来そうです。
ありがとうございました。


みずき  2006-03-27 20:15:30  No: 20695

ごめんなさい。
解決済のチェックを忘れていました。
失礼しました。


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

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






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