Mausprogrammierung II Wie versprochen, hier der zweite Artikel ber die Mausprogrammie- rung. Zuerst einmal ein direkter Nachtrag zum ersten Teil: Vielleicht erinnert Ihr Euch, da man mit Hilfe der Funktion 03h neben dem Zustand der rechten und linken Maustasten auch die x/y Koordina- ten erhlt (CX = x, DX = y). Nun kommt es vor, da man die Maus zum einen in Grafikanwendungen verwendet (wie zum Beispiel hier im STOD), zum anderen gibt es aber auch Anwendungen, die mit dem Textmodus auskommen (das soll jetzt nicht abwertend sein). Da die Funktion 03h aber nur die Koordinaten des Grafikschirms (zum Bei- spiel 640x480 oder 320x200), man im Textmodus aber eher mit 80x25 arbeitet, mssen die Koordinaten ersteinmal umgerechnet werden. Dies geschieht ganz einfach, indem man die x bzw. y Werte einfach durch 8 teilt und dann 1 dazu addiert. Beispiel: CX liefert den Wert 300 und DX den Wert 278 zurck. CX DIV 8 + 1 = 37 + 1 = 38, DX DIV 8 + 1 = 34 + 1 = 35. Tja, irgendwie war das ein schlechtes Beispiel. Schlielich kommt bei der y-Koordinate ein Wert von 35 raus, der, wenn man mal von einem 80x25'er Bildschirm ausgeht, wohl uerst selten auftritt... Tja, war halt nur ein bldes Bei- spiel. Ob dieser Wert nun wirklich irgendwie irgendwann einmal auftreten kann (vielleicht wenn man auf einer anderen Grafiksei- te arbeitet???), oder ob er wirklich niemals (zumindest nicht in diesem Modus) auftritt, sei nun mal dahin gestellt. Nehmt einfach dieses Beispiel: DX = 48 <=> y = 7 und gebt Euch nun endlich zu- frieden...! Tja, nun zum neuen Teil: Diesmal geht's um das erstellen eines neuen Mauscursors! Denn den normalen Cursor, der in Form eines Pfeiles erscheint, ist doch langweilig - schlielich hat ihn je- der... wir auch (aber nicht mehr lange, ab der nchsten Ausgabe wird er wohl eine neue Erscheinungsform haben!). Mit Hilfe der Funktion 09h bietet sich die Mglichkeit, einen eigenen Cursor zu definieren. Dabei erwartet die Funktion in BX die x und in CX die y Koordinate des Cursors. Mit ES:DX mu die neue Cursor bzw. Screen-Maske angegeben werden. Die Cursor und Screen-Maske sind Felder, die sich jeweils aus 16 WORDs zusammensetzen. Die Screen-Maske gibt dabei das eigent- liche Erscheinungsbild des Cursor an, und die Cursor-Maske die Verknpfung mit dem Hintergrund. Nheres dazu: Um es am besten zu verstehen sollte man sich glaube ich ein kariertes Papier zu- recht legen, auf dem man zwei 16x16 Felder einzeichnet. Nun schreibt man ber das eine Cursor-Maske und ber das andere Screen-Maske. Die eine '16' des 16x16-Feldes beruht auf den 16 WORDs, aus dem die Masken aufgebaut sind (vertikal), und die anderen sechzehn Felder stehen fr die 16 Bits, die ein WORD hat. brigens ist der Mauscursor immer genau 16x16 Pixel gro... Jedes der Kstchen auf dem Blatt reprsentiert also an sich ein Pixel des Mauscursors. Will man nun einen Pixel sichtbar machen, so setzt man das jeweilige Bit auf 1. Also: 1 = sicht- bar, 0 = unsichtbar. Einfach, oder? Nun kann man sich schon ein- mal einen tollen Cursor aufmalen. Nun zur Cursormaske. Hier kann man angeben, wie die einzelnen Punkte der Screenmaske auf den Bildschirmhintergrund reagieren soll. Ist ein Bit gesetzt, dann reagiert es (glaube ich) mit einem AND oder XOR ersteinmal mit der Screenmaske und dann noch irgendwie mit dem Hintergrund. Aber: Macht nichts, am besten Ihr gebt hier immer das invertierte Bit von dem ein, das in der Screenmaske zu finden ist, dann erscheint nmlich die Screenmaske in wei, alles andere wird durchsichtig, und Ihr seht den Cursor, den Ihr Euch erhofft hattet (hoffentlich...). Tja, wahrscheinlich habt Ihr das nicht so auf Anhiebt gerallt (wrde ich auch nicht...), am besten, Ihr lest das nocheinmal, schaut Euch dann das Beispielprog an und versucht dann Eure ersten eigenen Gehversuche. Ob es mglich ist, mehrfarbige Cursor zu erstellen, ist mir unbekannt. Ich wei, das es irgendwie noch mglich sein mu, eine schwarze Umrandung des Cursor hinzube- kommen, doch wie? Vielleicht spielt Ihr jetzt ja so sehr damit rum, da Euch auffllt, wie das geht. Schreibt's uns dann, damit wir es verffentlichen knnen! Und noch etwas: Die Begriffe Screenmaske und Cursormaske knnten auch vertauscht sein, ich wute nicht mehr genau, wie die Dinger heien. Ich wollte nun aber nicht mit 'Maske 1' und 'Maske 2' hantieren. Aber ich glau- be, da interessiert Euch sowieso nicht, oder? Macht nichts! Wie dem auch sei: Viel Spa beim ausprobieren! In der nchsten Ausgabe erzhle ich Euch in meiner Mrchen... h Mausstunde etwas ber einen Maushandler... Bis dahin....... TSCH! Kemil PS: Es gibt da brigens auch noch einen sogenannten HotSpot, der beim Cursorbild irgendeine Rolle spielt. Allerdings wei ich nicht welche. Vielleicht fllt es mir ja bis zum nchsten mal ein. Die x-Koordinate des HotSpots mu man im BX und die y-Koor- dinate im CX Regsiter ablegen. Tragt einfach 0/0 ein oder spielt ein wenig damit rum...