有点麻烦,给我写 Email 吧
[email protected]
[email protected]
解决方案 »
- 求ExpandFileName函数汇编代码
- 好急!解决了给50分,怎么用DELPHI编写程序控制POS显示屏的显示?
- 新手问:delphi7 生成的exe文件在其他机器上不能执行,应该如何做?
- 给个例子吧
- 使用ADO时如何使用Oralce的Connection Pooling功能?
- 如何才能实现IE地址栏的功能呢?
- delphi编译的32位Dll怎么转成64位Dll(有源码)
- 关于DBGRID的显示
- 如何做出窗体的淡入效果,就好像白浪语音板一样的效果
- delphi6中如何方便地实现把xml文件传送到webservice服务器?
- 请教delphi中执行SQL语句,对SQL语句的字符串长度是否有限制?
- 我如何在一个Project中调用其它Project中的共有变量
使用动态数组,首先分离出每行\(如果没有\ 就 取全部) 前的数据,然后下面的层次依次类推
其实这个问题,就是个动态多纬数组的建立问题,不过每新建一个,都要到前面判断,以便决 定是否合并或者填充新的纬数值 如果像你的例子,层次最多为 4,可 这样定义
ab:array of array of array of array of string;
ab[0,0,0,0]:='媒体'; //层次一
ab[1,0,0,0]:='电子游戏'; //层次一
ab[1,1,0,0]:='制作公司'; //层次二
ab[1,1,1,0]:='Internet Explorer '; //层次三
ab[1,1,1,1]:='媒体'; //层次四
ab[1,2,0,0]:='帝国时代'
2 将数据填充到 treeview
1 XXX (NULL)
2 YYY (NULL)
3 WWW 2
4 UUU 3
………… ………
然后以下的程序我已经在"?关于动态生成TREEVIEW的问题!"给出了.
前提是数据是规则排列的——一个分枝结束了才是另一个分枝!
递归函数传递两个参数,父节点 Handle,和子节点数据。
暂时先说这些,等有空了我再慢慢编程序。
源数据:
媒体
电子游戏
电子游戏\制作公司
电子游戏\制作公司\Internet Explorer
电子游戏\制作公司\Internet Explorer\媒体
电子游戏\帝国时代将上面的数据改成:
媒体
电子游戏
^t制作公司
^t^tInternet Explorer
^t^t^t媒体
^t帝国时代就是说,每个"\"变成一个^t (^t就是制表符,ASCII:09H),并只保留最后一个"\"分隔开的项(看上面的示意应会明白吧).,然后存入一个Steam或文件中,并用TTreeview的Loadfromstrea或loadfromfile即可搞定。
to lbsoft
不知下面的例子合不合你意。unit Unit1;interfaceuses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ComCtrls;type
TForm1 = class(TForm)
TreeView1: TTreeView;
Memo1: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation{$R *.DFM}procedure DelimiterStrs(const Delimiters, S: string;RetS:TStrings);
var
dess:string;
po:integer;
dellen,nowlen:integer;
begin
RetS.Clear; dess := s; po := pos(Delimiters,dess);
dellen := length(Delimiters);
nowlen := length(dess); while (po > 0) do
begin
RetS.Add(trim(copy(dess,1,po-1)));
nowlen := nowlen - (po + dellen - 1);
dess := copy(dess,po+dellen,nowlen);
po := pos(Delimiters,dess);
end; if dess <> '' then RetS.Add(dess);
end;procedure StringsToTreeView(ts:TStrings;TV:TTreeView);
var
i:integer;
PaNode, Node:TTreeNode;
HasIns:Boolean;
txt:string;
begin
PaNode := nil;
Node := TV.Items.GetFirstNode; for i := 0 to ts.Count - 1 do
begin
txt := ts[i];
HasIns := false; while assigned(Node) do
begin
if (CompareText(Node.Text,txt) = 0) then
begin
HasIns := true;
PaNode := Node;
Node := Node.getFirstChild;
break;
end;
Node := Node.GetNextSibling;
end; if not HasIns then
begin
PaNode := TV.Items.AddChild(PaNode,Txt);
Node := nil;
end;
end;
end;procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
ls:string;
ts:TStrings;
begin
ts := TStringList.Create;
TreeView1.Items.BeginUpdate;
try
TreeView1.Items.Clear;
for i := 0 to Memo1.Lines.Count - 1 do
begin
ls := trim(Memo1.Lines[i]);
if ls <> '' then
begin
DelimiterStrs('\',ls,ts);
StringsToTreeView(ts,TreeView1);
end;
end; finally
TreeView1.Items.EndUpdate;
ts.Free;
end;
end;end.
用TStringStream很简单就解决了