-5

我正在使用 Delphi,并创建了一个由十个类型的元素组成的数组,TImage其名称和结构如下:

Form3.images[1..max] of TImage. 

我试图以这种方式初始化它:

for x := 1 to max do
begin
  images[x] := TImage.Create(Form3);
  images[x].AutoSize := True;
  images[x].Name := 'image' + IntToStr(x);
  images[x].Visible := true;
  images[x].Parent := Form3;
end;

之后,我尝试将另一个变量(称为 Form3.a1:TImage)的内容放入数组的每个元素中。

我尝试按照以下说明执行此操作:

for i := 1 to max do
begin
  Form3.Images[i]:=Form3.a1;             // ( Form3.a1: TImage) <- this is visible
end;

(我不知道之前使用说明是否正确)之后我更改了数组图像的位置:

//Form3.square:TShape

x := Form3.square.Left;
y := Form3.square.Top;
Form3.Images[1].Top := y + 70;
Form3.Images[1].Left := x + 60;
...
Form3.Images[1].Top := y + 10;
Form3.Images[1].Left := x + 50;

我为数组的每个图像设置了不同的位置,但是当我运行程序时,数组的图像不可见。我也尝试设置 Form3.square.visible=false 但没有任何变化。

这就是我要的:

  • a1在变量和数组变量之间具有相同的内容images,只改变位置
  • 使数组的图像可见(我试过images[x].Visible := true;但它不起作用)。

请我需要帮助,我可以提供其他详细信息。谢谢你。

4

2 回答 2

3

您忘记设置控件的位置;LeftTop。这最好通过调用来完成SetBounds。尺寸也没有指定,但由AutoSize属性处理(虽然它不需要它变得可见)。

于 2012-05-07T15:34:04.770 回答
1

如果您已经设置了图像在数组中的位置(正如您在其他答案images的评论中所述),那么第一个代码应该可以正常工作。

请检查以下内容:

  • ImageList的Width和属性是否设置?请注意,当您更改它们时,ImageList 会被清除。HeightForm3.Lista
  • 确保您查看的实例与变量指向的TForm3实例相同。Form3(无论如何,您都不应该使用该全局表单变量!)

现在,关于您将图像从一个复制到另一个的第二段代码:

  • a1当你写到一半的问题时,是一个(本地)声明的变量吗?那么Form3.a1(这是一个私有字段TForm3)和a1(变量)是不一样的!
  • 请注意,您正在从 复制Form3.a1Images[i]。不应该反过来吗?
  • 如果这确实是您想要的:是否Form3.a1有任何机会是空的?

我还能想到另外两种可能性,但两者都会导致异常,所以我想情况并非如此:

  • ImageListForm3.Lista没有或没有足够的图像,
  • 图像Form3.a1不包含位图,而是 gif、jpeg 或其他图形类型。
于 2012-05-07T17:41:21.763 回答