代码之家  ›  专栏  ›  技术社区  ›  Nathan Campos

使用其他窗体的控件

  •  0
  • Nathan Campos  · 技术社区  · 15 年前

    我有一个关于拉撒路的项目,有两种形式, 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”

    在输出窗体单元的顶部,我有:

    unit Output;
    

    当我试图从FormMain单位呼叫它时( OutputForm: Output; )我得到这个错误:

    类型定义错误

    我该怎么办?

    2 回复  |  直到 15 年前
        1
  •  2
  •   Mason Wheeler    15 年前

    正如rruz所说,您需要一个对声明outputform的单元的引用。基本思路如下:

    每个表单都有一个表单声明文件(Delphi中的dfm;我认为Lazarus称它们为lfms)和一个相应的对象pascal单元文件(.pas),您可以在其中放置它们的代码。这是正常的 单元 就编译器而言,文件与其他文件一样。唯一的区别是它有一个与之相关联的形式。

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

    编辑: 不太确定要如何处理该编辑,但不需要重新声明outputform。它应该已经在输出单元中声明为全局变量。您只需要将输出添加到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)
      ...
    
        2
  •  0
  •   dummzeuch Stijn Sanders    15 年前

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