Мастера DELPHI, Delphi programming community Рейтинг@Mail.ru Титульная страница Поиск, карта сайта Написать письмо 
| Новости |
Новости сайта
Поиск |
Поиск по лучшим сайтам о Delphi
FAQ |
Огромная база часто задаваемых вопросов и, конечно же, ответы к ним ;)
Статьи |
Подборка статей на самые разные темы. Все о DELPHI
Книги |
Новинки книжного рынка
Новости VCL
Обзор свежих компонент со всего мира, по-русски!
|
| Форумы
Здесь вы можете задать свой вопрос и наверняка получите ответ
| ЧАТ |
Место для общения :)
Орешник |
Коллекция курьезных вопросов из форумов
KOL и MCK |
KOL и MCK - Компактные программы на Delphi
 
дешево купил мощный led фонарь тут , магазин 070

Управление формами в IntraWeb

Введение

  Управление формами в приложениях IntraWeb очень напоминает управление формами в обычных приложениях Delphi, но при этом имеет несколько ограничений:

  1. Только одна форма может быть видимой в любой момент времени. Это связано с тем, что формы показываются в Web-браузере.
  2. Нельзя использовать модальные формы. Тем не менее, в связи с тем, что только одна форма может быть видимой в любой момент времени, по существу, все формы являются модальными.
  3. Формы должны принадлежать WebApplication.

Список форм

  IntraWeb хранит список форм как часть пользовательского сеанса (session). Способ хранения форм в списке напоминает кипу (stack), при этом только что показанные формы добавляются к верху. Когда формы скрыты или освобождены (released), этот список используется для определения формы, которая должна быть показана, если явно не указано показать другую форму через вызов метода .Show формы. Обычно список форм никогда напрямую не взаимодействует с пользователем, вместо этого вызываются методы форм. Тем не менее, бывают случаи, когда непосредственное взаимодействие со списком форм может быть необходимо. Для этих случаев TIWApplication содержит несколько методов для взаимодействия со списком форм, и они задокументированы в файле справки.

Отображение форм

  Общий формат отображения формы следующий:

TFormType.Create(WebApplication).Show;

  Эта запись может поначалу казаться запутанной, но она просто является короткой записью для:

with TFormType.Create(WebApplication) do 
begin
  Show;
end;

  Вы должны быть знакомы с этим, поскольку в стандартных приложениях то же самое, за исключением того, что владельцем здесь является WebApplication. Тем не менее, есть ещё одно отличие от обычных приложений, которое заключается в том, что в обычных приложениях форма показывается немедленно после того, как метод .Show вызван. В случае с приложением IntraWeb вызов метода .Show просто устанавливает форму в качестве следующей активной формы, которая будет показана после того, как событие (event) завершится и вернётся к IntraWeb. Только после выполнения события форма будет показана.

  Экземпляр (instance) каждой формы может быть показан много раз посредством перемещения его наверх. В этом случае экземпляр формы будет представлен в списке форм в нескольких местах.

Скрытие форм

  В обычном приложении форма может быть скрыта без уничтожения формы с помощью вызова метода .Hide. Та же функциональная возможность может быть реализована в IntraWeb с помощью вызова метода .Hide. Метод .Hide скрывает форму без её уничтожения, в отличие от метода .Release. Метод .Hide удаляет все ссылки в списке форм как и метод .Release, но не уничтожает форму. В связи с этим, вы должны сохранить ссылку на форму, если собираетесь её позже отобразить, в противном случае форма окажется осиротевшей.

Уничтожение форм

  В обычном приложении когда форма больше не нужна, она может быть уничтожена с помощью использования методов .Free или .Destroy. В приложении IntraWeb эти методы работают аналогично, тем не менее вы не должны вызывать их напрямую. Вместо этого вы должны вызвать метод .Release. Фактически метод .Release не уничтожает форму сразу при вызове. Форма не будет уничтожена, пока процесс (event) не завершится и не передаст управление IntraWeb. Дело в том, что метод .Release обычно вызывается процессом из самой формы, хотя так бывает не всегда.

  После того как вызван метод .Release, как и в обычном приложении, активной становится та форма, которая была активной до того, как разрушенная форма стала активной. Если вы не хотите возвращать пользователя к предыдущей форме, вы должны вызвать метод .Show другой формы. Метод .Show может быть вызван как до так и после вызова метода .Release, поскольку вызов метода .Release не будет иметь никакого эффекта, пока управление не вернётся IntraWeb.

  После того как форма уничтожена, все ссылки на неё удаляются из списка форм. Это вызывает изменение в порядке форм, которые будут показаны когда формы скрыты или уничтожены без явного вызова метода .Show.

Передача данных между формами

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

  Для демонстрационных целей мы определим две формы: TFormMain и TFormDialog. TFormMain является главной формой и содержит поле ввода и кнопку. TFormDialog содержит поле Memo и метку.

  Когда пользователь нажимает кнопку на первой форме, текст из поля ввода добавляется в поле Memo на второй форме, и она отображается. Форма TFormDialog также показывает, сколько раз она была отображена и предоставляет пользователю возможность вернуться к главной форме.

Главная форма в процессе проектирования

Главная форма в процессе проектирования

Исходный код главной формы

unit Main;
{PUBDIST}

interface

uses
  IWAppForm, IWApplication, IWTypes, IWCompButton, IWCompEdit, Classes,
  Controls, IWControl, IWCompLabel, Dialog, IWHTMLControls;

type
  TformMain = class(TIWAppForm)
    IWLabel1: TIWLabel;
    editText: TIWEdit;
    butnOk: TIWButton;
    IWLink1: TIWLink;
    procedure butnOkClick(Sender: TObject);
    procedure IWAppFormCreate(Sender: TObject);
    procedure IWLink1Click(Sender: TObject);
  public
    FDialogForm: TformDialog;
  end;

implementation
{$R *.dfm}

uses
  SysUtils;

procedure TformMain.butnOkClick(Sender: TObject);
var
  s: string;
begin
  s := Trim(editText.Text);
  editText.Text := '';
  if s = '' then begin
    WebApplication.ShowMessage('Пожалуйста, введите текст!');
  end else begin
    with FDialogForm do begin
      IWMemo1.Lines.Add(s);
      Inc(FCount);
      Show;
    end;
  end;
end;

procedure TformMain.IWAppFormCreate(Sender: TObject);
begin
  FDialogForm := TformDialog.Create(WebApplication);
end;

procedure TformMain.IWLink1Click(Sender: TObject);
begin
  WebApplication.Terminate('До свидания!');
end;

Объяснение исходного кода

IWLink1 OnClick
Это событие перехватывается ссылкой с заголовком "Выход" и просто завершает сеанс пользователя.
OnCreate
Событие OnCreate возникает, когда создаётся форма. В обработчике этого события создаётся другая форма и ссылка на неё сохраняется в переменной - члене главной формы, так что к форме TFormDialog можно получить доступ позже.
butnOk OnClick
В обработчике события OnClick проверяется, введены ли данные в поле ввода. Если данных нет, то вызывается метод WebApplication.ShowMessage, который выводит соответствующее сообщение для пользователя. Если пользователь ввёл данные, то используется форма TFormDialog, созданная в обработчике события OnCreate этой формы (TFormMain). Данные добавляются в поле Memo и переменная - член формы TFormDialog обновляется. После этого форма отображается с помощью метода .Show.

  Как вы можете видеть, данные очень легко передаются между формами, точно так же как в обычных приложениях Delphi.

Скачать пример (4 Kb)

   Внимание! Запрещается перепечатка данной статьи или ее части без согласования с автором. Если вы хотите разместить эту статью на своем сайте или издать в печатном виде, свяжитесь с автором.
Автор статьи:  Товмасян Альберт
Сайт автора: http://www.albert3000.narod.ru/
  

Другие статьи Наверх


  Рейтинг@Mail.ru     Титульная страница Поиск, карта сайта Написать письмо