|
|
29.03.2024 | 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 |