我创建了一个TImage数组,但它们不可见

时间:2012-05-07 15:13:55

标签: delphi delphi-7 visible timage

我正在使用Delphi,我创建了一个包含10个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;但它不起作用。)

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

2 个答案:

答案 0 :(得分:3)

你忘记设置控件的位置; LeftTop。最好通过调用SetBounds来完成。此外,未指定维度,但AutoSize属性会对其进行处理(虽然它不会变得可见)。

答案 1 :(得分:1)

如果您已在images数组中设置了图像的位置(正如您在te other answer的注释中所述),则第一个代码应该正常工作。

检查以下内容:

  • ImageList Width的{​​{1}}和Height属性是否已设置?请注意,更改它们时,将清除ImageList。
  • 确保您查看的Form3.Lista实例与TForm3变量所指向的实例相同。 (你不应该使用那个全局表单变量!)

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

  • 问题的中途是Form3是一个(本地)声明的变量吗?然后a1Form3.a1)和TForm3(变量)的私有字段不一样!
  • 请注意,您要从a1复制到Form3.a1。不应该那样反过来吗?
  • 如果这确实是你想要的:Images[i]是否有空?

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

  • ImageList Form3.a1不包含或没有足够的图像,
  • 图片Form3.Lista不包含位图,而是gif,jpeg或其他图形类型。