With ATree do
begin
Node:=Items.AddChild(nil,'上海证券交易所');
ANode:=Items.AddChild(Node,'上海指数');
New(P); P^.Value:=0; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'上海A股');
New(P); P^.Value:=1; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'上海B股');
New(P); P^.Value:=2; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'上海基金');
New(P); P^.Value:=3; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'上海债券');
New(P); P^.Value:=4; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
Node.ImageIndex:=5; Node.SelectedIndex:=5;
Node:=Items.AddChild(nil,'深圳证券交易所');
ANode:=Items.AddChild(Node,'深圳指数');
New(P); P^.Value:=5; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'深圳A股');
New(P); P^.Value:=6; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'深圳B股');
New(P); P^.Value:=7; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'深圳基金');
New(P); P^.Value:=8; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'深圳债券');
New(P); P^.Value:=9; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
Node.ImageIndex:=5; Node.SelectedIndex:=5;
Node:=Items.AddChild(nil,'分类板块');
Node.ImageIndex:=10; Node.SelectedIndex:=10;
end;
begin
Node:=Items.AddChild(nil,'上海证券交易所');
ANode:=Items.AddChild(Node,'上海指数');
New(P); P^.Value:=0; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'上海A股');
New(P); P^.Value:=1; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'上海B股');
New(P); P^.Value:=2; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'上海基金');
New(P); P^.Value:=3; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'上海债券');
New(P); P^.Value:=4; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
Node.ImageIndex:=5; Node.SelectedIndex:=5;
Node:=Items.AddChild(nil,'深圳证券交易所');
ANode:=Items.AddChild(Node,'深圳指数');
New(P); P^.Value:=5; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'深圳A股');
New(P); P^.Value:=6; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'深圳B股');
New(P); P^.Value:=7; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'深圳基金');
New(P); P^.Value:=8; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
ANode:=Items.AddChild(Node,'深圳债券');
New(P); P^.Value:=9; P.ValueType:=isMarket; ANOde.Data:=P;
ANode.ImageIndex:=6; ANode.SelectedIndex:=6;
Node.ImageIndex:=5; Node.SelectedIndex:=5;
Node:=Items.AddChild(nil,'分类板块');
Node.ImageIndex:=10; Node.SelectedIndex:=10;
end;
解决方案 »
- rs485串口通讯
- 请问安装程序用的是一个窗体么
- 请教怎么不通过ODBC连接同一目录下的ACCESS数据库
- 关于在64机上运行软件会退出来的问题
- 谁有dxDBGrid控件 for delphi5的?加急.................
- 散分,最近很矛盾,不知道何去何从,散分!
- 朋友散分。
- TForm.Create(Application) 与 Tfrom.Create(self)的区别是什么?
- 如何向ORCLED的表中插入如'a,b,c'这样的字符(及字符中含有","号)
- Kylix Enterprise 下載地址。
- vc调delphi的dll怎么老是出错?给位大侠帮忙啊!
- 还是一个公历转农历的问题。关于农历的闰月.小妹急急急。
type
TTreeData=Record
Value: Integer;
ValueType: TValueType;
end;
var
Ln: TTreeNode;
P: ^TTreeData;
TValueType=(IsBlock,IsExpr,IsMarket,IsMainMap);
Q_find .SQL.Clear ;
Q_find .SQL.Add('select * from GSJGGL order by DWDM');
Q_find .Prepare ;
Q_find .Open; Q_find.First;
Frame_YGDA1.TreeV_GSJG.Items.Clear;
with Frame_YGDA1 do
with Q_find do
while not Q_find .eof do //生成目录
begin
if length(Q_find .Fields[0].AsString)=2 then //代码为2位——一级单位(公司)
node[1]:=TreeV_GSJG.Items.AddChild(nil,'['+Fields[0].asstring+'] '+Fields[1].asstring);
if length(d_table.Q_find .Fields[0].AsString)=4 then //代码为4位——二级单位(各分厂)
node[2]:=TreeV_GSJG.Items.AddChild(node[1],'['+Fields[0].asstring+'] '+Fields[1].asstring);
if length(d_table.Q_find .Fields[0].AsString)=6 then //代码为6位 ——三级单位(处、部门)
node[3]:=TreeV_GSJG.Items.AddChild(node[2],'['+Fields[0].asstring+'] '+Fields[1].asstring);
if length(d_table.Q_find .Fields[0].AsString)=8 then //代码为8位 ——四级单位(科室、车间)
node[4]:=TreeV_GSJG.Items.AddChild(node[3],'['+Fields[0].asstring+'] '+Fields[1].asstring);
d_table.Q_find .Next ;
end;
http://www.csdn.net/cnshare/soft/12/12436.shtm
我先试试!试过后定加分!
:)
写的很急,变量名没有取的很规范,大家可以自己改改unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, ComCtrls;type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
TreeView1: TTreeView;
N11: TMenuItem;
N21: TMenuItem;
N31: TMenuItem;
N41: TMenuItem;
N111: TMenuItem;
N121: TMenuItem;
N131: TMenuItem;
N141: TMenuItem;
N1311: TMenuItem;
N1321: TMenuItem;
N13111: TMenuItem;
N13121: TMenuItem;
N13131: TMenuItem;
N211: TMenuItem;
N221: TMenuItem;
N411: TMenuItem;
N421: TMenuItem;
N4111: TMenuItem;
N431: TMenuItem;
N441: TMenuItem;
N451: TMenuItem;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure MenuToTree(m: TMenuItem; tn: TTreeNode; t: TTreeView);var
Form1: TForm1;implementation{$R *.dfm}procedure MenuToTree(m: TMenuItem; tn: TTreeNode; t: TTreeView);
var
i: integer;
node: TTreeNode;
begin
for i := 0 to m.Count - 1 do
begin
node := t.Items.AddChild(tn, m.Items[i].Caption);
MenuToTree(m.Items[i], node, t);
end;
end;procedure TForm1.Button1Click(Sender: TObject);
begin
MenuToTree(MainMenu1.Items, nil, TreeView1);
end;end.
procedure TMDIChild.LoadTreeView;
var
strsql,tid:string;
begin
try DataModule3.ADOTable3.open;
DataModule3.ADOTable3.Locate('DTname',RzComboBox1.Text,[lopartialkey]);
tid:=inttostr(DataModule3.ADOTable3.FieldByName('id').value);
strsql:='select * from T where TypeID='+tid;
DQ.Active :=false;
DQ.SQL.Clear ;
DQ.SQL.Add(strsql);
DQ.Active :=true;
DQ.Filtered :=true;
DQ.Filter := 'Parent=0';
U_DiGui(0,RzTreeView1.TopItem );//从当前0层开始递归建树
except
showmessage('字典里没有数据!');
end;
end;
procedure TMDIChild.U_DiGui(parentID:Cardinal;ParentNode:TTreeNode);
var
tmpTBData:array of TableData;
i,j:integer;
tmpNode:TTreeNode;begin
j:=DQ.RecordCount;
setlength(tmpTBData,j);//保存递规上一层结点值
for i:=0 to j-1 do begin
tmpTBData[i].ID := Cardinal(DQ.fieldbyname('ID').value);
tmpTBData[i].Name := DQ.fieldbyname('Name').value;
tmpTBData[i].ParentID := Cardinal(DQ.fieldbyname('Parent').value);
DQ.Next;
end;
for i:=0 to j-1 do begin //递规调用建立所有结点
tmpNode:=RzTreeView1.Items.AddChild(ParentNode,tmpTBData[i].Name);
// tmpNode.ImageIndex:=2;
new(pData);
pData^.ID:=tmpTBData[i].ID;
tmpNode.Data:=pData;
DQ.Filter := 'Parent=' + IntToStr(Integer(tmpTBData[i].ID));
if DQ.RecordCount >0 then begin
U_DiGui(tmpTBData[i].ID,tmpNode );
end;
end;
end;
问个小问题:如果你的node[1]或node[2]不存在,length(d_table.Q_find .Fields[0].AsString)=6时怎么办?
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, Buttons, ComCtrls,Menus;type
TErrorTreeForm = class(TForm)
ErrorTreeView: TTreeView;
BitBtn1: TBitBtn;
BitBtn2: TBitBtn;
BitBtn4: TBitBtn;
BitBtn3: TBitBtn;
BitBtn6: TBitBtn;
Image1: TImage;
Label1: TLabel;
LabeledEditName: TEdit;
Label2: TLabel;
procedure FormShow(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure BitBtn6Click(Sender: TObject);
procedure LabeledEditNameKeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure ErrorTreeViewChange(Sender: TObject; Node: TTreeNode);
private
{ Private declarations }
public
NewNode: TTreeNode;
{ Public declarations }
end;var
ErrorTreeForm: TErrorTreeForm;implementation{$R *.dfm}procedure TErrorTreeForm.FormShow(Sender: TObject);
begin
NewNode:= TTreeNode.Create(Nil); //
NewNode:= Nil; // 定义NewNode
end;procedure TErrorTreeForm.BitBtn1Click(Sender: TObject); //建同级目录
var
CurNode: TTreeNode;
begin
LabeledEditName.Text:= '';
if ErrorTreeView.Selected<> nil then
begin
CurNode:= ErrorTreeView.Selected;
NewNode:= ErrorTreeView.Items.AddChild(CurNode.Parent,'');
end
else
NewNode:= ErrorTreeView.Items.AddChild(nil,'');
NewNode.Selected:= True;
LabeledEditName.SetFocus;
end;procedure TErrorTreeForm.BitBtn2Click(Sender: TObject); //建下级目录
var
CurNode: TTreeNode;
begin
LabeledEditName.Text:= '';
if ErrorTreeView.Selected= nil then Exit;
CurNode:= ErrorTreeView.Selected;
NewNode:= ErrorTreeView.Items.AddChild(CurNode,'');
CurNode.Expand(True);
NewNode.Selected:= True;
LabeledEditName.SetFocus;
end;procedure TErrorTreeForm.BitBtn3Click(Sender: TObject);
begin
Close;
end;procedure TErrorTreeForm.BitBtn4Click(Sender: TObject);
var
CurNode,TempNode: TTreeNode;
begin
LabeledEditName.Text:= '';
if ErrorTreeView.Selected= nil then Exit;
CurNode:= ErrorTreeView.Selected;
if not CurNode.IsFirstNode then //删除前移动焦点,默认前移
TempNode:= CurNode.GetPrev
else
TempNode:= CurNode.GetNext;
CurNode.Delete;
NewNode.Parent.Expand(True);
NewNode:= TempNode;
end;procedure TErrorTreeForm.FormCloseQuery(Sender: TObject;
var CanClose: Boolean);
begin
NewNode.Free; //关闭时释放资源
end;procedure TErrorTreeForm.BitBtn6Click(Sender: TObject);
begin
//故障分类每级用两个字符表示一级,依次累加
end;procedure TErrorTreeForm.LabeledEditNameKeyUp(Sender: TObject;
var Key: Word; Shift: TShiftState);
begin
if NewNode = nil then Exit;
NewNode.Text:= LabeledEditName.Text; //输入时TreeView同时更新
if key = 13 then //回车时TreeView设置焦点
begin
NewNode.Selected:= True;
ErrorTreeView.SetFocus;
end;
end;procedure TErrorTreeForm.ErrorTreeViewChange(Sender: TObject;
Node: TTreeNode);
begin
LabeledEditName.Text:= '';
if ErrorTreeView.Selected= nil then Exit;
NewNode:= ErrorTreeView.Selected;
LabeledEditName.SetFocus;
end;end.
cTreeCodeFormat='44';//编码格式:XXXX XXXX
cTreeMaxLevel=3; //最大编码层次
cTreeRootTxt:=''; //树的根节点名称
procedure TForm1.loadTree; //初始化树
var curID,nodeTxt:string;
level,chindex,cnode,num:integer;
mynode:array[0..3]of TTreenode;
begin
Screen.cursor:=crHourGlass;
Tree.Enabled:=true;
level=0;
Tree.items.clear;
mynode[level]:=Tree.items.add(Tree.topitem,cTreeRootTxt);
mynode[level].imageIndex:=0;
//遍历数据表利用编码字记录排序规律,依次添加树节点(注意记录一定要排序)
with TreeDB do begin
try
if not Active then open;
first;
while not eof do begin
curid:=trim(FieldByName('debj').AsString);
nodeTxt:=curId+'_'+Trim(FielByName('depx').AsString);
level:=GetNodeLevel(cTreeCodeFormat,curID); //取得代码层次数
if level>0 then begin
mynode[level]:=Tree.items.addchild(mynode[level-1],nodeTxt);
mynode[level].imageindex:=1;
end;
next;
end;
finally;
close;
end;
mynode[0].expand(False);
Screen.cursor:=crHourGlass;
end;
end;Function TForm1.GetNodelevel(sFormat,sCode:string):integer;
var
i,level,iLen:integer;
begin
Level:=-1;
iLen:=0;
if(sFormat<>'')and(sCode<>'')then
for i:=1 to Length(sFormat)do //分析编码格式找出当前代码层次
begin
iLen:=ilen+StrtoInt(sFormat[i]);
if Length(sCode)=iLen then
begin
level:=i;
break;
end;
end;
result:=level;
end;