Fein.
Dann hst Du ja die wesentlichen Dinge schon zusammen. Dein Hauptfenster könnte dann für Deine eigene Fensterverwaltung der Dreh- und Angelpunkt werden. Dort würde ich mir eine Liste (
TList) deklarieren (ich find's mit Listen einfacher als mit Arrays) und dann eine Referenz auf jedes neu erzeugte Fenster in dieser Liste ablegen:
Delphi-Quellcode:
procedure ...;
var EditorMOD: TEditor_MOD;
begin
EditorMOD := TEditor_MOD.Create(self);
EditorMOD.Show;
meineFensterListe.add( EditorMOD );
end;
Damit kannst Du Dir einen Überblick über alle derzeit offenen Fenster verschaffen. Jedoch musst Du ein Editor-Fenster wieder aus der Liste rauswerfen, wenn Du es schließt.
Willst Du also eine Aktion mit allen Fenstern machen, läufst Du einfach über die Liste und castest die Listenelemente auf den Typ "TEditor_MOD".
Wenn Du feststellen willst, was das aktuelle Fenster ist, so könntest Du Das Ereignis "onActivate" Deiner Editor-Fenster nutzen und in dem Ereignis-Handler Deinem Hauptfenster mitteilen, wer jetzt gerade aktuell ist:
Hauptfenster.setAktuellesEditFenster( self ); // Pseudocode...
Diese Routine "setAktuellesEditFenster()" merkt sich dann in einer Variablen die Referenz, die sie eben als Parameter erhalten hat.
Und Deiner eingangs angesprochenen Routine "AddAction" könntest Du dann als Parameter eine Referenz auf das Fenster mitgeben, mit dem sie arbeiten soll.
Aber viele Wege führen nach Rom ... mit mehr Kenntnis über die Architektur Deiner Anwendung könnte man vielleicht auch andere sinnvolle Vorschläge bringen. Unter Umständen macht es Sinn, eine Methode wie "addAction()" gleich als Methode Deines Editor-Fensters zu deklarieren. Dann könntest Du mit einem Aufruf wie
AktuellesEditFenster.addAction('');
irgendwas veranstalten.
Daniel R. Wolf
mit Grüßen aus Hamburg