Lade...
 

CloseWindow

CloseWindow

CloseWindow(windowID), CloseWindow(windowID, flag), CloseWindow(, flag), CloseWindow

Parameter:  windowID: Bezeichner eines Windows oder ALL

Stack
Stack Position Beschreibung
Stack(In) Top -
Stack(Out) Top -

Das durch windowID bezeichnete Fenster wird geschlossen. Für windowID kann ALL angegeben werden um alle offenen Fenster zu schließen.

ClassiX® verzögert das Schließen des Fensters, damit nachfolgende Anweisungen, die sich auf das Window oder eines seiner Child-Objekte beziehen, nicht zu einem Fehler führen (intern wird eine Anweisung CloseWindow2 generiert). Das hat folgenden Nebeneffekt: Wenn aus irgendeinem Grund die Ausführung der folgenden InstantView-Anweisungen abgebrochen wird (z.B. wenn ein Fehler zwischen dem Aufruf von CloseWindow und dem tatsächlichen Schließen auftritt, oder wenn der cancel-Befehl ausgeführt wird), wird das Fenster nicht geschlossen.

Wenn ein Fenster geschlossen wird bekommt es die Message CLOSE gesendet. Anschließend bekommt das Fenster sowie das aktive Widget im Fenster die Nachricht NON_CURRENT. Ein cancel innerhalb von CLOSE oder NON_CURRENT bricht nur die Abarbeitung der aktuellen Message ab, verhindert aber nicht mehr das Schließen des Fensters. Sollte während der Abarbeitung dieser Messages ein Fehler auftreten, dann schreibt ClassiX einen Crashdump und beendet sich augenblicklich mit einer Absturzmeldung. Dieses Verhalten ist so gewollt und analog zu Exceptions in Destruktoren in C++.

Nachdem CloseWindow auf ein Fenster aufgerufen wurde werden weitere Aufrufe auf dasselbe Fenster ignoriert. Genauso verhält es sich, wenn CloseWindow für ein Fenster aufgerufen wird, das gar nicht offen ist.

Flags
 Flag Bedeutung
NO_DRAIN Dieses Flag ist nur für solche Fenster sinnvoll, die mit Anweisung OboxEdit verbunden sind. Über NO_DRAIN wird bestimmt, ob das automatische Zurückschreiben der Änderungen in das Window (durch ein implizites DrainWindow) unterdrückt werden soll.
IMMEDIATELY Schließt das Fenster sofort (und nicht verzögert, s.o.). Dieses Flag sollte in zwei Fällen verwendet werden:
  • Das Fenster soll auf jeden Fall geschlossen werden, auch wenn die InstantView-Befehlsfolge durch einen Fehler abgebrochen wird
  • Um Ressourcen zu sparen (bzw. sofort freizugeben, bspw. in automatischen Tests, in denen viele Fenster geöffnet werden)

Beispiel

Beide Buttons im folgenden Beispiel schließen das Fenster. Allerdings unterscheidet sich die Reihenfolge der Attention-Meldungen.

Window(EditWin, 310, 87, 500, 60, T("Eingabefenster", "Input Window"))
[
  CLOSE: "Msg CLOSE" Attention
]
{
  Button(Close, 10, 10, 200, T("Schließen", "Close"))
  [ SELECT: CloseWindow "Close" Attention // "Close" kommt vor "Msg CLOSE"
  ]
  Button(CloseIMMEDIATELY, 10, 20, 200, T("Sofort Schließen", "Close Immediately"))
  [ SELECT: CloseWindow(EditWin, IMMEDIATELY) "CloseIMMEDIATELY" Attention // "CloseIMMEDIATELY" kommt nach "Msg CLOSE"
  ]
}

InstantView