喫茶XRAYトップページ

[スレッド全体
]

[12925] TTreeView の展開ボタンのアイコン返信 削除
2019/6/20 (木) 16:56:39 Mr.XRAY
TTreeView のノードのアイコンを [+], [-] にする例です.
VCL Style で変更する手も考えられます.

EXE 作成は Windows 7 U64(SP1) + Delphi XE5(UP2) Pro VCL-32
vclide150.bpl 内の以下の画像を使用しています.
VT_XPBUTTONMINUS.bmp
VT_XPBUTTONPLUS.bmp

http://mrxray.on.coocan.jp/Delphi/zip/DelphiML_5203_TTreeView_NodePlusMinus.zip
(EXE のみです.画像は利用者が用意してください)

参考記事
[ カスタム描画における TCanvas ( 入門者用 ) ]
http://mrxray.on.coocan.jp/Delphi/Others/A_UltraIntro02.htm

※ コードは最初の掲載時から少し変更しています.

procedure TForm1.FormCreate(Se
procedure TForm1.FormCreate(Sender: TObject);
var
 LRoot  : TTreeNode;
 LNode  : TTreeNode;
 LLoopI : integer;
 LLoopJ : integer;
 LLoopK : integer;
begin
  for LLoopJ:=0 to 4 do begin
    LRoot:=TreeView1.Items.Add(nil,IntToStr(LLoopJ));
    for LLoopI:= 0 to 2 do begin
      LNode := TreeView1.Items.AddChild(LRoot, Format('Child %d.%d',[LLoopJ,LLoopI]));
      if LLoopI = 1 then begin
        for LLoopK := 1 to 3 do begin
          TreeView1.Items.AddChild(LNode, Format('Child-Child %d',[LLoopK]));
        end;
      end;
    end;
  end;
end;

procedure TForm1.TreeView1AdvancedCustomDrawItem(Sender: TCustomTreeView;
  Node: TTreeNode; State: TCustomDrawState; Stage: TCustomDrawStage;
  var PaintImages, DefaultDraw: Boolean);
var
  LLeft   : Integer;
  LTop    : Integer;
  LBitmap : TBitmap;
begin
  DefaultDraw := True;
  if Stage <> cdPostPaint then Exit;
  if not Node.IsVisible then Exit;

  LLeft := Node.DisplayRect(True).Left + Treeview1.Indent - 33;
  LTop  := Node.DisplayRect(False).Top + 6;

  LBitmap := TBitmap.Create;
  try
    if Node.HasChildren then begin
      if Node.Expanded then begin
        try
          LBitmap.LoadFromFile('VT_XPBUTTONMINUS.bmp');
          TreeView1.Canvas.Draw(LLeft, LTop, LBitmap);
        except
        end;
      end else begin
        try
          LBitmap.LoadFromFile('VT_XPBUTTONPLUS.bmp');
          TreeView1.Canvas.Draw(LLeft, LTop, LBitmap);
        except
        end;
      end;
    end;
  finally
    FreeAndNil(LBitmap);
  end;
end;



[12943] Re:TTreeView の展開ボタンのアイコン返信 削除
2019/7/3 (水) 23:30:13 Mr.XRAY
[ TreeView1の表示の仕方を変更することはできませんか?]
https://www.freeml.com/delphi-users/5203/latest

あ〜あ〜,
やっぱりレスするんじゃなかった・・・ 反省.

参考までに,テーマによる描画がサポートされたのは Delphi 2007 からです.
下図は Windows 7 U64(SP1) + Delphi 2007-R2 の結果です.

※ nagao 氏によれば Delphi 2010 では展開折りたたみのボタンは [+] [-]
ということですね.
私の Windows 7 か Delphi 2010 が壊れているか,
はたまた nagao 氏のが壊れているかですね.なんてね (笑)

# あきれた,アキレス腱,桃中軒雲右衛門っと・・・


[12945] Re2:TTreeView の展開ボタンのアイコン返信 削除
2019/7/4 (木) 06:54:02 Mr.XRAY
> ※ nagao 氏によれば Delphi 2010 では展開折りたたみのボタンは [+] [-]
> ということですね.


喫喫茶XRAY のお客様には説明するまでもないですが,要因は

(1) プロジェクトのランタイムテーマを無効にしている
(2) Windows 7 の Aero (エアロ) 機能を無効にしている

と思います.
ただし,昨日の彼の書き込みではどちらかの判定はできません.私は

> 新規にプロジェクトを作成して TTreeView (ティー・ツリービュー) を配置

と「新規」と書いていますが,過去の経験から「新規」でテスト
している可能性が低いからです.
いずれにしても (1) を確認するのが優先ですね.
原因が (1) であれば話は簡単です.
「・・・と同じように」したいと言うのですから.
でも,もうレスする予定はありません.

> Mr.XRAYさんのWindows 7 + Delphi 2010 の環境のパソコンでは
> 矢印 (三角形) なのでしょうか?


何と失礼な !
自助努力 0 のあんたと違って確認しないでレスなんかしませんよ.
全国的に,いや地球規模,宇宙規模でそうなるんです !!
(1) (2) の場合を除いて.


[12947] Re3:TTreeView の展開ボタンのアイコン返信 削除
2019/7/5 (金) 08:01:58 SO
▼ Mr.XRAYさん
> > ※ nagao 氏によれば Delphi 2010 では展開折りたたみのボタンは [+] [-]
> > ということですね.


なんかもー、[+],[-]でも三角でもどっちでもいいじゃんって思いますが、
どーしても[+],[-]でなければならないシチュエーションってあるんですかね?

[12948] Re4:TTreeView の展開ボタンのアイコン返信 削除
2019/7/5 (金) 08:48:59 Mr.XRAY
▼ SOさん

> なんかもー、[+],[-]でも三角でもどっちでもいいじゃんって思いますが、

個人的にはどっちでもいいですけどね.
というか,どうでもいいけど.ハハハッ.

> どーしても[+],[-]でなければならないシチュエーションってあるんですかね?

う〜ん,あるのかな ?


[▼次のスレッド]
INCM/CMT
Cyclamen v3.82