AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Nicht-Lineare Bewegung eines Fensters

Ein Thema von SittingDuck · begonnen am 7. Sep 2006 · letzter Beitrag vom 14. Sep 2006
Antwort Antwort
SittingDuck

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

Nicht-Lineare Bewegung eines Fensters

  Alt 7. Sep 2006, 18: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
Benutzerbild von 3_of_8
3_of_8

Registriert seit: 22. Mär 2005
Ort: Dingolfing
4.129 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Nicht-Lineare Bewegung eines Fensters

  Alt 7. Sep 2006, 18:26
Du könntest das mit Sinus machen, indem du das Fenster mit 1-sin(degtorad(pos)) bewegst, wobei pos die aktuelle Position (Zahl zwischen 0 und 90) ist.
Manuel Eberl
„The trouble with having an open mind, of course, is that people will insist on coming along and trying to put things in it.“
- Terry Pratchett
  Mit Zitat antworten Zitat
SittingDuck

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

Re: Nicht-Lineare Bewegung eines Fensters

  Alt 11. Sep 2006, 08:09
Moin Moin ...

@3_of_8: OK, diese Idee hatte ich auch schon, bekomme sie aber nicht sauber
umgesetzt ... Vielleicht hat ja noch jemand einen Vorschlag ?!?

Mit dem Kurvenlineal, winkt ...
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#4

Re: Nicht-Lineare Bewegung eines Fensters

  Alt 11. Sep 2006, 10:16
Hallo!

Wie wärs mit einer

-(x^2)

Funktion vielleicht?
Die Nullstelle setzt du auf die Mitte deiner Leiste, dann beschleunigt sie langsam, wird an der Mitte am schnellsten und bremst am Rand wieder ab!

mfG

Markus
Markus
  Mit Zitat antworten Zitat
SittingDuck

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

Re: Nicht-Lineare Bewegung eines Fensters

  Alt 12. Sep 2006, 12:34
Tach nochmal ...

@markusj: Auch keine schlechte Idee ... Ich bezweifele im Moment jedoch
das ich mit meiner Funktion (siehe oben) so etwas überhaupt hinbekomme,
denn diese Routine versucht ja immer eine bestimmte Strecke pro Zeit
zurückzulegen ... oder liege ich da falsch ?!?

Wie muss ich denn diese Zeile verändern, damit sich die Bewegung am
Kurvenverlauf orientiert ?
Step := (Start - GetTickCount) / SlideSpeed; Schön gleichmäßig, grüßt ...
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
Waldteufel
(Gast)

n/a Beiträge
 
#6

Re: Nicht-Lineare Bewegung eines Fensters

  Alt 12. Sep 2006, 14:30
Hi SittingDuck.

Kurzer Denkanstoß: Step := 20 - SlideSpeed * Power((Start - GetTickCount), 2); (Ungetestet)

Gruß,
Waldteufel
  Mit Zitat antworten Zitat
markusj

Registriert seit: 9. Dez 2005
Ort: Kandel
408 Beiträge
 
#7

Re: Nicht-Lineare Bewegung eines Fensters

  Alt 12. Sep 2006, 14:44
Du variierst deinen Slide-Speed ... der entspricht dem Verlauf einer -(x^2)+z Parabel, wobei z die Geschwindigkeit und die Nullstellen bestimmt.

mfG

Markus
Markus
  Mit Zitat antworten Zitat
SittingDuck

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

Re: Nicht-Lineare Bewegung eines Fensters

  Alt 14. Sep 2006, 10:15
Hi ...

@markusj: Dein Kurvenvorschlag würde ich gerne mal in Aktion sehen !
(ein lauffähiges Beispiel wäre natürlich der Hit ...)

So wie der Waldteufel die Routine modifiziert hat, läuft es leider
nicht. (steigt mit einem Bereichsprüfungsfehler aus ...)

Beinahe aus der Kurve geflogen, grüßt ...
Ciao ... SittingDuck
iPhone Backup und mehr: iTwin v3.9 Beta ... Alternative Startleiste: Launcher v3.8 !
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:58 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz