Einzelnen Beitrag anzeigen

SittingDuck

Registriert seit: 11. Jan 2006
Ort: Leverkusen
159 Beiträge
 
Delphi 2010 Professional
 
#1

Nicht-Lineare Bewegung eines Fensters

  Alt 7. Sep 2006, 17:11
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 ...
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat