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- gefhrt. 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 erfllt, 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%) zurck. 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 fr 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