dział:
porady
różne
Wyliczanie komponentów na formularzu, dostęp do komponentów poprzez pętlę.
void __fastcall TForm1::Button2Click(TObject *Sender)
{
ListBox1->Items->Clear(); /* lista do przechowywania nazw wyliczonych komponentów */
TComponent *Temp;
for(int i = Form1->ComponentCount - 1; i >= 0; i--)
{
Temp = Form1->Components[i];
if(reinterpret_cast<TForm *>(Temp)->Parent == Panel1)
{
ListBox1->Items->Add("Nazwa obiektu: " + reinterpret_cast<TForm *>(Temp)->Name + " <> Klasa obiektu: " + reinterpret_cast<TForm *>(Temp)->ClassName());
}
}
}
Metoda
reinterpret_cast lub
dynamic_cast jest potrzebna tylko wtedy, gdy chcesz wykorzystać jakieś funkcje typowe dla danej klasy. Tutaj można by się bez niej obyć i zrobić od razu tak:
ListBox1->Items->Add( "Nazwa obiektu: " + Temp->Name + " <> Klasa obiektu: " + Temp->ClassName() );
dział:
teoria
Rzutowanie typów, przypisanie polimorficzne.Klasa
TComponent nie posiada metody np.
Caption, więc nie da się użyć w ten sposób
Temp->Caption, trzeba wykorzystać polimorfizm i rzutować na klasę, która tą metodę posiada, czyli można użyć klasy
TLabel:
dynamic_cast<TLabel *>(Temp)->Caption = "Label";
Przenoszenie komponentów z Panelu na Panel można zrobić tak:
void __fastcall TForm1::Button2Click(TObject *Sender)
{
TComponent *Temp;
for(int i = Form1->ComponentCount - 1; i >= 0; i--)
{
Temp = Form1->Components[i];
if(reinterpret_cast<TPanel *>(Temp)->Parent == Panel1)
reinterpret_cast<TPanel *>(Temp)->Parent = Panel2;
else /* tylko po to by po ponownym kliknięciu wróciło na Panel1 */
if(reinterpret_cast<TPanel *>(Temp)->Parent == Panel2) /*Ten warunek jest konieczny */
reinterpret_cast<TPanel *>(Temp)->Parent = Panel1;
}
}