2009-12-28 9 views
0

У меня есть проект на Лазаресе, который имеет две формы, 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; 

Но когда я пытаюсь скомпилировать этот код, я получил ошибку:

Identifier not found "OutputForm"

В верхней части блока OutputForm у меня есть:

unit Output; 

И когда я пытаюсь вызвать его из блока FormMain (OutputForm: Output;) Я получил эту ошибку:

Error in type definiition

Что мне нужно делать?

+1

попробуйте добавить модуль OutputForm к предложению uses. – RRUZ

+0

Как это сделать? –

+0

Обновлен мой ответ. –

ответ

2

Как сказал RRUZ, вам нужна ссылка на устройство, в котором объявлен OutputForm. Вот основная идея:

Каждая форма имеет файл декларации формы (DFM в Delphi, я думаю, Lazarus называет их LFM) и соответствующий файл объекта Object Pascal (.PAS), куда вы помещаете свой код. Это нормальный блок файл, как и любой другой, в том, что касается компилятора. Единственное отличие состоит в том, что он имеет связанную с ним форму.

Откройте код для OutputForm и посмотрите на верхнюю часть. Он скажет что-то вроде «unit OutputForm»; Скопируйте имя устройства и вставьте его в поле , используя пункт блока FormMain, а затем он должен работать.

EDIT: Не совсем уверен, что вы пытаетесь сделать с этим редактированием, но вам не нужно обновлять 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

Взгляните сейчас на вопрос. –

0

Hm, не «выход» зарезервированное слово в Паскале?

+1

Вы спрашиваете или говорите? –

+0

Я предлагаю возможный ответ. Я не знаю достаточно о Лазаре, чтобы узнать, так ли это. – dummzeuch

Смежные вопросы