Как двигать мышь по окружности?
Добавлено: 13 сен 2009, 16:39
Добрый день! Пишу вспомогательную прогу, которая заменить человеческую руку на программную. Появилась трабла, не могу заставить двигаться мышь по окружности с заданным радиусом, 8-и угольник получается, а окружность не выходит... Пользуюсь функцией:
mouse_event(MOUSEEVENTF_MOVE, x,y, 0, 0);
где x,y координаты смещения курсора от текущей позиции.
Понимаю что нужен таймер на форме... А вот что написать в обработчике таймера, не соображу, возможно даже два таймера понадобится, но не уверен...
Формула окружности 2*pi*R
http://ru.wikipedia.org/wiki/%D0%9E%D0% ... 1%82%D1%8C вот некая инфа по окружностям...
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Данна процедура рисует окружность с начальными координатами xc,yc и радиусом r
procedure DrawCircle(xc : Integer; yc : Integer; r : Integer);
var
x : Integer;
y : Integer;
d : Integer;
begin
x := 0;
y := r;
d := 3-2*r;
while y>=x do
begin
form1.Image1.Canvas.Pixels[x+xc,y+yc]:=clred;
{SetPixel(x+xc, y+yc);}
form1.Image1.Canvas.Pixels[x+xc, -y+yc]:=clred;
form1.Image1.Canvas.Pixels[-x+xc, y+yc]:=clred;
form1.Image1.Canvas.Pixels[-x+xc, -y+yc]:=clred;
form1.Image1.Canvas.Pixels[y+xc, x+yc]:=clred;
form1.Image1.Canvas.Pixels[y+xc, -x+yc]:=clred;
form1.Image1.Canvas.Pixels[-y+xc, x+yc]:=clred;
form1.Image1.Canvas.Pixels[-y+xc, -x+yc]:=clred;
if d<0 then
begin
d := d+4*x+6;
end
else
begin
d := d+4*(x-y)+10;
y := y-1;
end;
x := x+1;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DrawCircle(20,20,30);
end;
mouse_event(MOUSEEVENTF_MOVE, x,y, 0, 0);
где x,y координаты смещения курсора от текущей позиции.
Понимаю что нужен таймер на форме... А вот что написать в обработчике таймера, не соображу, возможно даже два таймера понадобится, но не уверен...
Формула окружности 2*pi*R
http://ru.wikipedia.org/wiki/%D0%9E%D0% ... 1%82%D1%8C вот некая инфа по окружностям...
--------------------------------------------------------------------------------
Добавлено сообщение
--------------------------------------------------------------------------------
Данна процедура рисует окружность с начальными координатами xc,yc и радиусом r
procedure DrawCircle(xc : Integer; yc : Integer; r : Integer);
var
x : Integer;
y : Integer;
d : Integer;
begin
x := 0;
y := r;
d := 3-2*r;
while y>=x do
begin
form1.Image1.Canvas.Pixels[x+xc,y+yc]:=clred;
{SetPixel(x+xc, y+yc);}
form1.Image1.Canvas.Pixels[x+xc, -y+yc]:=clred;
form1.Image1.Canvas.Pixels[-x+xc, y+yc]:=clred;
form1.Image1.Canvas.Pixels[-x+xc, -y+yc]:=clred;
form1.Image1.Canvas.Pixels[y+xc, x+yc]:=clred;
form1.Image1.Canvas.Pixels[y+xc, -x+yc]:=clred;
form1.Image1.Canvas.Pixels[-y+xc, x+yc]:=clred;
form1.Image1.Canvas.Pixels[-y+xc, -x+yc]:=clred;
if d<0 then
begin
d := d+4*x+6;
end
else
begin
d := d+4*(x-y)+10;
y := y-1;
end;
x := x+1;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DrawCircle(20,20,30);
end;