uses graph, WinDos, Crt;
var cpu:Tregisters;
var mousex,mousey,select:integer;
var menu:record n,x0,y0,w,h,h2:integer;end;
procedure mouseinit;
begin
cpu.ax:=0;intr($33,cpu);
end;
procedure mouseshow;
begin
cpu.ax:=1;intr($33,cpu);
end;
procedure mousehide;
begin
cpu.ax:=2;intr($33,cpu);
end;
function mousepoll:integer;
begin
cpu.ax:=3;intr($33,cpu);
mousex:=cpu.cx;
mousey:=cpu.dx;
mousepoll:=cpu.bx;
end;
procedure menushow;
var i,x,y,c:integer;
begin
x:=menu.x0;y:=menu.y0;
for i:=1 to menu.n do begin
if i=select then c:=1 else c:=0;
SetFillStyle(1,c);
bar(x,y,x+menu.w,y+menu.h);
rectangle(x,y,x+menu.w,y+menu.h);
SetTextJustify(CenterText,CenterText);
if i=1 then OutTextXY(x+menu.w div 2,y+menu.h div 2,'Start')
else OutTextXY(x+menu.w div 2,y+menu.h div 2,'Stop');
y:=y+menu.h2;
end;
end;
procedure menupoll;
var i,x,y:integer;
begin
if mousepoll<>1 then exit;
mousehide;
x:=menu.x0;y:=menu.y0;
for i:=1 to menu.n do begin
if (mousex>x) and (mousey>y)
and (mousex<x+menu.w) and (mousey<y+menu.h) then select:=i;
y:=y+menu.h2;
end;
menushow;
mouseshow;
end;
procedure menunew;
begin
select:=0;
with menu do begin
n:=2;
x0:=550;
y0:=400;
w:=80;
h:=20;
h2:=40;
end;
menushow;
end;
var
grDriver: Integer;
grMode: Integer;
ErrCode: Integer;
x,y,r,dx,dy,x0,y0,x1,y1,moving: Integer;
begin
grDriver := vga;
grMode := vgahi;
InitGraph(grDriver, grMode,'');
ErrCode := GraphResult;
if ErrCode <> grOk then exit;
menunew;
moving:=0;
x0:=50;y0:=50;
x1:=x0+400;y1:=y0+300;
x:=x0+50;y:=y0+30;r:=10;
dx:=1;dy:=1;
rectangle(x0,y0,x1,y1);
circle(x,y,r);
mouseinit;
mouseshow;
while select<>2 do begin
if select=1 then moving:=1;
if moving<>0 then begin
{mousehide;}
setcolor(0);circle(x,y,r);
if x <= x0+r+5 then dx:=1;
if x >= x1-r-5 then dx:=-1;
if y <= y0+r+5 then dy:=1;
if y >= y1-r-5 then dy:=-1;
x:=x+5*dx;y:=y+5*dy;
setcolor(15);circle(x,y,r);
{mouseshow;}
Delay(50);
end;
menupoll;
end;
mousehide;
CloseGraph;
end.