我用如下方式,但取出来的是乱码!var t:string;
t:=string(treeview1.selected.data);用t:=string(treeview1.selected.data)^;
则报错:pointer type required
t:=string(treeview1.selected.data);用t:=string(treeview1.selected.data)^;
则报错:pointer type required
解决方案 »
- DBGridEh列排序
- ShellExecute如何调用word开启一个文档?
- 在MDI主窗体中放一张图片作为背景,怎么实现a ?
- 动态创建SPCOMM控件无法定义事件,急
- 一直对FOR循环语句不太熟练,前辈门能举些好例子让后辈真正认识这种语句的威力吗
- 关于字段对象的小问题!
- 如何在ServerSocket中强制断开一个ClientSocket的连接?
- 我想结交几个学delphi的朋友!
- 有没有较直接的方法删除STRINGGRID中所选中的一行??
- 要想在Delphi中让TMediaPlayer控件支持MPEG格式文件,我都需要装什么驱动程序?
- 数据集的过滤
- 求救,如何做web虚拟目录??????
t:=treeview1.selected.Text;用t:=treeview1.selected.Text;
var AllowChange: Boolean);
var
str:string;
i:integer;
a:integer;
j:integer;
begin
str:=node.text;
for i:=1 to length(str) do
begin
a:=pos('-',str);
if a>0 then
begin
rygh:=copy(str,1,a-1);
dmd.cx4.Close;
dmd.cx4.SQL.clear;
dmd.cx4.SQL.add('select 工号,姓名,部门 from ry where 工号='''+rygh+'''');
dmd.cx4.Open;
if dmd.cx4.RecordCount>0 then
begin
rygh:=dmd.cx4.fieldbyname('工号').asstring;
ryxm:=dmd.cx4.fieldbyname('姓名').asstring;
rybm:=dmd.cx4.fieldbyname('部门').asstring;
end;
end;
end;
end;
把dmd.cx4换成adoquery1
一个例子
方法很多,这里介绍一种(源代码取自Delphi Help),
1、先定义一个记录类型及指针类型。
type
PMyRec = ^TMyRec;
TMyRec = record
FName: string;
LName: string;
end;2、给Data赋值时,这样写。注意MyRecPtr在未初始化以前是个空指针,必须先用New获得内存空间。procedure TForm1.Button1Click(Sender: TObject);
var
MyRecPtr: PMyRec;
TreeViewIndex: LongInt;
begin
New(MyRecPtr);
MyRecPtr^.FName := Edit1.Text;
MyRecPtr^.LName := Edit2.Text;
TreeViewIndex := StrToInt(Edit3.Text);
with TreeView1 do
begin
if Items.Count = 0 then
Items.AddObject(nil, 'Item' + IntToStr(TreeViewIndex), MyRecPtr)
else if (TreeViewIndex < Items.Count) and (TreeViewIndex >= 0) then
Items.AddObject(Items[TreeViewIndex], 'Item' + IntToStr(TreeViewIndex), MyRecPtr);
end;
end;3、取出Data的方法就很简单了,直接转化即可。需要注意的是指针类型成员的取值方法。
procedure TForm1.Button2Click(Sender: TObject);
begin
Label1.Caption := PMyRec(TreeView1.Selected.Data)^.FName + ' ' +
PMyRec(TreeView1.Selected.Data)^.LName;
end;
node.text 就是node.data 吗? 不会吧
如果楼主非要用那种方式可以先建立一个记录类型
type
pestr=^string;申明一个指针类型
.......
......
var
p:pestr; 定义了一个指针变量
t:string;
让后将p赋给了结点的data,现在我想将这个data的值赋给t
该怎么办?
node.text的值是字段A,node.data我给的是字段b,
我现在要取就是字段b
呵呵
pestr=^string
你这个STRING关键是谁的参考一下长风浪子写的吧
p:pestr;//定义了一个指针变量
p^:=FieldByName('p_id').AsString;//将p_id字段的值赋给p
Type inpter=recode
b:string;
end;
var
ptr:^Intptr;
在FORM的SHOW事件里写上
var
newnode:TTreenode;
begin
newnode:=Ttreenode.create(Treelist.Items);
table.first;
while not table.eof do begin
new(ptr);
Treelist.addobject(newnode,table.FieldbyName('a').asstring,ptr);
ptr.b:=table.fieldbyname('b').asstring;
table.next;
end;
end;
取出的时候这么写就可以了
t:=intptr(Treelist.selected.Data)^.b;
type
.....
pestr=^string;//申明一个指针类型
......
var
t:String;
tnode:TTreeNode
p:pestr;//定义了一个指针变量
p^:=FieldByName('p_id').AsString;//将p_id字段的值赋给p
........
treeview1.Items.AddChildObject(ParentNode,FieldByName('p_name').AsString,p);
tnode:=treeview1.selected;
t:=pestr(tnode.data)^;以上代码编译通过,但执行出错
for i:=1 to reco do
begin
new(p);
p^:=FieldByName('p_id').AsString;
treeview1.Items.BeginUpdate;
treeview1.Items.AddChildObject(ParentNode,FieldByName('p_name').AsString,p);
Treeview1.items.EndUpdate;
t1.MoveBy(1);
dispose(p);
type
.....
pestr=^string;//申明一个指针类型 //就是这句。
......定义一个记录类型是这样写的
Type inpter=recode
b:string;
end;//这是一个定义的记录类型。然后再
ptr:^Intptr;
创建一个数据库,为简化程序,我只创建两个数据库字段,定义如下: 字段名 类型 长度 Text C 10 LongID C 6 LongID字段实际上由两段组成,每一段3位,LongID只能表示1000条记录。将LongID定义为索引字段,存为c:\testtree\tree.dbf。编辑该DBF文件,新建一条记录,Text字段设为TOP,LongID字段设为“000”(3个“0”前为三个空格)。 3.创建演示程序 在Form1上放置TreeView1、Table1、PopupMenu1、Edit1、Edit2。TreeView1的PopupMenu属性设为PopupMenu1;Table1的DataBaseName属性设为c:\testtree,TableName属性设为tree.dbf,IndexFieldNames属性设为LongID;为PopupMenu1加选单项Add1和Del1,Caption分别为Add和Del;Edit1用来输入新节点的Text属性值,Edit2用来输入新节点的3位ID号。存为c:\testtree\treeunit.pas和c:\testtree\testtree.dpr。 在treeunit.pas的Type关键字后加入一行:Pstr:^string;{Pstr为字符串指针} 为Form1的OnCreate事件添加代码:
procedure TForm1.FormCreate(Sender: TObject);
var p:Pstr;Node:TTreeNode;
begin
with Table1,Treeview1 do
begin
open;
first;
new(p);{为指针p分配内存}
p^:=FieldByName(′LongID′).AsString;
Node:=Items.AddChildObject(nil,FieldByName(′Text′).AsString,p);
if HasSubInDbf(Node) then Items.AddChildObject(Node,′ ′,nil);{有子节点则加一个空子节点}
end;
end; HasSubInDbf为自定义函数,自变量为Node,检查节点Node有无子节点,有则返回True,反之返回False,并在TForm1的类定义里加入原型声明(其它自定义函数的原型也在TForm1的类定义里声明,不另作解释),函数代码如下: function TForm1.HasSubInDbf(Node:TTreeNode):Boolean;
begin
with Table1 do
begin
Table1.FindNearest([copy(Pstr(Node.Data)^,4,3)+′000′]);
result:=copy(FieldByName(′LongID′).AsString,1,3)=copy(Pstr(Node.Data)^,4,3);{如数据库里当前记录的LongID字段内容的前3位和节点Node的Data的后3位相同,则Node应该有子节点}
end;
end;
............................................