Logo: Geos Online Print Archiv
G.O.P.A. - Geos Online Print Archiv
29.03.2024 Archiv  #  Recherche  #  Links  #  Kontakt  #  Gästebuch  #  Impressum

Index
Register
Login

Die Anzeige des Archivs erfolgt grafisch. Ändern

Kurs: GeoProgrammer (Teil 7)

Autor: Jürgen Heinisch

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:
'SUB_MENU' bedeutet, daß ein weiteres Menü eröffnet werden soll. Dazu wird der nachfolgende Zeiger auf die Tabelle dieses Menü gerichtet. Diese muß nach dem gleichen Schema aufgebaut sein wie ein Eröffungsmenü.
'DYN_SUB_MENU' führt zunächst ein Unterprogramm aus und baut anschließend ein weiteres Menü auf, ähnlich wie bei SUB_MENU. Dazu muß allerdings vor verlassen des Unterprogramms mit 'rts' das Register 'r0' mit dem Zeiger auf die Menütabelle geladen werden.
'MENU_ACTION' führt ein Unterprogramm aus und kehrt danach zum aufrufenden Menü zurück, es sei denn, daß das Programm zu Desktop verlassen wird.
Das wars, bleibt mir nur noch, Euch viel Erfolg beim studieren des Listings zu wünschen.

; 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


 

 

 

 

 




Dieser Artikel ist Bestandteil von:

Ausgabe 08

! - - - - - M I C R O F I L M - - - - - ! | Editorial | Das Clubtreffen | GEOS in der DDR - Ein Computerklub aus der DDR stellt sich vor | Dies & Das | Die 64'er und GEOS | GeoThek | Logo - Wettbewerb | Umbau der RAM 1764 zur 1750 | Kurs: GeoProgrammer (Teil 7) | Nachtrag zum Mega Pack 2 | GeoBox - News | MegaFonts | Drucker-Tip: Epson LX-800 | Der Computer-Schreibtisch | Das Letzte


GeoProgrammer

Kurs: GeoProgrammer (Teil 1) | Kurs: GeoProgrammer (Teil 2) | Kurs: GeoProgrammer (Teil 3) | Kurs: GeoProgrammer (Teil 4) | Kurs: GeoProgrammer (Teil 5) | Kurs: GeoProgrammer (Teil 6) | Kurs: GeoProgrammer (Teil 7) | Kurs: GeoProgrammer (Teil 8) | Kurs: GeoProgrammer (Teil 9)


Kurzlink hierhin: http://geos-printarchiv.de/907


Letzte Änderung am 01.11.2019