Delphi程序/功能创建帮助

时间:2011-01-27 22:09:51

标签: delphi

我正在尝试创建一个清理我的代码的函数......

而不是必须使用一堆垃圾来完成这个....

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发出错误信息'未定义标识符:'图像';

5 个答案:

答案 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的帮助。