我可以将对象名称作为字符串操作,反之亦然吗? 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);
因为 TLabel
是 TControl
的后代,并且所有 TControl
都有 .Top
(等等)属性.
我可以将对象的名称作为字符串操作,反之亦然吗? 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);
因为 TLabel
是 TControl
的后代,并且所有 TControl
都有 .Top
(等等)属性.