Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 我是否可以将对象的名称作为字符串进行操作,反之亦然?拉扎勒斯/德尔福_String_Delphi_Object_Lazarus - Fatal编程技术网

String 我是否可以将对象的名称作为字符串进行操作,反之亦然?拉扎勒斯/德尔福

String 我是否可以将对象的名称作为字符串进行操作,反之亦然?拉扎勒斯/德尔福,string,delphi,object,lazarus,String,Delphi,Object,Lazarus,我是否可以将对象的名称作为字符串进行操作,反之亦然?拉扎勒斯/德尔福 procedure mapping(objectname: string; referobject_bl:integer; referobjectname: string; shift_value: integer); begin objectname.Top:=Round(Form2.Height/40); objectname.Width:=Round(Form2.Width/4); objectname.Le

我是否可以将对象的名称作为字符串进行操作,反之亦然?拉扎勒斯/德尔福

procedure mapping(objectname: string; referobject_bl:integer; referobjectname: string; shift_value: integer);
begin
  objectname.Top:=Round(Form2.Height/40);
  objectname.Width:=Round(Form2.Width/4);
  objectname.Left:=Round(Form2.Width/2-Form2.Width/4/2);
  objectname.Height:=Round(Form2.Height/32);
end;  

mapping('Form2.Label0',0,'',0); 

不,这绝对不行。组件的
名称
只是该对象的一个属性-它不构成对底层对象的任何类型的引用。如果要修改对象,需要传递对该对象的引用。例如:

procedure mapping(ALabel : TLabel);
begin
  ALabel.Top:=20;
end;
你会称之为:

mapping(Form1.Label0);
如果您希望该方法适用于任何
t控件
,则可以将声明范围扩大:

procedure mapping(AControl : TControl);
begin
  AControl.Top:=20;
end;
称这一点仍然有效:

mapping(Form1.Label0);

由于
TLabel
TControl
的后代,并且所有
TControl
都有
.Top
(etc)属性。

否,这绝对不起作用。组件的
名称
只是该对象的一个属性-它不构成对底层对象的任何类型的引用。如果要修改对象,需要传递对该对象的引用。例如:

procedure mapping(ALabel : TLabel);
begin
  ALabel.Top:=20;
end;
你会称之为:

mapping(Form1.Label0);
如果您希望该方法适用于任何
t控件
,则可以将声明范围扩大:

procedure mapping(AControl : TControl);
begin
  AControl.Top:=20;
end;
称这一点仍然有效:

mapping(Form1.Label0);

由于
TLabel
TControl
的后代,并且所有
TControl
都有
.Top
(etc)属性。

您试图解决什么问题?我有一个过程,可以在表单上动态定位我的对象(按钮、标签等)。Objectname-此过程的参数之一。因此,您不是在寻找ToObject的变量名,而是希望通过“组件名”在TForm上查找TComponent,对吗?如果是的话,那么你正在寻找一些东西,你可以试着编译它,很快发现它不起作用。我知道我的代码不起作用。但我仍然必须动态地将对象放置在表单上,我应该将它们的名称发送给过程,然后以某种方式处理它们。您试图解决什么问题?我有一个过程,它可以动态地在表单上定位我的对象(按钮、标签等)。Objectname-此过程的参数之一。因此,您不是在寻找ToObject的变量名,而是希望通过“组件名”在TForm上查找TComponent,对吗?如果是的话,那么你正在寻找一些东西,你可以试着编译它,很快发现它不起作用。我知道我的代码不起作用。但我仍然必须动态地将对象放置在表单上,我应该将它们的名称发送给过程,然后以某种方式处理它们。我想用几十个具有不同参数的对象(位置偏移、引用对象、要处理的对象)调用我的过程。我可以吗?”因为我是从Form2.Label0.Top开始的:=。。。;(以及高度、左侧、宽度),Form2.标签1.顶部:=;等等。阿瑞索:是的,你可以。您只需传递一个对对象的实际引用,而不是一个包含其名称的字符串(如我所演示的)。我想用几十个具有不同参数的对象(位置偏移、引用对象、要使用的对象)调用我的过程。我可以吗?”因为我是从Form2.Label0.Top开始的:=。。。;(以及高度、左侧、宽度),Form2.标签1.顶部:=;等等。阿瑞索:是的,你可以。您只需传递一个对对象的真实引用,而不是包含其名称的字符串(如我所演示的)。