4.2 Primary

...

Objekte der Klasse Primary sind die "Hauptfenster" des Programms. Primaries haben links oben ein System-Menü, rechts oben die Schalter für "Minimieren" und "Maximieren" sowie bei Bedarf einen "Hilfe" Schalter (Fragezeichen).

Im Allgemeinen hat jedes BASIC Programm genau ein Primary-Objekt.

Focus und Target

Das Primary-Objekt ist ein Knoten in der Focus- und Target-Hierarchie. Es ist möglich zu überwachen, ob ein Primary-Objekt den Focus oder das Target hat, indem man einen Focus- bzw. Target-Handler schreibt. Die notwendigen Details zur Arbeit mit Focus und Target finden Sie im Kapitel 12 (Focus und Target) des Handbuchs "Spezielle Themen". Das Arbeiten mit Focus und Target ist etwas für erfahrene Programmierer und nur in wenigen Fällen notwendig. Eine Ausnahme bildet die Implementation von speziellen Menüs wie dem "Bearbeiten" Menü. Diesem Thema ist deswegen ein eigenes Kapitel ("Spezielle Themen", Kapitel 13) gewidmet.

Abstammung:

...

Spezielle Instance-Variablen:

Variable Syntax im UI-Code Im BASIC-Code
BreakButton BreakButton = TRUE --
FileMenuChildren FileMenuChildren = <objektListe> --
Caption2$ -- lesen, schreiben
PrimaryFullScreen PrimaryFullScreen --
NoFileMenu NoFileMenu --
NoExpressMenu NoExpressMenu --
PrimaryNoHelpButton PrimaryNoHelpButton --

Spezielle Action-Handler: keine

BreakButton

Oftmals, besonders während der Fehlersuche, ist es erwünscht, einen laufenden Action-Handler abbrechen zu können, ohne gleich GEOS abzuwürgen. Das kann z.B. bei einer versehentlichen Endlosschleife der Fall sein, das Programm "hängt". Diese BREAK (Unterbrechung) genannte Funktion ist typisch für BASIC-Programme, bei "richtigen" GEOS-Programmen aber nicht vorhanden.

Das BreakButton-Statement fügt einen Break-Schalter zum Dateimenü des Primaries hinzu und aktiviert gleichzeitig die Tastenkombination Strg-B zum Auslösen eines BREAK.


Syntax UI-Code: BreakButton = TRUE

 

FileMenuChildren

Jedes Primary hat automatisch ein Datei-Menü. Dort ist per Default nur der "Beenden" Button enthalten. Häufig möchte man dort aber weitere Einträge vorsehen, z.B. zur Arbeit mit Dateien oder den Copyright-Dialog ("Über ... "). Das FileMenuChildren-Statement fügt die angegeben Objekte als Children in das Dateimenü ein.


Syntax UI-Code: FileMenuChildren = <ObjektListe>

Beispiel:
Die in der Liste angegeben Objekt müssen natürlich extra vereinbart werden:

Primary MainPrimary
  Children = ... 
  FileMenuChildren = AboutBox, SaveFileButton, LoadFileButton
END OBJECT
Die Anzahl der Objekte in einer einzigen FileMenuChildren-Liste ist auf 25 begrenzt. Wenn Sie mehr Children spezifizieren wollen können Sie, wie bei der Children-Anweisung, siehe Kapitel 2.1.2, mehrere FileMenuChildren-Anweisungen für ein Objekt verwenden.

Caption2$

Die Instancevariable Caption2$ ergänzt die Titelzeile des Primaryobjekts um einen weiteren Text. Üblicher Weise wird Caption2$ verwendet um den Namen des aktuellen Dokuments in der Titelzeile des Programms anzuzeigen. Caption2$ kann nicht im UI-Code verwendet werden.


Syntax Lesen: <stringVar> = <obj>.Caption2$
   Schreiben: <obj>.Caption2$ = "text"

 

Anpassen des Primary-Objekts

Das Primary-Objekt stammt von der GenericClass ab und erbt deswegen alle Fähigkeiten und Eigenschaften dieser Klasse. Das trifft insbesondere für die Geometrie-Fähigkeiten zu, wie z.B.

orientChildren
justifyChildren
MinimizeChildSpacing
DivideHeightEqually
DivideWidthEqually
childSpacing
Von besonderer Bedeutung für Primaries sind die Windows-Hints wie z.B.
SizeWindowAsDesired
NoTitleBar
NoSysMenu
Von der Klasse Display erbt das Primary die folgenden Instancevariablen. Eine ausführliche Beschreibung finden Sie im Kapitel 4.18.2 bei der Beschreibung der Display Klasse. Die Instancevariablen userDismissable, OnClose sowie die Methode Close werden nicht vererbt, das Primary Objekt implementiert hier sein eigenes Handling.

Variable Syntax im UI-Code Im BASIC-Code
minimizedState minimizedState = TRUE | FALSE lesen, schreiben
MinimizedOnStartup MinimizedOnStartup --
NotMinimizable NotMinimizable --
maximizedState maximizedState = TRUE | FALSE lesen, schreiben
MaximizedOnStartup MaximizedOnStartup --
NotMaximizable NotMaximizable --
NotResizable NotResizable --
NotRestorable NotRestorable --

Zusätzlich besitzen Primaries einige eigene Geometriefähigkeiten.

PrimaryFullScreen

Die Anweisung bewirkt, dass das Primary große Teile des Bildschirms einnimmt, so wie die "großen" Applikationen "GeoWrite" und "GeoDraw". Unten bleibt ein Rand für iconisierte Applikationen.


Syntax UI-Code: PrimaryFullScreen

Beispiel:
Primary MyPrimary
  Children = ......
  PrimaryFullScreen
END Object


NoFileMenu

Die Anweisung verhindert, dass das Primary ein Datei-Menü hat. Es ist aber unwirksam, wenn es gleichzeitig mit FileMenuChildren oder BreakButton verwendet wird, da diese ein Dateimenü zwingend erfordern.


Syntax UI-Code: NoFileMenu

 

NoExpressMenu

Die Anweisung verhindert, dass sich das Express-Menü in der Titelzeile des Primaries ansiedelt.


Syntax UI-Code: NoExpressMenu

Beispiel:
Primary Primary2
  Children = ......
  NoExpressMenu
  NoFileMenu
END Object

PrimaryNoHelpButton


Syntax UI-Code: PrimaryNoHelpButton

Wenn Ihr Programm eine Hilfedatei hat, ist es sinnvoll dem Primary den HelpContext "TOC" (Table Of Contents = Inhaltsverzeichnis) zu geben, damit das Hilfesystem das Inhaltsverzeichnis findet.
Primary MyPrimary
  Children = ......
  helpContext$ ="TOC"
END Object
Diese Anweisung erzeugt jedoch gleichzeitig den Hilfebutton in der Titelzeile des Primaryobjekts (i.a ein blaues Fragezeichen). Wenn dies im Ausnahmefall stört können Sie es mit dem Hint PrimaryNoHelpButton unterdrücken.

Beachten Sie, dass der Name der Hilfedatei (Eintrag helpFile$) immer im Applicationobjekt erfolgen sollte, damit der vom Hilfesystem im Hilfefenster bereitgestellte Button "Inhalt" funktioniert.

Primary MyPrimary
  Children = ......
  helpContext$ ="TOC"
  PrimaryNoHelpButton
END Object

Besonderheiten des Primary Objekts

  • Wenn Sie einem Primary keine Caption$ geben, so wird automatisch der Name des Programms genommen.

  • Primary-Objekte sollten ständig im Objekttree eingebunden sein, Primaries, die kein Parent-Objekt haben, könnten die Systemstabilität beeinflussen. Verwenden Sie die Anweisung "myPrimary.visible = FALSE" bzw. im UI-Code "visible = FALSE", wenn sie ein Primary-Objekt verstecken wollen.

  • Es ist möglich, wenn auch selten verwendet, dass ein Programm mehr als ein Primary-Objekt hat. Achtung: Sie sollten niemals mehrere BreakButton Statements verwenden, auch wenn Sie mehr als ein Primary haben.

  • Primaries sind Window-Objekte. Es gibt eine Menge Window-orientierte Hints und Methoden, die auf GenericClass Level definiert sind und mit Primaries zusammenarbeiten. Beispiele sind SizeWindowAsDesired, NoSysMenu, ExtendWindowToBottomRight, CenterWindow und ResizeWin.

^

Weiter...