我正在使用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;
但它不起作用。)我需要帮助,我可以提供其他详细信息。 谢谢。
答案 0 :(得分:3)
你忘记设置控件的位置; Left
和Top
。最好通过调用SetBounds
来完成。此外,未指定维度,但AutoSize
属性会对其进行处理(虽然它不会变得可见)。
答案 1 :(得分:1)
如果您已在images
数组中设置了图像的位置(正如您在te other answer的注释中所述),则第一个代码应该正常工作。
检查以下内容:
Width
的{{1}}和Height
属性是否已设置?请注意,更改它们时,将清除ImageList。Form3.Lista
实例与TForm3
变量所指向的实例相同。 (你不应该使用那个全局表单变量!)现在,关于将图像从一个复制到另一个的第二段代码:
Form3
是一个(本地)声明的变量吗?然后a1
(Form3.a1
)和TForm3
(变量)的私有字段不一样!a1
复制到Form3.a1
。不应该那样反过来吗?Images[i]
是否有空?我还能想到两种可能性,但两者都会导致异常,所以我想这些并非如此:
Form3.a1
不包含或没有足够的图像,Form3.Lista
不包含位图,而是gif,jpeg或其他图形类型。