J'ai rencontré un petit problème. Je génère dynamiquement des contrôles et les place sur un composant TScrollbox
. Mais j'ai remarqué que si la boîte de défilement est visible, l'utilisateur peut voir clairement chacun des contrôles en cours de création et placé. Donc, il semble que beaucoup de travail est fait et c'est lent.Comment afficher les barres de défilement dans TScrollBox après qu'il a été rendu visible à nouveau?
J'ai caché la boîte de défilement et généré toutes les commandes, ce qui a pris beaucoup moins de temps et pas de scintillement. Mais voici le problème. Quand je montre à nouveau la boîte de défilement, sa barre de défilement n'apparaît pas jusqu'à ce que je redimensionne réellement le formulaire. (L'alignement de la scrollbox est alClient
)
Des idées sur comment résoudre ce problème?
J'ai essayé de repeindre, mais cela n'a pas fonctionné. Le rafraîchissement n'a pas fonctionné non plus.
Merci
EDIT:
TScrollBox(Form1.FindComponent('termai')).Visible:= false;
for I := 0 to mazgas.GrafasPagalVarda(sActiveGrafas).Termai.Count - 1 do
begin
fNaujasTermas(i,oHook);
end;
TScrollBox(Form1.FindComponent('termai')).Visible := true;
Le code ci-dessus montre comment je me cache et montre la scrollbox.
fNaujasTermas
génère un panneau avec plusieurs barres de déplacement, images et modifications.
Je ne suis pas sûr de ce que pourrait être l'explication étape par étape. Il suffit de faire une procédure où il génèrerait un panneau avec de nombreux contrôles et définirait la ScrollBox en tant que parent. Masquez la boîte de défilement avant de générer quoi que ce soit et affichez-la après tout. Par exemple, le panneau est aligné alTop
. Ainsi, chaque fois qu'un nouveau panneau est créé et placé dans la boîte de défilement, il apparaît en haut alors que tous les autres panneaux descendent.
Voilà comment je créé le scrollbox se
pTermai := TScrollBox.Create(Self);
pTermai.Parent := pLeft;
pTermai.Align := alClient;
pTermai.Name := 'termai';
pTermai.BorderStyle := bsNone;
pTermai.VertScrollBar.Increment := 40;
EDIT2: Je pense que je sais comment reproduire cela.
Il apparaît que lors de l'ajout d'un nouveau panneau à la scrollbox, il ne compte pas dans la hauteur totale de tous les contrôles qui sont déjà dans cette scrollbox.
Donc, pour donner un exemple. Disons que 1 panneau a une hauteur de 200px.
La hauteur de ScrollBox est de 300 px.
Donc, après avoir créé 2 panneaux qui ajoutent jusqu'à 400px de hauteur, la barre de défilement n'affiche pas les barres de défilement, même si la moitié du second panneau n'est pas visible. Si j'ajoute un panneau supplémentaire = 600px au total, la barre de défilement affichera la barre de défilement qui semblera défiler uniquement pour 2 panneaux, et non 3. Lorsque vous essayez de faire défiler une telle fenêtre, les valeurs sont recalculées et tout est bien affiché.
Donc, le problème principal est, comment faire une barre de défilement afficher la barre de défilement "dans le temps" de sorte que les panneaux ne sont pas à moitié coupés?
Je n'arrive pas à reproduire le problème dans D2009. –