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 Eingabemglichkeit gehrt einfach dazu. Neben dem Keyboard drften heute wohl so ziemlich alle auch eine Maus besitzen, und da dieses Eingabegert doch wirklich praktisch ist, habe ich hier mal einen Artikel ber Mausprogrammierung ge- schrieben. Um berhaupt mit der Maus arbeiten zu knnen, mu natrlich ein Maustreiber installiert sein. Dieser bleibt nachdem er geladen wurde speicherresident und wandelt die ankommenden Daten der Maus in fr den Programmierer verstndliche Formen (und umgekehrt). Angesprochen wird dieser ber den Interrupt 33h (55dez). Dem Pro- grammierer stehen so zig verschiedene Funktionen zur Verfgung, um die Maus nach belieben zu benutzen. Die wichtigsten Funktionen mchte 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 persnlich 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 lt 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 ermglicht 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 Bettigungen 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 lt 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 Vernderung des zuls- sigen horizontalen Bereiches. Mchte man, da sich der Mauscursor nur zwischen den X-Koordinaten 100-200 bewegen lt, 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 lt sich der vertikale Gltigkeitsbereich der Maus verndern. ----------------------------------------------------------------- Eingabe : AX = 0Fh CX = Horizontale Zhlschritte DX = Vertikale Zhlschritte Ausgabe : Diese Funktion legt fest, wie schnell sich der Mauscursor bewegen lt. Je grer die Werte, desto schneller der Cursor. So, das wre ersteinmal alles. Ich habe hier brigens nur (meiner Meinung nach) die wichtigsten Funktionen erlutert. 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 erlutere 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 wr's dann auch 'schon' mit diesem Artikel. Ich hoffe er war einigermaen interessant. Kemil