喫茶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 氏のが壊れているかですね.なんてね (笑)

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


[12944] Re2:TTreeView の展開ボタンのアイコン返信 削除
2019/7/3 (水) 23:53:30 Mr.XRAY
> 参考までに,テーマによる描画がサポートされたのは Delphi 2007 からです.

XPMan なんてのがありしたが.
で,以下の記事を追加しておきました.

[ 07_TTreeView の展開折りたたみボタンを矢印 ( 三角形 ) にする ]
http://mrxray.on.coocan.jp/Delphi/plSamples/800_FolderTree.htm#07


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