home *** CD-ROM | disk | FTP | other *** search
/ HOT Scene Stuff / hotscenestuffzyklop1996.iso / diskmags / deutsch / microcod / stod1 / text / text014.txt < prev    next >
Text File  |  1994-11-04  |  5KB  |  121 lines

  1.  
  2.  
  3.                   Mausprogrammierung in Basic
  4.                   ---------------------------
  5.  
  6. Nun kommt es zur Praxis in der Mausprogrammierung mit Basic. Es
  7. gibt dabei nur ein Problem: Ich hab so gut wie keine Ahnung von
  8. dieser Prospe! Doch ich hoffe, es wird ausreichen.
  9.  
  10. Da ich kein QuickBasic besitze, beziehen sich alle Angaben in
  11. diesem Text lediglich auf QBasic. Ich weiß nicht, ob QuickBasic
  12. 100% kompatibel ist, doch ihr könnt es ja mal ausprobieren. So
  13. viel ich weiß, ist es in QuickBasic aber auch möglich, Interrupts
  14. direkt aufzurufen, daher ist die hier vorgestellte Idee in Quick-
  15. Basic wahrscheinlich anders besser zu lösen. Wie dem auch sei,
  16. jetzt zum Listing.
  17. Es handelt sich dabei um ein Mini-Prog, daß einige Mausfunktionen
  18. darstellt. Zuerst wird die Maus initalisiert und ein Reset durch-
  19. geführt. Nachdem der MausCursor sichtbar gemacht wurde, wird eine
  20. Schleife solange durchlaufen, bis ein Mausknopf betätigt wird.
  21. Innerhalb dieser Schleife gibt das Programm immer die aktuelle
  22. Position des MausCursors aus. Das ist alles...
  23. Man sieht, ein nicht gerade aufwendiges Prog, doch ist es als De-
  24. monstration eigentlich ganz gut.
  25.  
  26. Zur Erläuterung des Listings:
  27. Im Mittelpunkt steht eigentlich die Prozedur 'Absolute'. Diese
  28. wird mit der Funktionsnummer sowie mit drei weiteren Variablen
  29. aufgerufen, die als 'Schnittstelle' zum Maustreiber dienen.
  30. Die letzte Variable (Adr%) enthält die Adresse des Maustreibers.
  31. Wie genau das funktioniert, ist mir selbst noch nicht ganz klar,
  32. doch da diese Prozedur ihren Dienst voll erfüllt, ist mir das
  33. eigentlich (zur Zeit) auch ziemlich egal. Irgendwie wird diese
  34. Prozedur halt direkt an den Maustreiber gekoppelt.
  35. In der Prozedur MouseInit wird Segment und Offset des Maustrei-
  36. bers berechnet, die bei H0000:H00CC beginnt und 4 Byte lang ist.
  37. Sollte gar kein Maustreiber installiert sein, so wird der Offset-
  38. Wert -1 in Mouse.Offset% gespeichert.
  39. Die Prozedur MouseReset setzt die Maus wieder auf ihre Normal-
  40. Werte. Sollte dabei irgendein Fehler auftreten, so wird
  41. Mouse.Offset% wiederum auf -1 gesetzt.
  42. Mit MousePointer kann man den MausCursor sichtbar bzw. unsicht-
  43. bar machen, wobei der Wert 1 sichtbar und 0 unsichtbar macht.
  44. DIe Prozedur MouseGet liefert den Status der Knöpfe(MouseB%)
  45. sowie die Koordinaten (MouseX%,MouseY%) zurück.
  46.  
  47. Nun zum Listing, daß wie immer auch im Verzeichnis SOURCES zu
  48. finden ist:
  49.  
  50.    DECLARE SUB MouseInit ()
  51.    DECLARE SUB MouseReset ()
  52.    DECLARE SUB MousePointer (OnOff%)
  53.    DECLARE SUB MouseGet (MouseX%, MouseY%, MouseB%)
  54.  
  55.    DECLARE SUB Absolute (Funktion%, Par1%, Par2%, Par3%, Adr%)
  56.  
  57.    DIM SHARED Mouse.Offset%
  58.    DIM SHARED MouseX%, MouseY%, MouseB%
  59.  
  60.    MouseInit
  61.    MouseReset
  62.  
  63.    IF Mouse.Offset% = -1 THEN
  64.      PRINT "Achtung: Kein Maustreiber installiert! Abbruch"
  65.      END
  66.    END IF
  67.  
  68.    CLS
  69.  
  70.    MousePointer 1
  71.  
  72.    DO
  73.      MouseGet MouseX%, MouseY%, MouseB%
  74.      LOCATE 1, 2
  75.      PRINT USING "x=### y=###"; MouseX%; MouseY%
  76.    LOOP UNTIL MouseB%
  77.  
  78.    MousePointer 0
  79.  
  80.    SUB MouseGet (MouseX%, MouseY%, MouseB%)
  81.      IF Mouse.Offset% = -1 THEN EXIT SUB
  82.      Absolute 3, MouseB%, MouseX%, MouseY%, Mouse.Offset%
  83.      MouseX% = MouseX% / 8 + 1
  84.      MouseY% = MouseY% / 8 + 1
  85.    END SUB
  86.  
  87.    SUB MouseInit
  88.      DEF SEG = 0
  89.      Mouse.Segment& = 256 * CLNG(PEEK(&HCC + 3)) + PEEK(&HCC + 2)
  90.      Mouse.Offset% = 256 * PEEK(&HCC + 1) + PEEK(&HCC + 0) + 2
  91.      DEF SEG = Mouse.Segment&
  92.      IF Mouse.Offset% + Mouse.Segment& = 0 OR
  93.                    PEEK(Mouse.Offset%) = 88 THEN
  94.        Mouse.Offset% = -1
  95.      END IF
  96.    END SUB
  97.  
  98.    SUB MousePointer (OnOff%)
  99.      IF Mouse.Offset = -1 THEN EXIT SUB
  100.      IF OnOff% = 0 THEN OnOff% = 2 ELSE OnOff% = 1
  101.      Absolute OnOff%, 0, 0, 0, Mouse.Offset%
  102.    END SUB
  103.  
  104.    SUB MouseReset
  105.      IF Mouse.Offset% = -1 THEN EXIT SUB
  106.      SHARED Buttons%
  107.      NoMouse% = 0
  108.      Absolute NoMouse%, Buttons%, 0, 0, Mouse.Offset%
  109.      IF NoMouse% = 0 THEN Mouse.Offset% = -1
  110.    END SUB
  111.  
  112.  
  113. So, wahrscheinlich kann man es selbst in QBasic leichter machen,
  114. nur ist mir keine andere Möglichkeit bekannt. Sollte irgendjemand
  115. von Euch eine bessere Lösung oder eine Lösung für einen anderen
  116. Basic-Typen haben oder einfach irgendwelche Anmerkung machen
  117. wollen, dann schreibt einfach (wie immer)!
  118. Und: Wir brauchen noch mächtig Verstärkung in der Basic-Rubrik,
  119. wenn Ihr also Lust habt, schreibt ruhig mal einen Artikel!
  120.  
  121.                                                  Kemil