2009-12-28 118 views
0

我有一个Lazarus项目有两种形式,FormMainOutputForm。我想在此代码的第二形式展现在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; 

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

Identifier not found "OutputForm"

在OutputForm单元的顶部我有:

unit Output; 

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

Error in type definiition

我该怎么办?

+1

尝试将OutputForm的单位添加到uses子句。 – RRUZ 2009-12-28 17:00:41

+0

如何做到这一点? – 2009-12-28 17:01:34

+0

更新了我的回复。 – 2009-12-28 18:29:18

回答

2

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

每个表单都有一个表单声明文件(Delphi中的DFM;我认为Lazarus称它们为LFM)和一个相应的Object Pascal单元文件(.PAS),在其中放置它们的代码。就编译器而言,这是一个正常的单元文件。唯一的区别是它有一个与之相关的形式。

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

编辑:不太清楚你想要做的修改,但你不需要重新声明OutputForm。它应该已经在输出单元中声明为全局变量。你只需要输出添加到您的使用条款,所以你会类似于这样结束了:

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) 
    ... 
+0

请现在看看这个问题。 – 2009-12-28 17:48:08

0

嗯,不是“输出” Pascal的保留字?

+1

你问或说? – 2009-12-28 19:25:19

+0

我在暗示一个可能的答案。我对拉撒路知之甚少,对此并不了解。 – dummzeuch 2009-12-30 22:07:34