2010-10-27 8 views
7

En Delphi 2009 encontré que el parpadeo de un PageControl, que se produce durante el cambio de tamaño del formulario, se puede reducir estableciendo su propiedad DoubleBuffered en verdadero.¿Cómo puedo reducir el parpadeo de PageControl en Delphi?

Sin embargo, si agrego controles a las hojas de pestañas PageControl, parpadearán independientemente de su configuración de propiedad DoubleBuffered. También he intentado con y sin temas de tiempo de ejecución habilitados.

+1

Sí, el uso de controles de página de tamaño variable es doloroso. En la mayoría de los casos, en mi experiencia, establecer la propiedad de doble búfer de cada control (control de página y cada control secundario) para corregir realmente la mayor parte del problema, pero en algunos casos, * causará * otros problemas de representación, para algunos controles secundarios. Como estoy muy preocupado por la calidad visual, tiendo a 1) activar el doble almacenamiento en el tamaño y usar un temporizador para desactivarlo 1/5 de segundo después del último evento de cambio de tamaño, 2) * ocultar * todo el control de la página durante el cambio de tamaño (y reemplace con algún "indicador de tamaño de ventana"), o 3) desarrolle mis propios controles personalizados. –

+0

¿Estás usando controles de base de datos? Que tal vez TDataSet.DisableControls durante la actualización/adición ayudará. –

+0

Sería útil si nos dijera cuándo y dónde se produce el parpadeo. –

Respuesta

4

Configuración ParentBackground a False para componentes en PageControl ayudó mucho. Sin embargo, esto da como resultado un color diferente de estos componentes del panel, todos tienen ahora un fondo más oscuro. Tal vez esto se puede arreglar fácilmente (sin perder compatibilidad con el tema).

También instalé VCL Fix Pack que tiene una solución para QC 56252 (TPageControl parpadea mucho con el tema activo).

0

Esto está lejos de ser perfecto, pero es posible que desee utilizar esta:

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; 

Es el mejor que he encontrado hasta aquí, y reducirá la actualización de las ventanas de su control de la página. Sin embargo, podría ser menos bonito, pero esa es una cuestión de opiniones ...

+0

Gracias por esta idea. Sin embargo, ahora creo que hay una solución: configurar ParentBackground en False para los componentes en PageControl. No sabía que crear una simple GUI de RAD puede ser tan complicado :) – mjn

+0

No existe nada simple, cuando tienes una combinación de código de biblioteca de controles comunes de Windows y cosas que no son controles de Windows. Esto es sólo la punta del iceberg. –

Cuestiones relacionadas