Pascal - 程序在表单切换时挂起

时间:2017-03-28 23:17:10

标签: forms pascal lazarus

我目前正在开发一个简单的应用程序来计算10秒内的点击次数,从两个不同的文件中读取名称和分数,然后以另一种形式显示各种名称和分数。然而,在游戏结束后,游戏结束了!'消息出现,Leaderboard表单出现,但没有按钮,看起来奇怪平坦,似乎使程序崩溃。

这是表单的外观: Leaderboard Form

这就是它的实际外观:Leaderboard Error in Form

显示表格的代码如下:

if TimeLeft=0 then
     begin
          Form2.Timer1.Enabled:=False;{Disable timer}
          ShowMessage('Game Over!');{Message to show upon termination condtion being met}
          Leaderboard.Show;{Show Leaderboard Form}
          Form2.Hide;{Hide game}
          Reset(LeaderboardNamesFile);{Open file}
          while not EOF(LeaderboardNamesFile) do
                LineCount:=LineCount+1;{Increment to allow for EOF marking of the score}
          LeaderboardScoresArray[LineCount]:=Score;{Add score to array of scores}
     end;

排行榜表单上的分数显示按钮中包含的代码:

var Counter : Integer;
begin
     Counter:=1;
     Memo1.Lines.add(LeaderboardNamesArray[Counter]+' - '+IntToStr(LeaderboardScoresArray[Counter]));
end;

我发现这一切都非常奇怪,因为在显示表单时实际上没有运行,因此它应该在此之前崩溃,并且不会出现崩溃消息。有任何想法吗?如果需要更多信息,请询问。这个网站上的新内容!

1 个答案:

答案 0 :(得分:3)

while循环是无限的,循环只包含一个命令:

while not EOF(LeaderboardNamesFile) do
            LineCount:=LineCount+1;{Increment to allow for EOF marking of the score}

因此,您的程序会计算LineCount,但不要从文件中读取任何数据。所以文件永远不会成为EOF(“文件结束”)。你需要做这样的事情:

Reset(LeaderboardNamesFile);{Open file}
while not EOF(LeaderboardNamesFile) do
begin
    LineCount:=LineCount+1;{Increment to allow for EOF marking of the score}
    readln(LeaderboardNamesFile, Score);
    LeaderboardScoresArray[LineCount]:=Score;{Add score to array of scores}
end;
CloseFile(LeaderboardNamesFile);