![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отбросить форму от курсора при наведении на форму
markers © (2004-11-10 09:40:00)Как отбросить форму от курсора при наведении на форму, а когда курсор уйдет с с позииции где раньше была форма переместить её назад?
Плиз!
NAlexey (2004-11-10 10:52:00) [1]Как тебе это:
const
Accel = 50;
Bias = 20;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
var
Dir: Integer;
FWidth, FHeight: Integer;
RandomLeft, RandomTop: Integer;
I: Integer;
begin
with Sender as TWinControl do
begin
Dir := Random(4);
case Dir of
0:
begin
FWidth := Screen.Width - (Left + Width);
FHeight := Screen.Height - (Top + Height);
if FWidth < 0 then
FWidth := 1;
if FHeight < 0 then
FHeight := 1;
RandomLeft := Random(FWidth + 1);
RandomTop := Random(FHeight + 1);
for I := 0 to RandomLeft do
begin
if I mod Bias <> 0 then
Continue;
Left := Left + Bias;
if RandomTop > 0 then
begin
Top := Top + Bias;
Dec(RandomTop, Bias);
end;
if I mod Accel = 0 then
Sleep(1);
end;
if RandomTop > 0 then
for I := 0 to RandomTop do
begin
if I mod Bias <> 0 then
Continue;
Top := Top + Bias;
if I mod Accel = 0 then
Sleep(1);
end;
end;
1:
begin
FWidth := Left;
FHeight := Top;
if FWidth < 0 then
FWidth := 1;
if FHeight < 0 then
FHeight := 1;
RandomLeft := Random(FWidth + 1);
RandomTop := Random(FHeight + 1);
for I := 0 to RandomLeft do
begin
if I mod Bias <> 0 then
Continue;
Left := Left - Bias;
if RandomTop > 0 then
begin
Top := Top - Bias;
Dec(RandomTop, Bias);
end;
if I mod Accel = 0 then
Sleep(1);
end;
if RandomTop > 0 then
for I := 0 to RandomTop do
begin
if I mod Bias <> 0 then
Continue;
Top := Top - Bias;
if I mod Accel = 0 then
Sleep(1);
end;
end;
2:
begin
FWidth := Screen.Width - (Left + Width);
FHeight := Top;
if FWidth < 0 then
FWidth := 0;
if FHeight < 0 then
FHeight := 0;
RandomLeft := Random(FWidth + 1);
RandomTop := Random(FHeight + 1);
for I := 0 to RandomLeft do
begin
if I mod Bias <> 0 then
Continue;
Left := Left + Bias;
if RandomTop > 0 then
begin
Top := Top - Bias;
Dec(RandomTop, Bias);
end;
if I mod Accel = 0 then
Sleep(1);
end;
if RandomTop > 0 then
for I := 0 to RandomTop do
begin
if I mod Bias <> 0 then
Continue;
Top := Top - Bias;
if I mod Accel = 0 then
Sleep(1);
end;
end;
3:
begin
FWidth := Left;
FHeight := Screen.Height - (Top + Height);
if FWidth < 0 then
FWidth := 0;
if FHeight < 0 then
FHeight := 0;
RandomLeft := Random(FWidth + 1);
RandomTop := Random(FHeight + 1);
for I := 0 to RandomLeft do
begin
if I mod Bias <> 0 then
Continue;
Left := Left - Bias;
if RandomTop > 0 then
begin
Top := Top + Bias;
Dec(RandomTop, Bias);
end;
if I mod Accel = 0 then
Sleep(1);
end;
if RandomTop > 0 then
for I := 0 to RandomTop do
begin
if I mod Bias <> 0 then
Continue;
Top := Top + Bias;
if I mod Accel = 0 then
Sleep(1);
end;
end;
end;
if Left < 0 then
Left := 0;
if Top < 0 then
Top := 0;
if (Top + Height) > Screen.Height then
Top := Screen.Height - Height;
if (Left + Width) > Screen.Width then
Left := Screen.Width - Width;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
Randomize;
FormStyle := fsStayOnTop;
end;
begin...end (2004-11-10 10:10:00) [2]markers © (10.11.04 10:00) [4]
WM_MOUSEMOVE ?
markers (2004-11-10 10:00:00) [3]Чуть по точнее можно, плиз;)
KSergey (2004-11-10 09:56:00) [4]> [2] markers © (10.11.04 09:55)
> это понятно а но следить то нужно глобально,
Глобально - в каком смысле? При перемещении мыши - пруть сообщения. Зачем таймер?
markers (2004-11-10 09:55:00) [5]это понятно а но следить то нужно глобально, Таймер делать чтоли?
KilkennyCat (2004-11-10 09:43:00) [6]следить за координатами курсора... сравнивать с координатами и размерами формы... изменять свойства Left и Тоp у формы...