

                     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...

