2009-05-14 4 views
6

Ich habe ein Problem, das ich nicht lösen kann, obwohl ich lange Zeit versuche, es zu tun.GridPanel passt sich nicht an Größe ändern

Normalerweise verwende ich GridPanels, um Steuerelemente auf Formularen auszurichten. Es hat jedoch einen nervigen Fehler. Wenn der GridPanel-Ausrichtungsmodus alClient ist und ich sein übergeordnetes Fenster maximiere, passt sich das GridPanel an die neue Größe dieses Fensters an, die Steuerelemente, die auf dem Raster liegen, jedoch nicht. Sie bleiben in der gleichen Position wie vor der Fenstergröße. Es passiert nur bei der Maximierung des ersten Fensters. Wenn das Fenster zuerst manuell skaliert wird, ist alles in Ordnung. Ich denke, das Raster passt seine untergeordneten Steuerelemente nach dem zweiten Größenänderungsereignis (??) an.

Was ist zu tun, damit GridPanel ordnungsgemäß funktioniert, wenn es zu diesem Fehler kommt? Es könnte reichen, um eine Nachricht zu senden (aber welche Nachricht?), Weiß ich nicht. Ich habe versucht, Realign, Refresh usw. zu verwenden, aber sie haben nicht geholfen.

Vielen Dank für Ihre Hilfe im Voraus,

Mariusz.

Antwort

7

Ah, ich hatte ähnliche Probleme. Dies könnte mit einem Problem mit der Größenänderung in der VCL zusammenhängen. Vielleicht möchten Sie versuchen the fix by Andreas Hausladen. Es scheint in den meisten Fällen für mich zu funktionieren.

1

Ich hatte diesen Fehler auch bei mehreren Projekten. Ich bin mir nicht sicher, wie ich das gelöst habe (es war bei Projekten für meinen früheren Arbeitgeber, ich habe keinen Zugang mehr zu diesem Quellcode). Ich denke, dass ich das Elternfeld oder Formular, auf dem das GridPanel platziert wurde, neu zeichne/aktualisiere.

0

auf die Größe des Eigentümers Aufruf GridPanel.Invalidate. Ich habe es nicht getestet. Ich hoffe, es ist Arbeit.

2

Ich fand einen Trick.

in OnResize Ereignis der Eltern von gridpanel, ändern Sie die Breite des gridpanels um 1 Pixel.

dann Gridpanel bemerken Größe geändert, dann ordnen Unter Kontrollen in Gridpanel ..

Probe unterhalb ..

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

Etwas im Zusammenhang http://qc.embarcadero.com/wc/qcmain.aspx?d=45827 – manlio

2

Ändern der Breite/entkräften die Steuerung nicht für mich arbeiten (hat sich mit den letzten Versionen von RAD Studio geändert?).

Auf jeden Fall eine ähnliche, einfache Abhilfe entlang dieser Linie ist:

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