home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HOT Scene Stuff
/
hotscenestuffzyklop1996.iso
/
diskmags
/
deutsch
/
microcod
/
stod1
/
text
/
text014.txt
< prev
next >
Wrap
Text File
|
1994-11-04
|
5KB
|
121 lines
Mausprogrammierung in Basic
---------------------------
Nun kommt es zur Praxis in der Mausprogrammierung mit Basic. Es
gibt dabei nur ein Problem: Ich hab so gut wie keine Ahnung von
dieser Prospe! Doch ich hoffe, es wird ausreichen.
Da ich kein QuickBasic besitze, beziehen sich alle Angaben in
diesem Text lediglich auf QBasic. Ich weiß nicht, ob QuickBasic
100% kompatibel ist, doch ihr könnt es ja mal ausprobieren. So
viel ich weiß, ist es in QuickBasic aber auch möglich, Interrupts
direkt aufzurufen, daher ist die hier vorgestellte Idee in Quick-
Basic wahrscheinlich anders besser zu lösen. Wie dem auch sei,
jetzt zum Listing.
Es handelt sich dabei um ein Mini-Prog, daß einige Mausfunktionen
darstellt. Zuerst wird die Maus initalisiert und ein Reset durch-
geführt. Nachdem der MausCursor sichtbar gemacht wurde, wird eine
Schleife solange durchlaufen, bis ein Mausknopf betätigt wird.
Innerhalb dieser Schleife gibt das Programm immer die aktuelle
Position des MausCursors aus. Das ist alles...
Man sieht, ein nicht gerade aufwendiges Prog, doch ist es als De-
monstration eigentlich ganz gut.
Zur Erläuterung des Listings:
Im Mittelpunkt steht eigentlich die Prozedur 'Absolute'. Diese
wird mit der Funktionsnummer sowie mit drei weiteren Variablen
aufgerufen, die als 'Schnittstelle' zum Maustreiber dienen.
Die letzte Variable (Adr%) enthält die Adresse des Maustreibers.
Wie genau das funktioniert, ist mir selbst noch nicht ganz klar,
doch da diese Prozedur ihren Dienst voll erfüllt, ist mir das
eigentlich (zur Zeit) auch ziemlich egal. Irgendwie wird diese
Prozedur halt direkt an den Maustreiber gekoppelt.
In der Prozedur MouseInit wird Segment und Offset des Maustrei-
bers berechnet, die bei H0000:H00CC beginnt und 4 Byte lang ist.
Sollte gar kein Maustreiber installiert sein, so wird der Offset-
Wert -1 in Mouse.Offset% gespeichert.
Die Prozedur MouseReset setzt die Maus wieder auf ihre Normal-
Werte. Sollte dabei irgendein Fehler auftreten, so wird
Mouse.Offset% wiederum auf -1 gesetzt.
Mit MousePointer kann man den MausCursor sichtbar bzw. unsicht-
bar machen, wobei der Wert 1 sichtbar und 0 unsichtbar macht.
DIe Prozedur MouseGet liefert den Status der Knöpfe(MouseB%)
sowie die Koordinaten (MouseX%,MouseY%) zurück.
Nun zum Listing, daß wie immer auch im Verzeichnis SOURCES zu
finden ist:
DECLARE SUB MouseInit ()
DECLARE SUB MouseReset ()
DECLARE SUB MousePointer (OnOff%)
DECLARE SUB MouseGet (MouseX%, MouseY%, MouseB%)
DECLARE SUB Absolute (Funktion%, Par1%, Par2%, Par3%, Adr%)
DIM SHARED Mouse.Offset%
DIM SHARED MouseX%, MouseY%, MouseB%
MouseInit
MouseReset
IF Mouse.Offset% = -1 THEN
PRINT "Achtung: Kein Maustreiber installiert! Abbruch"
END
END IF
CLS
MousePointer 1
DO
MouseGet MouseX%, MouseY%, MouseB%
LOCATE 1, 2
PRINT USING "x=### y=###"; MouseX%; MouseY%
LOOP UNTIL MouseB%
MousePointer 0
SUB MouseGet (MouseX%, MouseY%, MouseB%)
IF Mouse.Offset% = -1 THEN EXIT SUB
Absolute 3, MouseB%, MouseX%, MouseY%, Mouse.Offset%
MouseX% = MouseX% / 8 + 1
MouseY% = MouseY% / 8 + 1
END SUB
SUB MouseInit
DEF SEG = 0
Mouse.Segment& = 256 * CLNG(PEEK(&HCC + 3)) + PEEK(&HCC + 2)
Mouse.Offset% = 256 * PEEK(&HCC + 1) + PEEK(&HCC + 0) + 2
DEF SEG = Mouse.Segment&
IF Mouse.Offset% + Mouse.Segment& = 0 OR
PEEK(Mouse.Offset%) = 88 THEN
Mouse.Offset% = -1
END IF
END SUB
SUB MousePointer (OnOff%)
IF Mouse.Offset = -1 THEN EXIT SUB
IF OnOff% = 0 THEN OnOff% = 2 ELSE OnOff% = 1
Absolute OnOff%, 0, 0, 0, Mouse.Offset%
END SUB
SUB MouseReset
IF Mouse.Offset% = -1 THEN EXIT SUB
SHARED Buttons%
NoMouse% = 0
Absolute NoMouse%, Buttons%, 0, 0, Mouse.Offset%
IF NoMouse% = 0 THEN Mouse.Offset% = -1
END SUB
So, wahrscheinlich kann man es selbst in QBasic leichter machen,
nur ist mir keine andere Möglichkeit bekannt. Sollte irgendjemand
von Euch eine bessere Lösung oder eine Lösung für einen anderen
Basic-Typen haben oder einfach irgendwelche Anmerkung machen
wollen, dann schreibt einfach (wie immer)!
Und: Wir brauchen noch mächtig Verstärkung in der Basic-Rubrik,
wenn Ihr also Lust habt, schreibt ruhig mal einen Artikel!
Kemil