fcTreeView的部分选择功能!(100分)

X

xzyxm

Unregistered / Unconfirmed
GUEST, unregistred user!
fcTreeView的checkbox可以在caption前有个框选择,我现在要的是象金山毒霸一样当选择
treenode的子级的一部分时,treenode的checkbox会变灰,选择子级的全部时treenode的
checkbox又会变白,当treenode的checkbox不选择时,其子级全部也都不选择,如果要
用程序写的话,要随时跟踪checkbox的状态,会很慢!
fcTreeView有没有这个属性或用程序有没有好的方法!效果象金山毒霸一样
100敬上!
 
只有写代码了,我就是这样做的,不过没有变灰的功能,变灰也简单嘛
 
to:blues hu
这样会很耗资源的!有没有别的办法?
 
用Virtual Tree组件/Open Source, 可以达到你要的功能, 而且还更多…
http://www.delphi-gems.com/VirtualTreeview/
 
to xzyxm
将你的lstClass发给我一份好吗?
jgauarctsx@sina.com
 
到网上找一下,有下载!有5m
 
你自己先试试看,还有什么问题
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, fcTreeView;

type
TForm1 = class(TForm)
fctreeview1: TfcTreeView;
procedure fctreeview1ToggleCheckbox(TreeView: TfcCustomTreeView;
Node: TfcTreeNode);
procedure FormActivate(Sender: TObject);
private
isactive:boolean;
procedure NodeChildCheckfalse(nodes:tfctreenode);
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}
procedure Tform1.NodeChildCheckfalse(nodes:tfctreenode);
var childnode:tfctreenode;
begin
childNode := nodes.getFirstChild;
while childNode <> Nil do
begin
if not (nodes.Checked) then
childnode.checked:=false;
NodeChildCheckfalse(childNode);
childNode := nodes.getNextChild(childNode);
end;
end;
procedure TForm1.fctreeview1ToggleCheckbox(TreeView: TfcCustomTreeView;
Node: TfcTreeNode);
var parentnode,nodes,node1:tfctreenode; boo:boolean;
begin
if not isactive then exit;
isactive:=false;
nodes:=node;
parentnode:=nodes.Parent;
if parentnode<>nil then
node1:=parentnode.GetFirstChild
else
node1:=nil;
while node1 <> Nil do
begin
if not (node1.Checked) then
begin
boo:=false;
break;
end
else
begin
boo:=true;
end;
node1:=parentnode.getNextChild(node1);
end;

if parentnode<>nil then
begin
parentnode.Checked:=boo;
end;
NodeChildCheckfalse(nodes);
isactive:=true;
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
isactive:=true;
end;

end.
 
没见过撒
 
to:sunys
谢谢,但功能没那么简单,当选择某checkbox(A)时,其子级全部选择,当其子级某一checkbox
没选时,则A变为灰的选择,当子级全部选时A又变回亮的选择,当子级全部不选时A变成不选择,
当点即A为选时其子级全部为选,当点即A为不选时其子级全部不选!效果象金山毒霸一样
 
我不知道金山是怎么样的,你根据我上面写的程序稍加改动,我想完全可以做出来的。
你现在好象有三种状态?一个是在CHECKBOX打勾,一个是不打勾,还有一个是灰?
把这个函数改一下就可以实现(当选择某checkbox(A)时,其子级全部选择)
procedure Tform1.NodeChildCheckfalse(nodes:tfctreenode);
var childnode:tfctreenode;
begin
childNode := nodes.getFirstChild;
while childNode <> Nil do
begin
//if not (nodes.Checked) then
childnode.checked:=nodes.Checked;
NodeChildCheckfalse(childNode);
childNode := nodes.getNextChild(childNode);
end;
end;
其他的你可以再说清楚什么状态,其实这个如果理清楚了就比较简单,
 
TO:sunys
怎样才能使它打勾的框是灰色的!
 
NODE.Grayed:=TRUE; 这样打勾筐就灰色了。

你可以到fctreeview里面的原码看一下
 
顶部