Moin Moin ...
Wer den
Launcher kennt, der weiss, das er eine AutoHide-Funktion besitzt.
Dabei wird das Fenster vom Bildschirm gezogen, entweder manuell oder nach einer
festgelegten Zeit. Die Bewegung des Fensters ist nahezu linear, denn ich gebe eine
Zeit in ms vor, in der sich der Launcher 'aus dem Staub' gemacht haben soll.
Zu Verdeutlichung hier der entsprechende Source-Code:
Delphi-Quellcode:
procedure TLauncher1.Slide;
var fw,fh,RPos: integer; Start,Step: Extended;
begin
SlideSpeed := 500; // eine halbe Sekunde für die Bewegung
Start := GetTickCount + SlideSpeed;
if not Slided then begin
ExHeight := Height;
ExWidth := Width;
RPos := Left + ExWidth;
repeat
Step := (Start - GetTickCount) / SlideSpeed;
//^^ Verkleinerungs-Faktor abhängig von der verstichenen Zeit
fh := Round(ExHeight * Step); // reduzierte Fensterhöhe
fw := Round(ExWidth * Step); // -"- Fensterbreite
if Slided then begin // Werte umdrehen um Fenster wieder herzustellen
fh := ExHeight - fh; fw := ExWidth - fw;
end;
case Richtung of 1: Height := fh; // ab nach oben
2: begin Left := Screen.Width - fw; Width := fw; end; // rechts
3: begin Top := Screen.Height - fh; Height := fh; end; // unten
4: Width := fw; // Fenster nach links schieben
end;
Application.ProcessMessages;
until Start - GetTickCount < 0;
end;
end;
Soweit so gut ... Das Ergebnis könnt Ihr Euch gerne mit der letzten
Beta-Version ansehen.
Nun schwebt mir eine 'nicht-lineare' Fensterbewegung vor, ähnlich einer teueren
Küchenschublade. Jeder kennt den Effekt, wenn so eine Schublade vor dem
Schließen nochmal kurz abgebremst wird. Diesen Effekt würde ich gerne in eine
entsprechende Formel pressen.
Ich schaffe es aber nicht meine Routine so abzuändern. Sämtliche Versuche
sehen entweder ruckelig aus oder enden in total verkrampften Source-Code.
Auch habe ich Zweifel am 'TimeBased Movement' meines Programms. Wahrscheinlich
kann man den gesamten Code sowieso noch schwer optimieren.
Für jeden Tipp dankbar, grüßt ...