In Delphi 3 wird es bestimmt schon TList geben.
Da kannst Du nach dem Erzeugen der Panels diese anhängen (anstatt eines Arrays).
PanelList: TList;
...
PanelList := TListe.Create;
...
//für jedes erzeugte Panel:
PanelList.Add(NewPanel);
...
//später kannst Du in einer Schleife rückwärts durch die Liste gehen und unsichtbare Panels löschen:
Delphi-Quellcode:
for I := PanelList.Count - 1 downto 0 do
begin
TmpPanel := TMyPanel(PanelList[I]);
if not TmpPanel.Visible then
begin
TmpPanel.Free;
PanelList.Delete(I);
end;
end;
// Die Schleife kannst Du jederzeit auslösen, z.B. in einem Timer oder nachdem ein Panel unsichtbar gesetzt wurde
// abwärts musst Du zählen, da sonst die Schleife beim löschen von Items mit dem Zähler durcheinander käme
// In PanelList.Count hast Du immer die Anzahl der existierenden Panels -> 0 = alle gelöscht
...
//Zum Schluss der Ordnung halber die Liste wieder freigeben:
PanelList.Free;