Witam.
Mam 3 timerki które obsługują w moim programie chowanie się formy poza ekran (do góry):
Zmienne globalne: CzyHide :Boolean, MainTop : Integer
Timer1 (interwał - 10, enabled - True):
procedure TForm1.Timer1Timer(Sender: TObject);
var
P : TPoint;
begin
GetCursorPos(P);
if CzyHide = False then //Jeżeli nie jest schowane poza ekran...
MainTop := Form1.Top;
begin //...sprawdź czy kursor nie znajduje sie na formie lub czy nie jest ona aktywna
if (P.X >= Form1.Left) and (P.X <= Form1.Left + Form1.Width) and
(P.Y >= Form1.Top) and (P.Y <= Form1.Top + Form1.Height) or
(Application.Active = True) then
Timer3.Enabled := False
else
begin
Timer2.Enabled := True
end;
end
else //Jeżeli forma jest schowana, a kursor znajduje się w odpowiednim miejscu...
if (P.X > Form1.Left) and
(P.X < Form1.Left + Form1.Width) and
(P.Y = 0) then
begin
CzyHide := False;
Form1.Top := MainTop; //powrót na pierwotną pozycję, ale nie działa :-(
end;
end;
Timer2 - Służy do opóźnienia chowania się formy (interwał - 400, enabled - False):
procedure TForm1.Timer2Timer(Sender: TObject);
begin
Timer2.Enabled := False;
Timer3.Enabled := True;
end;
Timer2 - Odpowiedzialny za animację chowania formy (interwał - 10, enabled - False):
procedure TForm1.Timer3Timer(Sender: TObject);
begin
Form1.Top := Form1.Top - 1;
if Form1.Top < 0 - Form1.Height then
begin
Timer3.enabled := False;
CzyHide := True;
end
end;
I chodzi o to, że gdy forma się schowa, to po najechaniu w odpowiednie miejsce, pojawia się ale ma top = 0, a nie taki jaki miała przed schowaniem. Chciałbym również by, gdy znajduje się częściowo poza ekranem, po najechaniu kursorem wróciła na pierwotny Form1.Top
A może ma ktoś lepszy pomysł na chowanie się formy (bo trzy Timerki to chyba za dużo) w podobny sposób?