小弟主要是想实现对应用程序的菜单项级别的权限控制,通过TreeView把菜单各项倒入到TreeView中,而每个节点上相应的都有CheckBox,可以选择,但小弟不知道如何将每个节点中的+ - 变为CheckBox,请各位多多指教,各位最好能把原码能给我一份,非常感谢!另外,我将我写的通过TreeView把菜单各项倒入到TreeView中的代码给大家看看,如何????procedure TForm1.Button3Click(Sender: TObject); //把菜单中所有项加入到Treeview1中
var
i,j:integer;
mynode:ttreenode; begin
treeview1.items.Clear;
with treeview1 do
for I:= 0 to mainmenu1.Items.Count-1 do
begin
mynode:=items.Add(nil,mainmenu1.items[i].Caption);
for j:=0 to mainmenu1.items[i].count-1 do
begin
Items.AddChild(mynode,mainmenu1.Items[i].Items[j].Caption);
end;
end;
end;
var
i,j:integer;
mynode:ttreenode; begin
treeview1.items.Clear;
with treeview1 do
for I:= 0 to mainmenu1.Items.Count-1 do
begin
mynode:=items.Add(nil,mainmenu1.items[i].Caption);
for j:=0 to mainmenu1.items[i].count-1 do
begin
Items.AddChild(mynode,mainmenu1.Items[i].Items[j].Caption);
end;
end;
end;
的fcTreeView可以达到你的效果,
在网上可以很容易找到该控件
同意楼上的
或者尝试定义 一个类
类中包含一个checkBox
把类做为OBJECT 加入到TTREEVIEW中
//代码如下,至于其它点击事件的处理,应该比较简单unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, CommCtrl, StdCtrls, ComCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
Button1: TButton;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
function IsNodeChecked(Node :TTreeNode) :Boolean;
public
{ Public declarations }
end;const
TVIS_CHECKED = $2000;var
Form1: TForm1;implementation{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
if (TreeView1.Selected = nil) then Exit; ShowMessage('Node checked? ' + BoolToStr(IsNodeChecked(TreeView1.Selected), True));
end;procedure TForm1.FormCreate(Sender: TObject);
var
dw: DWORD;
begin
//给TreeView加上CheckBoxes
dw := GetWindowLong( TreeView1.Handle, GWL_STYLE);
dw := dw or TVS_CHECKBOXES;
SetWindowLong(TreeView1.Handle, GWL_STYLE , dw);
end;procedure TForm1.Button2Click(Sender: TObject);
//设置node的check状态
procedure SetNodeChecked(Node :TTreeNode; Checked :Boolean);
var
TvItem :TTVItem;
begin
FillChar(TvItem, SizeOf(TvItem), 0);
with TvItem do begin
hItem := Node.ItemId;
Mask := TVIF_STATE;
StateMask := TVIS_STATEIMAGEMASK;
if Checked then
TvItem.State :=TVIS_CHECKED
else
TvItem.State :=TVIS_CHECKED shr 1;
TreeView_SetItem(Node.TreeView.Handle, TvItem);
end;
end;
begin
if (TreeView1.Selected = nil) then Exit; SetNodeChecked(TreeView1.Selected, not IsNodeChecked(TreeView1.Selected));
end;//检查Node是否Checked
function TForm1.IsNodeChecked(Node: TTreeNode): Boolean;
var
TvItem :TTVItem;
begin
TvItem.Mask := TVIF_STATE;
TvItem.hItem := Node.ItemId;
TreeView_GetItem(Node.TreeView.Handle, TvItem);
Result := (TvItem.State and TVIS_CHECKED) = TVIS_CHECKED;
end;end.