Différences
Ci-dessous, les différences entre deux révisions de la page.
| Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
|
prog:lazarus:classes:tcontrols:tcontrols2 [29/08/2024 18:54] thierry [Exemple d'utilisation] |
prog:lazarus:classes:tcontrols:tcontrols2 [29/08/2024 19:07] (Version actuelle) thierry [Savoir quelle partie (TRect) du Control est affiché] |
||
|---|---|---|---|
| Ligne 96: | Ligne 96: | ||
| ===== Savoir quelle partie (TRect) du Control est affiché ===== | ===== Savoir quelle partie (TRect) du Control est affiché ===== | ||
| + | |||
| + | La fonction ''TMyControl.GetVisibleRect'' ci-dessous __calcule la partie visible d'un contrôle__ personnalisé sous forme d'un ''TRect'', en tenant compte des limites imposées par ses parents dans la hiérarchie visuelle.\\ | ||
| + | Elle traverse tous les parents du contrôle, réduisant progressivement le rectangle visible à l'intersection avec chaque parent. Le résultat est le rectangle visible final en coordonnées locales, retourné par la fonction. | ||
| + | <code pascal> | ||
| + | function TMyControl.GetVisibleRect: TRect; | ||
| + | var | ||
| + | vParent: TWinControl; | ||
| + | vRect, vParentRect: TRect; | ||
| + | vP: TPoint; | ||
| + | begin | ||
| + | assert(assigned(Parent)); | ||
| + | |||
| + | vRect := BoundsRect; // Le TControl en entier, pas juste ClientRect | ||
| + | if assigned(Parent) then | ||
| + | begin | ||
| + | vParent := Parent; | ||
| + | vP := ControlOrigin; | ||
| + | vRect.Offset(vP); | ||
| + | |||
| + | { On scan tous les Parents } | ||
| + | while assigned(vParent) and not (vRect.IsEmpty) do | ||
| + | begin | ||
| + | vParentRect := vParent.ClientToScreen(vParent.ClientRect); | ||
| + | vRect := vRect.Intersect(vRect, vParentRect); | ||
| + | vParent := vParent.Parent; | ||
| + | end; | ||
| + | |||
| + | if not vRect.IsEmpty then vRect.Offset(-vP.X, -vP.y); | ||
| + | |||
| + | end; | ||
| + | |||
| + | Result := vRect; | ||
| + | |||
| + | end; | ||
| + | |||
| + | </code> | ||
| + | ** Utilité de la fonction TMyControl.GetVisibleRect ** | ||
| + | |||
| + | La fonction `TMyControl.GetVisibleRect` permet de déterminer quelle partie d'un contrôle est réellement visible à l'écran, en tenant compte des limitations imposées par ses parents dans la hiérarchie des contrôles. | ||
| + | |||
| + | ** Contexte d'utilisation ** | ||
| + | * **Rendu graphique** : Identifie quelles portions du contrôle doivent être redessinées en fonction de leur visibilité. | ||
| + | * **Détection de clics** : Vérifie si une interaction utilisateur, comme un clic, se produit dans une zone visible du contrôle. | ||
| + | * **Optimisation** : Aide à concentrer les ressources sur la partie visible du contrôle pour améliorer les performances. | ||
| + | |||
| + | ** Autres applications ** | ||
| + | * **Défilement automatique** : Lorsqu'un contrôle est contenu dans un `ScrollBox`, la fonction aide à gérer le défilement en ajustant dynamiquement la partie visible. | ||
| + | * **Animations ou effets visuels** : Pour des effets qui doivent se limiter aux zones visibles, cette fonction garantit que seules les parties pertinentes du contrôle sont affectées. | ||
| + | * **Validation et gestion des collisions** : Dans des applications comme les jeux ou les simulations, elle peut servir à déterminer les parties visibles d'un objet pour des vérifications ou interactions précises. | ||
| + | |||
| + | |||
| + | |||