Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Delphi.Начало.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
1.56 Mб
Скачать

Как открыть форму

Форма открывается с помощью одного из своих методов: Show или ShowModal. Отличие методов состоит в том, что метод Show открывает обычное окно, а метод ShowModal открывает форму в режиме модального окна, т.е. окна, которое пользователь должен закрыть, прежде чем он сможет получить доступ к другим окнам. Например:

Form2.Show; где Form2 - имя открываемой формы.

Для того чтобы модуль вызывающей формы получил доступ к модулю вызываемой формы, нужно в Uses вызывающей формы добавить имя модуля вызываемой формы.

Напpимеp. Из Формы1 требуется открыть Форму2. С Формой1 связан модуль Unit1, а с Формой2 связан модуль Unit2. Нужно, чтобы модуль Unit1, связанный с Формой1 видел модуль Unit2, связанный с Формой2. Для этого необходимо в операторе Uses модуля Формы1, т.е. в Unit1, прописать имя модуля второй формы Unit2.

Unit Unit1 { Unit1 - модуль вызывающей Фоpмы1 }

implementaion

Uses ... , Unit2; { Unit2 - модуль вызываемой Фоpмы2 }

...

Этого же можно достичь, если, находясь в модуле Unit1, выполнить меню File | Use Unit. В результате в части implementaion модуля Unit1 появится объявление модуля Unit2.

Задание для самостоятельной работы

  1. Создайте новое приложение.

  2. Добавьте к нему новую форму

  3. В главной форме приложения создайте кнопку, по которой будет вызываться новая форма.

  4. Добавьте к приложению 5 новых форм. Откройте файл dpr и посмотрите, что он содержит.

Способность форм ссылаться друг на друга

Вы наверное обратили внимание на то, что мы добавляем оператор Uses в части implementaion модуля. Почему мы поступили именно так, почему не добавить модуль в части interface модуля? Можно добавить описание и в части interface модуля, но только в том случае, когда формы не ссылаются друг на друга.

Формы могут ссылаться одна на другую, т.е., например, из формы 1 вызывается форма 2, а форма 2, в свою очередь, ссылается на объекты формы 1. В этом случае, для того, чтобы не возникла ошибка circular referances во время компиляции, необходимо сделать одно из следующих действий:

  • разместите операторы Uses с описаниями модулей в части implementation соответствующих модулей (это означает разрешение формам ссылаться друг на друга).

  • разместите один оператор Uses в части interface одного модуля, а другой – в части implementation другого модуля.

Например, Form1 имеет связанный с ней модуль Unit1 и ссылается на форму Form2, имеющую модуль Unit2. Form2, в свою очередь, хочет получить доступ к объекту Label1, находящемуся в форме Form1. Соответствующие Unit-файлы будут выглядеть следующим образом:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Label1: TLabel;

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

uses Unit2;

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin

Form2.Show;

end;

end.

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm2 = class(TForm)

Button1: TButton;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);

begin

Form1.Label1.Caption:='Hello';

end;

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]