TTreeNode的标注(15分)

  • 主题发起人 主题发起人 3h
  • 开始时间 开始时间
3

3h

Unregistered / Unconfirmed
GUEST, unregistred user!
建立一个TreeView,内有TreeNode,例如
c:/
windows
system
command
wps
abc
等,加入NODE时用
addchildobject(node,command,'c:/windows/command');
其中node是加入windows时的NODE,
如何在点中command时得到'c:/windows/command'的结果呢?
 
首先,你添加新节点的语法是错误的,可能编译都通不过。
addchildobject方法的第三个参数是一个指针,写入后可通过TreeNode.Data来访问。新节点的添加过程应这样写:
procedure TForm1.Button1Click(Sender: TObject);
var
P: PString;
begin
new(p);
p^ := 'c:/windows/command';
with TreeView1.Items do
begin
addchildobject(node,'command',p);
end;
end;
当点中command节点时,返回的字符串应这样取:
function GetNodeString: string;
var
p: PString;
begin
p := TreeView1.Selected.Data;
Result := p^;
end;
 
TTreeview.selected.data
 
我开始由于用PChar('c:/windows/command')的方式误导了我,现在已经OK。
再请教,PString & ^String有什么区别?这两者都可以用在上面例程中。
为什么上面一个要用NEW()而下面一个不用?
 
PString = ^AnsiString;
这两者都是指针
如果你用类似下述代码, 当然pstring也不需要new就能访问,不过访问的是s而已。
var
ps: PString;
s: string;
begin
ps:=@(s[1]);
end;
 
我明白了,原来上面一个要NEW,是因为要取得一个新的空间使用,
而下者仅需要一个地址而已,因此不必NEW,多谢大家的帮助。
 
我明白了,原来上面一个要NEW,是因为要取得一个新的空间使用,
而下者仅需要一个地址而已,因此不必NEW,多谢大家的帮助。
 

Similar threads

后退
顶部