Mausprogrammierung ------------------ Wie Ihr vielleicht selbst schon einmal festgestellt habt, kann ein Programm noch so gut sein - wenn man das Programm nicht ver- nnftig bedienen kann, ist es auch nichts Wert... Naja, es ist wohl nicht ganz so kraá, doch eine sinnvolle Eingabem”glichkeit geh”rt einfach dazu. Neben dem Keyboard drften heute wohl so ziemlich alle auch eine Maus besitzen, und da dieses Eingabeger„t doch wirklich praktisch ist, habe ich hier mal einen Artikel ber Mausprogrammierung ge- schrieben. Um berhaupt mit der Maus arbeiten zu k”nnen, muá natrlich ein Maustreiber installiert sein. Dieser bleibt nachdem er geladen wurde speicherresistent und wandelt die ankommenden Daten der Maus in fr den Programmierer verst„ndliche Formen (und umge- kehrt). Angesprochen wird dieser ber den Interrupt 33h (55dez). Dem Programmierer stehen so zig verschiedene Funktionen zur Ver- fgung, um die Maus nach belieben zu benutzen. Die wichtigsten Funktionen m”chte und werde ich hier einmal vorstellen. Zur allgemeinen Programmierung sei folgendes gesagt: Um dem Maustreiber zu sagen, was er machen soll, muá die Funk- tionsnummer in das AX/AL Register geladen werden. Einige Funktio- nen erwarten weitere Informationen im BX, CX (...) Register, an- dere liefern in diesen Registern auch Werte zurck. Sobald dann der Interrupt 33h aufgerufen wird, wird auch die ge- wnschte Funktion ausgefhrt. Eingabe : AX = 00h Ausgabe : AX = FFFFH - Maustreiber wurde installiert BX = Anzahl der Maustasten Die erste Funktion dient zum zurcksetzen des Maustreibers, diese Funktion sollte eigentlich immer als erstes in einem mit Mausun- tersttzung ausgestatteten Programm ausgefhrt werden. Wie mir pers”nlich allerdings aufgefallen ist, ist dieses weiá Gott nicht Pflicht - die Programme laufen eigentlich auch ohne diesem Funk- tionsaufruf. Im BX Register kann man nach dem Interruptaufruf im AX Register nachlesen, ob die Maus erfolgreich installiert wurde, und im BX Register wieviele Maustasten die Maus hat. ----------------------------------------------------------------- Eingabe : AX = 01h Ausgabe : Diese Funktion l„át den MausCursor erscheinen. ----------------------------------------------------------------- Eingabe : AX = 02h Ausgabe : Mit dieser Funktion kann der MausCursor wieder versteckt werden. ----------------------------------------------------------------- Eingabe : AX = 03h Ausgabe : BX = Aktueller Zustand der Maustasten: Bit 0 : Linke Taste Bit 1 : Rechte Taste CX = Position des Mauscursors in X-Richtung DX = Position des Mauscursors in Y-Richtung Nach dem Aufruf dieser Funktion kann man im CX und DX Register die aktuelle Mausposition abfragen (Pixel). Das BX Register zeigt den aktuelle Zustand der linken und rechten Maustaste an. Ist das Bit 0 = 1 (gesetzt), dann ist die linke Maustaste ge- drckt, ist Bit 0 = 0, dann ist die linke Maustaste nicht ge- drckt. Ebenso steht es mit Bit 1, allerdings fr die rechte Maustaste. ---------------------------------------------------------------- Eingabe : AX = 04h CX = X-Koordinate DX = Y-Koordinate Ausgabe : Diese Funktion erm”glicht ein gezieltes setzen des Mauscursors. Man schreibe ins CX-Register die X-Koordinate und ins DX-Register die Y-Koordinate des gewnschten Punktes. ----------------------------------------------------------------- Eingabe : AX = 05h BX = Abzufragende Taste: 00h = Linke Maustaste 01h = Rechte Maustaste 02h = Mittlere Maustaste Ausgabe : AX = Aktueller Zustand der angegebenen Maus- taste BX = Anzahl der Bet„tigungen seit dem letzten Aufruf der Funktion CX = X-Koordinate des Mauscursors, bei der die Maustaste gedrckt wurde DX = Y-Koordinate des Mauscursors, ... Mit dieser Funktion l„át sich ermitteln an welcher Stelle welcher Knopf zuletzt gedrckt wurde, und ob dieser zur Zeit immer noch gedrckt ist. ----------------------------------------------------------------- Eingabe : AX = 06h BX = Abzufragende Taste: 00h = Linke Maustaste 01h = Rechte Maustaste 02h = Mittlere Maustaste Ausgabe : AX = Aktueller Zustand der angegebenen Maus- taste BX = Wie oft die Maustaste seit dem letzten Aufruf losgelassen wurde CX = X-Koordinate des Mauscursors, bei der die Maustaste losgelassen wurde DX = Y-Koordinate des Mauscursors, ... Diese Funktion hat die gleichen Funktionen wie Funktion 05h, nur daá sich alle Angaben auf das Loslassen einer angegebenen Taste bezieht. ----------------------------------------------------------------- Eingabe : AX = 07h CX = Minimale X-Koordinate DX = Maximale X-Koordinate Ausgabe : Der Aufruf dieser Funktion bewirkt eine Ver„nderung des zul„s- sigen horizontalen Bereiches. M”chte man, daá sich der Mauscursor nur zwischen den X-Koordinaten 100-200 bewegen l„át, dann lade man CX mit 100 und DX mit 200. ----------------------------------------------------------------- Eingabe : AX = 08h CX = Minimale Y-Koordinate DX = Maximale Y-Koordinate Ausgabe : Diese Funktion bildet das Gegenstck zur Funktion 07h: Mit ihr l„át sich der vertikale Gltigkeitsbereich der Maus ver„ndern. ----------------------------------------------------------------- Eingabe : AX = 0Fh CX = Horizontale Z„hlschritte DX = Vertikale Z„hlschritte Ausgabe : Diese Funktion legt fest, wie schnell sich der Mauscursor bewegen l„át. Je gr”áer die Werte, desto schneller der Cursor. So, das w„re ersteinmal alles. Ich habe hier brigens nur (meiner Meinung nach) die wichtigsten Funktionen erl„utert. Es gibt noch einige andere, mit denen man zum Beispiel das Aussehen des Cur- sors im Text- und Grafikmodus festlegen kann. Doch diese Routinen werden eher selten aufgerufen und blieben somit weg. Vielleicht erl„utere ich sie mal in den folgenden Ausgaben... So, nun sei noch gesagt, daá sich in den Rubriken Assembler, Basic und Pascal jeweils kleine Programme befinden, die als An- wendungsbeispiele dienen sollen. Tja, das w„r's dann auch 'schon' mit diesem Artikel. Ich hoffe er war einigermaáen interessant. Kemil