我看到国外一个软件,效果如下图:
![求VirtualStringTree使用实例 求VirtualStringTree使用实例](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0Rvdkx6SXlNaTR5TkRjdU5UQXVNVFU2T0RBME9TOTJjM1F1YW5Cbg%3D%3D.jpg?w=700&webp=1)
这个“default”分组是我想实现的功能,delphi功力还不够,
官方的demo写的好复杂
希望大牛们能帮忙实现 添加删除根节点 添加删除子节点
我自己只能仿照网上的代码 把他当成listview使用
![求VirtualStringTree使用实例 求VirtualStringTree使用实例](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0Rvdkx6SXlNaTR5TkRjdU5UQXVNVFU2T0RBME9TOXRlWFp6ZEM1cWNHYz0%3D.jpg?w=700&webp=1)
本人等级比较低 分数上限只有100分,希望各位能帮帮忙
11 个解决方案
#1
画画+代码。
感觉没什么。
帮你顶一下
感觉没什么。
帮你顶一下
#2
VirtualStringTree比较复杂,但十分强大,网上例子和用的人好像不多,谢谢帮顶
#3
贴别沉了,分数虽少,还是希望大牛们能帮帮忙。
#4
写个DEMO太麻烦了,你有啥问题直接问吧。
#5
谢谢楼上回复,请看两张图的根节点的区别,
第一张图片的根节点只有“default”一条数据 下面的子节点才有后面那些数据
而我自己写的根节点和子节点的数据是一样多的,我希望做成第一张图的样子。
不知这样是否清楚。
第一张图片的根节点只有“default”一条数据 下面的子节点才有后面那些数据
而我自己写的根节点和子节点的数据是一样多的,我希望做成第一张图的样子。
不知这样是否清楚。
#6
參考一下。。。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VirtualTrees;
type
TForm1 = class(TForm)
VirtualStringTree1: TVirtualStringTree;
procedure VirtualStringTree1GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//定义VirtualStringTree结构
type
PVSTNodeData = ^TVSTNode;
TVSTNode = record
Name: string;
//可以继续扩展
end;
implementation
{$R *.dfm}
procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
VSTNode: PVSTNodeData;
begin
//將Node资料读出
VSTNode := Sender.GetNodeData(Node);
//设定Cell的值
CellText := VSTNode.Name;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Data:PVSTNodeData;
RootNode:PVirtualNode;
begin
//清除所有Node
VirtualStringTree1.Clear;
//指定VitrualStringTree有幾個Node
//VirtualStringTree1.RootNodeCount := 2;
//將所定義的結構大小指定給VitualStringTree
VirtualStringTree1.NodeDataSize := SizeOf(TVSTNode);
//添加节点
RootNode:= VirtualStringTree1.AddChild(nil);
Data:=VirtualStringTree1.GetNodeData(RootNode);
Data^.Name:='根结点';
RootNode:= VirtualStringTree1.AddChild(nil);
Data:=VirtualStringTree1.GetNodeData(RootNode);
Data^.Name:='根结点aaa';
end;
end.
#8
你在 OnGetText 中 处理就可以了。遇到根节点时CellText='';
不知道你明白了没。不明白的话将你QQ号给我发个消息。我来加你。
不知道你明白了没。不明白的话将你QQ号给我发个消息。我来加你。
#9
它为了实现高速的加载,机制是有点特别
好像是通过getdata事件来实现取节点信息来显示的
好像是通过getdata事件来实现取节点信息来显示的
#10
谢谢ZyxIp,kye_jufei大牛热心帮助,也谢谢ecjtu5208,sz_haitao
问题基本上解决了,
![求VirtualStringTree使用实例 求VirtualStringTree使用实例](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0Rvdkx6SXlNaTR5TkRjdU5UQXVNVFU2T0RBME9TOXRlWFp6ZEc5ckxtcHdadz09.jpg?w=700&webp=1)
这控件感觉非常强大,决定再深入的学习下
问题基本上解决了,
![求VirtualStringTree使用实例 求VirtualStringTree使用实例](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0Rvdkx6SXlNaTR5TkRjdU5UQXVNVFU2T0RBME9TOXRlWFp6ZEc5ckxtcHdadz09.jpg?w=700&webp=1)
这控件感觉非常强大,决定再深入的学习下
#11
这个控件完全可以替换系统的LISTVIEW,TREEVIEW 。速度很好,可控性也非常好。图标,排序,编辑功能的支持
也非常好。
也非常好。
#1
画画+代码。
感觉没什么。
帮你顶一下
感觉没什么。
帮你顶一下
#2
VirtualStringTree比较复杂,但十分强大,网上例子和用的人好像不多,谢谢帮顶
#3
贴别沉了,分数虽少,还是希望大牛们能帮帮忙。
#4
写个DEMO太麻烦了,你有啥问题直接问吧。
#5
谢谢楼上回复,请看两张图的根节点的区别,
第一张图片的根节点只有“default”一条数据 下面的子节点才有后面那些数据
而我自己写的根节点和子节点的数据是一样多的,我希望做成第一张图的样子。
不知这样是否清楚。
第一张图片的根节点只有“default”一条数据 下面的子节点才有后面那些数据
而我自己写的根节点和子节点的数据是一样多的,我希望做成第一张图的样子。
不知这样是否清楚。
#6
參考一下。。。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, VirtualTrees;
type
TForm1 = class(TForm)
VirtualStringTree1: TVirtualStringTree;
procedure VirtualStringTree1GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
procedure FormCreate(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
//定义VirtualStringTree结构
type
PVSTNodeData = ^TVSTNode;
TVSTNode = record
Name: string;
//可以继续扩展
end;
implementation
{$R *.dfm}
procedure TForm1.VirtualStringTree1GetText(Sender: TBaseVirtualTree;
Node: PVirtualNode; Column: TColumnIndex; TextType: TVSTTextType;
var CellText: WideString);
var
VSTNode: PVSTNodeData;
begin
//將Node资料读出
VSTNode := Sender.GetNodeData(Node);
//设定Cell的值
CellText := VSTNode.Name;
end;
procedure TForm1.FormCreate(Sender: TObject);
var
Data:PVSTNodeData;
RootNode:PVirtualNode;
begin
//清除所有Node
VirtualStringTree1.Clear;
//指定VitrualStringTree有幾個Node
//VirtualStringTree1.RootNodeCount := 2;
//將所定義的結構大小指定給VitualStringTree
VirtualStringTree1.NodeDataSize := SizeOf(TVSTNode);
//添加节点
RootNode:= VirtualStringTree1.AddChild(nil);
Data:=VirtualStringTree1.GetNodeData(RootNode);
Data^.Name:='根结点';
RootNode:= VirtualStringTree1.AddChild(nil);
Data:=VirtualStringTree1.GetNodeData(RootNode);
Data^.Name:='根结点aaa';
end;
end.
#7
本站也有一個demo:
http://download.csdn.net/source/1547569
#8
你在 OnGetText 中 处理就可以了。遇到根节点时CellText='';
不知道你明白了没。不明白的话将你QQ号给我发个消息。我来加你。
不知道你明白了没。不明白的话将你QQ号给我发个消息。我来加你。
#9
它为了实现高速的加载,机制是有点特别
好像是通过getdata事件来实现取节点信息来显示的
好像是通过getdata事件来实现取节点信息来显示的
#10
谢谢ZyxIp,kye_jufei大牛热心帮助,也谢谢ecjtu5208,sz_haitao
问题基本上解决了,
![求VirtualStringTree使用实例 求VirtualStringTree使用实例](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0Rvdkx6SXlNaTR5TkRjdU5UQXVNVFU2T0RBME9TOXRlWFp6ZEc5ckxtcHdadz09.jpg?w=700&webp=1)
这控件感觉非常强大,决定再深入的学习下
问题基本上解决了,
![求VirtualStringTree使用实例 求VirtualStringTree使用实例](https://image.shishitao.com:8440/aHR0cHM6Ly93d3cuaXRkYWFuLmNvbS9nby9hSFIwY0Rvdkx6SXlNaTR5TkRjdU5UQXVNVFU2T0RBME9TOXRlWFp6ZEc5ckxtcHdadz09.jpg?w=700&webp=1)
这控件感觉非常强大,决定再深入的学习下
#11
这个控件完全可以替换系统的LISTVIEW,TREEVIEW 。速度很好,可控性也非常好。图标,排序,编辑功能的支持
也非常好。
也非常好。