Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Створення нових компонентів та включення їх в бібліотеку.




2.1 Початок створення і установка компонента.

Створення нових компонентів дає не порівняно більше можливостей наж створення шаблонів вже існуючих компонентів. При створені компонентів, що наслідуватимуть ся тим чи іншим чином існуючі компоненти, можна додати нові властивості, нові методи, події та інше. Однак створення нових компонентів – це непростий процес, що вимагає доброго розуміння тонкощів наслідування та доброго знання властивосте, методів і подій батьківського компонента.

Приклад. Необхідно створити новий компонент як потомок класу TEdit назвемо новий клас TNumEdit. До нового компоненту необхідно додати дві нові властивості: EnableNum та EnableLet. Тип обох властивостей – boolean. Перше дозволяє або забороняє вводити цифри, а друге дозволяє або забороняє введення будь-яких символів окрім цифр.

Компоненти в Delphi компілюються в пакети, тому необхідно для початку створити новий пакет:

1. Закрийте поточний проект та виконайте команду File-New-Other. В діалоговому вікні New Items на сторінці Delphi Projects оберіть піктограму Package – пакет.

2. Збережіть створений пакет.

3. Натисніть на кнопку Add та оберіть вкладку New Component та задайте наступні параметри.

Оберіть шлях для збереження модулю нового компонента.

Отже було створено пакет з новим компонентом.

2.2. Аналіз класу нового компонента

2.2.1. Структура класу компонента

Заготовка модуля компонента, створена в результаті попередній дій має вигляд:

unit NumEdit;

interface

uses

SysUtils, Classes, Controls, StdCtrls;

type

TNumEdit = class(TEdit)

private

{ Private declarations }

protected

{ Protected declarations }

public

{ Public declarations }

published

{ Published declarations }

end;

procedure Register;

implementation

procedure Register;

begin

RegisterComponents('Ìîè êîìïîíåíòû', [TNumEdit]);

end;

end.

В цій заготовці можна побачити лише каркас майбутнього компонента.

2.2.2 Властивості.

Поля даних повинні завжди бути захищеними від несанкціонованого доступу. Тому їх доцільно визначати в секції Private.

Для додавання властивосте необхідно:

1. Додати необхідні поля.

FEnableNum:boolean;

FEnableLet:boolean;

2. Необхідно оголосити властивосі – методи читання та запису попередньо створених полів.

Властивість оголошується оператор вигляду:

В прикладі додається дві нові властивості, що не можуть бути одночасно приймати значення false, тому що не має сенсу використовувати поле для введення, якщо є можливість заборонити введення даних і це поле. Тому запис в поля цих властивостей будуть виконуватися тільки за допомогою спеціальних методів, що перевірятимуть стан іншої властивості.

 

property EnableNum:boolean read FEnableNum write SetEnableNum default true;

property EnableLet:boolean read FEnableLet write SetEnableLet default true;

 

3. Для того щоб властивості прийняли значення за замовчуванням необхідно додати конструктор до нового класу. Також опишемо зміст методів, що слідкуватимуть за неможливість вибору заборони редагування поля для введення. Отже, текст модулю нового компоненту має вигляд:

unit NumEdit;

 

interface

 

uses

SysUtils, Classes, Controls, StdCtrls;

 

type

TNumEdit = class(TEdit)

private

{ Private declarations }

FEnableNum:boolean;

FEnableLet:boolean;

protected

{ Protected declarations }

procedure SetEnableNum (Value:boolean);

procedure SetEnableLet(Value:boolean);

public

{ Public declarations }

constructor Create (AOwner:TComponent);override;

published

{ Published declarations }

property EnableNum:boolean read FEnableNum write SetEnableNum default true;

property EnableLet:boolean read FEnableLet write SetEnableLet default true;

end;

 

procedure Register;

 

implementation

 

procedure Register;

begin

RegisterComponents('Ìîè êîìïîíåíòû', [TNumEdit]);

end;

 

procedure TNumEdit.SetEnableNum (Value:boolean);

begin

FEnableNum:=Value;

if (not Value)

then if (not FEnableLet) then FEnableLet:=true;

end;

 

procedure TNumEdit.SetEnableLet (Value:boolean);

begin

FEnableLet:=Value;

if (not Value)

then if (not FEnableNum) then FEnableNum:=true;

end;

 

constructor TNumEdit.Create(AOwner:TComponent);

begin

inherited Create(AOwner);

FEnableNum:=true;

FEnableLet:=true;

end;

end.

 

Відкомпілюйте модуль нового компоненту та виправте всі помилки, що з’явилися. Для перевірки створіть новий додаток та додайте до нього створений компонент. Переконайтеся, що нові властивості було додано до цього компоненту.

2.2.3 Методи

Необхідно створити процедуру, що власне і буде дозволяти або забороняти введення симолів того або іншого типу. Для цього необхідно аналізувати символ, що вводитиметься користувачем, тобто це можно зробити при обробці події OnKeyPress. Для цього:

1. Введіть в модуль компонента необхідний обробник в секцію protected.

procedure KeyPress (var Key:Char);override;

2. Опишіть доданий метод додавши до файлу модуля нового компоненту код:

procedure TNumEdit.KeyPress(var Key:Char);

begin

if (not FEnableNum) and (key in ['0'..'9',#8])

then Key:=#0;

if (not FEnableLet) and not (key in ['0'..'9',#8])

then Key:=#0;

inherited KeyPress (Key);

end;

Відкомпілюйте модуль та виправте помилки. Для перевірки створіть новий додаток та додайте до нього створений компонент. Переконайтеся, що нові властивості було додано до цього компоненту та що вони функціонуй за допомогою нових методів.

2.2.4 Події.

Необхідно додати нову подію, що буде очищувати поле для введення:

1. Додайте поле події OnClear в секцію private:

FClear:TNotifyevent;

2. Додайте відповідну властивість в секцію published.

property OnClear:TNotifyEvent read FClear write FClear;

3. Додайте оголошення методу в секцію pritected для очищення.

procedure KeyPress (var Key:Char);override;

4. Додайте до файлу модулю нового компоненту опис методу очищення:

procedure TNumEdit.Clear;

begin

if assigned(FClear) then OnClear (Self);

inherited clear;

end;

Відкопілюйте модуль нового компоненту та перевірте його на вірність функціонування. Для цього в новому додатку додайте новий компонент та кнопку. При натисненні на кнопку задайте оператор, що очищатиме це поле за допомогою нової події:

NumEdit1.Clear;

Поделиться:





Читайте также:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...