dynamiczne generowanie komponentów

0

Witam, chciałbym się dowiedzieć czy można dynamicznie generować ilość "labeli" (innych komponentów) w trakcie działania programu. Np. użytkownik wpisuje w edita liczbę 20 i po kliknięciu rysyje mu się 20 labeli lub buttonów. Czy da się coś takiego zrobić? Jeśli tak to jaK?

0

Jasne że tak. Tworzysz wektor i tam zapisujesz wskaźniki do komponentów które wytworzyłeś w pętli i już. Tylko musisz komponentowi podać rodzica żeby był widoczny na formie:-)

0
Pokemaniak napisał(a)

Jasne że tak. Tworzysz wektor i tam zapisujesz wskaźniki do komponentów które wytworzyłeś w pętli i już. Tylko musisz komponentowi podać rodzica żeby był widoczny na formie:-)

Możesz podać jakiś przykład ?

0
{
  int Ilosc = StrToIntDef(Edit1->Text, 0);
  for (int i=0; i<Ilosc; i++)
  {
    TLabel *Nowy = new TLabel(this);
    Nowy->SetBounds(100, 100+i*28, 100, 24);
    Nowy->Parent = this;
    Nowy->Caption = "Label" + IntToStr(i);
  }
}
0

Podany przez Ciebie kod działa. Ale mam jeszcze jedno pytanie ... Jak teraz wywołać zdarzenie onclick dla np. 5, 8, i 12 labela?

0

A żeby nie przepadły do niego wskaźniki:

{
  int Ilosc = StrToIntDef(Edit1->Text, 0);
  TLabel *Lab = new TLabel [Ilosc];
  for (int i=0; i<Ilosc; i++)
  {
    Lab[i]=new TLabel(this);
    Lab[i]->SetBounds(100, 100+i*28, 100, 24);
    Lab[i]->Parent = this;
    Lab[i]->Caption = "Label" + IntToStr(i);
  }
}
0

Dodawanie:

{
  int Ilosc = StrToIntDef(Edit1->Text, 0);
  for (int i=0; i<Ilosc; i++)
  {
	TLabel *Nowy = new TLabel(this);
	Nowy->SetBounds(100, 100+i*28, 100, 24);
	Nowy->Parent = this;
	Nowy->Caption = "Label" + IntToStr(i);
	Nowy->Tag = i;
	Nowy->OnClick = Clicks;
  }
}

Metoda Clicks:

void __fastcall TForm1::Clicks(TObject *Sender)
{
	ShowMessage(IntToStr(((TLabel*)Sender)->Tag));
}

Metodę należy zadeklarować w plik *.h (może być w ramach private klasy TForm, oraz zdefiniować w *.cpp).

1 użytkowników online, w tym zalogowanych: 0, gości: 1