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

Index
Register
Login

Die Anzeige des Archivs erfolgt grafisch. Ändern

GeoBasic Workshop - Teil 3: Maus- und DA-Routinen

Autor: Olaf Dzwiza; Autoreninfo anzeigen

Zum Schluß wird das Stundenplan-Programm um zwei GEOS typische Eigenschaften ergänzt: Nach Anklicken eines Feldes soll eine Dialogbox die Eingabe eines Fachnamen erlauben und Hilfsmittel werden möglich sein.

Um die Eingabe zu realisieren, brauchen wir zuerst eine Feldvariable zum Speichern der Texte:
   siehe <170 bis 180>

Dann ist eine Tabelle mit den Koordinaten, an denen die Texte plaziert werden sollen, nötig:
   siehe <130 bis 150>

Und Variablen, in denen die Werte gespeichert werden:
   siehe <190>

Zum Einlesen ist folgende Ergänzung des Init-Teils nötig:
   siehe <260 bis 320>

Durch die Definition von BUTTON ... läßt sich eine Routine deklarieren, die beim Mausklick aufgerufen wird:
   siehe <370>

Die Position des Mauszeigers läßt sich mittels MOUSEIN überprüfen. Das Unterprogramm @Klick wird bei jedem Mausklick -egal ob auf Menü, Icon oder an anderer Stelle- aufgerufen. Wenn der Zeiger sich nicht im Bereich des Rechtecks mit der linken oberen Ecke 22/85 und der rechten unteren Ecke 314/175 befindet, geht es in die Mainloop zurück.

   <700 bis 720>
Diese Routine bedarf einer Erklärung: Wenn der Mauszeiger im Rechteckbereich geklickt wurde, nimmt pos den Wert -1 (wahr) an, sonst den Wert 0 (falsch). Wenn der Wert nicht wahr (also ungleich -1, logisches NOT) ist, wird mit RETURN in die Mainloop zurückgesprungen. Wenn aber mit der Maus im richtigen Bereich geklickt wurde, soll das Programm den Klick auswerten, indem zunächst die Koordinaten des Zeigers gesichert werden:
   siehe <740 bis 760>

Jetzt gilt es, die Koordinaten auszuwerten und festzustellen, welcher Spalte und Zeile sie entsprechen. Wenn nicht in einem Feld geklickt wurde (Zeile 850, 920) springt das Programm in die Mainloop zurück.
   siehe <770 bis 920>

Jetzt brauchen wir nur noch die Eingaberoutine, die Position des Feldes haben wir ja schließlich.
Zunächst gilt es, einen eventuellen alten Eintrag zu löschen. Beim Positionieren hilft die Datentabelle in den Feldvariablen S und Z (für Spalte und Zeile), siehe <940 bis 970>

Nun kann der Nutzer über eine Dialogbox einen Fachnamen eingeben, den wir aus Platzgründen auf 10 Zeichen beschränken müssen. Die Abfrage in Zeile 990 dient der Möglichkeit eines Abbruchs durch Anklicken des entsprechenden Icons in der Dialogbox. Mittels SETPOS und PRINT braucht der eingegebene Text nur noch ausgegeben werden, dann erfolgt ein Rücksprung in die Mainloop; siehe <980 bis 1030>.

Abschließend soll noch ein weiteres typisches Merkmal aller GEOS-Applikationen eingebaut werden: Die Verwendung von DeskAccessoires. Die Verwaltung durch das GEOS-Menü wird von GeoBasic selber übernommen, wir müssen nur den Bildschirm nach Verlassen des DAs neu aufbauen. Dazu muß dem Rechner mitgeteilt werden, wohin der nach dem Verlassen springen soll, dies geschieht durch REDRAW.
   siehe <380>

Die Routine ab dem Label @Hilfsmittel baut zunächst den Rand um das Editorfeld neu auf, dies geschieht analog zum Ende der Druckroutine. Dann wird die Darstellungsfläche gelöscht und der Stundenplan neu gezeichnet:
   siehe <1400 bis 1430>

Hier zeigt sich nun, warum es sinnvoll war, einige zunächst überflüssige Unterroutinen zu definieren.
Jetzt brauchen wir nur noch die im zweidimensionalen Feld std$(s,z) gespeicherten Daten an der richtigen Stelle ausgeben; siehe <1440 bis 1500>.

Und damit ist das Programm fertig. Natürlich kann noch vieles verbessert werden: eine Fehlerroutine, verschiedene Eingabemodi oder auch ein größerer Plan sind denkbar. Experimentiert einfach ein bißchen, solange Ihr keine Diskettenbefehle verwendet, kann eigentlich nichts passieren. (Eine weitaus umfangreichere Version, die ohne GeoBasic läuft, ist bei mir übrigens als Shareware erhältlich.)

An diesem Beispiel ließ sich meiner Meinung nach hervorragend zeigen, daß sich auch mit GeoBasic nützliche Programme schreiben lassen, die sauber und zuverlässig arbeiten, solange man auf Diskettenbefehle verzichtet und sich vorher Überlegungen zur Struktur macht. Bestimmt läßt sich das Vokabelprogramm aus dem Handbuch nicht sinnvoll realisieren, dazu ist schon der MegaAssembler oder die (beim Schreiben dieser Zeilen noch nicht ganz fertige) Compilersprache GeoCom nötig.

Wenn Ihr noch Fragen zu GeoBasic habt, könnt Ihr euch an mich wenden. Bitte beschreibt euer Problem so ausführlich wie möglich und legt einen frankierten Rückumschlag bei. Bei Diskettensendungen (nur 1541) ist auf eine ausreichende Rückverpackung zu achten.

Olaf Dzwiza
(siehe Autoreninfo)

Ich bin nicht über BTX erreichbar. Notfalls ist eine Msg. an die Regio Hannover möglich, die Beantwortung dauert dann aber etwas länger.


   10 REM ************************
   30 REM *   GEOBASIC-WORKSHOP  *
   40 REM *                      *
   50 REM * Das Programm zum Kurs*
   60 REM *  (Gesamtlisting)     *
   70 REM *                      *
   100 REM ************************
   120
   130 @Datenliste
   140 DATA 97, 112, 127, 142, 157, 172
   150 DATA 25, 74, 123, 172, 221, 270
   160
   170 @setzeVar
   180 DIM std$(6,6)
   190 DIM s(6),z(6)
   200
   210 @Beginn
   220 PATTERN 2
   230 RECT 0, 0, 319, 199
   240 MENU "Menue"
   250 ICON "Pikto"
   260 RESTORE @Datenliste
   270 FOR i=1 TO 6
   280  READ Z(i)
   290 NEXT
   300 FOR i=1 TO 6
   310  READ s(i)
   320 NEXT
   330 GOSUB @Hintergrund
   340 GOSUB @ZeichnePlan
   350
   360 @Hauptschleife
   370 BUTTON @Klick
   360 REDRAW @Hilfsmittel
   390 MAINLOOP
   400
   410 REM .........................
   420
   430 @Info
   440 DIALOG "INFO"
   450 RETURN
   460
   470 @Druck
   480 PATTERN 0
   490 RECT 0, 0, 319, 50
   500 RECT 0, 50, 3, 199
   510 RECT 316, 50, 319, 199
   520 RECT 0, 190, 319, 199
   530 SETCOL 255
   540 FRECT 0, 50, 319, 199
   550 PRSCREEN 0
   560 GOSUB @NeuZeichnen
   570 FRECT 3, 50, 316, 190
   580 RETURN
   590
   600 @Neu
   610 DIALOG "Ende?",auswahl
   620 IF auswahl=3
        THEN GOTO @Beginn
   630 IF auswahl=4
        THEN RETURN
   640
   650 @Ende
   660 END
   670
   680 REM .........................
   690
   700 @Klick
   710 pos=MOUSEIN(22,85,314,175)
   720 IF NOT(pos) THEN RETURN
   730
   740 @KlickAnalyse
   750 x-MOUSEX(0)
   760 y-MOUSEY(0)
   770 s=0
   780 z=0
   790 IF x>=24 AND x<=71 THEN s=1
   800 IF x>=73 AND x<=120 THEN s=2
   810 IF x>=122 AND x<=169 THEN s=3
   820 IF x>=171 AND x<=218 THEN s=4
   830 IF x>=220 AND x<=267 THEN s=5
   840 IF x>=269 AND x<=316 THEN s=6
   850 IF s=0 THEN RETURN
   860 IF y>=86 AND  y<=99 THEN z=1
   870 IF y>=101 AND y<=114 THEN z=2
   880 IF y>=116 AND y<=129 THEN z=3
   890 IF y>=131 AND y<=144 THEN z=4
   900 IF y>=146 AND y<=159 THEN z=5
   910 IF y>=161 AND y<=174 THEN z=6
   920 IF z=0 THEN RETURN
   930
   940 @Eingabe
   950 std$(s,z)=""
   960 SETPOS s(s),z (z)
   970 PRINT"         "
   980 DBSTRN "Texteingabe:",tmp$
   990 IF tmp$="" THEN RETURN
   1000 std$(s,z)=LEFT$(tmp$,10)
   1010 SETPOS s(s),z(z)
   1020 PRINT std$(s,z)
   1030 RETURN
   1040
   1050 REM .........................
   1060
   1070 @Hintergrund
   1080 PATTERN 0
   1090 RECT 3, 50, 316, 190
   1100 SETCOL 255
   1110 FRECT 3, 50, 316, 190
   1120 RETURN
   1130
   1140 @ZeichnePlan
   1150 SETCOL 1
   1160 LINE 5,84 TO 314,84
   1170 FOR y=85 TO 185 STEP 15
   1180  LINE 5,y TO 314,y
   1190 NEXT
   1200 LINE 22,71 TO 22,175
   1210 FOR x=23 TO 316 STEP 49
   1220  LINE x,71 TO x,175
   1230 NEXT
   1240 PRINT CHR$(26)CHR$(24);
   1250 SETPOS 33,81:PRINT"Mo"
   1260 SETPOS 83,81:PRINT"Di"
   1270 SETPOS 132,81:PRINT"Mi"
   1280 SETPOS 181,81:PRINT"Do"
   1290 SETPOS 230,81:PRINT"Fr"
   1300 SETPOS 279,81:PRINT"Sa"
   1310 SETPOS 6,97:PRINT"1."
   1320 SETPOS 6,112:PRINT"2."
   1330 SETPOS 6,127:PRINT"3."
   1340 SETPOS 6,142:PRINT"4."
   1350 SETPCS 6,157:PRINT"5."
   1360 SETPOS 6,172:PRINT"6."
   1370 PRINT CHR$(27);
   1380 RETURN
   1390
   1400 @Hilfsmittel
   1410 GOSUB @NeuZeichnen
   1420 GOSUB @Hintergrund
   1430 GOSUB @ZeichnePlan
   1440 FOR z=1 TO 6
   1450  FOR s=1 to 6
   1460   SETPOS s(s),z(z)
   1470   PRINT std$(s,z)
   1480  NEXT
   1490 NEXT
   1500 GOTO @Hauptschleife
   1510
   1520 @NeuZeichnen
   1530 PATTERN 2
   1540 RECT 0, 0, 319, 50
   1550 RECT 0, 50, 3, 199
   1560 RECT 316, 50, 319, 199
   1570 RECT 0, 190, 319, 199
   1580 MENU "Menue"
   1590 ICON "Pikto"
   1600 RETURN

Entspannung pur
Bilder aus: Uschi's Grafik Sammlung
by Uschi Rakowski, GUC Berlin

 

Olaf Dzwiza

 

 

 




Dieser Artikel ist Bestandteil von:

Ausgabe 29

! - - - - - M I C R O F I L M - - - - - ! | RamLife Aktuell | Neue Programme | GUC aktiv in GEnie | Editorial | Gäste bei Treffen der RegioGruppen | Die Postleitzahlen | Jahreshaupttreffen '93 | Regio Gruppen | Das Regio Leiter Treffen | News Regio Berlin | News Regio Hamburg | News Regio Aachen | GEOS V2.5 Update | GEOS Support übernommen! | 64'er GEOS Sonderheft 92 | GEOS Programme gesucht | GeoBasic Workshop - Teil 3: Maus- und DA-Routinen | ShareWare Programme von Olaf Dzwiza | Nachtrag zum GeoWrite Patch | Leserbriefe | Soft- und Hardware Info's | Artikel für die GUP | Das Allerletzte ... | Geos v2.5 Update (II) | PD Disk für GWE2 | Certified Software | Es ist da ! | GWE2 Kritik | GeoBox Info | GeoFile - Datenbank einmal anders | GeoCalc Workshop - Teil #1 - der Einstieg | Elektronik Bibliothek


GeoBasic

GeoBasic (Teil 1) | GeoBasic Workshop - Teil 2: Programmieren mit GeoBasic | GeoBasic Workshop - Teil 3: Maus- und DA-Routinen | GeoBasic Workshop - Teil 4: Probleme mit der RunTime Bibliothek


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


Letzte Änderung am 01.11.2019