最好有列子
谢谢
谢谢
解决方案 »
- 请教自定义文件结构(Record)在读取时如何容错
- 国庆回家陪老爸老妈的来报个名
- 考验高手,quickrep的分页问题
- 菜鸟求救一个简单问题。很急!!
- 在新的一年里,我们要继续紧密团结在CSDN论坛的周围,高举"有言则发,无水也灌"理论的伟大旗帜,认真贯彻落实"人过言留"的要求,坚持"知
- 用ExcelApplication打开一个Excel文件后,当Excel关闭后,怎么知道它关闭了?
- 请帮忙看看这段代码应该怎么修改呢?
- 文件导入到数据库问题?解决立即给分,谢谢!
- 一个判断按扭是否可用的问题,急,请各位高手帮忙。
- 一则消息,与大家共享。
- 控件问题.如何做到再程序运行的选中控件让控件的周围显示一个8个黑点的矩形,就是和设计的时候一样那个8个黑色小矩形围城的大矩形
- 怎样把一个表一栏里的内容加入到combobox里?解决就给分!
var
node: TTreeNode;
DocName, code: string;
p: pcode;
begin
tree.Items[1].DeleteChildren; with Data.ADOQuery do begin
if Active then Close;
SQL.Clear;
SQL.Add('select * from table'
+'order by Code');
Open;
First;
while not Eof do begin
code := FieldByName('CODE').asString;
DocName := FieldByName('_NAME').asString;
new(p);
p.code := code;
node := tree.Items.AddChildObject(tree.Items[1], DocName, p);
node.ImageIndex := 13;
Next;
end;
Close;
end;
end;仅供参考~~~~~~~~
procedure TZoneSelection.addCounty();
var
newNode : TTreeNode;
begin
qryTemp.Active := false;
qryTemp.First;
while qryTown.Eof = false do
begin
newNode := tv.Items.AddChild(tv.Items.Item[0],qryTown.FieldByName('NAME').AsString);
newNode.date := qryTown.FieldByName('id').AsInteger;
newNode.StateIndex := 0;
newNode.HasChildren := true;
qryTemp.Next;
end;
end;
procedure Tda.xlmcClick(Sender: TObject);
var
nodecel : array[0..10] of TtreeNode;
sqlstr,s1,s2:string;
tempstr :array[0..10] of string;
tempBoolean :array[0..10] of Boolean;
Nodetitle :TtreeNode;
begin
if (xlmc.text='') or (wz.text='') then begin
exit;
end;
screen.Cursor:=crHourGlass;
if Sender<>cmdok then
key.Text:='0';
TreeView1.Items.Clear;
TreeView1.Items.BeginUpdate;
new(nodeid);
dispose(nodeid);
nodecel[0] := TreeView1.Items.AddFirst (nil, xlmc.text);
nodecel[0].ImageIndex := 0;
nodecel[0].SelectedIndex := 3;
if wz.text<>'全部' then
sqlstr:='select 首桩号,首桩米,尾桩号,尾桩米,id from 绿化档案 where 道路='''+copy(xlmc.text,1,pos(':',xlmc.text)-1)+''' and 位置='''+wz.text+''' order by 首桩号,首桩米,尾桩号,尾桩米'
else
sqlstr:='select 首桩号,首桩米,尾桩号,尾桩米,绿化档案.位置,id from 绿化档案 INNER JOIN lib_位置 ON 绿化档案.位置 = lib_位置.位置 where 道路='''+copy(xlmc.text,1,pos(':',xlmc.text)-1)+''' order by 首桩号,首桩米,尾桩号,尾桩米,lib_位置.序号';
ADODataSet1.commandtext:=sqlstr;
ADODataSet1.open;
while not ADODataSet1.eof do
begin
tempBoolean[1]:=false;
s1:=ADODataSet1.FieldByName('首桩号').AsString;
s2:=ADODataSet1.FieldByName('首桩米').AsString;
if ADODataSet1.FieldByName('首桩米').asinteger=0 then
sqlstr:= s1
else
if ADODataSet1.FieldByName('首桩米').asinteger>0 then
sqlstr:= s1 +'(+'+s2+')'
else
sqlstr:= s1 +'('+s2+')';
sqlstr:= sqlstr+'--';
s1:=ADODataSet1.FieldByName('尾桩号').AsString;
s2:=ADODataSet1.FieldByName('尾桩米').AsString;
if ADODataSet1.FieldByName('尾桩米').asinteger=0 then
sqlstr:= sqlstr+s1
else
if ADODataSet1.FieldByName('尾桩米').asinteger>0 then
sqlstr:= sqlstr+s1 +'(+'+s2+')'
else
sqlstr:= sqlstr+s1 +'('+s2+')';
if wz.text='全部' then
begin
if (tempstr[1] <>sqlstr) then
begin
tempstr[1] :=sqlstr;
nodecel[1] := TreeView1.Items.AddChild(nodecel[0], tempstr[1]);
nodecel[1].ImageIndex := 1;
nodecel[1].SelectedIndex := 3;
end;
new(nodeid); nodeid^:=ADODataSet1.FieldByName('id').asinteger;
Nodetitle :=TreeView1.Items.AddChildObject(nodecel[1], ADODataSet1.FieldByName('位置').AsString,nodeid);
Nodetitle.ImageIndex := 2;
Nodetitle.SelectedIndex := 3;
end
else
begin
if (tempstr[1] <>sqlstr) then
new(nodeid); nodeid^:=ADODataSet1.FieldByName('id').asinteger;
Nodetitle :=TreeView1.Items.AddChildObject(nodecel[0], sqlstr,nodeid);
Nodetitle.ImageIndex := 2;
Nodetitle.SelectedIndex := 3;
end;
ADODataSet1.Next;
end;
nodecel[0].Expanded := True;
ADODataSet1.close;
ADODataSet1.CursorLocation:=clUseClient;
ADODataSet1.CursorType:=ctDynamic;
ADODataSet1.LockType:=ltOptimistic;
TreeView1.Items.endUpdate;
screen.Cursor:=crDefault;
end;
至于递归过程的写法,我有一个,
http://expert.csdn.net/Expert/topic/1719/1719886.xml?temp=.6894342
其实很简单的,
一般,在data中都是记录ID
给你一小段
var
ObjectID :Integer;
while not ADOQ2.Eof do
begin
ObjectID :=ADOQ2.FieldByName('ID').AsInteger;
P :=Pointer(ObjectID);
with Nodes.AddChild(Node, ADOQ2.FieldByName('ModelName').AsString) do
begin
Data :=P;
ImageIndex :=2;
end;
ADOQ2.Next;
end;
type
ParamGroupNode = ^TParamGroupNode;
TParamGroupNode = Record
sSysDataID: string;
sSysDataGroup: string;
end;
-----------------------------procedure TFrmSysBaseDataList.FormShow(Sender: TObject);
var
TVNode: ParamGroupNode;
Node: TTreeNode;
begin
inherited;
SQL := 'select * from SysDatalist'; CDSFillTree.Close;
CDSFillTree.CommandText := 'select Distinct sSysDataGroup,sSysDataID from SysDatalist';
CDSFillTree.Open;
CDSFillTree.First;
while not CDSFillTree.Eof do
begin
New(TVNode);
TVNode.sSysDataId := CDSFillTree.FieldValues['sSysDataId'];
TVNode.sSysDataGroup := CDSFillTree.FieldValues['sSysDataGroup'];
Node := DataListTreeView.Items.AddObject(nil, TVNode.sSysDataGroup, TTreeNode(TVNode));
CDSFillTree.Next;
Node.ImageIndex := 0;
Node.SelectedIndex := 1;
end;
CDSFillTree.Close;
Node := DataListTreeView.Items[0];
DataListTreeView.Select(Node);
CDSSysDataList.Filtered := False;
CDSSysDataList.Filter := 'sSysDataId = ''' + ParamGroupNode(Node.Data).sSysDataID + '''';
CDSSysDataList.Filtered := True;
end;
俺想说一点儿!New的结构体指针在窗体destory时别忘了要Dispose掉哦!
type
TXxxx = record
a : string[10];
b : string[16];
end;
var
tt : ^TXxxx;for i := 0 to 100 do
begin
getmem(tt, 26);
tmpnode := TreeList.AddChild(nil, 'hello');
tmpnode.data := tt;
end;
不能释放tt