Створення компонентів у CBuilder (FAQ)

Як додати властивість класу, наприклад TFont, в мій компонент

Якщо ви використовуєте вже існуюче властивість начебто TFont, слід просто визначити властивість цього типу У разі ж, якщо ви хочете створити нову властивість, що є класом, для використання в своєму компоненті, вам треба подбати про кілька речей По-перше, використовуваний вами клас повинен бути нащадком (хоча б далеким) TPersistent, тобто наслідувати від класу, що посяде від TPersistent По-друге, ви повинні визначити клас, в якому ви збираєтеся використовувати властивість

Нарешті, ви повинні додати в компонент, який містить клас властивості, властивість даного типу, оголошене як published, яке ви хочете використовувати як «нормальну» змінну

<Наприклад: __ published: __ property TFont * m yFont. -Прямуючи перев> Тепер можна використовувати саму цю змінну для роботи з методами властивості read і write

Складнощі полягають у тому, що ви повинні замістити метод компонента Create так, щоб створювався елемент класу властивості В іншому випадку система дасть збій при спробі Object Inspector завантажити цю властивість

Якщо ви хочете, щоб користувач мати можливість редагувати окремі частини комплексного властивості в Object Inspector, вам треба оголосити і їх як __ published усередині класу цієї властивості

Швидше за все, функція set присвоюється імені властивості замість змінної класу Наприклад:

int Fx / / Змінна класу для властивості

__property int X={read=X, write=SetX}

__fastcall void SetX(int X)

{

X = x / / Тут замість X має бути Fx

}

Використовуйте функцію Windows API CreateEllipticRegion для створення області у вигляді кола, а потім функцію API SetWindowRgn, передавши їй посилання (handle) на кнопку і область, створену першою функцією

Заголовки (H або HPP) і OBJ-файл повинні бути скопійовані в директорію CBuilder \ Lib Це дозволить CBuilder коректно компілювати і компонувати програми, що використовують цей компонент у своїх формах

Створіть для цього індексований компонент Виглядає він приблизно таким чином:

__property double Xpoint[int nLine][int Index] =

{read = GetXPoint, write = SetXPoint}

У цьому прикладі показано властивість з імям XPoint, є двовимірним масивом Функція GetXPoint виглядає приблизно таким чином:

virtual double     fastcall GetXPoint( int nLine, int nIndex )

Водночас функція SetXPoint виглядає так:

virtual void     fastcall SetXPoint( int nLine, double dPoint )

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

ваш розсуд

Ви можете протестувати компонент, створивши його примірник в якомусь батьківському вікні, після чого міняти значення властивостей, як це необхідно для тестування Наприклад для того, щоб створити на формі новий екземпляр компонента Edit, вам слід написати:

TEdit * pEdit / / Цей рядок пишеться в заголовному файлі

pEdit = new pEdit (this) / / Власник – форма

pEdit-> Parent = this / / ЗАПАМЯТАЄТЕ Батьком повинна бути форма

pEdit-&gtLeft = 10

pEdit-&gtWidth = 100

pEdit-&gtTop = 10

pEdit-&gtHeight = 20

Цей блок коду створює компонент edit, розташований на формі в позиції 10,10 і протягнутий на 100 пікселів вправо і 20 пікселів вниз Подібний блок коду може бути використаний для будь-якого виду компонентів, оскільки всі компоненти підтримують ці атрибути

Джерело: Теллес М – Borland C + + Builder Бібліотека програміста – 1998

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


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

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

Ваш отзыв

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

*

*