|
|
| 04.12.2025 | Archiv # Recherche # Links # Kontakt # Gästebuch # Impressum |
|
Index Login Die Anzeige des Archivs erfolgt grafisch. Ändern |
Kurs: GeoProgrammer (Teil 7)Menütechnik Eine der wichtigsten Anwendungen für GEOS Programmierer ist die Menütechnik. Diese soll nun behandelt werden. Grundlage dazu ist das Demo >Menütechnik<. Da wir inzwischen schon einige Erfahrungen mit dem allgemeinen Umgang bei der GEOS Programmierung haben, beschränke Ich mich auf die Beschreibung der Menügestaltung. Alles andere ist dem dokumentierten Listing zu entnehmen. Zunächst muß GEOS mitgeteilt werden, daß ein Menü aufgebaut werden soll. Dazu wird in Register 'r0' die Adresse der Menütabelle geladen. Im Akku wird bestimmt, auf welchen Menüpunkt der Mauszeiger abgesetzt werden soll. Dies ist besonders wichig für Menütypen, die sich beim verlassen des Mauszeigers schließen. Jetzt kommt der Aufruf des Menüs mit 'jsr DoMenu'. Als Abschluß muß ein RTS erfolgen. Das ist zwar zunächst nicht logisch, ist aber für den richtigen Rücksprung von GEOS in die Hauptschleife nach verlassen des Menüs wichtig. In der Tabelle für das Menü erwartet GEOS zunächst die obere und untere Begrenzung des Menüs und dann die linke und rechte Begrenzung, gefolgt von der Anzahl der Menüpunkte, verknüpft durch 'ODER' mit der Art des Menüs. In unserem Beispiel bedeutet '.byte 2 ö CONSTRAINED Ö HORIZONTAL', daß es zwei Menüpunkte sind. Das Menü kann vom Mauszeiger nicht verlassen werden (CONSTRAINED) und ist HORIZONTAL aufgebaut. Als weitere Alternativen stehen Menüs, die sich automatisch beim verlassen des Mauszeiger (UN_CONSTRAINED) schließen und VERTICALe zur Verfügung. Die Arten lassen sich beliebig mischen. Nun erwartet GEOS zu jedem Menüpunkt eine weitere Tabelle. Diese besteht aus drei Positionen. Zunächst einen Zeiger auf den Menütext. Dieser muß dann natürlich auch noch definiert werden. Dann erfolgt die Angabe der Art der Menüausführung und ein Zeiger auf eine Routine oder Tabelle der Menüausführung. Dabei gibt es nun drei Möglichkeiten:
; Demo Menütechnik aus dem 64er Sonderheft" Alles über GEOS".
; Übersetzt von Hyra-Ass in GeoAssembler.
.if Pass1 ; Dem Assembler mitteilen welche
.include geosSym ; Dateien eingebunden werden
.include geosMac ; müssen.
.endif
.psect ; Programmanfangsadresse
ProgStart:
LoadW r0,ClearScreen ; Zeiger auf Bildschirmlöschrautine
jsr GraphicsString ; Bildschirm löschen ausführen
LoadW r0,Tabelle1 ; Zeiger auf Menütabelle
lda 0 ; Mauszeiger auf ersten Menüpunkt
jsr DoMenu ; Menü aufbauen
rts ; Hier immer RTS. Wichtig!
Tabelle1: ; Hauptmenütabelle
.byte 5,17 ; Obere und untere Menübegrenzung
.word 5,200 ; Linke und rechte Menübegrenzung
.byte 2 ö CONSTRAINED 6 HORIZONTAL
; Menüart bestimmen
Mpunkt1:
.word Mtext1 ; Zeiger auf Menütext1
.byte SUB_MENU ; Menüausführung bestimmen
.word Tabelle2 ; Zeiger auf Untermenü Tabelle2
Mpunkt2:
.word Mtext2 ; Zeiger auf Menütext2
.byte DYN_SUB_MENU ; Menüausführung bestimmen
.word Exec1 ; Zeiger auf Unterprogramm Exex1
Mtext1:
.byte "Menü-Demo",0 ; Menütext1
Mtext2:
.byte "Menüleiste",0 ; Menütext2
Tabelle2: ; Untermenütabelle1
.byte 18,30 ; Obere und untere Menübegrenzung
.word 5,50 ; Linke und rechte Menübegrenzung
.byte 1 ö CONSTRAINED ö VERTICAL
; Menüart bestimmen
Mpunkt3:
.word Mtext3 ; Zeiger auf Menütext3
.byte MENU_ACTION ; Menüart bestimmen
.word Return ; Zeiger auf Unterprogramm Return
Mtext3:
.byte "GEOS",0 ; Menütext3
Exec1: ; Ausführung Unterprogramm
jsr InitForIO ; Ein-/Ausgabebereich einblenden
ldx #$ff ; Lade X-Register mit Dez. 255
loop1: ; Schleife 1
inc $d020 ; Erhöhe Inhalt der Adresse um 1
ldy #$ff ; Lade Y-Register mit Dez. 255
loop2: ; Schleife 2
dey ; Reduziere Y-Register um 1
bne loop2 ; Springe nach loop2 wenn Y <> 0 ist
dex ; Reduziere X-Register um 1
bne loop1 ; Springe nach loop2 wenn x <> 0 ist
jsr DoneWithIO ; Ein/Ausgabebereich ausblenden
LoadW r0,Tabelle3 ; Zeiger auf Menütabelle 3 richten
rts ; Unterprogramm verlassen
Tabelle3: ; Untermenütabelle3
.byte 19,30 ; Obere und untere Menübegrenzung
.word 80,150 ; Linke und rechte Menübegrenzung
.byte 1 ö UN_CONSTRAINED ö VERTICAL
; Menüart bestimmen
.word Mtext3 ; Zeiger auf Menütext3
.byte MENU_ACTION ; Menüausführung festlegen
.word Return ; Zeiger auf Unterprogramm Return
Retum: jmp EnterDesktop ; Programm beenden
ClearScreen: ; Tabelle für Bildschirm löschen
>> siehe GUP 5 oder GeoProgrammer <<
ProgEnd: ; Programmendekennzeichen
Kurzlink hierhin: http://geos-printarchiv.de/907 |
|
Letzte Änderung am 01.11.2019 |
|