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;
|
|