Главная » Delphi » Добавление форм в палитру компонентов

0

Добавление форм  в хранилище объектов (Object Repository) —  удобный  способ  по следующей  работы с ними.  Но  иногда  разрабатывают форму,  которую  приходится часто  использовать и которая не предполагает наследования и внесения дополни тельных функций. В этом  случае Delphi  6 позволяет использовать такие  формы, как компоненты  палитры  компонентов.  В  частности,  компоненты  TFontDialog и TOpenDialog — примеры форм, доступных  в палитре компонентов. В действительно сти эти диалоговые окна не являются формами Delphi  — они содержатся в библиотеке CommDlg.dll, но, тем не менее,  идея остается той же.

Чтобы добавить форму в палитру компонентов, необходимо создать для нее ком

понент оболочку,  превращающий ее  в независимый устанавливаемый компонент. В качестве примера рассмотрим диалоговое окно,  автоматически проверяющее пароль пользователя. Это очень  простой пример, но нашей  целью является демонстрация не установки в качестве компонентов сложных диалоговых окон,  а общей  идеи  добавле ния  диалоговых окон  в палитру  компонентов. Предлагаемую методику  можно  приме нять для добавления в палитру компонентов диалоговых окон любой сложности.

Сначала  нужно создать форму, которая впоследствии будет помещена в компонент оболочку.  Используемая здесь  форма определена в файле PwDlg.pas. В нем  же  со держится и код компонента оболочки.

В  листинге 11.16  приведен  код  модуля  PwDlg.pas,  содержащего  определение формы TPasswordDlg и ее компонента оболочки TddgPasswordDialog.

Листинг 11.16. PwDlg.pas — форма  TPasswordDlg и ее оболочка

TddgPasswordDialog

unit PwDlg; interface uses

Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,

Buttons;

type

TPasswordDlg = class(TForm)

Label1: TLabel;

Password: TEdit;

OKBtn: TButton;

CancelBtn: TButton;

end;

{ Объявление компонента-оболочки. } TddgPasswordDialog = class(TComponent) private

PassWordDlg: TPasswordDlg; // Экземпляр TPassWordDlgFPassWord: String;   // Поле для хранения пароля

public

function Execute: Boolean; // Функция запуска диалогового окна

published

property PassWord: String read FPassword write FPassword;

end;

implementation

{$R *.DFM}

function TddgPasswordDialog.Execute: Boolean;

begin

{ Создать экземпляр компонента TPasswordDlg }

PasswordDlg := TPasswordDlg.Create(Application);

try

Result := False;         // Инициализация Result значением false

{ Отображение диалогового окна. Если пароль правильный,

возвращается значение true. }

if PasswordDlg.ShowModal = mrOk then

Result := PasswordDlg.Password.Text = FPassword;

finally

PasswordDlg.Free;        // Удаление экземпляра PasswordDlg

end;

end;

end.Компонент TddgPasswordDialog называется компонентом оболочкой или  просто оболочкой (wrapper), потому что он превращает форму в компонент, который можно установить в палитру компонентов Delphi  6.

Класс компонента TddgPasswordDialog является производным непосредственно от класса TComponent. Как упоминалось в предыдущей главе, класс TComponent — это класс самого  низкого уровня,  с которым можно  работать в конструкторе форм  интег рированной среды  Delphi. В классе  TddgPasswordDialog есть  две  закрытые пере менные: PasswordDlg типа  TPasswordDlg и FPassWord типа  String. Переменная PasswordDlg —  это  экземпляр класса  TPasswordDlg, отображаемый компонентом оболочкой.  Переменная  FPassWord является  внутренним  полем  хранения  (internal storage  field) строки пароля.

Переменная FPassWord получает данные  через свойство PassWord. Таким  обра зом,  в действительности свойство PassWord не  хранит данных, а лишь  служит  ин терфейсом к переменной FPassWord.

Метод   TddgPasswordDialog.Execute() создает   экземпляр  объекта  TPass- wordDlg и отображает его в виде модального диалогового окна. Когда диалоговое ок но закрывается, строка, введенная в элемент TEdit, сравнивается со строкой, храня щейся в переменной FPassword.

Приведенный ниже  код  помещается в конструкцию  try..finally. Часть  кода, находящаяся в блоке finally, гарантирует, что память, выделенная для размещения экземпляра компонента TPasswordDlg, будет освобождена в любом случае, невзирая на возможные ошибки.Поместив компонент TddgPasswordDialog в палитру  компонентов, можно  соз дать проект, использующий этот  компонент. Компонент TddgPasswordDialog мож но будет выбирать и помещать в форму  так же, как и любой  другой  компонент. Про ект,  создание которого описано в предыдущем разделе, содержит компонент TddgPasswordDialog и кнопку,  код обработчика события OnClick которого приве ден ниже:

procedure TForm1.Button1Click(Sender: TObject);

begin

if ddgPasswordDialog.Execute then         // Запуск PasswordDialog

ShowMessage(‘You got it!’)                // Правильный пароль

else

ShowMessage(‘Sorry, wrong answer!’); // Неправильный пароль

end;

В окне  инспектора объектов отображаются три  свойства компонента TddgPass- wordDialog: Name, Password и  Tag. Для  использования этого  компонента  нужно присвоить свойству  Password определенное значение. Когда  проект будет запущен на выполнение, TddgPasswordDialog получит  от пользователя пароль и сравнивает его со значением свойства Password.

Резюме

Знание принципов работы компонентов — основа  понимания Delphi. В этой  книге еще предстоят встречи со многими пользовательскими компонентами. Надеемся, что теперь компоненты не  кажутся  “черными ящиками”. В следующей  главе  рассматри ваются еще более сложные способы создания компонентов.

Источник: Тейксейра, Стив, Пачеко, Ксавье.   Borland Delphi 6. Руководство разработчика. : Пер.  с англ. — М. : Издательский дом “Вильямс”, 2002. —  1120 с. : ил. — Парал. тит. англ.

По теме:

  • Комментарии