Динамическое создание визуальных компонентов C++ Builder

Из этого совета вы узнаете, как создавать во время run-time компоненты в C++ Builder.

Дата: 25.05.2010 г.

Рейтинг: 0

Метки: c builder, программирование

Пошаговая инструкция:
Я уже писал о динамическом создании компонентов для Delphi (часть 1, часть 2) и для C#, вот теперь дошел черед и до C++ Builder.

Сейчас рассмотрим простой код для создания одного компонента:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cspin"
#pragma resource "*.dfm"
TForm1 *Form1;
TButton *new_btn;
TButton *array_btn[5];
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
    : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
    new_btn = new TButton (Form1);
    new_btn->Parent = Panel1;
    new_btn->Top = 5;
    new_btn->Left = 5;
    new_btn->Caption = "одна кнопа";

}


Описание:

TButton *new_btn; Объявляем переменную в виде ссылки.
new_btn = new TButton (Form1); Создаем начинку.
new_btn->Parent = Panel1; Указываем родительский компонент
new_btn->Top = 5; Задаем отступ сверху.
new_btn->Left = 5; Задаем отступ слева.
Выше приведен минимальный список параметров для отображения.
new_btn->Caption = \"одна кнопа\"; Текст на кнопе.

Код для создания массива компонентов:
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma link "cspin"
#pragma resource "*.dfm"
TForm1 *Form1;
TButton *new_btn;
TButton *array_btn[5];
//---------------------------------------------------------------------------
    *   *   *
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
    for(int i = 0; i < 5; i++)
    {
        array_btn[i] = new TButton (Form1);
        array_btn[i]->Parent = Panel1;
        array_btn[i]->Top = 5 + (24 * i);
        array_btn[i]->Left = 80;
        array_btn[i]->Caption = IntToStr(i) +"-я кнопа";
    }


Описание:

TButton *array_btn[5]; Создаем массив, который будет хранить информацию о наших кнопках
Далее по аналогии с первым примером:
array_btn = new TButton (Form1);
array_btn->Parent = Panel1;
array_btn->Top = 5 + (24 * i);
array_btn->Left = 80;
array_btn->Caption = IntToStr(i) +\"-я кнопа\";


Удаление элементов происходит с помощью процедуры Free().
Для одного элемента:
    new_btn->Free();


Для массива:
for(int i=0;i<5;i++)array_btn[i]->Free();


Любой из элементов массива может быть освобожден отдельно от остальных.

Вот так это выглядит:
Динамическое создание визуальных компонентов C++ Builder


Скачать пример для CodeGear C++ Builder 2007:

[attachment=3]

md5:29C63131F6A168D4338275E3136D5B78

Как видите все просто. По возникающим вопросам, желательно дублировать как комментарий к совету, так и личным сообщение мне.С уважением, Сургай Владимир.



Похожие статьи: