- Im Beispiel kann durch Klick auf den Button1 eine beliebige Anzahl neuer Fenster in der Mainform erzeugt werden, hierzu wird ein dynamisches Array angelegt, in welchem Zeiger auf die Forms hinterlegt werden.
- Ein Klick auf Button2 zerstört das jeweils letzte Fenster.
- *.h
#ifndef Unit1H
#define Unit1H
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
class TForm1 : public TForm
{
__published: // Von der IDE verwaltete Komponenten
TButton *Button1;
TButton *Button2;
TLabel *Label1;
TLabel *Label2;
void __fastcall Button1Click(TObject *Sender);
void __fastcall Button2Click(TObject *Sender);
private: // Anwender-Deklarationen
public: // Anwender-Deklarationen
__fastcall TForm1(TComponent* Owner);
DynamicArray<TForm*->Form2; //dynamisches Array mit TForm-Zeigern
int FensterNr; //Nummer des letzten erzeugten Fensters
};
extern PACKAGE TForm1 *Form1;
#endif
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner)
{
Randomize();
FensterNr = 0;
Form2.Length = 1; //Startlänge des Arrays = 1 setzen
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Neue Form mit Zufallsfarbe (rot, grün, blau) erzeugen
Form2[FensterNr] = new TForm(Application);
Form2[FensterNr]->Parent=this;
Form2[FensterNr]->BorderStyle = bsSizeable;
Form2[FensterNr]->Left=random(1000);
Form2[FensterNr]->Top=random(700);
Form2[FensterNr]->Height=300;
Form2[FensterNr]->Width=300;
switch (random(3))
{
case 0: Form2[FensterNr]->Color=clRed;
break;
case 1: Form2[FensterNr]->Color=clBlue;
break;
case 2: Form2[FensterNr]->Color=clGreen;
break;
}
Form2[FensterNr]->Show();
Form2.Length++; // Arraygröße erhöhen
FensterNr++; // Fensterzähler erhöhen
Label1->Caption = IntToStr(FensterNr);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
if (FensterNr > 0)
{
FensterNr--; //Fensterzähler wieder erniedrigen
delete Form2[FensterNr]; //Letztes Fenster zerstören
Form2.Length--; //Array wieder verkleinern
Label1->Caption = IntToStr(FensterNr);
}
}