![]() |
[FM] sanftes Scrollen in Scrollbox
Hallo,
gibt es eine Möglichkeit, in einer Scrollbox den Viewport sanft zu ändern, so dass der Nutzer sieht wo es lang geht? Ich kann über
Delphi-Quellcode:
die Scrollposition zwar ändern, aber der Nutzer ist sofort an der Position und hat u.U. keine Ahnung, wo er gerade ist oder woher er kommt.
ScrollBox1.ViewportPosition := TPointF(x, y);
ScrollBox1.ScrollTo(x, y); ScrollBox1.ScrollBy(x, y); |
AW: [FM] sanftes Scrollen in Scrollbox
Hallo quaero,
wenn ich dich richtig verstanden habe, dann sollte die Eigenschaft ![]() Die Eigenschaft ![]() Grüße Headbucket |
AW: [FM] sanftes Scrollen in Scrollbox
Nein, er nicht den Benutzer an Scrollbalken ziehen lassen sondern programmgesteuert an eine bestimmte Stelle scrollen.
Ich hätte gedacht, man könnte einfach eine
Delphi-Quellcode:
nehmen. Ich stehe dann aber direkt auf dem Schlauch, da ich nicht weiß, wie man
TFloatAnimation
Delphi-Quellcode:
animieren könnte. Denn
ViewportPosition.Y
Delphi-Quellcode:
ist ein Record und wenn er den abfragt, bekommt er nur eine Kopie des Originals. Die kann er munter verändern, da hat nur niemand etwas von. :|
ViewPortPosition
|
AW: [FM] sanftes Scrollen in Scrollbox
Edit: Ausversehen auf antworten geklickt. Wie kann man seine eigenen Beiträge löschen?
Damit der Post nicht total sinnlos ist eine Quick & Dirty Lösung: Die Zielposition über eine Schleife / einen Timer in kleinen Schritten ändern. "Sanft" und "schön" ist jedoch etwas anderes... . |
AW: [FM] sanftes Scrollen in Scrollbox
Ja, und vor allem sollte das eigentlich etwas sein dass man im Jahr 2015 nicht mehr unbedingt selber machen will sondern eigentlich in seinem GUI-Framework erwartet. Die Animations-Komponenten in FireMonkey sind ja da, und ich finde die gar nicht übel. :thumb:
Aber wie man die hier zum Einsatz bringen kann ist mir schleierhaft. Die Embarcadero-Beispiele sind meist praxisferne rotierende Buttons, das hier ist eigentlich der Standardfall :oops: |
AW: [FM] sanftes Scrollen in Scrollbox
Ich werde mal schauen, ob ich mit FloatAnimation und ScrollTo etwas anfangen kann.
|
AW: [FM] sanftes Scrollen in Scrollbox
Es würde einem ja helfen wenn man bei der TFloatAnimation in ihrem Event abfragen könnte, um wie viel sie den Wert verändert hat. Gibt es da etwas?
Dann könnte man ja selber um eben diesen Wert scrollen... |
AW: [FM] sanftes Scrollen in Scrollbox
Ich habe nochmal geschaut, seit 10 Seattle gibt es eine "TPresendetScrollBox".
Eine hier rein geschmissene TFloatAnimation "findet" dort drinnen viel mehr, unter anderen auch ein "VScrollBar.Value". Damit lässt sich mit drei Klicks doch ein schönes animiertes "Scroll to Top" basteln. :-) |
AW: [FM] sanftes Scrollen in Scrollbox
Ich hatte gerade mal versucht, über eine Zählschleife was zu basteln, was aber nicht wirklich schön anzusehen war.
Die PresentedScrollBox schau ich mir gleich mal an. |
AW: [FM] sanftes Scrollen in Scrollbox
Ich habe jetzt die PresentedScrollBox genutzt und das Scrollen funktioniert und ist schön sanft. Allerdings habe ich in der Scrollbox nur ein Bild, das gezoomt werden kann und zentral ausgerichtet ist. Wenn ich in das Bild reinzoome, dann komme ich weder an den oberen noch an den linken Teil ran, weil der Viewport in keiner Ausrichtung kleiner Null sein darf (weder per Code noch per Touch). :( Rechts unten komme ich genau bis zum Bildrand.
|
AW: [FM] sanftes Scrollen in Scrollbox
Ich habe mit FireMonkey noch nicht viel gemacht, das mit dem Zoomen verstehe ich nicht. Liegt das Bild nicht an (0|0) sondern so in der Mitte dass es sich z.B. von (-100|-100) bis (100|100) erstreckt?
Wer übernimmt das Zoomen? Die Scrollbox, oder? |
AW: [FM] sanftes Scrollen in Scrollbox
Das Bild ist zentral ausgerichtet:
Delphi-Quellcode:
Angenommen, die Scrollbox ist 400x600 Pixel groß. Wenn ich ein Bild anzeige, dass 200x200 Pixel hat, dann wird es an Position 100,200 angezeigt, also genau in der Mitte.
Image.Align := Center
Das Bild passe ich aber so in die Scrollbox ein, dass mindestens eine Ausdehnung voll genutzt wird, also im Beispiel auf 400x400 vergrößert -> Position 0,100. Um das Bild weiter zu vergrößern (oder auch wieder zu verkleinern), behandle ich die 2-Finger Zoomgeste und vergrößere das Bild ausgehend vom Gestenmittelpunkt um den "Gestenfaktor". Wenn ich also an Bildpunkt 300,200 das Bild um Faktor 2 vergrößere, dann bleibt dieser Bildpunkt genau da, wo er ist und alle anderen Bildpunkte entfernen sich um Faktor 2. Das Bild wird 800x800 groß und der Gestenpunkt für das Bild liegt dann bei 600x400. In der Scrollbox muss dieser Punkt weiter bei 300x200 angezeigt werden, so dass das Bild an Position -300,-100 liegt. In der Scrollbox entspricht dies dem Punkt 300,300 (x-Achse: -300(Position) + 600(Bildgestenpunkt) = 300; y-Achse: -100(Position) + 400(Bildgestenpunkt)). Wenn sich der Viewport der Scrollbox an Position 0,0 befindet, dann ist der Mittelpunkt des Bildes genau in der Mitte der Scrollbox. Bei obiger Konstellation befindet sich der Bildmittelpunkt (400,400) aber 100 Pixel zu weit links (-300(Bildposition) + 400(Bildmittelpunkt) - 200(ScrollboxMitte) = -100), so dass die ViewportPosition := 100,0 ist. Wenn ich mit der Zoomgeste genau den Mittelpunkt treffe, dann habe ich deine Werte, gewöhnlich werden sie aber davon abweichen. Mein Problem besteht jetzt darin, dass der Viewport nur Positionen zwischen 0,0 (Ursprung) und 200,100 (rechte untere Ecke) annehmen kann. Die oberen 100 und die linken 200 Pixel des Bildes bekomme ich also nicht mehr zu sehen. |
AW: [FM] sanftes Scrollen in Scrollbox
Ich habe das Bild jetzt auf
Delphi-Quellcode:
gesetzt und positioniere es selber in der Mitte der PresentedScrollBox. Desweiteren habe ich alle Berechnungen zum Scrollen und Zoomen angepaßt. Jetzt funktioniert es so wie gewünscht. Vielen Dank für eure Hilfe. :-D
Image.Align := None
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz