使用另一种形式的控制

时间:2009-12-28 16:54:35

标签: delphi forms lazarus

我在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;

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

  

未找到标识符“OutputForm”

在OutputForm单元的顶部,我有:

unit Output;

当我尝试从FormMain单元(OutputForm: Output;)调用它时,我收到此错误:

  

类型定义错误

我必须做什么?

2 个答案:

答案 0 :(得分:2)

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

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

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

编辑:不太确定您要对该编辑做什么,但您不需要重新声明OutputForm。它应该已经在Output单元中声明为全局变量。您只需要将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)
  ...

答案 1 :(得分:0)

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