加载图片

时间:2015-11-17 12:13:28

标签: delphi

我使用它来从文件中随机加载图像,但是一旦到达最后一张图像,它就会显示“无法打开文件" C:\ Users \ Misty \ Downloads \ PAT \ Ham.jpg"系统找不到指定的文件'

我的图像是名称1,2,3等,所以系统在哪里获得ham.jpg?

procedure TfrmGame.FormCreate(Sender: TObject);
begin
    arrPics[1] := 'Hen' ;
    arrPics[2] := 'Van' ;
    arrPics[3] := 'Pen' ;
    arrPics[4] := 'Cat' ;
    arrPics[5] := 'Fan' ;
    arrPics[6] := 'Hut' ;
    arrPics[7] := 'Cap' ;
    arrPics[8] := 'Dog' ;
    arrPics[9] := 'Hat' ;
    arrPics[10] := 'Ham' ;

    arrPath[1] := '1';
    arrPath[2] := '2';
    arrPath[3] := '3';
    arrPath[4] := '4';
    arrPath[5] := '5';
    arrPath[6] := '6';
    arrPath[7] := '7';
    arrPath[8] := '8';
    arrPath[9] := '9';
    arrPath[10] := '10';

   Randomize;
    Counter:=Random(10);
     sWord:=arrPics[Counter];
     imgTest.Picture.LoadFromFile(arrPath[Counter]+'.jpg');
     imgTest.Stretch := True ;
end;

procedure TfrmGame.btnNextClick(Sender: TObject);
var
Mark,RoundCounter:integer;
begin
Mark:=0;
RoundCounter:=0;
for RoundCounter:= 1 to 10 do
begin
if sWord=edtWord.Text then
begin
Inc(Mark)
end;
Randomize;
Counter:=Random(10);
  sWord:=arrPics[Counter];
    imgTest.Picture.LoadFromFile(arrPath[Counter]+'.jpg');
  imgTest.Stretch := True ;
edtWord.Clear;

1 个答案:

答案 0 :(得分:1)

如果n是正整数,那么random(n)会将大于或等于的随机数返回到0 和< em>严格小于 n 。由于您的数组索引是1到10,因此您需要该范围内的随机数,但random(10)会生成0到9之间的数字。因此,Counter有时可能是0,这意味着您尝试访问arrPath[0],这超出了该数组的范围。在这种情况下,它正在内存中访问它之前的项目,即arrPics[10]。您是否在设置中关闭了实时范围检查?如果你打开它,那么Delphi将为超出范围的数组索引生成异常。

要获得1到10之间的随机数,请使用:Counter := random(10) + 1。或者,更简单地说,您可以使用Counter := RandomRange(1, 10);