我使用它来从文件中随机加载图像,但是一旦到达最后一张图像,它就会显示“无法打开文件" 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;
答案 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);
。