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
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!
vBulletin® v3.8.6, Copyright ©2000-2012, Jelsoft Enterprises Ltd.