Delphi 如果存在 WriteLN,则 {Form1} 失败

Delphi {Form1} fails if WriteLN is present

我有一个 Delphi 代码,程序中有一个单元旁边有 {Form1}。该单元使用另一个单元,其中我有 try/except 程序并将消息写入屏幕。下面是详细解释的代码片段。

重要说明 1:我试图详细说明我的问题并重新发布。我希望这是清楚的。

重要说明 2:如果我删除异常中的 WriteLn(下面的第三个代码片段),即使从 GUI 调用代码也能正常工作

主程序

program PROGNAME;

uses
  Forms,
  View in 'FView.pas' {Form1},
  SubUnit in 'FSubUnit.pas';
begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  Form1.Left := Screen.WorkAreaLeft;
  Form1.Top := Screen.WorkAreaTop;
  Application.Run;
end

在Fview.pas我有

procedure TForm1.FileListBox1Click(Sender: TObject);
ReadData(filename);
end

在读取数据的 SUBUNIT 中我有

try
    Read(F, result);
  except  // IO error
    on E: EInOutError do
    begin
      writeln('No info is given default taken')
    end;
  end;

通常我的代码可以正常工作,如果出现带有上述警告的 IO 错误则跳过。如果我这样做并从 GUI 调用,我会收到一条屏幕消息 IOError 并且它不会在

上移动

这是一个常见问题吗?我需要取消那部分代码吗?

此行为是可执行的。

Writeln 将输出写入控制台。 GUI 应用程序(默认情况下)没有控制台。

因此,如果您在典型的 GUI 应用程序中执行 Writeln('No info...'),您告诉系统将 'No info...' 写入控制台,但没有控制台!因此 I/O 错误(我假设是 105)。

手动将控制台添加到您的 GUI 应用程序 (AllocConsole),或者——可能更好——改用 GUI 错误消息:ShowMessage('No info...')MessageBox(Handle, 'No info...', 'My App', MB_ICONERROR)