Динамічні компоненти, частина перша C + + Builder

Якби ви заглянули в ехоконференції (newsgroups) по CBuilder в Internet, то ви побачили б, що один з найбільш частих питань – це як створювати керуючі елементи під час роботи програми Хоча CBuilder і надає багатий асортимент компонентів і можливості легкого маніпулювання ними в дизайнера форм, багато програмісти не хочуть звязуватися зі

«Захованими» (невидимими) компонентами на формі Так звані динамічні керуючі елементи – річ, яку досить просто зробити в дизайнера форм Просто додаєте на форму компонент в тому місці, де ви хочете, щоб він пізніше зявився, а потім встановлюєте його властивість Visible («видимий») в false (неправда) Коли вам потрібно, щоб компонент зявився на формі, встановлюєте властивість Visible в true (істина) і він стає видимим і доступним користувачеві Однак це не те, що потрібно деяким програмістам Хоча в девяти випадках з десяти цього достатньо, інколи все ж вам дійсно потрібно створювати для користувача компонент динамічно під час роботи програми У етоі прикладі ми надаємо можливість створювати компонент не одного, а трьох різних типів «на ходу» У додавання до цього ви побачите, як розібратися з обробкою повідомлень для динамічно створених компонентів

Ви знайдете повний вихідний код для програми «Динамічні компоненти» на супровідному компакт-диску в каталозі Chapter4 \ DynControl1

На рис 41 представлена ​​форма, з якою ми будемо працювати в цьому додатку Створіть просту форму і притягнете на неї три перемикача (компонент TRadioButton) і одне поле введення (компонент TEdit) Додайте їх приблизно так, як на малюнку

Рис 41 Форма додатка «Динамічні компоненти»

По-перше, нам потрібно змінити заголовний файл для форми, щоб він містив опису компонентів, які ми будемо створювати У даному прикладі ми будемо створювати компоненти трьох різних типів Нам потрібні описи для статичного тексту (мітки), поля введення і кнопки Ось зміни, які потрібні для даного прикладу (виділені підсвічуванням):

#ifndef Unit1H

#define Unit1H

//——————————————————–

#include &ltvcl\Classeshpp&gt

#include &ltvcl\Controlshpp&gt

#include &ltvcl\StdCtrlshpp&gt

#include &ltvcl\Formshpp&gt

//——————————————————–

class TForm1 : public TForm

{

__published: // IDE-managed components TRadioButton *RadioButton1 TRadioButton *RadioButton2

TEdit *Edit1

TRadioButton *RadioButton3

void __fastcall RadioButton1Click(TObject *Sender) void __fastcall RadioButton2Click(TObject *Sender) void __fastcall RadioButton3Click(TObject *Sender)

private:  // User declarations

TEdit *FpEdit TLabel *FpLabel TButton *FpButton

void  RemoveExistingFields(void)

void __fastcall OnButtonClick( TObject *Sender ) public: // User declarations

__fastcall TForm1(TComponent *Owner)

}

//——————————————————–

extern TForm1 *Form1

//——————————————————–

#endif

Три покажчика на компоненти будуть використані для створення компонентів «на ходу» Метод RemoveExistingFields нам потрібен, щоб позбутися від попереднього створеного компонента і прибрати його з екрана І, нарешті, метод OnButtonClick буде використаний для динамічної обробки події натискання на кнопку

По-перше, нам треба ініціалізувати всі покажчики на компоненти, щоб знати, який з них активний, а які ні Додайте наступний код в конструктор класу:

__fastcall TForm1::TForm1(TComponent *Owner)

: TForm(Owner)

{

FpEdit = NULL FpLabel = NULL FpEdit = NULL

}

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

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

*

*