Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   [FM] sanftes Scrollen in Scrollbox (https://www.delphipraxis.net/187479-%5Bfm%5D-sanftes-scrollen-scrollbox.html)

Der schöne Günther 4. Dez 2015 09:39

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?

quaero 4. Dez 2015 10:22

AW: [FM] sanftes Scrollen in Scrollbox
 
Das Bild ist zentral ausgerichtet:
Delphi-Quellcode:
Image.Align := Center
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.
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.

quaero 7. Dez 2015 13:45

AW: [FM] sanftes Scrollen in Scrollbox
 
Ich habe das Bild jetzt auf
Delphi-Quellcode:
Image.Align := None
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


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:41 Uhr.
Seite 2 von 2     12   

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