DELPHI 更改 属性 存储在变量中的对象

DELPHI Change Property of Object stored in Variable

有没有办法改变存储在变量中的 TImage 的 属性?

我有一个函数,它在 FigureSelectedName 变量中写入 TImageName 属性,并将字段名称写入 FieldSelected变量。

现在我的问题是:

FieldSelectedName.top
FieldSelectedName.left

这在 Delphi 中给出了错误(非法限定符

function moveFigure(FigName:String; FieldName:String):boolean;
var
  x:Integer;
  y:Integer;
begin
  if (FigureSelected=true) and (FieldSelected=true) then
   begin
     x := strtoint(FieldSelectedName[2]);
     y := Ord(FieldSelectedName[1])-64;

     FigureSelectedName.top  := 80 + (x * 70);
     FigureSelectedName.left := 80 + (y * 70);
   end;
end;

System.Classes.TComponent.FindComponent 可用于在已知其名称的表单中查找组件。

  • 检查找到的是否真的是 TImage

  • 使用 TImage 属性和方法


procedure TForm1.Button1Click(Sender: TObject);
var
  comp: TComponent;
  img: TImage;
begin
  comp := FindComponent('Image1');
  if comp is TImage then begin
    img := TImage(comp);
    img.Left := 0;
    img.Top := 0;
  end;
end;

你的方法应该这样写,FindComponent方法才能工作。

function moveFigure(FigName:String; FieldName:String): Boolean;
var
  x:Integer;
  y:Integer;
  comp: TComponent;
  img: TImage;
begin
  //Result := False;
  if FigureSelected and FieldSelected then
  begin
    x := strtoint(FieldSelectedName[2]);
    y := Ord(FieldSelectedName[1])-64;

    comp := Form1.FindComponent(FieldSelectedName);
    if comp is TImage then begin
      img := TImage(comp);
      img.Left := 80 + (y * 70);
      img.Top := 80 + (x * 70);
      //Result := True;
    end;
  end;
end;

但是方法有很多问题:

  • 方法的参数 FigName:StringFieldName:String 从未在方法主体中使用

  • 您确定要在图像名称中查找的坐标永远只有一位数长吗?

  • Ord(FieldSelectedName[1]): Char 的序数对于 Y 轴

  • 看起来像是一个奇怪的值
  • 该方法被声明为返回 Boolean 但没有为 Result

  • 提供值

将系统从在变量中使用 TImage 名称更改为在变量中使用 TImage 指针就成功了。

FigureSelectedImage: TImage;
FieldSelectedImage:  TImage;

然后使用变量和普通标识符工作正常。

FigureSelectedImage.Top := ...