Einzelnen Beitrag anzeigen

Warp

Registriert seit: 27. Mai 2006
45 Beiträge
 
Delphi XE4 Professional
 
#1

MDI-App, Hauptmenüeinträge enablen/disablen

  Alt 31. Dez 2008, 10:43
Hallo zusammen,

ich stehe vor einem Problem für das ich so recht keine generelle Architektur/Lösung habe. Folgende Basis:

Für MDI-Appplikationen möchte ich eine generelle Architektur aufbauen, mit der die Hauptmenüeinträge des MDI-Hauptformulars, die auf eine Action in einem MDI Child verweisen oder zielen, enabled oder disabled werden können je nach dem ob Childs geöffnet sind oder nicht. Eigentlich ein klassiches MDI Problem. Nur so recht fällt mir hier nichts Geniales ein.

Der Grundgedanke ist, auf Basis von MDIChildCount festzustellen, ob ein Child/mehrere Childs offen sind oder nicht. Wenn ja, kann das Enablen der Menüeinträge erfolgen, wenn nicht, werden diese disabled.

Delphi-Quellcode:
Beispielhaft so (die hier genutzten Actions liegen hier auf dem MDI Hauptformular und rufen die entsprechenden Actions/Methoden des Childs auf; das nur zu Erklärung zum Beispiel Code):

procedure TMainForm.AdjustActionsEnabledSettings;
begin
  if MDIChildCount > 0 then
  begin
    actnFileSave.Enabled:= TRUE;
    actnFileSaveAs.Enabled:= TRUE;
    actnFilePrintPreview.Enabled:= TRUE;
    actnFilePrintSettings.Enabled:= TRUE;
    actnEditUndo.Enabled:= TRUE;
    actnEditRedo.Enabled:= TRUE;
  end else
  begin
    actnFileSave.Enabled:= FALSE;
    actnFileSaveAs.Enabled:= FALSE;
    actnFilePrintPreview.Enabled:= FALSE;
    actnFilePrintSettings.Enabled:= FALSE;
    actnEditUndo.Enabled:= FALSE;
    actnEditRedo.Enabled:= FALSE;
  end;
end;
Was mir jetzt noch fehlt ist das "richtige" Ereignis, in dem ich so eine Prozedur aufrufen könnte. Es müsste ein Ereignis/eine Situation sein, in der sicher ist, dass bei einem "Child Close" dieses auch zur Laufzeit wirklich geschlossen ist, bevor die Abfrage auf MDIChildCount erfolgt. Ebenso bei "Child Create" - hier müsste das Erstellen schon erfolgt sein, bevor die MDIChildCount - Abfrage ausgeführt wird.

Ob Messages hier der richtige Weg sind ??? Die müssten ja auch an entsprechender Stelle (bspw. aus den Childs) getriggert werden ...aber auch hier lässt sich das Risiko "Child zur Laufzeit wirklich schon geschlossen oder erstellt" nicht ausschliessen (oder seh ich das falsch?).

Hat jemand von Euch eine passende Idee ?
  Mit Zitat antworten Zitat