Il y a 3 ans on se posait la question de faire défiler automatiquement le contenu d'une zone avec ascenseur en VCL et j'avais fait aussi le test en FireMonkey.
Je viens de me retrouver devant un autre cas nécessitant la manipulation d'un TVertScrollBox en FireMonkey. Pas pour du défilement mais un simple positionnement.
J'avais une TFrame avec un ascenseur vertical contenant un texte. Ce cadre était affiché ou masqué selon les actions de l'utilisateur. Le hic c'est que le texte restait positionné où il était lors de l'affichage précédent alors que je voulais en afficher le début chaque fois qu'on le rendait visible.
Le composant TVertScrollBox a une propriété ViewportPosition qui permet de savoir quelle sont les coordonnées relatives du point en haut à gauche de la zone d'affichage par rapport à ce qu'elle doit afficher. Pour changer la vue il suffit donc de manipuler ses valeurs.
En Delphi 12.3 Athens cette propriété est un TPointF. Pour en changer la valeur il ne suffit pas de changer ses propriétés car elles ne déclenchent pas son writer au niveau de la classe TCustomScrollBox. Il faut passer par une affectation direct d'un TPointF.
VertScrollBox1.ViewportPosition.SetLocation(0, 0);
sera totalement sans effet. En revanche c'est détecté à la compilation du projet et le compilateur nous transmet un avertissement : SetLocation() est déprecié.
Il faut utiliser
VertScrollBox1.ViewportPosition := TPointF.Create(0, 0);
ou une variable de type TPointF que vous aurez remplie au préalable.

