2010-10-14 25 views
1

Existe-t-il un moyen simple et pratique de savoir quand tous les composants, les cadres et les contrôles enfants d'un TForm sont entièrement peints? Je cherche essentiellement l'équivalent de l'événement onload() trouvé dans les pages web mais dans le contexte des formulaires Delphi. De préférence, cette technique fonctionnerait encore même si certains éléments de formulaire ne sont pas visibles actuellement et qu'elle se déclencherait à nouveau après un redimensionnement de formulaire. J'ai un élément de forme "jiggling" qui se passe comme différents éléments de forme ajustent automatiquement leur taille et je voudrais désactiver les repeints jusqu'à ce que tout soit fait pour avoir un look plus propre.Delphi 6: détecter quand un formulaire est entièrement peint?

+10

Vous posez la mauvaise question. Au lieu de poser des questions sur la détection de la fin des événements de peinture, vous devriez simplement demander comment positionner les contrôles sans scintillement. Question complètement différente, surtout quand on considère les contrôles qui se mettent continuellement à jour, de sorte qu'ils ne terminent jamais la peinture. Je vous suggère de modifier votre question pour qu'elle vous demande ce que vous * voulez vraiment savoir. –

Répondre

0

Les contrôles Delphi ont une procédure BeginUpdate et EndUpdate. À l'époque où j'ai fait la programmation Delphi - cela faisait longtemps - nous voulions charger une grille qui prenait beaucoup de données, nous appelions BeginUpdate avant le chargement, puis EndUpdate une fois le chargement terminé. Cela a indiqué au contrôle de quitter les messages de réception (c'est-à-dire de faire défiler les nouveaux enregistrements chargés) et d'attendre la mise à jour en même temps, ce qui permet de "regarder" plus rapidement. Vous pourrez peut-être régler les commandes en mode BeginUpdate jusqu'à la fin de la peinture, puis EndUpdate pour tout synchroniser.

0

Jetez un oeil à la propriété DoubleBuffered:

Détermine si l'image de contrôle est rendu directement à la fenêtre ou peinte à un premier bitmap en mémoire. Syntaxe Delphi: propriété DoubleBuffered: Boolean; Description Lorsque DoubleBuffered est faux, le contrôle fenêtré se peint lui-même directement à la fenêtre . Lorsque DoubleBuffered est true, le contrôle fenêtré se présente lui-même comme un bitmap en mémoire qui est ensuite utilisé pour peindre la fenêtre . Double buffering réduit le quantité de scintillement lorsque le contrôle repeint, mais est plus de mémoire intensive. Lorsqu'un contrôle fenêtré est un site d'ancrage et possède un gestionnaire de dock associé , il doit être à double tampon. Remarque: Certaines commandes, telles que TRichEdit, ne peuvent pas se peindre en un bitmap. Pour ces contrôles, DoubleBuffered doit être défini sur false.