C++ Builder 初学问与答(六)

开发者福利!热门AI工具限时免费用 购周边即赠Coding Plan Lite,Claude Code、Cursor等20+工具畅享,效率翻倍! 阅读详情

6.图形列表组件TreeView

45)问:有时侯,我希望实现类似资源管理器对文件夹管理的显示方式,和对文件的管理显示方式,在C++Builder中应该怎么办?

答:C++Builder中可以直接使用图形列表组件来实现,它包括TreeViewListView以及Outline组件。其中Outline组件实际上是基于Windows 3.1环境的组件,而且无论从功能还是使用的角度来看,它都无法与TreeView相比,因此完全可以用TreeView组件代替Outline。所以我将主要介绍前面两种组件。这两个组件都在页Win32中。

 

 

46)问:TreeView组件是一个怎样的组件?

答:TreeView组件比较复杂,所以我们首先简单地介绍一下这个组件的基本使用情况,然后再深入讨论。

TreeView组件采用了树形结构,最典型的例子就是Windows 95的资源管理器,它用树形结构显示磁盘上的文件夹和文件。因此TreeView组件能够清晰地显示层次关系。

 

47)问:请给我演示一下怎样在设计状态编辑TreeView好吗?

答:首先在窗体上放置一个TreeView组件,然后在对象编辑器中单击属性Items中的省略号按钮,就会打开一个项目编辑器。

 

TreeView组件的项目编辑器是一个在设计时专门增加、删除节点和为节点赋予图标的工具。从屏幕上可以看到,项目编辑器由项目组框和项目属性组框组成。项目组框由一个项目列表框、按钮New Item、按钮New SubItem、按钮Delete和按钮Load组成。当你刚打开项目编辑器时,项目列表框是空的,New SubItemDelete按钮处于失效状态。

项目属性组框由编辑框Text、编辑框Image Index、编辑框Selected Index和编辑框State Index组成。

项目组框可以创建和删除节点、子节点。如果要载入一个已经存在的TreeView节点,可以单击按钮Load。要创建一个新项目,单击New Item,然后在文本编辑框中输入新节点的标题。这时,New SubItem按钮由失效变为有效,允许你在节点下再嵌套子节点。如果项目列表框中显示了节点,那么Delete按钮也会变的有效。你只要在项目列表框中选中这个节点然后单击Delete按钮,就可以删除这个节点了。

要注意的是:如果删除的节点还包括子节点,那么子节点也会被同时删除。

项目属性组框主要是为当前选中的节点(或子节点)设置属性的。其中编辑框Text可以修改节点的标题。如果要在不是当前被选中的节点的左边显示图像,那么应该在编辑框Image Index中输入图像的索引号。要禁止显示图像可以把这个节点Image Index设置为缺省值-1

如果要在被选中的节点的左边显示图像,应该在编辑框Selected Index中指定图像的索引号,索引号是从0开始的。要禁止显示图像可以把它设置为缺省值-1

如果要在节点的左边多显示一个图像,可以在编辑框State Index中输入图像的索引号。这个索引号代表Tree View组件中的StateImages属性所表示的图像列表的索引。要禁止显示图像可以把这个项目设置为缺省值-1

注意:Image Index Selected Index 使用的是Images指定的ImageList;而State Index使用的是StateImages 指定的ImageList

 

48)问:TreeView的属性太多了,我想问我一定要清楚哪些主要属性?

答: Items 该属性包含TreeView组件中的所有节点,它是TtreeNodes的对象,在设计时,你可以使用项目编辑器来增加、删除和修改节点。在运行期间,可以通过Items属性访问每一个节点,并且也能够增加、删除和修改节点。而每一个节点又都是一个TtreeNode对象。

 

AutoEWxpand:布尔类型。为true时,则当前被选择的节点将自动扩展,没有被选择节点将自动折叠。缺省为false,这时扩展和折叠要用户自己指定。

DragMode:其声明为:_property TdragMode DragMode;这个属性用来设置树状视图的拖放模式。缺省为dmManual,用户要拖放节点需要调用BeginDrag才能拖放。若设置为 dmAutomatic,则树状视图将支持自动拖放,用户可以把一个节点拖到另一个位置。

Images:用来设定TreeView中的不同节点的图标。

StateImages:用不同的的图像来表示节点的不同状态。

TreeView组件中,每个节点除了可以有一个文字标题外,还可以附加图标,这样可以使用户界面更加直观。这两个属性就包含着节点所使用的图标。

这两个属性都是TImageList的对象,所以如果要在TreeView组件中给节点添加图标,就必须使用图标列表组件给这两个属性赋值。如果在窗体中放置了图标列表组件,那么单击属性Images中的下拉按钮,就可以选取这个组件了。

ShowButtons属性值为True时表示凡是有子节点的节点将自动具有扩展按钮(即+号按钮)和折叠按钮(即减号按钮),单击它们就可以扩展和折叠节点。属性值为False时,不显示这两个按钮,缺省值为True

ShowLines属性用来确定是否显示在节点和子节点之间的连线。缺省值为True

ShowRoot属性用来确定与顶层节点连线是否显示。缺省值为True

HideSelection属性用来确定当输入焦点从TreeView移动到其它控件上时,被选中的节点是否处于被选中状态。当属性值为True时,不再处于选中状态。缺省值为True

Indent属性用来设置子节点与父节点之间缩进显示的距离。

ReadOnly用来确定用户是否可以直接修改节点的标题。当属性值为False时,表示可以修改。修改方法是,选中要修改的节点并单击进入编辑状态。缺省值为False

SortType用来设置节点进行排序的方式。它有以下几种取值:

stNone:不排序(缺省值);

stData:当节点所关联的对象发生改变时重新排序;

stText:当节点的标签发生变化时重新排序;

stBoth:当节点所关联的对象或者节点的标签发生改变时重新排序。

以上排序原则为在同一层的节点以标签的字母顺序排序。

此外,还有一些运行时态属性。

TopItem:这个属性用来设置一个节点,这个节点将显示在树状视图的最上面。

RowSelcet:缺省为false。若设置为true,则表示当前选择的节点所在的整行都将加亮显示。当ShowLines设置为true时,这个属性无效。

Selected:用来返回当前选择的节点。

 

49)问:属性ImagesStateImages有什么区别呢?

答:每一个节点可以有两个附带的图标。一般情况下只需要显示一个图标,这时我们经常使用Images来指定图标,也就是说给属性Images赋予一个ImageList对象。如果某个节点要显示两个图标,那么还需要给属性StateImages赋予一个ImageList对象。然后给节点的属性StateIndex指定图标的索引号。具体的方法是在项目编辑器中,修改编辑框State Index的值。

其实在显示一个图标时,也可以使用属性StateImages。但是使用Images属性有一个优点,就是它可以为处于不同状态的节点指定不同的图标。例如在Windows 95的资源管理器中,被选中的节点显示一个打开的文件夹,而没有选中的节点显示一个关闭的文件夹。要实现这一点很简单,因为项目编辑器中的编辑框Image Index指定的图标在节点未选中时显示,而编辑框Seleted Index指定的图像在节点选中时显示。

 

 

50)问:请在前面设计的TreeView组件的基础上,给TreeView组件中的节点增加图标。好吗?

答:好的,首先在窗体上放置两个ImageList组件,这两个组件将具有缺省的名字ImageList1ImageList2

其次、编辑ImageList组件:ImageList组件实际上是一个图标列表,它可以包含大量的图标,这些图标的大小由属性WidthHeight确定,缺省值都是16

 

ImageList刚建立时不包含任何图标,你需要把已创建好的图标引入到ImageList中。这个工作可以通过ImageList编辑器完成。

用鼠标右键单击ImageList组件,在快捷菜单中选择ImageList Editor或双击一下该组件,就会出现下面这个编辑器。

 

 

单击Add按钮,在弹出的Add Images对话框中选择要引入的图像文件,图标就会出现在Images框内。从图中可以看出,引入的图标被自动赋予索引号。

为了使用上的方便,每一个图标都有一个编号,这个编号就是这个图标的索引号。如果要引用某个图标,只需要使用它的索引号就可以了。

要注意的是:这个编辑器会自动把引入的图像分解成16×16的图标,之所以尺寸为16×16是因为ImageList的属性WidthHeight被设置成了16。如果图标的尺寸不一样,那么可以修改这两个属性,使其满足图标的要求。

然后、继续用项目编辑器给节点增加图标:我们已经在图标列表组件中加入了两个图标,其索引号分别为01,接着可以使用项目编辑器给节点增加图标。

再次打开项目编辑器,输入所有节点。

修改节点的ImageIndex, SelectedIndex属性,   

要注意的是,编辑框Image Index中的索引号是0,编辑框Selected Index中的索引号是1。也就是说,在选中或未选中状态下,该节点显示的图标不同。

修改所有节点的图标索引号,使包含子节点的节点有两种不同的图标,而不含子节点的节点只有一种图标,也就是编辑框Image IndexSelected Index的索引号相同。

最后,修改TreeView1组件的Images属性,从下拉列表中选择ImageList1组件。

从屏幕上可以看到,图标已经出现在控件里面了。

 

51)问:那怎样给节点增加第二个图标呢?

答:要给节点增加第二个图标,首先必须再创建一个图标列表组件,然后把这个图标列表赋值给TreeView组件的属性StateImages。当然还要给这个图标列表引入图标。

完成这些工作后,我们就可以进入项目编辑器,选中要增加第二个图标的节点,修改编辑框State Index中的索引号即可。

52)问:TreeView有哪些重要的函数呢?

答:AlphaSort:其声明为:bool _fastcall AlphaSort(void);这个函数用来对所有的节点按标签的字母顺序排序。若排序成功,则返回true

FullCollapse:其声明为void _fastcall FullCollapse(void);这个函数的作用是折叠所有的节点,直到最顶层为止。

FullExpand:其声明为 void _fastcall FullExpand(void);这个函数的作用是展开所有的节点,直到最底层为止。若ShowButtons属性为true,则所有的“+”都会变成“-”。

GetHitTestInfoAt:其声明为THitTests _fastcall GetHitTestInfoAt(int X,int Y);这个函数返回指定点与树状视图之间的位置关系。这个点的位置由参数XY确定。THitTests是个集合,它可能包含下面的元素:

HtAbove:在树状视图的客户区上方;

HtBelow:在树状视图的客户区下方;

HtNowhere:在树状视图的客户区内但在最后一个节点下面;

HtOnItem:在某个节点的标签或者图标上;

HtOnButton:在某个节点的左边的图标上;

HtOnIcon:在某个节点的图标上;

HtOnIndent:在某个节点的缩进线上;

HtOnLabel:在某个节点的标签上;

htOnRight:在某个节点的右边;

htOnStateIcon:在某个节点的状态图标上;

htToLeft:在客户区的右边;

htToRight:在客户区的的左边。

GetNodeAt:其声明为TTreeNode*_fastcall GetNodeAt(int X,int Y);这个函数用来返回指定点所在的节点。参数XY为这个点的坐标。如果这个点没有节点,则返回NULL

 

 

BCB6 TTreeView、TTreeNodes和TTreeNode TTreeView由节点构成,建树通过对TreeView.items属性进行操作。Items是一个TTreeNodes对象,这是一个TTreeNode集。 常用的属性 Count,结点个数; Item[index],通过index得到结点; TTreeNode.Data,指向一个指针,可以存对象,存指针,也可以存整数; TTreeNode.Text,树结点的文本; TTreeNode. 阅读详情

相关推荐

C++ Builder 初学问与答(二十)

作者:董维春 网名:ch_builder(版权要求:请务必尊重知识产权,未经授权不要转载、摘录)17 事件及事件响应16)问:从前面的编程过程可以看出,用C++Builder开发应用程序的一个特点是,大部分的编程工作是在响应事件和处理事件上。事件的产生可能来自于系统,也可能来自于用户。您能给我详细介绍一下事件吗?答:好的,这节课我们将对事件进行深入地探讨,并重点讲述常用的鼠标和

ch_builder的专栏 3343

C++Builder下TTreeView 编程

1、支持任意添加、修改、删除节点信息 2、支持节点间的任意拖曳 3、支持对操作结果的保存 4、提供了生产树的方法 附:执行程序和源代码

C++ Builder 初学问与答(十三)

C++ Builder初学问与答(版权要求:本文仅授权CSDN使用,另授权CCRUN转载,其他个人与网站不得转载、摘录,若有特别需求可与作者联系)第二部分:快速提高好久以来有不少朋友问我,《C++ Builder问与答》为什么不继续写了?我也一直在思考还应该写下去不?CBX的推出,加之宝兰宣布不在出新的CB版本,让我们这些一直喜爱CB的人不清楚下一个方向到底在何处?当然真的希望CB会继

ch_builder的专栏 2120

c++ builder TreeView控件节点遍历代码

介绍了c++ builder TreeView控件节点遍历代码,有需要的朋友可以参考一下

c++builder 学习例子第1个,TreeView组件的基本用法

公欲上其事,比先利其器。要学习C++builder,最好的方法就是学以致用,用学到的方法做出实际例子了。 这个例子中,使用的一些基本的windows组件,基本使用方法。 除了IDE的不能自定义快捷键之外,IDE的操作还要再熟悉一下,C++Builder 真的方便。 .........

自学C++,会写HelloWorld 1688

基于C++BuilderTreeView控件的使用小结

1.给默认的树形列表控件前面增加选择框,下面的方法也是基于该带复选框的树形控件 SetWindowLong(TreeView1->Handle,GWL_STYLE,GetWindowLong(TreeView1->Handle,GWL_STYLE) | TVS_CHECKBOXES); 2.在1的情况下,很难拿到常规的鼠标点击的树形列表的节点,下面在鼠标事件中实现该功能 //直接在头文件定义该函数,默认绑定到控件,不需要再将函数与控件方法相绑定 //响应鼠标的点击事件,

Tiaobaobao的博客 2062

c++ builder TreeView控件节点遍历

c++ builder TreeView控件节点遍历 void __fastcall TForm1::GetRootNodes(TTreeView *DestTreeView)//得到所有根节点 { TTreeNode *vNode = NULL; vNode = DestTreeView->It...

weixin_30384031的博客 505

C++ Builder 初学问与答()

 6.图形列表组件TreeView  45)问:有时侯,我希望实现类似资源管理器对文件夹管理的显示方式,和对文件的管理显示方式,在C++Builder中应该怎么办? 答:在C++Builder中可以直接使用图形列表组件来实现,它包括TreeViewListView以及Outline组件。其中Outline组件实际上是基于Windows 3.1环境的组件,而且无论从功能还是使用的角度来看,它都

.NET快速开发框架 1184

C++ Builder 初学问与答()

C++ Builder 初学问与答()[@more@]6.图形列表组件TreeView 45)问:有时侯,我希望实现类似资源管理器对文件夹管理的显示方式,和对文件的管理显示方式,在C++Builder中应该怎么办? ...

ciya3282的博客 144

C++ Builder 初学问与答(一)

C++ Builder初学问与答(版权要求:本文除了经过CSDN授权或作者同意,不得转载)     一直以来都想写一点为BCB初学者快速入门的东西,前不久写了几篇《闲谈BCB》想把自己学习BCB中如何来解决难点的方法说给大家,没想到被骂得不成样子。本想不写了,但觉得这些东西留下来能做什么呢?还是用另一种方法来重新演译我的思维吧,最近有些忙,那几篇没有写完的文章,我也会尽快写完的,至于《

ch_builder的专栏 4204

C++ Builder 初学问与答(十四)

(版权要求:本文仅授权CSDN使用,另授权CCRUN转载,其他个人与网站不得转载、摘录,若有特别需求可与作者联系) (4)利用C++Builder集成开发环境中的视图“View”菜单,我们可以显示或隐藏C++Builder集成开发环境中的不同的部分,也可以用于打开属于集成调试器的窗口。 “Project Manager”菜单项用于显示工程管理器。“Object Insp

ch_builder的专栏 2595

C++ Builder 初学问与答(二)

2.文本输入组件11)问:如果要实现文本输入,在C++Builder中应该怎么办?答:C++Builder常用文本输入组件来实现,常用的文本输入组件有Edit、MaskEdit 、Memo和RichEdit。他们的主要不同在于Edit和MaskEdit用于输入单行文本,而Memo和RichEdit可以输入多行文本。此外Label组件也可用来进行文本显示。Edit和MaskEdit是一个

ch_builder的专栏 2700

C++ Builder 初学问与答(四)

4.列表类组件31)问:当我需要使用多个选项的时候,使用单选按钮或复选框来进行选择不是很恰当,因为在窗体上放置大量的按钮既不利于布局的美观,又会消耗大量的系统资源,C++Builder有什么解决办法吗?答:可以使用列表框(ListBox、CheckListBox)或组合框(ComboBox)这两类最常用的列表组件。32)问:列表框有那些主要属性?答:列表组件ListBox在缺省情况

ch_builder的专栏 2517

C++ Builder 初学问与答(十五)

(版权要求:本文仅授权CSDN使用,另授权CCRUN转载,其他个人与网站不得转载、摘录,若有特别需求可与作者联系) (7)在C++Builder集成开发环境中,还有Component菜单。在组件菜单下的菜单命令是有关建立、安装、重建组件的菜单项。其中,“New Component”菜单项打开组件向导建立新组件。“Install Component”菜单项安装新的组件。“

ch_builder的专栏 2492

C++ Builder 初学问与答 (十二)

(本系列文章,仅供CSDN使用,另授权CCRUN转载,其他个人与网站不得转载、摘抄,如需使用请与作者或CSDN联系) 13.对话框组件     96)问:怎样编写文件打开、保存等对话框?  答:C++Builder为我们提供了许多常用的对话框组件,这些对话框组件都放在组件模板的Dialogs选项卡中,例如Font,Color,Open和Print对话框。其中OpenDialog对话

ch_builder的专栏 2553
上一篇: C++ Builder 初学问与答(七)
下一篇: C++ Builder 初学问与答(八)
ch_builder
博客等级 码龄24年 76粉丝 58原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值