Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Создание динамического массива кнопок

3.1K
16 апреля 2003 года
McSim
8 / / 16.04.2003
Всем привет!
Сразу пример:

const ItemsCount=20;
TSpeedButton *Btns[ItemsCount][ItemsCount];

for(int y=0;y<ItemsCount; y++)
for(int x=0;x<ItemsCount; x++)
{
Btns[x][y]=new TSpeedButton(this);
Btns[x][y]->Parent = Panel1;
Btns[x][y]->Width = 20;
Btns[x][y]->Height = 20;
Btns[x][y]->Left = ItemsCount*x;
Btns[x][y]->Top = ItemsCount*y;
Btns[x][y]->onClick=OnButtonClick;
}
//----------
Мне надо создать динамический массив кнопок размер которого будет известен только во время выполнения программы, а не на этапе компиляции как в примере. Как это осуществить? Пробовал пользоваться системными функциями динамического выделения памяти. Массив создавался, но в месте, где идет добавление в него элементов (типа TSpeedButton*), компилятор ругается: "E2285 Could not find a match for 'TSpeedButton :: operator =(TMSpeedButton *)"

Может кто сталкивался с подобной задачей?
362
16 апреля 2003 года
_kolyan
339 / / 03.12.2002
Вот пример

void __fastcall TwndDMCalend::Button1Click(TObject *Sender)
{
int ItemsCount = Edit1->Text.ToIntDef(2);

TObjectList *lst = new TObjectList(true);

TSpeedButton *b;

for(int y=0;y<ItemsCount; y++)
for(int x=0;x<ItemsCount; x++)
{
b = new TSpeedButton(this);
b->Parent = Panel5;
b->Width = 20;
b->Height = 20;
b->Left = x*b->Width + 60;
b->Top = y*b->Height;
lst->Add(b);
}
for(int y=0;y<ItemsCount; y++)
for(int x=0;x<ItemsCount; x++)
{
dynamic_cast<TSpeedButton*>(lst->Items[y*ItemsCount+x])->Caption = AnsiString(x) + " : " + y;
}
}
3.1K
16 апреля 2003 года
McSim
8 / / 16.04.2003
Цитата:
Originally posted by _kolyan
Вот пример

void __fastcall TwndDMCalend::Button1Click(TObject *Sender)
{
int ItemsCount = Edit1->Text.ToIntDef(2);

TObjectList *lst = new TObjectList(true);

TSpeedButton *b;

for(int y=0;y<ItemsCount; y++)
for(int x=0;x<ItemsCount; x++)
{
b = new TSpeedButton(this);
b->Parent = Panel5;
b->Width = 20;
b->Height = 20;
b->Left = x*b->Width + 60;
b->Top = y*b->Height;
lst->Add(b);
}
for(int y=0;y<ItemsCount; y++)
for(int x=0;x<ItemsCount; x++)
{
dynamic_cast<TSpeedButton*>(lst->Items[y*ItemsCount+x])->Caption = AnsiString(x) + " : " + y;
}
}



Николай, спасибо огромное!!!

3
16 апреля 2003 года
Green
4.8K / / 20.01.2000
Цитата:
Originally posted by McSim


Николай, спасибо огромное!!!



А проще нельзя?

const ItemsCount=20;
TSpeedButton** Btns = new TSpeedButton*[ItemsCount*ItemsCount];

for(int y=0;y<ItemsCount; y++)
for(int x=0;x<ItemsCount; x++)
{
TSpeedButton* pBtn=new TSpeedButton(this);
pBtn->Parent = Panel1;
pBtn->Width = 20;
pBtn->Height = 20;
pBtn->Left = ItemsCount*x;
pBtn->Top = ItemsCount*y;
pBtn->onClick=OnButtonClick;
Btns[x+y*ItemsCount]= pBtn;
}

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог