我正在尝试创建一个清理我的代码的函数......
而不是必须使用一堆垃圾来完成这个....
Form1.Image1.Picture.LoadFromFile();
Form1.Image2.Picture.LoadFromFile();
Form1.Image3.Picture.LoadFromFile();
Form1.Image4.Picture.LoadFromFile();
是一种做这样事情的方法
procedure UpdateCardImage(Value,Value2,ImageX : Integer);
var
i,i2 : integer;
begin
for i := 2 to Value do
begin
for i2 := 98 to Value2 do
begin
if Value2 = 99 then
begin
Form1.Image[ImageX].Picture.LoadFromFile('images\' + IntToStr( i + 30 - 5) + '.JPG');
end;
if Value2 = 100 then
begin
Form1.Image[ImageX].Picture.LoadFromFile('images\' + IntToStr( 13 -1 + i ) + '.JPG');
end;
if Value2 = 104 then
begin
Form1.Image[ImageX].Picture.LoadFromFile('images\' + IntToStr(i -1 ) + '.JPG');
end;
if Value2 = 115 then
begin
Form1.Image[ImageX].Picture.LoadFromFile('images\' + IntToStr(i + 40 -2) + '.JPG');
end;
end;
end;
也
delphi发出错误信息'未定义标识符:'图像';
答案 0 :(得分:4)
Form1.Image1与Form1.Image [1]不等效 在你的情况下,你必须使用类似的东西 (Form1.FindChildControl('Image'+ IntToStr(ImageX))as TImage).Picture.LoadFromFile();
答案 1 :(得分:1)
if语句是问题所在。尝试创建一个计算或返回文件名的函数,这样你就可以去
了for i:=0 to 100 do
Form1.Image[ImageX].Picture.LoadFromFile('images\' + GetFilename(i));
即使你必须创建一个文件名和索引数组,这比使用if / case语句的循环要好。
const cFilenames : array[0..2] of string = ('one','two','three')
for i:=low(cFilenames) to high(cFilenames) do
Form1.Image[ImageX].Picture.LoadFromFile('images\' + cFilenames[i]);
答案 2 :(得分:0)
可能是以下代码:
procedure UpdateCardImage(Value,Value2,ImageX : Integer);
var
i,i2 : integer;
bFile : bolean;
sFileName : string;
begin
for i := 2 to Value do
for i2 := 98 to Value2 do
Begin
bFile := true;
Case Value2 of
99 : sFileName := IntToStr( i + 30 - 5);
100 : sFileName := IntToStr( 13 -1 + i );
115 : sFileName := IntToStr(i + 40 -2);
else bFile := False;
end;
if bFile then Form1.Image[ImageX].Picture.LoadFromFile('images\' +sFileName+ '.JPG');
end;
end;
答案 3 :(得分:0)
好吧,当我发布这个时,我已经连续工作了29个小时......对不起
我找到了自己的解决方案,并提供了一些Philnext的帮助
procedure UpdateCardImage(Value,Value2 : Integer; ImageX : String);
var
i,i2 : Integer;
sFileName : string;
bFile : boolean;
begin
for i := 2 to Value Do
for i2 := 98 to Value2 Do
Begin
bFile := true;
Case Value2 of
99 : sFileName := IntToStr( i + 30 - 5);
100 : sFileName := IntToStr(13 -1 + i );
104 : sFileName := IntToStr( i -1 );
115 : sFileName := IntToStr(i + 40 -2);
else bFile := False;
end;
if bFile then
begin
if ImageX = 'Image1' then
Form1.Image1.Picture.LoadFromFile('images\' +sFileName+ '.JPG');
if ImageX = 'Image2' then
Form1.Image2.Picture.LoadFromFile('images\' +sFileName+ '.JPG');
if ImageX = 'Image3' then
Form1.Image3.Picture.LoadFromFile('images\' +sFileName+ '.JPG');
if ImageX = 'Image4' then
Form1.Image4.Picture.LoadFromFile('images\' +sFileName+ '.JPG');
if ImageX = 'Image5' then
Form1.Image5.Picture.LoadFromFile('images\' +sFileName+ '.JPG');
if ImageX = 'Image6' then
Form1.Image6.Picture.LoadFromFile('images\' +sFileName+ '.JPG');
if ImageX = 'Image7' then
Form1.Image7.Picture.LoadFromFile('images\' +sFileName+ '.JPG');
end;
end;
end;
Abelisto有一个有趣的答案看起来会起作用但却没有......建议Abelisto的道具。
答案 4 :(得分:0)
好的布莱恩......我没有真正看到问题。
最好的方法似乎是:
if bFile then
begin
Form1.TImage(FindComponent(ImageX)).Picture.LoadFromFile('images\' +sFileName+ '.JPG');
end;
我认为Form.Image [x]是一个TImage,tou需要在代码中添加Tcomponent库。 请参阅FindCompoent的帮助。