Forms Pascal-程序在窗体切换时挂起
我目前正在开发一个简单的应用程序来计算10秒内的点击次数,从两个不同的文件中读取名称和分数,然后以另一种形式以各种形式显示这些名称和分数。然而,游戏结束后,“游戏结束了!”消息出现,排行榜表格出现,但没有按钮,看起来奇怪的平坦,似乎使程序崩溃 以下是表单的外观: 这就是它的实际外观: 可在下面找到用于显示表单的代码:Forms Pascal-程序在窗体切换时挂起,forms,pascal,lazarus,Forms,Pascal,Lazarus,我目前正在开发一个简单的应用程序来计算10秒内的点击次数,从两个不同的文件中读取名称和分数,然后以另一种形式以各种形式显示这些名称和分数。然而,游戏结束后,“游戏结束了!”消息出现,排行榜表格出现,但没有按钮,看起来奇怪的平坦,似乎使程序崩溃 以下是表单的外观: 这就是它的实际外观: 可在下面找到用于显示表单的代码: if TimeLeft=0 then begin Form2.Timer1.Enabled:=False;{Disable timer}
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
代表“文件结束”,只有在实际读取文件时才能到达。因此,要么使用另一个标准来停止循环,要么完全删除循环,或者从文件中实际读取一些内容,直到到达其结尾,如答案所示。