3.2 Objekt States

Variable Syntax im UI-Code Im BASIC-Code
visible visible = TRUE | FALSE lesen, schreiben
fullyVisible -- nur lesen
enabled enabled = TRUE | FALSE lesen, schreiben
fullyEnabled -- nur lesen
readOnly readOnly = TRUE | FALSE lesen, schreiben

Methode Aufgabe
HideDelayed visible = FALSE mit verzögertem Bildschirmupdate
ShowDelayed visible = TRUE mit verzögertem Bildschirmupdate


visible, fullyVisible

Die Instance-Variable visible (engl.: sichtbar) bestimmt, ob das Objekt und seine Children auf dem Schirm erscheinen oder nicht. Wenn Sie ein Objekt auf nicht sichtbar (visible = FALSE) setzen, so wird es einschließlich seiner Children vom Schirm verschwinden. Das bedeutet im Umkehrschluss, dass ein Objekt verborgen sein kann, auch wenn es auf visible gesetzt ist. Um wirklich sichtbar zu sein, muss ein vollständiger Pfad von sichtbaren (visible = TRUE) Objekten bis zum (ebenfalls sichtbaren) Application-Objekt führen. Dieser Zustand heißt fullyVisible (= vollständig sichtbar) und kann im BASIC-Code abgefragt werden.

Jedes Objekt, das nicht explizit auf visible = FALSE gesetzt ist, ist per Default visible.


Syntax UI-Code: visible = TRUE | FALSE
         Lesen: <numVar> = <obj>. visible
     Schreiben: <obj>.visible = TRUE | FALSE
  Syntax Lesen: <numVar> = <obj>. fullyVisible

Beispiele: siehe unten.


HideDelayed, ShowDelayed

Ändert man zur Laufzeit den visible-Status eines Objekts, so verschwindet das Objekt sofort bzw. erscheint sofort. Das kann zu unerwünschtem Flackern des Bildschirms führen, z.B. wenn Sie mehrere Änderungen vornehmen oder ein Objekt nur kurzzeitig auf visible = FALSE setzen wollen, um bestimmte Änderungen vorzunehmen. HideDelayed setzt das Objekt auf visible = FLASE, ohne es sofort vom Schirm zu nehmen. ShowDelayed setzt entsprechend das Objekt auf visible = TRUE, ohne es sofort neu zu zeichnen.

In jedem Fall wird das Objekt spätestens dann neu dargestellt (oder vom Schirm genommen), wenn der Action-Handler, in dem die ~Delayed-Methode aufgerufen wurde, beendet ist.

Sie können HideDelayed und ShowDelayed beliebig mit dem direkten Belegen der Instancevariable visible mischen. Die häufigste Variante ist das Aufrufen von HideDelayed, danach z.B. das Hinzufügen oder entfernen von Children (bis hier passiert auf dem Bildschirm nichts) und abschließend setzen von visible = TRUE. Erst jetzt stellen sich die Objekte in der neuen Konfiguration neu dar.


Syntax: <obj>. HideDelayed
        <obj>. ShowDelayed

 

enabled, fullyEnabled

Ein Objekt ist enabled (engl.: aktiviert), wenn der Nutzer damit interagieren kann. Objekte, die nicht enabled sind, zeichnen sich üblicherweise in grau. Wenn Sie ein Objekt auf nicht enabled (enabled = FALSE) setzen, so werden auch alle seiner Children nicht enabled erscheinen, auch wenn ihre eigene Instance-Variable enabled auf TRUE steht. Um wirklich enabled zu sein, muss ein vollständiger Pfad von enabled Objekten bis zum (ebenfalls enabled) Application-Objekt führen. Dieser Zustand heißt fullyEnabled (= vollständig enabled) und kann im BASIC-Code abgefragt werden.

Jedes Objekt, das nicht explizit auf enabled = FALSE gesetzt ist, ist per Default enabled.


Syntax UI-Code: enabled = TRUE | FALSE
         Lesen: <numVar> = <obj>. enabled
     Schreiben: <obj>.enabled = TRUE | FALSE
  Syntax Lesen: <numVar> = <obj>. fullyEnabled

Beispiele: siehe unten.


readOnly

Ein readOnly (engl.: nur lesen) Objekt ignoriert Texteingaben vom Nutzer. Das ist nur für Objekte, die prinzipiell Texteingaben entgegennehmen können, von Bedeutung. Andere Objekte, wie Buttons, ignorieren den readOnly Wert. Das heißt konkret, dass das Setzten einer Group oder eines ähnlichen Objekts auf readOnly nicht dazu führt, dass deren Children (z.B. Texte) readOnly werden.

ReadOnly Objekte ignorieren nur Eingaben vom Nutzer, es ist daher trotzdem möglich alle Instance-Werte eines readOnly-Objekts vom BASIC-Code aus zu ändern.


Syntax UI-Code: readOnly = TRUE | FALSE
         Lesen: <numVar> = <obj>. readOnly
     Schreiben: <obj>.readOnly = TRUE | FALSE

Beispiele
Der UI-Code definiert eine Gruppe, die ein readOnly Text Objekt und ein auf "nicht enabled" gesetztes Value Objekt enthält.
Group MyInputGroup
    Children = MyText, MyValue
    < .. weitere instances.. >
    End Object

Memo MyText
    readOnly = TRUE
    text$ = "Hallo Welt!"
    < .. weitere instances.. >
    End Object

Value MyValue
    enabled = FALSE
    < .. weitere instances.. >
    End Object
Der folgende BASIC-Code ändert einige Dinge. Es wird vorausgesetzt, dass die Buttons, deren ActionHandler hier implementiert werden, irgendwo definiert sind.
ButtonAction VersteckeGroup
    MyGroup.visible = FALSE
    End Action

ButtonAction MacheTextEditierbar
    MyText.readOnly = FALSE
    END Action

ButtonAction SchalteValueEnabeldStateUm
    If MyValue.enabled = FALSE THEN
        MyValue.enabled = TRUE
    ELSE
        MyValue.enabled = FALSE
    END IF
END Action    

ButtonAction SchreibeEtwasText
    IF MyText.readOnly THEN
        MyText.text$ = "Der Text ist read only."
    ELSE
        MyText.text$ = "Sie können den Text ändern."
    END IF
    END Action

^

Weiter...