要在treeview的每个节点前面加一个checkbox,怎么办? 要在treeview的每个节点前面加一个checkbox,怎么办? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 大富翁上搜索了一个解决方案:你得在表单中放置一个TTreeView及TImageList控件,然后,为TImageList控件提供两个或更多个的位图,以表示你的不同的访问级别,而不仅是CheckBox而已,并将TTreeView的Images属性置为该TImageList控件,至此你已完成基本设定。(你可以双击此TreeView,并随便加入几个节点,马上你能看到你的ImageList中的第一个位图显示在主表单的TreeView的相应节点处)别急,下面讲述如何实现你所说的不同访问级别: 其实你只需在TreeView的MouseDown事件中作类似如下的判定即可:procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var MyHitTest : THitTests;begin MyHitTest := TreeView1.GetHitTestInfoAt(X,Y); if htOnIcon in MyHitTest then { 现在已测定出是在位图上进行了点击,你可据此实现CheckBox功能, 只需将该节点的ImageIndex属性置为前面TImageList中的相应位图 即可。至于当前节点,可由TreeView.Selected获得,也可由 GetNodeAt(X,Y)获得。 在此,你可根据情况实现更多的级别控制,而非仅是CheckBox而已。 };end; 用tcnpack控件,还不错的,而且可以参照源码看看 raize有这个功能的控件的,而且也比较好用 何必如此麻烦?TreeView自己就有这个属性。设置一下就OK了。const TVS_CHECKBOXES = $00000100; SetWindowLong(TreeView1.Handle, GWL_STYLE, GetWindowLong(TreeView1.Handle, GWL_STYLE) OR TVS_CHECKBOXES); unit Unit1;interfaceuses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls;type TForm1 = class(TForm) TreeView1: TTreeView; procedure FormCreate(Sender: TObject); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.dfm}constTVS_CHECKBOXES = $00000100;procedure SetComCtrlStyle(WinCtrl: TWinControl; Value: Integer; UseStyle: Boolean);varStyle: Integer;begin if WinCtrl.HandleAllocated then begin Style := GetWindowLong(WinCtrl.Handle, GWL_STYLE); if not UseStyle then Style := Style and not Value else Style := Style or Value; SetWindowLong(WinCtrl.Handle, GWL_STYLE, Style); end;end;procedure TForm1.FormCreate(Sender: TObject);begin SetComCtrlStyle(TreeView1, TVS_CHECKBOXES, True);end;end. Rz控件组中有带CheckBox的Treeview 编译时出现错误提示: 我们有没有可能直接看懂2进制码? 关于视频聊天的原理.我只想知道原理.不需要代码 ADO+SQL SERVER问题 求多层实例 做好有回调功能 在线急,一个关于打包的问题? 软件界面开发套餐V1.0发布,欢迎大家下载使用 QRP格式的文件 应该用什么软件打开 导出为XLS Tchart控件问题 免费的管理软件 GraphicEx问题,帮忙 请教一句delphi语言的意思!
你得在表单中放置一个TTreeView及TImageList控件,然后,为
TImageList控件提供两个或更多个的位图,以表示你的不同的访问级别,而不
仅是CheckBox而已,并将TTreeView的Images属性置为该TImageList控件,
至此你已完成基本设定。(你可以双击此TreeView,并随便加入几个节点,马上
你能看到你的ImageList中的第一个位图显示在主表单的TreeView的相应节点处)
别急,下面讲述如何实现你所说的不同访问级别:
其实你只需在TreeView的MouseDown事件中作类似如下的判定即可:procedure TForm1.TreeView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);var
MyHitTest : THitTests;
begin
MyHitTest := TreeView1.GetHitTestInfoAt(X,Y);
if htOnIcon in MyHitTest then
{
现在已测定出是在位图上进行了点击,你可据此实现CheckBox功能,
只需将该节点的ImageIndex属性置为前面TImageList中的相应位图
即可。至于当前节点,可由TreeView.Selected获得,也可由
GetNodeAt(X,Y)获得。
在此,你可根据情况实现更多的级别控制,而非仅是CheckBox而已。
};
end;
TVS_CHECKBOXES = $00000100; SetWindowLong(TreeView1.Handle, GWL_STYLE,
GetWindowLong(TreeView1.Handle, GWL_STYLE) OR TVS_CHECKBOXES);
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ComCtrls, StdCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.dfm}const
TVS_CHECKBOXES = $00000100;procedure SetComCtrlStyle(WinCtrl: TWinControl; Value: Integer; UseStyle: Boolean);
var
Style: Integer;
begin
if WinCtrl.HandleAllocated then
begin
Style := GetWindowLong(WinCtrl.Handle, GWL_STYLE);
if not UseStyle then
Style := Style and not Value
else Style := Style or Value;
SetWindowLong(WinCtrl.Handle, GWL_STYLE, Style);
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
SetComCtrlStyle(TreeView1, TVS_CHECKBOXES, True);
end;end.