我可以将对象名称作为字符串操作,反之亦然吗? Lazarus/Delphi

Could I manipulate name of object as string and vice versa? Lazarus/Delphi

我可以将对象的名称作为字符串操作,反之亦然吗? Lazarus/Delphi

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); 

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

procedure mapping(ALabel : TLabel);
begin
  ALabel.Top:=20;
end;

你会这样称呼:

mapping(Form1.Label0);

如果您希望该方法适用于任何 TControl,您可以使声明更广泛:

procedure mapping(AControl : TControl);
begin
  AControl.Top:=20;
end;

并且调用它仍然有效:

mapping(Form1.Label0);

因为 TLabelTControl 的后代,并且所有 TControl 都有 .Top(等等)属性.