Delphi: Conceptos: Parpadeo de controles.


En ocasiones nos encontramos que al redimensionar un formulario Delphi los controles parpadean... vamos a ver por que y como evitarlo.


Los controles Delphi descendientes de la clase TWinControl como TForm cuando reciben el mensaje de pintado WM_PAINT este es procesado por el metodo TWincontrol.WMPaint. La definición del metodo es ...

TWinControl.WMPaint(var Message: TWMPaint);

Si observamos el código fuente del metodo que se encuentra en la unidad Controls.pas observaremos que independientemente del tema del doble buffer básicamente lo que se hace es llamar al metodo PaintHandler cuya definición es...

procedure TWinControl.PaintHandler(var Message: TWMPaint);


Este metodo es el encargado de dibujar el contenido de nuestra ventana o control.


Es en este metodo donde empezamos a ver el problema. Veamos...


Lo primero que se hace en este metodo es llamar a la función WinApi BeginPaint. Pues bien, antes de que nuestro programa continué en la siguiente línea la ejecución de BeginPaint mandará al procedimiento de nuestra ventana directamente un mensaje WM_ERASEBKGND que sera tratada por el metodo WMEraseBkgnd cuya definición es ...

procedure TWinControl.WMEraseBkgnd(var Message: TWMEraseBkgnd);


dentro de este metodo se rellena el fondo de toda la ventana con el color de fondo definido para el control.


Es aquí precisamente donde notaremos el parpadeo ya que aun no hemos dibujado nada en nuestra ventana y esta ya ha sido borrada completamente solomente por haber llamado a la función WinApi BeginPaint.


 


Continuará...

0 comentarios: