摘要: 在数据库中建一张表,包含:NodeName,NodeId,ParentId 3个字段,具体什么含义,一看就知了。过程如下:procedure TFRM_channel.formtreenode(parentid:string;TreeView1: TTreeView;parentnode:TTreeNode;ADOQuery1:TADOQuery);var i:integer; treenode:TTreeNode;begin i:=0; ADOQuery1.First; while not ADOQuery1.Eof do begin if ADOQuery1.FieldByName( 阅读全文
posted @ 2012-02-21 14:58 IT少年 阅读(1944) 评论(0) 推荐(0) 编辑
摘要: 根据数据表的内容生成TreeView树状结构,通常的做法就是从顶级开始,然后逐项递归查询遍历生成。这种方法在实现上容易做到,也很容易想到,但是效 率比较低,因为数据库的检索(SQL语句需要解释执行,而且是对数据库文件进行操作)还是比较耗时的,尤其是树的层次较多,节点较多的情况。这里我要介绍 的方法是以空间换取时间,只进行一次数据库检索,提取出全部数据,然后一次生成TreeView树状结构。通过SQL语句,让返回的记录按照父节点ID、 节点ID进行排序,这样保证每次当前要添加的节点记录的父节点都已经添加到了TreeView树中,剩下的工作就是如何在TreeView树中找到父节 点。这里我采用了一 阅读全文
posted @ 2012-02-21 11:28 IT少年 阅读(1613) 评论(0) 推荐(0) 编辑
摘要: procedure TForm1.Button1Click(Sender: TObject);varMyTreeNode1, MyTreeNode2: TTreeNode;beginwith TreeView1.Items dobeginClear; { remove any existing nodes }MyTreeNode1 := Add(nil, 'RootTreeNode1'); { Add a root node }{ Add a child node to the node just added }AddChild(MyTreeNode1,'ChildNo 阅读全文
posted @ 2012-02-21 11:04 IT少年 阅读(2311) 评论(0) 推荐(0) 编辑
摘要: 生成树型结构有2种方法:1.动态生成树结点2.静态生成树结点这里暂不讨论动态生成树,先实现静态生成!所谓静态生成树结点是指通过遍历数据源的方式一次性把所有树结点全部加载,说起生成树避免不了谈起数据库结构的设计。数据库设计的方法有2种:1.单编号法单编号法是以每个类为统一编号,如其有子类,则顺着该编号向后排。如水果编号为001,则苹果为水果的一类,则应为001001等等,这种方法易于统计,但不易于维护!如:想要将苹果类变为其它的类,且苹果类下有N层,那会是一件比较麻烦的事情!2.双编号法双编号也就是我们经常说的用ID与PARENTID来表示其父子关系,维护起来比较方便,但遍历会稍稍复杂一些!无论 阅读全文
posted @ 2012-02-21 11:01 IT少年 阅读(937) 评论(0) 推荐(0) 编辑
摘要: 今天重点学习了TreeView的使用方法,基本的已经写了,现在主要想说的是如何显示数据库的资料,今天只是做了个较简单的例子,一个父节点下显示数据库中某个field的值。代码如下:procedure TMainForm.TreeviewShow(Sender: TObject);varnode1,subnode1: TTreeNode;i: Integer;beginTreeview1.Selected := nil;node1 := Treeview1.Items.AddFirst(nil,'user');ADOTable1.Active := True;while not A 阅读全文
posted @ 2012-02-21 10:18 IT少年 阅读(1179) 评论(0) 推荐(0) 编辑
摘要: 要注意以下几个方面,先后顺序未必正确,有可能多设几次1.设置ToolBar可以显示文字ToolBar.ShowCaption := True;2.设置ToolButton大小ImageList.WidthImageList.Height3.设置菜单关联4.设置运行时显示图标(这个是关键)ToolButton.Menuitum.ImageIndex要保证MenuItem所在的MainMenu没有设置Image,否则,Menu中会同时显示Icon 阅读全文
posted @ 2012-02-17 16:39 IT少年 阅读(8819) 评论(0) 推荐(0) 编辑
摘要: 近日在写程序时,发现对key的值含义又生疏了很多,列举出来以加深记忆:在onKenDown里边key= 13 // 回车键; key= 9 // Tab如果在OnKenPress中,应该Key = #13 Key = #9;vk_LButton = $01; vk_RButton = $02; vk_Cancel = $03; vk_MButton = $04; { NOT contiguous with L & RBUTTON } vk_Back = $08; //退br> vk_Tab = $09; vk_Clear = $0C; vk_Return = $0D; vk_Sh 阅读全文
posted @ 2012-02-16 10:02 IT少年 阅读(1080) 评论(0) 推荐(0) 编辑
摘要: 5.LookUp方法搜索符合一定条件的记录,如果找到返回指定的字段数值function Lookup(const KeyFields:String;const KeyValues:Variant;const ResultFields:String):Variant;KeyFileds 参数是个字符串,它指定了搜索的字段.可以是一个或多个字段名,中间要用分号隔开KeyValues参数是Variant类型,可以包含任何数据类型,如果KeyFields参数指定搜索多个字段,那么KeyValues 参数需要用VarArrayOf函数生成Variant类型数组;如果找到符哈记录,返回字段名由Result 阅读全文
posted @ 2012-02-14 15:27 IT少年 阅读(2081) 评论(0) 推荐(0) 编辑
摘要: 最基本的方法就是frxReport1.FindObject。然后把返回的对象强制转换成它的类型,当然,在报表中必须真的有这么个东东。如改变一个Tfrxmemoview的内容,可以这样写TfrxMemoView(frxReport1.FindObject('memo1')).Text:='jade';还可以用TfrxReportPage的FindBand方法,这个方法的参数是Band类,如报表抬头就可以直接使用这个方法,因为抬头一个页中只有一个,如果有多个同样的类。则不能使用这种方法。如果要使用TfrxreportPage,一般可以用这样的代码TfrxReport 阅读全文
posted @ 2012-02-10 09:12 IT少年 阅读(945) 评论(0) 推荐(0) 编辑
摘要: 以下是我在网上收集的这是FastReport的主控件。它包含了调入、保存、预览和打印报表的方法。每个TfrReport控件只能包含一个单独报表。TfrReport属性描 述DataSet-联接到一个TfrxxxDataSet。这个数据源的记录数定义需多少时间这个报表才能被构建和打印。(参考:ReportType属性)GrayedButtonsFalse如果为True,设计器和预览窗口的工具栏将显示为灰色。InitialZoompzDefault定义预览的初始缩放值。MDIPreviewFalse显示预览窗口为一个MDI子窗口。ModalPreviewTrue如果为True,预览窗口为模式方.. 阅读全文
posted @ 2012-02-10 09:11 IT少年 阅读(7430) 评论(0) 推荐(0) 编辑