我在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单元(OutputForm: Output;
)调用它时,我收到此错误:
类型定义错误
我必须做什么?
答案 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中的保留字吗?