Создание динамического массива кнопок
Сразу пример:
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 *)"
Может кто сталкивался с подобной задачей?
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;
}
}
Цитата:
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;
}
}
Вот пример
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;
}
}
Николай, спасибо огромное!!!
Цитата:
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;
}