PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Mausposition


fabian ackle
27.03.2002, 19:12
Wollte mal frogen ob es möglich ist mit QBasic (!!!) folgende aufgaben zu meistern:

1. feststellen ob eine Maus angeschlossen ist

2. Die Mausposition feststellen

3. Feststellen welche Taste gedrückt wurde

währe cool wenn das ginge :)

thx

dubious


cYrus
27.03.2002, 22:10
das funktioniert hatte früher auch mal die Maus in Qbasic verwendet, leider hab ich nix mehr davon aber im Netz gibts x beispiele davon, der code selber is leider meistens um die 100 Zeilen :D

greez
cYrus

fabian ackle
27.03.2002, 22:24
thx, nun weis ich immerhin dass es geht...
und diese 100 zeilen spielen auch keine rolle mehr, da das Grund-Programm jetzt schon knapp 1400 zeilen hat :D

greetz

dubious

Felix Kaiser
28.03.2002, 00:10
Vor 10 Jahren wusste ich mal wie man in QBasic nen Software Interrupt aufruft und dessen Ergebnisse auswertet. Schau dir mal die Interrupt Funktionen rund um Interrupt 0x33 an. Vielleicht hilfts.

USSEraser
16.04.2002, 16:32
Hab da was gefunden, ist aber ne menge Code:

Zuerst musst du ein Feld für den Interrupt-Aufruf erstellen:

DIM SHARED MS%(45)

RESTORE MS.Data
DEF SEG = VARSEG(MS%(0))
FOR i% = 0 TO 99
READ Byte$
IF Byte$ = "#" THEN EXIT FOR
POKE VARPTR(MS%(0)) + i%, VAL("&H" + Byte$)
NEXT i%

MS.Data: ´***** DATAs des Maschinenprogrammes fr Interr%()
DATA 55,8b,ec,56,57 ´Register retten
DATA 8b,76,0c,8b,04 ´AX bis DX holen
DATA 8b,76,0a,8b,1c
DATA 8b,76,08,8b,0c
DATA 8b,76,06,8b,14
DATA cd,21 ´INT 21 (Nummer wird ver„ndert!)
DATA 8b,76,0c,89,04 ´AX bis DX zurckschreiben
DATA 8b,76,0a,89,1c
DATA 8b,76,08,89,0c
DATA 8b,76,06,89,14
DATA 5f,5e,5d ´Register holen
DATA ca,08,00 ´RETF 8 => Ende
DATA #

Dann hab ich noch eine Sub die den Interrupt Aufruft:
FUNCTION Interr% (Num%, AX%, bx%, CX%, DX%)
´** Interrupt Nummer Num% ausl”sen mit Registerinhalten AX% bix DX%

IF MS%(0) = 0 THEN ´** Ist MS%() initialisiert?
PRINT "FEHLER: Maschinenprogramm nicht eingelesen! Abbruch!"
END
END IF

DEF SEG = VARSEG(MS%(0)) ´** Segment bestimmen
POKE VARPTR(MS%(0)) + 26, Num% ´** Interrupt-Nummer einsetzen

CALL ABSOLUTE(AX%, bx%, CX%, DX%, VARPTR(MS%(0))) ´** Aufruf

Interr% = AX% ´** Rckgabewert aus AX% bernehmen

END FUNCTION


Der Rest ist simpel:

Maustreiber initialisieren:
R% = Interr%(&H33, 0, bx%, CX%, DX%)
R=Rückgabewert

Mausposition:
R% = Interr%(&H33, 3, bx%, CX%, DX%)
bx=Maustaste
CX=XPosition
DX=YPosition

Mauszeiger An/Aus:
R% = Interr%(&H33, OnOff%, bx%, CX%, DX%)
OnOff: 1=An, 2=Aus

Im ASCII-Modus Cursor blinken lassen:
R% = Interr%(&H33, 10, 0, &HFFFF, &HFF00)

Position des Mauszeigers setzen:
R% = Interr%(&H33, 4, bx%, X%, Y%)
Eventuell müssen da noch koordinaten umgerechnet werden.

Mausbereich setzten:

R% = Interr%(&H33, 7, 0, X1%, x2%)
R% = Interr%(&H33, 8, bx%, Y1%, y2%)

Viel Glück beim Ausprobieren!