2009-05-14 13 views
6

Tengo un problema que no puedo resolver aunque paso mucho tiempo tratando de hacerlo.GridPanel no se ajusta en el primer cambio de tamaño

Normalmente utilizo GridPanels para alinear los controles en los formularios. Tiene, sin embargo, un error molesto. Cuando el modo de alineación de GridPanel es alClient y maximizo su ventana primaria, el GridPanel se ajusta al nuevo tamaño de esa ventana, sin embargo, los controles que se encuentran en la cuadrícula no lo hacen. Permanecen en la misma posición que antes de cambiar el tamaño de la ventana. Ocurre solo en la maximización de la primera ventana. Si la ventana se cambia de tamaño manualmente, todo está bien. Creo que la cuadrícula ajusta sus controles secundarios después del segundo evento de cambio de tamaño (??).

¿Qué hacer para que GridPanel funcione correctamente si se trata de este error? Puede ser suficiente enviar un mensaje (¿pero qué mensaje?), No sé. Intenté usar Realign, Refresh, etc., pero no me ayudaron.

Gracias por su ayuda de antemano,

Mariusz.

Respuesta

7

Ah, he tenido problemas similares también. Podría estar relacionado con un problema de cambio de tamaño en el VCL. Es posible que desee intentar the fix by Andreas Hausladen. Parece que me funciona en la mayoría de los casos.

1

También he tenido este error en varios proyectos. No estoy seguro de cómo resolví esto (fue en proyectos para mi empleador anterior, ya no tengo acceso a este código fuente). Creo que tuve que volver a dibujar/actualizar ese marco principal o formulario en el que se colocó GridPanel.

0

en el cambio de tamaño del propietario llame a GridPanel.Invalidate. No lo probé. Espero que sea trabajo

2

Encontré un truco.

en OnResize evento de parent of gridpanel, cambie el ancho de gridpanel por 1 píxel.

continuación, se dará cuenta de gridPanel tamaño cambiado, entonces reorganizar controles secundarios en gridpanel ..

muestra es inferior ..

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

Algo relacionado http://qc.embarcadero.com/wc/qcmain.aspx?d=45827 – manlio

2

Al cambiar el ancho/invalidar el control no funciona para mí (algo cambió con las versiones recientes de RAD Studio?).

De todos modos una solución parecida, simple a lo largo de esa línea es:

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