Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

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 [27/08/2024 12:02]
thierry [Dessin des Controls]
prog:lazarus:classes:tcontrols:tcontrols2 [29/08/2024 19:07] (Version actuelle)
thierry [Savoir quelle partie (TRect) du Control est affiché]
Ligne 3: Ligne 3:
 ===== Méthode PAINT ===== ===== Méthode PAINT =====
 ==== Quand est appelée PAINT ? ==== ==== Quand est appelée PAINT ? ====
-La méthode ​`Paintd'​un ​`TControl` dans Delphi (ou Free Pascal) ​est appelée dans plusieurs circonstances liées à la nécessité de redessiner l'​interface utilisateur. Voici les principaux moments où cette méthode est appelée :+La méthode ​''​Paint'' ​d'​un ​''​TControl'' ​est appelée dans plusieurs circonstances liées à la nécessité de redessiner l'​interface utilisateur. Voici les principaux moments où cette méthode est appelée :
  
 1. **Lors de la création du contrôle :** Quand un contrôle est créé pour la première fois, la méthode `Paint` est appelée pour dessiner l'​apparence initiale du contrôle. 1. **Lors de la création du contrôle :** Quand un contrôle est créé pour la première fois, la méthode `Paint` est appelée pour dessiner l'​apparence initiale du contrôle.
Ligne 94: Ligne 94:
  
 En utilisant ''​TControlBorderSpacing'',​ vous pouvez contrôler précisément l'​espacement des contrôles dans une interface utilisateur,​ ce qui est particulièrement utile lorsque vous travaillez avec des layouts dynamiques ou des interfaces utilisateur complexes. En utilisant ''​TControlBorderSpacing'',​ vous pouvez contrôler précisément l'​espacement des contrôles dans une interface utilisateur,​ ce qui est particulièrement utile lorsque vous travaillez avec des layouts dynamiques ou des interfaces utilisateur complexes.
 +
 +===== 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.
 +
 +