2009-05-14 6 views
6

J'ai un problème que je suis incapable de résoudre même si je passe beaucoup de temps à essayer de le faire.GridPanel ne s'ajuste pas au premier redimensionnement

J'utilise généralement GridPanels pour aligner les contrôles sur les formulaires. Il a, cependant, un bug ennuyeux. Lorsque le mode d'alignement GridPanel est alClient et que je maximise sa fenêtre parente, GridPanel s'ajuste à la nouvelle taille de cette fenêtre, mais pas les contrôles placés sur la grille. Ils restent dans la même position qu'avant le redimensionnement de la fenêtre. Cela n'arrive qu'à la maximisation de la première fenêtre. Si la fenêtre est d'abord redimensionnée manuellement, tout est OK. Je pense que la grille ajuste ses contrôles enfants après le deuxième événement de redimensionnement (??).

Que faire pour que GridPanel fonctionne correctement s'il s'agit de ce bogue? Il pourrait suffire de lui envoyer un message (mais quel message?), Je ne sais pas. J'ai essayé d'utiliser Realign, Refresh etc., mais ils n'ont pas aidé.

Merci pour votre aide à l'avance,

Mariusz.

Répondre

7

Ah, j'ai eu des problèmes similaires aussi. Cela peut être lié à un problème de redimensionnement dans la VCL. Vous pourriez vouloir essayer the fix by Andreas Hausladen. Cela semble fonctionner pour moi dans la plupart des cas.

1

J'ai aussi eu cette erreur, sur plusieurs projets. Je ne sais pas comment j'ai résolu cela (c'était sur des projets pour mon ancien employeur, je n'ai plus accès à ce code source). Je pense que je devais redessiner/rafraichir cette image parent ou le formulaire sur lequel le GridPanel a été placé.

0

sur le redimensionnement du propriétaire appel GridPanel.Invalidate. Je ne l'ai pas testé. J'espère que c'est du travail.

2

J'ai trouvé une astuce.

dans OnResize événement de parent de gridpanel, modifiez la largeur de la grille de 1 pixel.

alors GridPanel remarquerez la taille a changé, puis réorganiser les sous-contrôles dans GridPanel .. échantillon

est inférieure ..

procedure TForm1.FormResize(Sender: TObject); 
begin 
    GridPanel1.Width := GridPanel1.Width - 1; // subtract 1 
    GridPanel1.Width := GridPanel1.Width + 1; // recover width by adding 1 
end; 
+0

Un peu lié http://qc.embarcadero.com/wc/qcmain.aspx?d=45827 – manlio

2

Changer la largeur/le contrôle n'invalidant fonctionne pas pour moi (quelque chose a changé avec les versions récentes de RAD Studio?).

Quoi qu'il en soit une solution similaire, simple le long de cette ligne est la suivante:

procedure TForm1.FormResize(Sender: TObject); 
begin 
    GridPanel1.ControlCollection.BeginUpdate; 
    GridPanel1.ControlCollection.EndUpdate; 
end; 
Questions connexes