Forms Pascal-程序在窗体切换时挂起

Forms Pascal-程序在窗体切换时挂起,forms,pascal,lazarus,Forms,Pascal,Lazarus,我目前正在开发一个简单的应用程序来计算10秒内的点击次数,从两个不同的文件中读取名称和分数,然后以另一种形式以各种形式显示这些名称和分数。然而,游戏结束后,“游戏结束了!”消息出现,排行榜表格出现,但没有按钮,看起来奇怪的平坦,似乎使程序崩溃 以下是表单的外观: 这就是它的实际外观: 可在下面找到用于显示表单的代码: if TimeLeft=0 then begin Form2.Timer1.Enabled:=False;{Disable timer}

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

以下是表单的外观:

这就是它的实际外观:

可在下面找到用于显示表单的代码:

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;

我觉得这一切都很奇怪,因为当窗体显示时,实际上没有任何东西运行,所以它应该在这之前崩溃(如果有的话),并且不会出现崩溃消息。有什么想法吗?如果需要更多信息,请询问。新的在这个网站上

虽然循环是无止境的,但循环只包含一个命令:

while not EOF(LeaderboardNamesFile) do
            LineCount:=LineCount+1;{Increment to allow for EOF marking of the score}
因此,您的程序计数行计数,但不从文件中实际读取任何数据。因此,文件永远不会成为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);

这不会把名字读入分数变量吗?我不知道这有什么帮助。事实上,我更困惑的是,有人还在用Pascal编写代码@西尔亚:很多人用帕斯卡语编码。它们中的大多数都是Delphi或FreePascal版本,但也有其他Pascal版本。请再读一遍答案:如果你什么都不读,EOF永远不会变成真的,所以循环永远不会停止
EOF
代表“文件结束”,只有在实际读取文件时才能到达。因此,要么使用另一个标准来停止循环,要么完全删除循环,或者从文件中实际读取一些内容,直到到达其结尾,如答案所示。