Створюємо поле введення C + + Builder

Перший з компонентів, які ми хочемо динамічно створити – це поле введення Коли користувач вибирає кнопкою миші перемикач Створити нове поле введення, то на формі зявиться динамічно створене поле введення Створіть обробник події OnClick (вибір, натискання) для цього перемикача і додайте в нього наступний код Коли ви закінчите набирати цей код (або переглядати код на компакт-диску), ми обговоримо, що це все означає:

void __fastcall TForm1::RadioButton1Click(TObject *Sender)

{

RemoveExistingFields()

FpEdit = new TEdit(this) FpEdit-&gtParent = this

FpEdit-&gtLeft = RadioButton1-&gtLeft

FpEdit-&gtWidth = 200

FpEdit-&gtHeight = 20 FpEdit-&gtTop =

RadioButton3-&gtTop + RadioButton3-&gtHeight + 20 FpEdit-&gtVisible = true

}

Попередній приклад, по-перше, видаляє всі існуючі компоненти, викликаючи метод RemoveExistingFields Ми розглянемо його трохи пізніше По-друге, створює новий компонент TEdit (поле введення) через оператор new Компоненти VCL можуть бути створені тільки через оператор new Ви не можете просто визначити новий компонент VCL, наприклад так:

TEdit mEdit (this) / / Це не спрацює

Це обмеження накладено компанією Borland на VCL воно необхідне, так як бібліотека VCL була написана на Pascal і тому, щоб все працювало як треба, потрібні певні закулісні маніпуляції

Як тільки компонент створений через оператор new (при цьому власник (owner) компонента передається як параметр конструктору), наступним важливим кроком є ​​установка властивості Parent (батько) компонента Властивість Parent істотно для визначення, де компонент повинен знаходитися Якщо це властивість не встановити, то компонент ніколи не зявиться на екрані, так як його властивості задаються щодо батька Якщо ви динамічно створили компонент і він не зявляється, то насамперед перевірте установку властивості Parent перед тим, як шукати де-небудь ще

Коли властивість Parent встановлено, наступні чотири рядки коду просто позиціонують полі введення на формі У даному випадку ми хочемо, щоб поле введення зявилося знизу від останнього перемикача (radio button), так що ми встановлюємо позиційні властивості поля введення через координати RadioButton3 (третій перемикача), і все стає добре

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

Щоб наша програма скомпілювати, нам треба додати метод RemoveExistingFields Ось потрібний код:

void  TForm1::RemoveExistingFields(void)

{

if ( FpEdit )

{

delete FpEdit FpEdit = NULL

}

if ( FpLabel )

{

delete FpLabel FpLabel = NULL

}

if ( FpButton )

{

delete FpButton FpButton = NULL

}

}

Як бачите, все що ми тут робимо, це видаляємо ті компоненти, покажчики на які не рівні NULL, і ставимо їх у NULL Ось чому важливо було ініціалізувати значення покажчиків в конструкторі форми Таким чином ми визначаємо один-єдиний компонент і потім видаляємо його з форми

Тепер ви вже зробили достатньо, щоб скомпілювати і зібрати програму Вам потрібно тимчасово закомментировать метод OnButtonClick в заголовному файлі, а потім вибрати команду Project ä Make (або натиснути Ctrl + F9) для запуску компіляції і збірки проекту Запустіть отриману програму і клацніть мишею на першому перемикачі (створення поля введення) Ви побачите форму, зображену на рис 42

Рис 42 Форма з новим динамічним полем введення

Джерело: Теллес М – 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>

*

*