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.顶部:=;等等。阿瑞索:是的,你可以。您只需传递一个对对象的真实引用,而不是包含其名称的字符串(如我所演示的)。