2010-10-27 6 views
7

Dans Delphi 2009, j'ai trouvé que le scintillement d'un PageControl - qui se produit lors du redimensionnement du formulaire - peut être réduit en définissant sa propriété DoubleBuffered sur true. Toutefois, si j'ajoute des contrôles aux feuilles d'onglets PageControl, ils clignoteront quel que soit leur paramètre de propriété DoubleBuffered. J'ai également essayé avec et sans thèmes d'exécution activés.Comment est-ce que je peux réduire le flicker de PageControl dans Delphi?

+1

Oui, l'utilisation de contrôles de page redimensionnables est douloureuse. Dans la plupart des cas, dans mon expérience, définir la propriété double buffered de chaque contrôle (contrôle de page et chaque contrôle enfant) sur true résout la plupart du problème, mais dans certains cas, provoquera d'autres problèmes de rendu, pour certains contrôles enfants. Comme je suis très préoccupé par la qualité visuelle, j'ai tendance à 1) activer le double buffering sur le redimensionnement, et utiliser une minuterie pour le désactiver 1/5 de seconde après le dernier événement de redimensionnement, 2) * masquer * le contrôle entier de la page pendant le redimensionnement (et remplacez par un "indicateur de taille de fenêtre"), ou 3) développez mes propres commandes personnalisées. –

+0

Utilisez-vous des contrôles de base de données? Que peut-être TDataSet.DisableControls lors de la mise à jour/ajout aidera. –

+0

Il serait utile que vous nous disiez quand et où le scintillement se produit. –

Répondre

4

Réglage ParentBackground à False pour les composants sur le PageControl aidé beaucoup. Cependant, cela se traduit par une couleur différente de ces composants du panneau, ils ont tous un fond plus sombre maintenant. Peut-être que cela peut être réparé facilement (sans perdre le support du thème).

J'ai également installé VCL Fix Pack qui a un correctif pour QC 56252 (TPageControl scintille beaucoup avec le thème actif).

0

Ce qui est loin d'être parfait, mais vous voudrez peut-être utiliser ceci:

protected 
    procedure WMExitSize(var Message: TMessage); message WM_EXITSIZEMOVE; 
    procedure WMEnterSize(var Message: TMessage); message WM_ENTERSIZEMOVE; 

procedure TFormMain.WMEnterSize(var Message: TMessage); 
begin 
    if Assigned(PageControlView.ActivePage) then 
    PageControlView.Align := alNone; 
end; 

procedure TFormMain.WMExitSize(var Message: TMessage); 
begin 
    if Assigned(PageControlView.ActivePage) then 
    PageControlView.Align := alClient; 
end; 

Il est le meilleur que je trouve loin, et réduira les fenêtres mise à jour de votre contrôle de page. Il pourrait être moins joli, cependant, mais c'est une question d'opinions ...

+0

Merci pour cette idée. Cependant maintenant je pense qu'il y a une solution - placer ParentBackground à False pour les composants sur le PageControl. Je ne savais pas que créer une simple interface graphique RAD pouvait être si difficile :) – mjn

+0

Il n'y a rien de plus simple, quand vous avez un mélange de code de bibliothèque de contrôles communs Windows, et d'autres choses qui ne sont pas des contrôles Windows. Ce n'est que la pointe de l'iceberg. –

Questions connexes