Створення компонент в DELPHI, Різне, Програмування, статті

Перед створенням свого компонента потрібно вибрати для нього предка. Хто ж може бути предком для вашого компонента?


Як правило, використовуються у вигляді предків TComponent, TControl, TWinControl, TGraphicControl, TCustomXXXXXX, а також всі компоненти палітри компонентів.
Візьмемо для прикладу компонент TOpenDialog, який знаходиться на сторінці Dialogs палітри компонентів. Він добре справляється зі своїм завданням, але в нього є одна маленька незручність. Кожен раз, коли його використовуєш необхідно кожен раз змінювати значення властивості Options. І причому це, як правило, одні і ті ж дії.
OpenDialog1.Options := OpenDialog1.Options + [ofFileMustExist, ofPathMustExist];

щоб файл, який ми намагаємося відкрити за допомогою цього діалогового вікна, дійсно існував на диску.
Завдання для себе ми вже вибрали, залишилося за малим – створити компонент. Заготовку для компонента створюємо, вибираючи з меню команду Component / New Component … і в діалоговому вікні вибираємо
Ancestor type: TOpenDialog
Class Name: TOurOpenDialog
Palette Page: Our Test
Натиснули Ok і в нас з’явився шаблон нашого майбутнього компонента.

Перевизначають конструктор у цього компонента, тобто в секції public вставляємо рядок:

constructor Create(AOwner: TComponent); override;

натискання на цьому рядку Ctrl + Shift + C створює шаблон для цього методу, всередині якого ми вставляємо такі рядки:

inherited Create (AOwner); {Викликаємо успадкований конструктор}
Options: = Options + [ofFileMustExist, ofPathMustExist]; {Виконуємо необхідні нам дії}

Зверніть увагу: Комбінації клавіш Ctrl + Shift + стрілки вгору / вниз дозволяють переміщатися між оголошенням методу і його реалізацією.

Установка створеного компонента Component / Install Component …
Install Into New Package
Package file name: C:Program FilesBorlandDelphi4LibOurTest.dpk
Package description: Our tested package

Вам не подобається, що у нашого компонента іконка така ж як у стандартного? Тоді створимо для нього свою власну.
Для цього нам необхідно викликати Tools / Image Editor. Створюємо новий *. Dcr файл.
Вставляємо в нього малюнок Resource / New / Bitmap. Встановлюємо розмір картинки 24×24 крапок. А далі – ваша творчість …
Зверніть увагу: колір точок, що співпадає з кольором точки в лівому нижньому кутку малюнка, буде вважатися ПРОЗОРИМ!
Після того як ви створили свій малюнок, перейменуйте його з Bitmap1 в TOurOpenDialog і збережіть файл з ім’ям OurOpenDialog.dcr.
Видаліть компонент з пакета і встановіть його знову (тільки в цьому випадку додасться і посилання на *. Dcr файл).
Compile, Install і удачі!

unit OurOpenDialog;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs;
type
TOurOpenDialog = class(TOpenDialog)
private
{ Private declarations }
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
end;
procedure register;
implementation
procedure register;
begin
RegisterComponents(“Samples”, [TOurOpenDialog]);
end;
{ TOurOpenDialog }
constructor TOurOpenDialog.Create(AOwner: TComponent);
begin
inherited Create (AOwner); {Викликаємо успадкований конструктор}
Options := Options + [ofFileMustExist, ofPathMustExist]; {Виконуємо необхідні нам дії}
end;
end.

Оголошення компонента складається із секцій, таких як private, protected, public і published. Що вони означають?
Це директиви видимості.
Все що оголошено в секції private, Доступно тільки всередині модуля в якому оголошено клас (приватні оголошення). Тут як правило оголошуються змінні, в яких зберігаються значення властивостей, а також методи (процедури або функції) доступу до них.
Все що оголошено в секції protected, Доступно як і в секції private, а також спадкоємцям даного класу (інтерфейс розробника).
Тут можна оголосити методи доступу до значень властивостей (якщо ви хочете дозволити змінювати ці методи нащадкам вашого компенента),
а також властивості, методи і події (методи реакції на події) в компонентах типу TCustomXXX.
Все що оголошено в секції public, Доступно будь-якому користувачеві компонента (інтерфейс етапу виконання).
Тут оголошуються, як правило методи. У секції published можна оголошувати тільки властивості та події (вони оголошуються у вигляді властивостей).
Вони доступні під час проектування додатку (інтерфейс етапу проектування).


Властивості


Властивості типу масив – Звичайні масиву Object Pascal, але на відміну від останніх можуть індексуватися не тільки числовими значеннями а й рядковими. На жаль цей тип властивості вимагає користувацького редактора властивостей (В інспектора об’єктів редактор властивості має кнопку з трьома крапками […]), по-цьому в зазначеному нижче прикладі властивість ArrayProp оголошено в секції public.

type
TOurComponent = class(TComponent)
private
{ Private declarations }
FArrayProp: array[0..9] of integer;
function GetArrayProp(aIndex: integer): integer;
procedure SetArrayProp(aIndex: integer; const
Value: integer);
protected
{ Protected declarations }
public
{ Public declarations }
property ArrayProp[aIndex: integer]: integer read
GetArrayProp
write SetArrayProp;
published
{ Published declarations }
end;

Специфікатори властивостей


Специфікатор default вказує зберігати значення властивості у файлі форми чи ні. Якщо значення властивості збігається зі значенням default – Значення у файлі форми не зберігається, якщо значення не рівні – зберігається. Це можна перевірити, поклавши компонент на форму і вибрати правою кнопкою миші пункт меню “View as Text”. Default не встановлює первісне значення властивості до зазначеного. Це необхідно зробити в конструкторі компонента.

unit OurComponent;
interface
uses Windows, SysUtils, Classes, Graphics, Forms, Controls;
type
TOurComponent = class(TComponent)
private
{ Private declarations }
FMyInteger: Integer;
protected
{ Protected declarations }
public
{ Public declarations }
constructor Create(AOwner: TComponent); override;
published
{ Published declarations }
property MyInteger: Integer read FMyInteger
write FMyInteger default 10;
end;
implementation
constructor TOurComponent.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
FInteger := 10;
end;
end.

Специфікатор nodefault скасовує задане за замовчуванням значення властивості. Цей специфікатор, як правило, використовується для скасування заданого за замовчуванням значення успадкованого властивості.
Наприклад: property AutoSize nodefault;


Специфікатор stored вказує коли зберігати у файлі форми значення властивості. Після stored може стояти true (Завжди зберігати), false (Ніколи не зберігати) або назву функції, яка повертає логічний результат.

    property OneProp: integer read FOneProp
write
SetOneProp
stored False;
property TwoProp: integer read FTwoProp
write
SetTwoProp
stored True;
property ThreeProp: integer read FThreeProp
write SetThreeProp
stored Fuct;

І останнє:
Щоб додати картинку в компонент для демонстрації в панелі компонентів треба: – створити її розміром 24 * 24 з ім’ям файла.dcr (в ресурсі ім’я картинки одно імені компонента, заголовними буками)
– Картинку покласти поруч із компонентом.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*