VirtualTrees可以 如果只要复选框, 通过stateimageindex切换就行了 或者用api: procedure TreeviewAddCheckBox(TV:Ttreeview); begin SetWindowLong(TV.Handle, GWL_STYLE, GetWindowLong(TV.Handle, GWL_STYLE) or TVS_CHECKBOXES); end;
unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls;type TForm1 = class(TForm) TreeView1: TTreeView; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation uses CommCtrl;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject); var H: HWND; begin H := TreeView1.Handle; SetWindowLong(H, GWL_STYLE, GetWindowLong(H, GWL_STYLE) or TVS_CHECKBOXES); end;end. 注意uses CommCtrl;这样编写出来的父 Node 和子node 不是太连贯,自己判断
用7楼的方法显示复选框,下面的方法判断是否选中uses CommCtrl;列举选中的节点 var Node: TTreeNode; TVI: TTVItem; i:integer; begin for i:=0 to TreeView1.Items.Count - 1 do begin Node := TreeView1.Items[i]; TVI.mask := TVIF_STATE; TVI.hItem := Node.ItemId; TreeView_GetItem(TreeView1.Handle, TVI); if TVI.state and $2000 = $2000 then ShowMessage(Node.Text); end; end;
到www.2ccc.com去找吧!
如果只要复选框,
通过stateimageindex切换就行了
或者用api:
procedure TreeviewAddCheckBox(TV:Ttreeview);
begin
SetWindowLong(TV.Handle, GWL_STYLE, GetWindowLong(TV.Handle, GWL_STYLE) or TVS_CHECKBOXES);
end;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
uses CommCtrl;{$R *.dfm}procedure TForm1.FormCreate(Sender: TObject);
var
H: HWND;
begin
H := TreeView1.Handle;
SetWindowLong(H, GWL_STYLE, GetWindowLong(H, GWL_STYLE) or TVS_CHECKBOXES);
end;end.
注意uses CommCtrl;这样编写出来的父 Node 和子node 不是太连贯,自己判断
CommCtrl;列举选中的节点
var
Node: TTreeNode;
TVI: TTVItem;
i:integer;
begin
for i:=0 to TreeView1.Items.Count - 1 do
begin
Node := TreeView1.Items[i];
TVI.mask := TVIF_STATE;
TVI.hItem := Node.ItemId;
TreeView_GetItem(TreeView1.Handle, TVI);
if TVI.state and $2000 = $2000 then
ShowMessage(Node.Text);
end;
end;