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



[12926] Re:TTreeView の展開ボタンのアイコン返信 削除
2019/6/20 (木) 18:22:36 Mr.XRAY
> vclide150.bpl 内の以下の画像を使用しています.
> VT_XPBUTTONMINUS.bmp
> VT_XPBUTTONPLUS.bmp


bpl 内のアイコンは以下のプログラムを使用すると取り出せます.

[ 163_コンポーネントのアイコン作成支援プログラム ]
http://mrxray.on.coocan.jp/Delphi/plSamples/163_CreateCompoIconRes.htm

左の赤枠のボタンがファイルの読み込み
右の赤枠のボタンが表示中の画像の保存です.
FD の画像のボタンは,コンポーネントのアイコンとしての保存用です.

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