能否实现这样的功能(在TreeView上选中打勾) (100分)

  • 主题发起人 主题发起人 Z_JJ
  • 开始时间 开始时间
Z

Z_JJ

Unregistered / Unconfirmed
GUEST, unregistred user!
数据库里有两个表, 表1为全国各省的 名称/省ID,表2为全国各市的 名称/市ID/省ID
要实现有主从关系的树形目录,
1.每当省打勾时,下属市也被全部打勾
2.如果仅选其中某几个市打勾,则省不被打勾。
不知道现有的TreeView怎样现实,如果不行是否有现成的第三方控件,请给下载地址或给我发EMAIL: webmaster@itjie.com
 
1stclass的treeview
 
我现在已经安装了1stclass,但是现在只能对省打勾,无法对省下级的市进行打勾和检测实现如上所说的完整功能
 
不可能的,只能用代码写。那里有控件能直接实现你说的功能啊,谁有告诉我?
ExpressQuantumGrid也可以用,不过你还得写语句:)
 
可是1stclass的fcdbtreeview差不多快要实现了, 现在可以多个省打勾,并且选省的某
一个市时,其省就自动不被打勾,但现在市只能选一个当前的,无法打勾和多选
 
呵,自己写,还可以用图片打勾,跟金山毒霸似的一样。
 
老千,你有破解的1stclass么
哪有下载,谢谢
cbychen@sina.com
 
我就是用TTreeView+图片做的,动手做一下,几句代码,很简单的![:)]
 
我程序的一段代码:
Img_Select为打勾图标的Index,Img_NoSelect为不打勾图标的Index

procedure TForm1.TreeView1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
Node:TTreeNode;
TopRight, BottomLeft: TPoint;
begin
Node:=TreeView1.GetNodeAt(x,y);
if Node<>nil then
begin
TopRight:=Node.DisplayRect(True).TopLeft;
BottomLeft :=Node.DisPlayRect(True).BottomRight;
//判断是否在Check图标范围内
if (X >= TopRight.X - 34) and (X <= TopRight.X - 21) and (Y >= TopRight.Y) and (Y <= BottomLeft.Y) then
begin
with Node do
begin
if (StateIndex=Img_Select) then
StateIndex:=Img_NoSelect
else
if StateIndex=Img_NoSelect then
StateIndex:=Img_Select;
end;
end;
end;
end;
 
procedure TFrmMenuNodeData.TreeView1MouseUp(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var
T: TTreeNode;
TI: THitTests;
i: integer;
begin
T := TTreeView(Sender).GetNodeAt(X, Y);
TI := TTreeView(Sender).GetHitTestInfoAt(X,Y);
if (T<>nil) and (htOnItem in TI) then
begin
TTreeView(Sender).Items.BeginUpdate;
if T.StateIndex=1 then
begin
SetTVState(T, 2);
end else begin
SetTVState(T, 1);
end;

for i:=0 to TTreeView(Sender).Items.Count-1 do
begin
if TTreeView(Sender).Items.Level<=0 then
RefreshTVState(TTreeView(Sender).Items);
end;

TTreeView(Sender).Items.EndUpdate;
end;
end;

procedure TFrmMenuNodeData.SetTVState(Node: TTreeNode; StateIndex: integer);
var
i: integer;
begin
Node.StateIndex := StateIndex;

for i:=0 to Node.Count-1 do
if Node.Item.HasChildren then
SetTVState(Node.Item, StateIndex)
else
Node.Item.StateIndex := StateIndex;
end;
 
use raize's checktree
 
感谢浦欣, 我用TTreeView+图片+你的方法已解决
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
878
DelphiTeacher的专栏
D
后退
顶部