名前 題名 ▼ 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; > GIF,JPEG,PNG画像ファイル及びLZH,ZIPファイルをアップロードできます.600 x 1200 ピクセルを超える画像は縮小表示されます(画像クリックで拡大表示). (上限122000(120k)バイト) 削除キー Link