treeview的使用方法_第1页
treeview的使用方法_第2页
treeview的使用方法_第3页
treeview的使用方法_第4页
treeview的使用方法_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

delphi中Treeview的使用介绍每一个节点下子节点形成这一节点的Items属性,当前节点有一个唯一的Index(TreeNode的Index属性),用于说明子节点 在Items中的位置,每一个节点下的子节点是顺序编号的,第一个是0,第二个是1,依次类推。用IndexOf方法获得子节点的顺序,绝对顺序 (AbsoluteIndex)则是指从Treeview第一个项开始的顺序值,第一个是0,如此推下去。Item属性则根据Index的值返回当前节点 的第Index个子节点。Count则表明属于此项的所有子节点的数量。用MoveTo方法将Item由一个位置移到另一个位置。 Expanded属性表明是否所有的子项都全部展开(包括子项的子项),为True表示全部展开。IsVisible属性表明一个项是否在树中能被看到, 如果树全部展开那么这个Item是肯定可以被看到。HasChildren属性表明一个项是否有子项。 GetFirstChild, GetLastChild, GetPrevChild, and GetNextChild分别返回当前项子项的第一个、最后一个和前一个、后一个项。GetNextSibling and GetPrevSibling则返回在同一Level下的下一个和上一个项。GetNextVisible and GetPrevVisible则返回能看得到的下一个和上一个项。如果一个节点有Parent,则HasAsParent方法返回True. Parent为当前项的父项。Focused属性确定焦点是否落在此节点上,被Focus时会一个标准的方框围住。很显然,只有一个节点会被聚焦。 Selected属性表明一个节点是否被选中,同样只有一个节点会被选中。DropTarget属性表明节点在拖动操作中是源还是目标。.1.添加、删除、修改节点:静态的方法可以在设计时通过Items的编辑器设置各节点的内容。在添加和删除前必须保证有节点被选中(Treeview.Selected = nil)用AddFirst, AddFirstChild, AddChild等先添加根节点,如Treeview.Items.AddFirst( nil, Root);然后以此为基础,添加此项的子节点。删除节点Treeview.Selected.Delete编辑节点内容Treeview.Selected.EditText注意:由于根节点没有父节点 (TTreeNode.Parent= nil)此外,在大批量添加数据到Treeview中时最好使用TreeView.Items.BeginUpdate;添加节点TreeView.Items.EndUpdate这样能加快显示速度。2.在节点上添加图象Treeview中几个与图象相关的属性:SelectedIndex:当节点被选中时在TimageList 中选什么样的图象OverlayIndex:选那副图象作为掩图(一幅图象透明地显示在另一幅图象的前面),比如一个节点不可用时加一副X图象在其前面。ImageIndex:在常态时选用的图的序号StateIndex: 在StateImages这个ImageList中对应的序号,-1时不显示图象 比较典型的,象在文件管理器中的所显示的一样,Treeview控件在节点之前也可以显示图象。在Form中放置一ImageList控件,加入几个图 片,分别被Index为0,1,在Treeview的Image属性项填入你所加入的ImageList的控件名称。TreeNode的 ImageIndex表示节点未被选中时(Selected=nil)的图片序号,SelectedIndex表示节点被选中时图片序号。/delphi下treeview控件基于节点编号的访问有时我们需要保存和重建treeview控件,本文提供一种方法,通过以树结构节点的编号访问树结构,该控件主要提供的方法如下: function GetGlobeNumCode(inNode:TTreeNode):String;功能:返回当前节点的编号,编号规则见源码内说明。function LocatOrGenerateNode(inNumCode:String):TTreeNode;功能:以编号返回节点,假如节点的父节点和它的前继兄弟节点不存在,该方法会创建它们,名称为Temp,当然假如已经存在,就不执行创建工作。通过以上两个函数,这样我们就可以不加限制的创建和访问节点。该控件在我以前开发的,现在提供给大家做一个参考,希望能对你有帮助。源码:/ */ 用于实现对TreeView控件的树结构的保存和重建/ 编写该控件主要用于实现对行政文件等具有树的层次结构的对象/ 实现保存和显示/ 节点编号规则:/ + * -1/ + * -1.1/ + * -1.1.1/ + * -1.2/ 作者:Jack/ 最后修改日期:2002-12-24/ *unit CtrlTree;interfaceusesWindows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,ComCtrls;typeTCtrlTree = class(TTreeView)private Private declarations function GetPosAtBound(inString:String;inStart:Integer):Integer;function GetTheLastPointPos(inString:String):Integer;protected Protected declarations public Public declarations function GetNumInSameLevel(inNode:TTreeNode):Integer;function GetGlobeNumCode(inNode:TTreeNode):String;function GetParent(inNumCode:String):TTreeNode;function LocateNodeInLevel(parNode:TTReeNode;LevelCode:integer):TTReeNode;published Published declarations function LocatOrGenerateNode(inNumCode:String):TTreeNode;function InsertAsFinalChild(inString:String;inNode:TTreeNode):TTReeNode;function InsertAsPreviousSibling(inString:String;inNode:TTreeNode):TTReeNode;end;procedure Register;implementationprocedure Register;beginRegisterComponents(Standard, TCtrlTree);end; TCtrTree function TCtrlTree.GetNumInSameLevel(inNode: TTreeNode): integer;功能:产生已存在节点在兄弟节点层中对应的编号,从1起编入口参数:inCode:TTreeNode节点返回:同层编号vari:integer;tmp:TTreeNode;begini:=0;tmp:=inNode;while tmpnil dobegintmp:=tmp.getPrevSibling;i:=i+1;end;Result:=i;end;function TCtrlTree.GetGlobeNumCode(inNode: TTreeNode): string;功能:产生已存在节点对应的全局编号入口参数:inCode:TTreeNode节点返回:全局编号varnocode:string;tmp:TTreeNode;begintmp:=inNode;nocode:=IntToStr(GetNumInSameLevel(tmp);while tmp.Level0 dobegintmp:=tmp.Parent;nocode:=inttostr(GetNumInSameLevel(tmp)+.+nocode;end;Result:=nocode;end;function TCtrlTree.LocatOrGenerateNode(inNumCode: String): TTreeNode;功能:根据提供的全局编号进行定位,如路径不全,则创建路径在定位过程产生的节点的Text为Temp最终返回对应于全局编号的子节点入口参数:inNumCode:String为全局编号返回:全局编号对应的字节点vari,j:Cardinal;NumInLevel:integer;tmp:TTreeNode;par:TTreeNode;begintmp:=nil;i:=1;while i=StrLen(PChar(inNumCode) dobegin/得到下一个点号的开始位j:=GetPosAtBound(inNumCode,i);/得到在兄弟节点中的排行数NumInLevel:=StrToInt(Copy(inNumCode,i,j-i+1);/定位父节点par:=GetParent(Copy(inNumCode,1,j);/得到对应的节点tmp:=LocateNodeInLevel(par,numInLevel);i:=j+2;end;Result:=tmp;end;function TCtrlTree.GetParent(inNumCode: String): TTreeNode;功能:根据提供的全局编号找到对应的父节点如果是第一层的节点,则父节点为nil入口参数:inNumCode:String为全局编号返回:全局编号对应的父节点varGoStep:integer;i:integer;j:integer;k:integer;SearChInNode:TTReeNode;ReturnNode:TTReeNode;begin/是第一层节点,返回nil;k:=GetTheLastPointPos(inNumCode);if k=0 thenbeginResult:=nil;Exit;end;/是第二层或第二层以上节点i:=1;SearchInNode:=Items.GetFirstNode;while i GetTheLastPointPos(inNumCode) dobeginj:=GetPosAtBound(inNumCode,i);GoStep:=StrToInt(Copy(inNumCode,i,j-i+1);if i=1 then /在第一层节点中搜索beginReturnNode:=SearchInNode;for k:=1 to GoStep-1 doReturnNode:=ReturnNode.getNextSibling;endelse /在第二层或第二层以上节点中搜索beginGoStep:=StrToInt(Copy(inNumCode,i,j-i+1);ReturnNode:=SearchInNode.ItemGoStep-1;end;SearchInNode:=ReturnNode;i:=j+2end;Result:=SearchInNode;end;function TCtrlTree.LocateNodeInLevel(parNode: TTReeNode;LevelCode: integer): TTReeNode;功能:根据父节点以及在兄弟节点中的编号找到对应的节点如果要创建兄弟及自己,则新创建的节点的Text为Temp入口参数:parNode: TTReeNode为父节点LevelCode: integer为编号返回:在parNode中编号为LevelCode的孩子节点vari:integer;j:integer;tmp:TTreeNode;tmps:TTreeNode;begin/父节点为空,是第一层节点tmp:=nil;if parNode=nil thenbegini:=1;tmps:=Items.GetFirstNode;while (tmpsnil) and (i=LevelCode) dobegintmp:=tmps;tmps:=tmps.getNextSibling;i:=i+1;end;i:=i-1;for j:=1 to LevelCode-i dotmp:=Items.AddChild(nil,Temp);Result:=tmp;endelse /父节点不为空,正常处理beginif parNode.Count for i:= 1 to LevelCode-parNode.Count doItems.AddChild(parNode,Temp);Result:=parNode.ItemLevelCode-1;end;end;function TCtrlTree.GetPosAtBound(inString: String;inStart:Integer): Integer;功能:根据起始位置找到下一个.的前一个位置入口参数:inString: String节点编号inStart: Integer当前处理层次的起始位置返回:当前处理层次的结束位置vartmp:Char;pos:integer;beginpos:=inStart+1;while pos =1 dobegintmp:=inStringpos;if tmp=. thenBreakelsepos:=pos-1;end;Result:=pos;end;function TCtrlTree.InsertAsFinalChild(inString: String; inNode: TTreeNode):TTReeNode;功能:为当前节点插入一个孩子节点,位置为最后入口参数:inString: String为节点编号为待插入节点的字符串inNode: TTreeNode,当前节点beginResult:=Items.AddChild(inNode,inString);end;function TCtrlTree.InsertAsPreviousSibling(inString: String;inNode: TTreeNode):TTReeNode;功能:为当前节点插入一个前导的兄弟节点入口参数:inString: String为节点编号为待插入节点的字符串inNode: TTreeNode,当前节点beginResult:=Items.AddChildFirst(inNode,inString);end;end./delphi中treeview图标if TreeView.Itemsi.parent = nil thenbeginTreeView.Itemsi.ImageIndex := 0;end;if TreeView.Itemsi.Text = 退出 thenbeginTreeView.Itemsi.ImageIndex := 3;end;通过这种方式,设几种图标都行/在Delphi 6 IDE中,最显眼的新功能可能就是Object TreeView了。由于Delphi 6比较新,介绍它的资料还很少,所以很多人不知道如何使用Object TreeView,甚至嫌它太占地方而将它关闭了。事实上,当窗体上的构件越来越多的时候,你才会发现Object TreeView的强大功能。 以下是关于Object TreeView功能的一个简单介绍,其主要内容取自Mastering Delphi 6,我只是做一些整理和翻译的工作罢了。希望能对使用Delphi 6的朋友有所帮助。 关于Object TreeView的使用 1在Delphi 5的Data Module设计器中,使用了一个TreeView来显示非可视构件(如DataSet, Fields,Actions等等)之间的关系。Delphi 6中的Object TreeView则是它的扩展,它不仅对于Data Module,对于普通窗体和其他对象也可用。 如果Object TreeView当前不可见,而又想使用它,选择View | Object TreeView即可。 2Object TreeView使用层次视图来显示窗体上的构件以及它们之间的关系。最典型的是父子关系:例如,所有Form上的构件都是Form的子节点;又如,放一 个Panel到窗体上,再往Panel上面放一个Button,则Button会成为Panel的子节点。 Object TreeView,Object Inspector和窗体设计器是同步的。这就是说,在窗体上选择一个构件,则在Object TreeView中也会自动选中该构件,同时Object Inspector中显示该构件的属性和事件;同理,在Object TreeView中选择一个构件,窗体上也会同时选择该构件,在Object Inspector中显示其属性和事件。因此,Object Inspector可以看作窗体设计器的一个增强,在窗体上构件比较多,而且彼此覆盖的时候,在Object Inspector种选择一个构件往往比从窗体上面选择或者从Object Inspector的列表中查找要方便快捷。 3Object TreeView中还能够显示构件之间的其他关系。举例如下: (1)用Menu Designer设计菜单,所有菜单项按其在菜单中的层次显示在MainMenu节点下; (2)对于数据集构件,例如TTable,Object TreeView还会显示它在运行时刻将产生的一些对象,例如Session,Alias等,但由于它们是运行时刻才产生的,所以无法编辑它们的属性,在 Object TreeView中这些对象将以无名称的节点和一个特殊的图标来表示,并且在选中这些节点的时候,Object Inspector中没有属性可以编辑。 (3)对于ListView,Object TreeView还会列出它的Columns,在Columns上面点击右键,就可以直接编辑各个列。这比从Form Designer上面选择ListView,再选择Columns Editor来的方便。其他一些构件也有类似的情况,例如HeaderControl的Sections,CoolBar的Bands, StatusBar的Panels,都可以从快捷菜单中直接编辑。(ToolBar默认情况下虽然没有将Buttons列出,但是仍然可以在从 Object TreeView中ToolBar的快捷菜单中建立Button和Separator。) 4想精确设置构件之间的Contains关系,Object TreeView也是一个有用的工具。可以通过下面的试验来验证: (1)在窗体上面放置一个Panel; (2)从构件面板上选择

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论