Fensterfarben

1961 wurde das Fernsehen farbig - 30 Jahre später werden auch GEM-Fenster endlich farbig...

TT- und Mega STE-Besitzer werden gemerkt haben, daß sie mit dem CPX-Modul WCOLORS.CPX die Farben der verschiedenen Fensterelemente einzeln einstellen können. Wer diese Fähigkeit der neuen TOS-Versionen 2.xx bzw. 3.xx in eigenen Programmen ausnutzen möchte, sucht in der Literatur (zumindest bisher) meistens vergeblich nach Informationen über die Fensterfarben. Dem soll hiermit abgeholfen werden.

In den TOS-Versionen 2.xx und 3.xx wurde die Fähigkeit, Fensterelemente verschiedenfarbig zu zeichnen, nicht durch eine neue Betriebssystemfunktion implementiert, vielmehr wurde die vorhandene AES-Funktion wind_set() um zwei mögliche Parameter erweitert. Das bedeutet natürlich auch, daß Besitzer von „alten“ STs, die ihre Rechner mit dem seit kurzem erhältlichen TOS 2.06 aufrüsten, auch in den Genuß von farbigen Fenstern kommen können.

Kraftvolle Farben - wie mit Coral gewaschen!

Hierzu dienen die zusätzlichen Parameter WF_COLOR und WF_DCOLOR. Der Aufruf von wind_set() sieht damit folgendermaßen aus:

wind_set( window_handle, WF_COLOR, element, active, inactive);

bzw.

wind_set(0, WF_DCOLOR, element, active, inactive);

Wird bei wind_set() der Parameter WF_COLOR angegeben, können die Farben der einzelnen Fensterelemente für dieses Fenster eingestellt werden. Das Fenster, dessen Elemente verändert werden sollen, wird durch den Parameter window_handle festgelegt. Andere Fenster werden durch den Aufruf nicht beeinflußt!

Mit dem Parameter element wird eingestellt, welches Fensterelement beeinflußt werden soll. Manche Elemente sind nur sichtbar, wenn das Fenster aktiv (also topped), andere dagegen nur, wenn das Fenster inaktiv ist. Einige Elemente sind jedoch auch in beiden Fällen sichtbar; in ihrem inaktivem Zustand jedoch meistens nur mit dem Rand. Wann welches Element in welchem Grade sichtbar ist, kann Tabelle 1 oder auch den Abbildungen 1 und 2 entnommen werden. Sollte Ihr C-Compiler die entsprechenden Definitionen noch nicht enthalten, können Sie Listing 1 in Ihre GEM/AES-Include-Datei einfügen. Einige der in Listing 1 aufgeführten Fensterelemente sind unsichtbar und werden daher im weiteren nicht beachtet.

Bild 1: Namen der Fensterelemente eines aktiven Fensters
Bild 2: Namen der Fensterelemente eines inaktiven Fensters

Die Parameter active bzw. inactive enthalten Randfarbe, Textfarbe, Schreibmodus, Füllmuster und Füllfarbe, sofern sie sinnvoll sind; ein Rollbalken beispielsweise enthält keinen Text. Ein Wert von -1 für active oder inactive behält die vorherige Einstellung bei. Entsprechend dem Merkmal des einzustellenden Fensterelementes wird ggf. auch nur einer der beiden Parameter benutzt, der andere wird nicht ausgewertet.

Der Aufbau der Objektfarbe, die in den Parametern active und inactive übergeben wird, geht aus Abbildung 3 hervor. Manch einem wird dieser Wortaufbau bekannt Vorkommen, es handelt sich dabei um die bekannte Objektfarbe von GEM-Objekten. Denn auch die Fenster sind intern nur Objektbäume, wie z.B. auch Dialogboxen. Und die Funktion wind_set(window handle, WF_COLOR, ...) macht nichts anderes, als die übergebene Farbe ins Objekt einzutragen.

#define WF_COLOR 18
#define WF_DCOLOR 19

#define W_BOX 0
#define W_TITLE 1
#define W_CLOSER 2
#define W_NAME 3
#define W_FULLER 4
#define W_INFO 5
#define W_DATA 6
#define W_WORK 7
#define W_SIZER 8
#define W_VBAR 9
#define W_UPARROW 10
#define W_DNARROW 11
#define W_VSLIDE 12
#define W_VELEV 13
#define W_HBAR 14
#define W_LFARROW 15
#define W_RTARROW 16
#define W_HSLIDE 17
#define W_HELEV 18

Listing 1: Definitionen der Parameter und Fensterelemente

Abbildung 3: Aufbau einer Objektfarbe

Wird wind_set() mit dem Parameter WF_DCOLOR aufgerufen, wird die Default-Farbe des Fensterelementes für alle zukünftig zu erschaffenden Fenster eingestellt. Dabei wird kein bereits vorhandenes Fenster beeinflußt! Erst wenn das Fenster geschlossen und wieder geöffnet wurde, werden die Änderungen wirksam. Daher wird von wind_set() hier auch das Fenster-Handle ignoriert (es sollte auf Null gesetzt werden), denn die gemachten Einstellungen beziehen sich ja nicht auf ein bestimmtes Fenster.

Ein Programm, das von dieser Funktion Gebrauch macht, ist das CPX-Modul „Fensterfarben“, mit dem die Default-Farben für die verschiedenen Fensterelemente eingestellt werden können.

„Put on your peril-sensitive sunglasses..."

Zum Schluß noch ein kleiner Hinweis: Es ist jetzt zwar möglich, auf dem Atari „tierisch“ bunte Fenster zu gestalten, mindestens genauso bunt wie auf Amigas oder unter Windows auf PCs, jedoch sind solche bunten Monster weder benutzerfreundlich noch augenschonend (es sei denn, Sie sitzen gerne mit der Sonnenbrille vor Ihrem Computer). Durch gezielten Einsatz der Farben läßt sich die Benutzerfreundlichkeit jedoch erhöhen. Und gerade das ist ja der Sinn einer grafischen Benutzeroberfläche. Weniger ist eben oft mehr.

Oliver Scholz & Uwe Hox

Element Merkmal Beschreibung
W_CLOSER aktiv Schließbox
W_NAME aktiv & inaktiv Namensbalken
W_FULLER aktiv Fullbox
W_INFO aktiv & inaktiv Infozeile
W_SIZER aktiv & inaktiv Sizebox
W_VBAR inaktiv Elternobiekt der vertikalen Slider-Elemente
W_UPARROW aktiv Pfeil nach oben
W_DNARROW aktiv Pfeil nach unten
W_VSLIDE aktiv Hintergrund des vertikalen Sliders
W_VELEV aktiv vertikaler Slider
W_HBAR inaktiv Elternobjekt der vertikalen Slider-Elemente
W_LFARROW aktiv Pfeil nach links
W_RFARROW aktiv Pfeil nach rechts
W_HSLIDE aktiv Hintergrund des horizontalen Sliders
W_HFLEV aktiv horizontaler Slider

Tabelle 1: Bezeichnungen der Fensterelemente



Links

Copyright-Bestimmungen: siehe Über diese Seite