Announcement

Collapse
No announcement yet.

Das MainForm soll eine Procedure aufrufen, wenn das letzte MDI-Child geschlossen wird

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Das MainForm soll eine Procedure aufrufen, wenn das letzte MDI-Child geschlossen wird

    Hi Leut, <BR>
    wie kann ich das bewerkstelliegen? <BR> Ich benötige dies, um automatisch ein paar Pflegearbeiten durchführen zu können, bevor die nächste Verarbeitung beginnt.<BR>
    Mit MDIChildCount kann ich ermitteln, wieviele MDI's offen sind. Soweit so gut. Wie bewege ich aber das Hauptformular auf "keine MDIs mehr offen" selbststaendig zu reagieren? <BR>
    Ich habe versucht, die WM_MDIDESTROY Botschaft im Hauptformular abzufangen, jedoch ohne Erfolg, da diese Botschaft offensichtlich nur das MDICHILD erhält.<BR>
    Bekommt das Hauptformular nicht mit, wenn ein MDI-Fenster geöffnet bzw. geschlossen wird? Wäre blöd. Ich möchte nicht in alle meine MDI-Forms eingreifen müssen, um festzustellen, wer der letzte ist, der das Licht ausmacht. ;-)<BR>

    Danke

    Andreas


  • #2
    Reicht es nicht, das OnClose-Ereignis der MDI-Forms im Hauptformular abzufangen? Und wenn das Ereignis schon im MDI-Child selbst bearbeitet wird, kannst du ja dort eine Funktion des Hauptformulars aufrufen, die MDIChildCount prüft und ggfs. aufräumt.
    <br>Uli

    Comment


    • #3
      Uli, Danke erstmal.
      <BR>
      &gt; Reicht es nicht, das OnClose-Ereignis der MDI-Forms im Hauptformular abzufangen?
      <BR> - das würde ich ja gerne, aber wie? Das Hauptformular kennt ja kein Ereignis "MDIonClose" oder so.
      <BR>
      &gt; Und wenn das Ereignis schon im MDI-Child selbst bearbeitet wird, kannst du ja dort eine Funktion des Hauptformulars aufrufen
      <BR> - das will ich ja eben vermeiden. Ich habe mehr als 200 mögliche MDI Childs.
      <BR>

      Andrea

      Comment


      • #4
        &gt;das würde ich ja gerne, aber wie? Das Hauptformular kennt ja kein Ereignis "MDIonClose" oder so.<br>
        Du könntest eine Methode mit der zu OnClose passenden Signatur im Hauptformular schreiben, etwa<pre>
        procedure TMainForm.MDIClose(Sender: TObject; var Action: TCloseAction);
        </pre>
        und beim Erzeugen der MDI-Formulare mit deren OnClose-Ereignis verknüpfen:<pre>
        f := TMDIForm.Create(...);
        f.OnClose := MDIClose; // <===
        </pre>
        Das gibt aber Probleme, wenn du das OnClose einer MDI-Form schon implementiert hast, weil die markierte Zeile eine etwaige bestehende Verknüpfung kommentarlos überschreibt.
        <p>Und wenn du eventuell deine 200 MDI-Forms an 200 verschiedenen Stellen erzeugst, hast du im Endeffekt doch die gleiche Arbeit. :-

        Comment

        Working...
        X