Kriechende Dialoge: Fliegende Dialoge unter GFA-Basic

Seit einiger Zeit existieren Dialogerweiterungen, die das etwas angestaubte GEM des Atari um nützliche Elemente bereichern, die man sonst nur aus der Welt des bunten Apfels kennt. Mit der »CreepDials«-Library kommen jetzt auch GFA-Basic-Programmierer in den Genuß ankreuzbarer und runder Buttons.

Die Library bietet die Möglichkeit, Dialoge in eigenen Programmen mit unterstrichenen Überschriften, runden oder eckigen Radiobuttons, Ankreuzbuttons, Titelrahmen und Pop-Up-Menüs auszustatten. Alle Elemente lassen sich komplett über die Tastatur steuern, die Dialoge sind frei verschiebbar. Die Bibliothek besteht aus 14 Prozeduren, die Sie einfach zum Quelltext hinzuladen. Kern ist ein 980 Bytes langes Assemblermodul, das die Darstellung der meisten erweiterten Objekte übernimmt. Die Tastaturbedienung wurde durch eine FORM—DO-Routine realisiert, die die gleichnamige AES-Funktion komplett ersetzt. Information über die aktuelle Auflösung und Zeichengröße werden über das VDI angefordert, was eine absolute Auflösungsunabhängigkeit garantiert. Desweiteren laufen auch die Bildschirmausgaben ausschließlich über das VDI, um möglichst mit allen Grafiktreibern kompatibel zu sein.

Um die Bibliothek zu nutzen, brauchen Sie neben GFA-Basic ein Resource-Construction-Set. Wie Sie dem RCS von Atari, das ja auch dem Basic beiliegt, zu erweiterten Objekttypen verhelfen, lesen Sie im Artikel ab Seite 58. Das derzeit wohl leistungsfähigste RCS ist »Interface« der Firma Shift, auf das wir uns im Folgenden beziehen. Es liegt inzwischen in der Version 2.0 vor und erlaubt es, erweiterte Objekte sofort auszutesten. Damit kontrollieren Sie das endgültige Aussehen der Dialoge gleich beim Anlegen und nicht erst im eigenen Programm. Die einzelnen Elemente kopieren Sie einfach mit der Maus in den eigenen Dialog und betrachten oder testen sie mit F9. Eine Liste der erweiterten Objekttypen sehen Sie in Bild 1.

Viele Beispiele zum sinnvollen Einsatz der neuen Objekte finden sich in den Resourcen zu Interface. Bitte übernehmen Sie den optisch klar gegliederten Aufbau der Dialoge von Interface auch in Ihren eigenen Resourcen. Die Benutzer solcher GEM-Programme werden Ihnen dafür dankbar sein. Da Atari nie klare Richtlinien über die Elemente eines Dialoges aufgestellt hat, verweise ich auf die am Ende angegebene Fachliteratur, die sich ausgiebig mit diesem Thema auseinandersetzt.

Die Prozeduren

Im GFA-Basic-Programm rufen Sie nach dem Laden der Resource die Prozedur »prepare_rsc« auf. Sie modifiziert alle Objektbäume und trägt die erweiterten Objekte ein. Danach folgt der Aufruf von »do_dial« und der Dialog wird dargestellt und komplett verwaltet. Intern zeichnet das Programm die Dialogbox mit Hilfe von »draw_dial« und springt dann die eigene »FORM_DO«-Routine an. Diese ruft ihrerseits die Prozedur »move_dial« auf, falls der Anwender das »Eselsohr« in der rechten oberen Ecke anklickt. Außerdem ist diese Routine für die Maus- und Tastaturbedienung zuständig und wird durch Anklicken eines (Touch-)Exit-Buttons wieder verlassen.

In die »do_dial«-Prozedur zurückgekehrt, schaut das Programm erst einmal nach, ob nicht ein Pop-Up-Button betätigt wurde. Ist dies der Fall, kommen die Unterprogramme »popup—select« oder »popup_menu« zum Einsatz, je nachdem, ob es sich bei dem gewählten Pop-Up um eine Eintragsauswahl oder um ein Menü handelt. Den Unterschied der beiden Pop-Up-Arten verdeutlicht das Beispielprogramm. Das »Geschlecht-Pop-Up« ist eine Auswahl, das »Optionen-Pop-Up« ein Menü. Falls kein Pop-Up-Button gedrückt wurde, verschwindet die Dialogbox mit »undraw_dial« wieder und es erfolgt ein Rücksprung ins Hauptprogramm. Wollen Sie dieses auch verlassen, ist noch ein Aufruf von »mem_free« nötig, um dem Betriebssystem den von »prepare_rsc« angeforderten Speicher zurückzugeben. Die Parameter der einzelnen Prozeduren und ihre Bedeutung stehen als Kommentar am Anfang jedes Unterprogramms.

Bild 1. Die erweiterten Objekttypen

Variablen und Felder

Um die Einbindung der Bibliothek nicht unnötig zu erschweren, bleiben sämtliche Variablen und Strings lokal. Alle global benötigten Daten hingegen sind in Feldern gespeichert. Das Feld t_a%() enthält die Adressen aller Objektbäume. Die benötigten Informationen zu den einzelnen Bäumen stehen in t_inf%().

Im Feld para%() stehen u.a. Informationen über die maximale Pixelposition und über die Höhe und Breite einer einzelnen Zeichenzelle. Eine genaue Auflistung aller wichtigen Feldeinträge ist in »prepare_rsc« kommentiert. Das Hauptprogramm darf die Einträge weiter verwenden, aber nicht ändern. Alle nicht aufgelisteten Felder dienen zum internen Datenaustausch oder zur Parameterübergabe bei AES- und VDI-Aufrufen. Folgende Dinge sind bei der Einbindung der Library zu beachten: Sie sollten nur soviel Basic-Speicher reservieren wie unbedingt nötig. Die Größe ist hauptsächlich abhängig von der Anzahl der Objektbäume und vom Umfang des Hauptprogrammes. Außerdem müssen Sie die Pop-Ups an die eigene Resource anpassen.

Diese Änderung erfolgt im Unterprogramm »do_dial«. Der von FORM_DO zurückgelieferte Button-Index muß nur mit den eigenen Pop-Up-Buttons verglichen werden, um dann in die jeweiligen Unterprogramme zu verzweigen. Wenn Sie auch noch über die Optik der Radiobuttons und der Ecke entschieden haben, steht einer professionellen GEM-Oberfläche Ihrer eigenen Programme nichts mehr im Wege.

Auf der nächsten TOS-Diskette finden Sie die Library für GFA-Basic mit vielen Beispielen. (ah)

Literaturhinweis: Jankowski, Rabich, Reschke, ATARI Profibuch ST-STE-TT, 10. Auflage, Sybex, ISBN 3-88745-888 5

D. Geiß, J. Geiß, torn Anfänger zum GEM-Profi, 2. Auflage, Hüthig, ISBN 3-7785-2049-0 Engels, Görgens, GFA-Basic 3.0, 1. Auflage, GFA Systemtechnik, ISBN 3-89317-004-9


Manuel Hermann
Aus: TOS 12 / 1992, Seite 64

Links

Copyright-Bestimmungen: siehe Über diese Seite