0

我有一个关于 Lazarus 的项目,它有两个表单,FormMain并且OutputForm. 我想OutputMemo使用以下代码在第二个表单上显示输出:

procedure FormMain.ShowButton(Object: Sender);
begin 
  if SaveDialog1.Execute then 
    AProcess := TProcess.Create(nil); 
  AProcess.CommandLine := 'gcc.exe ' + SaveDialog1.FileName + ' -o ' TextField23.Text; 
  AProcess.Options := AProcess.Options + [poWaitOnExit, poUsePipes]; 
  AProcess.Execute; 

  OutputForm.OutputMemo.Lines.BeginUpdate; 
  //OutputForm.OutputMemo.Lines.Clear; 
  OutputForm.OutputMemo.Lines.LoadFromStream(AProcess.Output); 
  OutputForm.OutputMemo.Lines.EndUpdate; 

  AProcess.Free; 
end;

但是当我尝试编译这段代码时,我得到了错误:

找不到标识符“OutputForm”

在 OutputForm 单元的顶部,我有:

unit Output;

当我尝试从 FormMain unit( OutputForm: Output;) 调用它时,我得到了这个错误:

类型定义错误

我必须做什么?

4

2 回答 2

2

正如 RRUZ 所说,您需要引用声明 OutputForm 的单元。这是基本思想:

每个表单都有一个表单声明文件(Delphi 中的 DFM;我认为 Lazarus 称它们为 LFM)和一个相应的 Object Pascal 单元文件 (.PAS),您可以在其中放置它们的代码。就编译器而言,这是一个普通的单元文件,就像其他任何文件一样。唯一的区别是它有一个与之关联的表单。

打开 OutputForm 的代码并查看顶部。它会说类似“unit OutputForm;”的内容 复制单元名称,并将其粘贴到FormMain单元的uses子句中,然后它应该可以工作了。

编辑: 不太确定你想用那个编辑做什么,但你不需要重新声明 OutputForm。它应该已经在输出单元中声明为全局变量。您只需将 Output 添加到您的 uses 子句中,因此您最终会得到类似于以下内容的内容:

unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Output; //on a separate line to show it's not a system lib

type
  TFrmMain = class(TForm)
  ...
于 2009-12-28T17:10:38.623 回答
0

嗯,“输出”不是帕斯卡的保留字吗?

于 2009-12-28T19:22:10.947 回答