GFA-Basic Einsteigerkurs (4)

Nachdem dieser aus dem Revolution-CD-Magazin übernommene Kurs nun zwei Ausgaben pausiert hat, wird er in loser Folge mit neuen Teilen fortgesetzt werden. In Ausgabe 5/99 wurden nützliche Tools aufgelistet, die bei der Programmierung mit GFA-BASIC sehr hilfreich und teilweise sogar unentbehrlich sind.

Der zweite Teil in Ausgabe 6/99 zeigte eine kleine Einführung in die Programmplanung und die Grundbefehle der Programmiersprache GFA-BASIC. Exportfunktionen zum Speichern und Lesen von Festplatte und der Ausgabe auf den Drucker wurden im dritten Teil in Ausgabe 7-8/99 gezeigt. Sollten Sie also Fragen zum Grundeinstieg in diese Programmiersprache haben, so haben Sie die Möglichkeit, in den ersten drei Teilen dieses Kurses nachzulesen. Nebenbei sei auch erwähnt, daß eine geringe Anzahl dieser Ausgaben noch beim Falke-Verlag zu bestellen sind, wo Sie auch das komplette GFA-BASIC Entwicklungssystem erwerben können. Sollten Sie Themenvorschläge für diesen Kurs haben, so setzen Sie sich bitte mit der Redaktion in Verbindung, so daß ich das Thema ggf. in einem der nächsten Teile behandeln kann. Viele Lösungen zu Problemen können Sie inzwischen aber auch schon im Internet unter "http://www.nord-online.de/gfaworld/" finden.

Teil 4: 3-D-Dialoge schnell und einfach erstellen

Früher reichte es dem Programmierer, wenn er die Ein- und Ausgabe von Text und Daten direkt auf dem Bildschirm durchführen konnte. Heute, im Zeitalter der Multitaskingbetriebssysteme, ist dieses alles nicht mehr möglich, da dadurch der Bildschirm zerstörerisch überschrieben werden würde. Zur Eingabe werden deshalb Dialoge und zur Ausgabe Fenster benutzt. Bei der Programmierung in GFA-BASIC gibt es mehrere Möglichkeiten, diese einzubinden. Jede dieser Möglichkeiten setzt allerdings voraus, daß man zuerst unter Zuhilfenahme eines RSC-Editors einen Dialog gestaltet. Zwei dieser Programme sind Interface" und der ASH-ResourceMaster. Interface wird zwar nicht mehr weiterentwickelt, bietet aber für einen günstigen Preis alles, was man meiner Meinung nach zum Erstellen von Resourcen benötigt.

Da mir der ASH-ResourceMaster leider auch nicht zur Verfügung steht, werde ich auf ihn auch nicht weiter eingehen können.

Erstellen einer Resource in Interface

Nach dem Start von Interface öffnet man sich über Datei / Neu (CONTROL + N) ein neues Resource-Fenster (Abbildung 1). Aus dem Bäume-Fenster (Abbildung 2, Bearbeiten / Bäume (B)) zieht man mit der Maus den gewünschten Baum in das

Resource-Fenster und gibt den Namen für den Baum, in diesem Fall ein Dialog mit dem Namen "TEST", ein (Abbildung 3).

Durch einen Doppelklick auf das Symbol für den Dialog TEST öffnet sich das Bearbeitungsfenster (Abbildung 4). Der schwarze Rahmen zeigt die momentane Größe des Dialoges an, die man beliebig verändern kann - zum einen, indem man in der rechten unteren Rahmenecke mit der Maus bei gedrückter linker Maustaste zieht und zum anderen, indem man bei das Kontextmenü mit der linken Maustaste öffnet und den Eintrag "Plazieren" anwählt. In dem dann erscheinenden Dialog lassen sich die Koordinaten über die Tastatur eingeben. Nun plaziert man die benötigten Objekte aus dem Objekte-Fenster (Abbildung 5, Bearbeiten / Objekte (O)), indem man sie mit der Maus aus herüberzieht in den Dialog (Abbildung 6).

Für jedes Objekt lassen sich verschiedene Einstellungen machen (Abbildung 7). Diese aber hier aufzulisten, würden den Rahmen dieser Ausgabe um einiges sprengen. Alle Einstellmöglichkeiten sind ausführlich in der Interface beiliegenden Anleitung, zum Teil auch als Text-Datei, beschrieben.

Um diese Dialoge nun in ein GFA-BASIC-Programm einzubinden, gibt es wiederum viele Möglichkeiten. Die meistverbreitete ist wohl über die Benutzung des Programmes faceValue, das die Erstellung von Dialogen in Fenstern und Einbindung vieler weiterer Aktionen ermöglicht. Wer aber nicht extra Geld ausgeben möchte, der kann sich auch der Interface beiliegenden MyDials für GFA-BASIC bedienen, die inzwischen von Hans-Joachim Riedl weiter entwickelt wurden. Wie dieses in GFA-BASIC erfolgt, zeige ich im Folgenden. Wichtig dabei ist, daß für die zu verwendeten Resource-Objekte im RSC-Editor auch die richtigen Einstellungen für den "erweiterten Typ" gemacht und die richtigen Flags gesetzt wurden (Abbildung 7). Der MyDials-Library liegen die Dateien MYDIAL.OVL, XRSRC.OVL und DEMOXRMD.LST bei. Die OVL-Dateien sind die Libraries, die bei Initialisierung vom Programm und GFA-BASIC nachgeladen werden und somit immer im Programmverzeichnis stehen müssen (auch bei compilierten Programmen!). Die LST-Datei enthält am Ende die MyDials-Funktionen (der Beginn ist mit einem mit Sternchen umrandeten "Von den XRSRC- / Mydial-Routinen zusätzlich benötigte Routinen", "XRSRC-Routinen" und "MYDIAL-Routinen" gekennzeichnet), die zwingend in das eigene Programm eingebunden, das heißt, über die MERGE-Funktion eingeladen werden müssen. Im GFA-BASlC-Interpreter muß dann der folgende Quellcode eingegeben werden (siehe Listing 1). Zuerst muß für die MyDials und die RSC Speicherplatz reserviert werden, dessen Größe der RSC angepaßt werden muß - dieses gilt auch für den RESERVE-Befehl. Danach werden die Pfade eingestellt, in dem die Programm-, RSC- und OVL-Dateien liegen. Als nächstes müssen einige globale und AES-Variablen definiert werden, was über den Aufruf der folgenden MyDials-Funktionen geschieht . Hierzu werden folgende Prozeduren benötigt (siehe Listing 2). Die anderen sind wiederum Funktionen und Prozeduren aus den MyDials. In die Prozedur rsc_vars müssen über die MERGE-Funktion die Variablen aus der von Interface beim Speichern der RSC-Datei erstellten LST-Datei eingelesen werden (siehe Listing 3).

Die Kommentare in den Quelltexten sollten ausführlich genug sein, um zu verstehen, was welche Anweisung macht. Aus diesem Grund werde ich die einzelnen Anweisungen und Funktionen nicht weiter kommentieren. Damit die MyDials am Programmende auch wieder genügend Speicher freigeben, muß die MyDials-Prozedur "exit_mydial" der Anzahl der vorhandenen Bäume angepaßt werden:

Die folgende Zeile muß unbedingt an das jeweilige Programm angepaßt werden. FOR i&=0 TO 30 ! !! Nummer des höchsten Objektbaums eintragen !! Die Nummer des höchsten Objektbaumes, in diesem Fall 30, entnehmen Sie dem letzten aufgelisteten Wert für einen Baum in der eingelesenen, von Interface beim Speichern erstellten LST-Datei, die Sie in die Prozedure "rsc vars" geMERGEt haben.

Nun haben Sie zwar alle MyDials-Elemente im Quelltext und beim Programmstart die RSC-Datei geladen, aber es fehlt noch die Möglichkeit, einen Dialog darzustellen. Zum Aufrufen eines Dialoges sollten Sie zuerst die FTEXT-Objekte (Texteingabefelder) löschen oder mit einem beliebigen Wert auffüllen: ~FN my_objc_setstring (dialog_adresse%, ftextobjektname&,"")

Danach können Sie den Dialog öffnen (Listung 4 -verfügbar auf der Spezial-Diskette 11/99 und Leser-CD 1/2000 und unter http://www.atari-world.com). Die Routine ruft den Dialog auf und wertet die Button-Events aus. Wird der Abbruch-Button gedrückt, wird der Dialog geschlossen und die Schleife beendet. Dem OK-Button kann man noch beliebigen Code zuweisen. Zu beachten bei dem gesamten obigen Programmcode ist, daß es sich hierbei um eine Routine für eine Resource mit Menü-Baum handelt. Für eine Routine ohne Menü-Baum muß der Code unbedingt abgeändert werden.

Listing l: Download
Listing 2: Download
Listing 3: Download


Torsten Runge
Aus: ST-Computer 11 / 1999, Seite 25

Links

Copyright-Bestimmungen: siehe Über diese Seite