Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

---|Ветка была без названия|---


Grombl ©   (2002-09-10 22:23:00) 

Есть ли функция Вин-Апи помогающая передвигать мышь не мгновенно, а проходя через указанные точки(т.е. указываешь начальные и конечные координаты, мышь передвигается между ними).


Dmk   (2002-09-10 23:51:00) [1]

Еще можно так ...

procedure Line(dc:HDC; x1,y1,x2,y2:integer; Color:TColor);
var {Integer variables}
d:integer;
dx,dy:integer;
Eincr,NEIncr:integer;
yIncr:integer;
count:word;

const _delay:integer = 1;
begin
yIncr:= -1;
dx:=ABS(x2-x1);
dy:=ABS(y2-y1);
if dy <= dx then
begin
if x2 < x1 then
asm
mov ebx,[x2]
xchg ebx,[x1]
mov [x2],ebx
mov ebx,[y2]
xchg ebx,[y1]
mov [y2],ebx
end;
if y2 > y1 then yIncr:=1;
begin
d:=dy*2 - dx;
EIncr:=dy*2;
NEIncr:=(dy-dx)*2;
end;
SetPixel(dc,x1,y1,color);{Draw first point}
SetCursorPos(x1,y1);
Sleep(_delay);
inc(x1);

for Count:=x1 to x2 do
begin
if d < 0 then d:=d+EIncr
else begin
d:=d+NEIncr;
y1:=y1+yIncr;
end;
SetPixel(dc,Count,y1,color);
SetCursorPos(Count,y1);
Sleep(_delay);
end;
end{if (dy <= dx)}
else
begin
if y2 < y1 then
asm
mov ebx,[x2]
xchg ebx,[x1]
mov [x2],ebx

mov ebx,[y2]
xchg ebx,[y1]
mov [y2],ebx
end;

if x2 > x1 then yIncr:=1;

begin
d:=dx shl 1-dy;
EIncr:=dx shl 1;
NEIncr:=(dx-dy) shl 1;
end;
SetPixel(dc,x1,y1,color);{Draw first point}
SetCursorPos(x1,y1);
Sleep(_delay);
inc(y1);

for Count:=y1 to y2 do
begin
if d < 0 then d:=d+Eincr
else begin
d:=d+NEIncr;
x1:=x1+yIncr;
end;
SetPixel(dc,x1,Count,color);
SetCursorPos(x1,Count);
Sleep(_delay);
end;
end;
end;

procedure TMainForm.Button1Click(Sender: TObject);
var c:integer;
dc:hdc;
begin
dc := GetDC(0);
For c := 0 to 10 do
Line(dc,Random(700),Random(700),Random(700),Random(700),Random($EFFFFFFF));
end;


Dmk   (2002-09-10 23:22:00) [2]

for c := 0 to 200 do
begin
SetCursorPos(x,100);
{Sleep(5 .. 100);} Не обязательно
end;


Наверх

Титульная страница Поиск, карта сайта Написать письмо