[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]
{
Now here's the source for the Mouse-Cursor-Editor
}
PROGRAM Mouse_Edit;
uses Crt;
type
Masktype = array[1..16] of word;
var
Cursor : Array[1..2] of Masktype;
screenmask,Cursormask : Array [1..16,1..16] of Char;
x,y,oldx,oldy : Byte;
Fenster : Boolean; {False=Links,True=Rechts}
i,j : Byte;
c : Char;
wert : word;
dest : text;
s : string;
procedure Init;
begin
TextMode (co40);
ClrScr;
for i:=1 to 16 do
for j:=1 to 16 do
begin
Screenmask[i,j]:='*';
GoToXY(i+2,j);
Write (Screenmask[i,j]);
CursorMask[i,j]:='.';
GoToXY (i+22,j);
Write (CursorMask[i,j]);
end;
x:=8; oldx:=8; y:=8; oldy:=8;
Fenster := false;
GotoXY(20,20); write('X=',x:3,' Y=',y:3);
GotoXY (x+2,y);
end;
procedure Changemask;
var
t : byte;
begin
t:=x; x:=oldx; oldx:=t;
t:=y; y:=oldy; oldy:=t;
fenster := fenster xor true;
GotoXY(20,20); write('X=',x:3,' Y=',y:3);
end;
begin
init;
repeat
c:=readkey;
if c=#9 then
ChangeMask
else if c=#32 then
if fenster then begin
if cursormask[x,y]='.' then
cursormask[x,y]:='*'
else
cursormask[x,y]:='.';
write(cursormask[x,y]);
GotoXY(wherex-1,wherey);
end else begin
if screenmask[x,y]='.' then
screenmask[x,y]:='*'
else
screenmask[x,y]:='.';
write(screenmask[x,y]);
GotoXY(wherex-1,wherey)
end else if c=#0 then begin
c:=readkey;
case c of
#72 : if y > 1 then
dec(y);
#80 : if y < 16 then
inc(y);
#77 : if x<16 then
inc(x);
#75 : if x > 1 then
dec(x);
end;
GotoXY(20,20); write('X=',x:3,' Y=',y:3);
end;
if fenster then
GotoXY(x+22,y)
else
GotoXY(x+2,y);
until c=#27;
for i:=1 to 16 do begin
wert:=0;
for j:=1 to 16 do
if screenmask[j,i]='*' then
inc(wert,1 shl (16-j));
Cursor[1,i]:=wert;
end;
for i:=1 to 16 do begin
wert:=0;
for j:=1 to 16 do
if cursormask[j,i]='*' then
inc(wert,1 shl (16-j));
Cursor[2,i]:=wert;
end;
assign(dest,'pfeil.dat');
rewrite(dest);
writeln (dest,'const');
write (dest,#7,'screenmask : masktype = (');
for i:=1 to 16 do begin
str(cursor[1,i],s);
write(dest,s);
if i<16 then
write(dest,',');
end;
writeln(dest,');');
write (dest,#7,'cursormask : masktype = (');
for i:=1 to 16 do begin
str(cursor[2,i],s);
write(dest,s);
if i<16 then
write(dest,',');
end;
writeln(dest,');');
close(dest);
end.
{
TORSTEN PINKERT
And now here's the program to test how Mouse-Edit works...
}
PROGRAM Mouse_Edit_Test;
uses graph;
type
masktype = array[1..16] of word;
{$I Pfeil.dat}
var
cursor : array[1..2] of masktype;
gd,gm : integer;
procedure ShowMouse; assembler;
asm
mov ax,1
int 33h
end; {ShowMouse}
procedure HideMouse; assembler;
asm
mov ax,2
int 33h
end; {HideMouse}
procedure ChangeMousePointer (x,y:integer; zeiger:word); assembler;
asm
mov ax,9
mov bx,x
mov bx,y
mov dx,zeiger
int 33h
end; {ChangeMousePointer}
begin
gd:=VGA; gm := VGAHi;
initgraph(gd,gm,'c:\bp\bgi');
setfillstyle(solidfill,white);
bar (200,200,400,400);
cursor[1]:=screenmask; cursor[2]:=cursormask;
SetBKColor(black);
ShowMouse;
ChangeMousePointer(8,8,ofs(cursor));
readln;
HideMouse;
closegraph;
end.
[Back to MOUSE SWAG index] [Back to Main SWAG index] [Original]