

>>>>>>>>Der Basic-Kurs fr Fortgeschrittene<<<<<<<<<<<<<
      
   Kursbersicht: 
      
================================
I.      Teil            Maussteuerung (mit PowerBasic)
II.     Teil            Bewegte (kleine) Grafiken
III.    Teil            Einlesen des DIR's mal anders
IV.     Teil            CHAIN, COMMON und hnliches
Der Rest steht noch nicht fest.
================================
>>>>>>>>>>>>>>>>>>>Heute:
================================
        I.      Teil            Maussteuerung (mit PowerBasic)
================================
                                Einleitung
-==--==--==--==--==--==--==--==--==--==--==-
Hallo Freax!
Neuer Kurs, neues Glck. Endlich mal ein Basickurs fr Fortge-
schrittene und solche, die es werden wollen.
Heute widmen wir uns mal einem ganz interessanten Thema:
Der Maussteuerung. Viele Basicdialekte bieten zustzlich zu 
Compiler ja auch einige sogannte Libaries, die Maussteuerung
beeinhalten. Mir persnlich gefllt die Maussteurung der 
Libaries, die bei PowerBasic beiliegen nicht, denn es lsst
sich die Maus nur ansprechen, wenn auch ein Fenster geffnet 
ist. (Und die Fenster sind auch nicht das wahre.) Also, was 
tun?
Ich habe neulich von einer Maustteurungsroutine fr Powerbasic
gehrt und habe mich natrlich dann weiter informiert. (in
den Libaries stehen auch die Befehle dafr (hab' ich dann fest-
gestellt)).
-==--==--==--==--==--==--==--==--==--==--==-
So, jetzt geht's los:
Zuerstmal mssen wir testen, ob eine Maus (+geladener Maus-
treiber) vorhanden ist. 
Dazu mu man Register setzen und den Maustreiber aufrufen
(der Maustreiber ist (wenn berhaupt) als Maschinensprache-
programm im Speicher, also mssen wir eine bestimmte Speicher-
adresse aufrufen)
Die Befehle: 
====================Programm: MAUS1.bas===================
REG 1,0: CALL INTERRUPT &h33
======================Programm ende=======================
REG 1,0 setzt das Register 1 auf 0.
CALL INTERRUPT &h33 ruft die Interruptadresse &h33 (dezimal:51)
auf. Der Maustreiber initalisiert die Maus.
Natrlich bleibt jetzt noch der Bildschirm schwarz, denn der
Maustreiber ist noch nicht angewiesen worden, den Mauszeiger
auf dem Bildschirm zu zeigen.
Also:
====================Programm: MAUS1.bas===================
REG 1,0: CALL INTERRUPT &h33
REG 1,1: CALL INTERRUPT &h33
======================Programm ende=======================

CALL INTERRUPT &h33 ruft wieder die Interruptadresse 51 auf,
diesmal wird der Maustreiber vllig aktiviert und steht ganz
zur Verfgung. Der Mauszeiger ist auch endlich auf dem 
Bildschirm zu sehen und lsst sich auch bewegen. (Schaltet mal,
bevor der Maustreiber aktiviert wird, mal in den Bildschirm-
modus 12 um. Toll, nicht?)
Jetzt fehlen uns nur noch zwei Sachen: 1. Wie knnen wir 
testen, wo sich die Maus befindet und
2. wie knnen wir die Maus wieder ausschalten?
Nichts einfacher als das:

====================Programm: MAUS1.bas===================
REG 1,0: CALL INTERRUPT &h33
REG 1,1: CALL INTERRUPT &h33
REG 1,3: CALL INTERRUPT &h33
x=reg(3)
y=reg(4)
taste=reg(2)
======================Programm ende=======================
Jetzt befindet sich die x-Position in der Variable x,
die y-Position in der Variable y und die Tastenzustand in der
Variable taste.
Zum Tastenzustand:

(gedrckt=1, nicht gedrckt=0)

Zweitastenmaus:   

        Links    |      Rechts  | Tastenzustand
        ----------------------------------------
           0     |        0     |    0
           1     |        0     |    1
           0     |        1     |    2
           1     |        1     |    3

Dreitastenmaus:

                         

        Links    |      Rechts  | Mitte |Tastenzustand
        ----------------------------------------
           0     |        0     |   0   |  0
           1     |        0     |   0   |  1
           0     |        1     |   0   |  2
           0     |        0     |   1   |  3

Zur x/y-Position: 
In Bildschirmmodus 0 gelten nicht die Zeile/Spalteaufteilung
des normalen Texmodus. Die Werte liegen in etwa wie beim Modus
9 oder 12!!!

So, hier zum Schlu mal ein Listing, das euch vieleicht etwas 
weiterhilft.

=========================Programm: MAUS2.bas===================
REG 1,0: CALL INTERRUPT &h33
REG 1,1: CALL INTERRUPT &h33
DO UNTIL taste=3
REG 1,3: CALL INTERRUPT &h33
x=reg(3)
y=reg(4)
taste=reg(2)
LOCATE 1,1: PRINT space$(30)
LOCATE 1,1: PRINT x,y,taste
LOOP
==========================Programm ende==========================
Jetzt bleibt euch berlassen, was ihr daraus macht!
Das war's auch schon fr dieses Mal.
Also, bis zum nchsten Mal, euer Dark Crusher


