いつもお世話になっております。
以前、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
試したわけではありませんが、
TTreeViewのOnCustomDrawItemイベントあたりで、
DefaultDrawをFalseにして、
ボタン,線,イメージ,およびテキストなど,すべての項目の描画を記述
すれば、できるかもしれません。
# Delphi7のヘルプでTTreeViewのOnCustomDrawItemにある例を参照
試したところ
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;
>リンクしているような感じで。
>文字色は青で、アンダーラインが入っているような。
これは簡単。
ズバリ、MouseMoveイベントで「そのノード」なら HotTrack := True;
もちろん、「リンクしているような感じ」になるだけで クリックしてもURLにトブわけじゃない。
お返事ありがとうございます。
ご連絡遅くなり申し訳ありません。
(金曜に投稿してしばらく見ていたのですが
土日はネット環境がないもので;)
>igyさん
別の修正が入ってしまったので、
igyさんのアドバイスも後ほどやってみたいと思います。
ありがとうございました。
>おなまえの記入がなかったので...
アドバイスを頂いた内容で簡単に出来ました!
こんな便利なプロパティ?(イベント?)があるんですね。
クリックしてというのはクリックイベントに既にあるので、
これに、クリック出来るデータの場合。
という条件をつければ要望通りに出来そうです。
ありがとうございました。
ごめんなさい。
解決済のチェックを忘れていました。
失礼しました。
ツイート | ![]() |