0

FormMain私は 2 つのフォームを持つ Lazarus のプロジェクトを持っていOutputFormます。OutputMemo次のコードを使用して、2 番目のフォームに出力を表示したいと思います。

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

うーん、「出力」は Pascal の予約語ではないでしょうか。

于 2009-12-28T19:22:10.947 に答える