我定义了一个过程procedure aa(a:string;var a1,a2:sring)
调用为aa(edit1.text,edit2.text,edit3.text)
编译时出错,说类型不相同。
假设在过程是这样的
procedure aa(a:string;var a1,a2:sring)
..
..
a1:=substring(a,1,1);
a2:=substring(a,2,1);
end;
实际上是将a1的值给edit2.text,a2的值给edit3.text
如果在调用时定义两个string,在将这两个string赋给edit2.text和edit3.text就可以。
这是为何??
调用为aa(edit1.text,edit2.text,edit3.text)
编译时出错,说类型不相同。
假设在过程是这样的
procedure aa(a:string;var a1,a2:sring)
..
..
a1:=substring(a,1,1);
a2:=substring(a,2,1);
end;
实际上是将a1的值给edit2.text,a2的值给edit3.text
如果在调用时定义两个string,在将这两个string赋给edit2.text和edit3.text就可以。
这是为何??
edit2.text,edit3.text // 常数
begin
ShowMessage(s + ' ' + ss + ' ' + st) ;
end; names('12','23','34') ;//[Error] Unit13.pas(76): Constant object cannot be passed as var parameter
我调用过程aa(edit1.text,edit2.text,edit3.text)
edit2和3的值没有变化,如果我想这样调用,应该如何??
begin
ShowMessage(s + ' ' + ss + ' ' + st) ;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
names(Edit1.Text,Edit2.Text,Edit3.Text) ;
end;
我按着你的方法去定义:
procedure aa(a:string;const a1,a2:sring)
然后调用aa(Edit1.Text,Edit2.Text,Edit3.Text);
编译出错如下:
[Error] Unit1.pas(46): Left side cannot be assigned to实际上我的意思是要把计算出的s2值给edit2.text,s3值给edit3.text;
不用函数调用就是写成
edit2.text:=substring(edit1.text,1,1)
{{{{只是举例}}}}}
如果我要在函数中直接将计算值赋给edit2.text而显示出来,而不是通过一个定义的string再赋给edit2.text而显示出来.有没有办法?
begin
end;比如我在button.click(sender tobject)
var a1,a2,a3:string;
begin
a1:=edit1.text;
a2:=edit2.text;
a3:=edit3.text;
aa(a1,a2,a3);
end;
这样才对的!如果你想传递的是tedit(这个对象的话)
这样定义procdure aa (var a1,a2,a3:tedit);
beginend;
button1.click
begin
edit1.text:='dfd';
edit2.text:='dfd';
edit3.text:='dfdfdf';
end;
那么a1.text为dfd
a2.text为dfd
a3.text为dfdfdf
aa(edit1,edit2,edit3)