Bonjour,

J'essaye de comprendre le mécanisme de l'affichage de la VCL pour Delphi, et plus j'avance dans la (l'absence de...) documentation, plus j'ai l'impression de devenir stupide.

Voilà ce que je cherche à faire:

J'ai tout un paquet de fiches à afficher, qui doivent afficher l'identité de diverses personnes. Je voudrais créer une classe qui me permette d'encapsuler l'affichage de l'adresse des gens, qui est toujours formattée de la même manière.

Je veut donc créer une classe qui aura la tête suivante:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
 
  TPanelAdresse = CLASS( TIECustomPanel )
    FLabelAdresse1,
    FLabelAdresse2,
    FLabelAdresse3,
    FLabelAdresse4,
    FLabelCodePostal,
    FLabelVille,
    FLabelPays  : TLabel;
 
  {...}
  END;
Pour la création et l'assignation des valeurs, pas de problèmes.

Par contre, après moultes heures passées à contempler la doc/les readme/les howto de la vcl, je n'ai pas réussi à déterminer quelles callbacks il fallait que je réimplémente pour que ce panel stupide se resize tout seul:

Selon les personnes, l'adresse peut contenir plus ou moins de lignes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
Tartempion1                       Tartempion2
 
12, rue du chat qui pèche         Résidence les Mimosas
11100 Narbonne                    bât 3C
                                  35560 Bazouges-la-Perouse
Les lignes vides ne doivent pas s'afficher, du coup le placement des diverses étiquettes varie en fonction du contenu.

Je suis alors confronté à un dilemme:
- soit j'active les flags de placement automatiques de la vcl (autosize, anchors et consorts) et mon pauvre petit groupe de 7 étiquettes appelle environ 40 fois sa fonction de Resize et l'interface clignote inutilement; y a-t-il une méthode propre pour utiliser ces mécanismes automatiques?

- soit je réécris explicitement la fonction de placement et de retaillage de mon composant - ce qui n'est conceptuellement pas très dur - mais dans ce cas, je n'ai pas résussi à comprendre quelles méthodes/propriétés il fallait que j'affecte:
* quelles méthodes dois-je implémenter (ou affecter) parmi les suivantes:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
AdjustSize
Paint
OnResize
WMSize(...); MESSAGE WM_SIZE;
WMPaint(...); MESSAGE WM_PAINT;
* parmi ces méthodes, lelsquelles doivent traiter quels aspects du retaillage?
* quelles bouts du mécanisme ai-je oublié?

Merci