procedure TMainICQForm.MouseMoveCheckLMDHiTimerTimer(Sender: TObject);
var
P:TPoint;
Px,Py:Integer;
begin
MouseMoveCheckLMDHiTimer.enabled:=False;
if (Visible) and (AutoMove ) and (not IsProc ) then
begin
P:=mouse.CursorPos;
Px:=P.x;
Py:=P.y;
if (P.x > MainICQForm.Left-5) and (P.x < MainICQForm.Left + MainICQForm.Width+5) and (P.y <MainICQForm.Top + MainICQForm.Height+5) then
begin
if not OnDeskTop then
WinPushOut
else CanPushIn:=True;
end
else
if MainICQForm.Top<=0 then
begin
if OnDeskTop then
if CanPushIn then
WinPushIn;
end;
end;
MouseMoveCheckLMDHiTimer.enabled:=True;
end;
procedure TMainICQForm.setAutoMove(nAutoMove:Boolean);
begin
if nAutoMove<>AutoMove then
begin
AutoMove:=nAutoMove;
if AutoMove then
MouseMoveCheckLMDHiTimer.Enabled:=True
else MouseMoveCheckLMDHiTimer.Enabled:=False;
end;
end;
procedure ThreadFuncsPushIn;StdCall;
var
i:integer;
j:integer;
StepY:Integer;
HasLeft:Boolean;
OldTop:Integer;
NewTop:Integer;
begin
MainICQForm.IsProc:=True;
HasLeft:=False;
OldTop:=MainICQForm.Top;
StepY:=(MainICQForm.Height-2+MainICQForm.Top) div MoveStepIn;
if StepY*MoveStepIn<>(MainICQForm.Height-2+MainICQForm.top) then
HasLeft:=True;
for i:=1 to StepY do
begin
MainICQForm.Top :=OldTop-i*MoveStepIn;
Application.ProcessMessages;
end;
if HasLeft then
MainICQForm.Top:=2-MainICQForm.Height;
MainICQForm.OnDeskTop:=False;
MainICQForm.IsProc:=False;
end;
procedure ThreadFuncsPushOut;StdCall;
var
i:integer;
j:integer;
StepY:Integer;
HasLeft:Boolean;
OldTop:Integer;
begin
MainICQForm.IsProc:=True;
HasLeft:=False;
OldTop:=MainICQForm.Top;
StepY:=(MainICQForm.Height-2) div MoveStepOut;
if StepY*MoveStepOut<>(MainICQForm.Height-2) then
HasLeft:=True;
for i:=1 to StepY do
begin
MainICQForm.Top :=OldTop+i*MoveStepOut;
Application.ProcessMessages;
end;
if HasLeft then
MainICQForm.Top:=0;
MainICQForm.OnDeskTop:=True;
MainICQForm.IsProc:=False;
end;
procedure TMainICQForm.WinPushIn;
var
ThreadID:DWORD;
ThreadHandle:DWORD;
begin
ThreadHandle:=CreateThread(nil,4096,@ThreadFuncsPushIn,nil,CREATE_SUSPENDED, ThreadID);
ResumeThread(ThreadHandle);
end;
procedure TMainICQForm.WinPushOut;
var
ThreadID:DWORD;
ThreadHandle:DWORD;
begin
ThreadHandle:=CreateThread(nil,4096,@ThreadFuncsPushOut,nil,CREATE_SUSPENDED, ThreadID);
ResumeThread(ThreadHandle);
end;