Delphi程序/函数创建帮助

Delphi程序/函数创建帮助,delphi,Delphi,我正在尝试创建一个函数来清理我的一些代码 而不是必须使用一大堆FOR循环来完成这项工作 Form1.Image1.Picture.LoadFromFile(); Form1.Image2.Picture.LoadFromFile(); Form1.Image3.Picture.LoadFromFile(); Form1.Image4.Picture.LoadFromFile(); 有没有办法做到这一点 procedure UpdateCardImage(Value,Value2,ImageX

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

而不是必须使用一大堆FOR循环来完成这项工作

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给出了一个错误,表示“未定义标识符:'图像'”

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]);

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]);
可以是如下代码:

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;
可以是如下代码:

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;

Form1.Image1不等同于Form1.Image1[1] 在你的情况下,你必须使用
(Form1.FindChildControl('Image'+IntToStr(ImageX))作为TImage)

Form1.Image1不等同于Form1.Image1[1] 在你的情况下,你必须使用
(Form1.FindChildControl('Image'+IntToStr(ImageX))作为TImage)

好吧,当我发布这篇文章时,我已经连续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的道具。

好吧,当我发布这个时,我已经连续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;

阿贝利斯托有一个有趣的答案,看起来会有用,但没有…阿贝利斯托建议的道具。

好的,布莱恩。。。我真的没有看到问题所在

最好的办法似乎是:

   if bFile then
   begin
     Form1.TImage(FindComponent(ImageX)).Picture.LoadFromFile('images\' +sFileName+ '.JPG');
   end;
我假设Form.Image[x]是一个TImage,您需要在代码中添加Tcomponent库。
请参阅FindComponent的帮助。

好的,布赖恩。。。我真的没有看到问题所在

最好的办法似乎是:

   if bFile then
   begin
     Form1.TImage(FindComponent(ImageX)).Picture.LoadFromFile('images\' +sFileName+ '.JPG');
   end;
我假设Form.Image[x]是一个TImage,您需要在代码中添加Tcomponent库。

请参阅FindComponent的帮助。

不,这不是问题。。。delphi给了我一个未定义的标识符问题@Image[ImageX]@Bryan:表单上有Image[]属性吗?类似于“属性映像[索引:整数]:TImage read GETMAGE write SetImage;”的内容??您应该将该错误添加到您的问题中。不,我没有…….我尝试添加该错误并获得生成[error]Unit1.pas(38):已发布属性“Image”不能是数组[error]Unit1.pas(38)类型:字段或方法标识符应为[error]Unit1.pas(38):预期的字段或方法标识符您无法发布它-它必须是public/protected/private.Unit1.pas(38):预期的字段或方法标识符[Error]Unit1.pas(38):预期的字段或方法标识符仍然作为private/public获取它不是问题。。。delphi给了我一个未定义的标识符问题@Image[ImageX]@Bryan:表单上有Image[]属性吗?类似于“属性映像[索引:整数]:TImage read GETMAGE write SetImage;”的内容??您应该将该错误添加到您的问题中。不,我没有…….我尝试添加该错误并获得生成[error]Unit1.pas(38):已发布属性“Image”不能是数组[error]Unit1.pas(38)类型:字段或方法标识符应为[error]Unit1.pas(38):预期的字段或方法标识符您不能发布它-它必须是公共的/受保护的/私有的。Unit1.pas(38):预期的字段或方法标识符[Error]Unit1.pas(38):预期的字段或方法标识符仍然作为私有的/公共的。我想你们没有理解的是一个事实,即图像[ImageX]是问题所在。。。delphi给出了一个错误,表示“未定义标识符:'图像'”;我可能应该说。。。。我很累很累…谢谢你提醒我案例陈述:-p我想你们已经有一段时间没有抓住这个事实了…图像[ImageX]是问题所在。。。delphi给出了一个错误,表示“未定义标识符:'图像'”;我可能应该说。。。。我很累很累…谢谢你提醒我case语句:-p我已经有一段时间没有在将来编写代码了,请提前报告任何错误,否则人们可能会认为你的代码已经编译并运行。如果你想知道你希望这段代码做什么,我会很感兴趣。for循环的用途是什么?如果您使用@Abelisto中的修复程序,看起来您正在多次将jpg文件加载到同一个映像中。将来,请提前报告任何错误,否则人们可能会认为您的代码已编译并运行。了解您希望此代码执行的操作会很有意思。for循环的用途是什么?如果您使用@Abelisto的修复程序,看起来您正在多次将jpg文件加载到同一个图像中。叮叮叮叮,我们是赢家@Bryan-这是因为
FindChildControl
搜索
TWinControl
,文档中应该提到它。不过,您可以轻松地调整函数,使其在
控件中循环。丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁丁@Bryan-这是因为
FindChildControl
搜索
TWinControl
,文档中应该提到它。不过,您可以轻松地调整函数,使其在
控件中循环。