On Thu, 15 Jun 2006 09:31:48 +0100
Paul Michell <[EMAIL PROTECTED]> wrote:

> I am having problems finding a way on Linux to stop a form flickering as
> it is  repainted when resized. On Delphi I used to do this by processing
> the Windows Erase Background message and supressing the OS background fill
> (WM.Result=0). When I converted this to the Equivalent LM message it
> didn't work. Googling  for a solution I found a suggestion that used the
> DoubleBuffered property to eliminate the flicker. This works under windows
> but not GTK1 on Linux.
> 
> My questions are:
> 
> Is this a known limitation?

Yes. gtk1 has no easy double buffering.


> Will it also be the case in other Linux widgetsets (GTK2/QT)?

No. gtk2 and qt have double buffering, but someone has to integrate it into
the lcl gtk2/qt interface.


> Why doesn't the Delphi message handling technique work on Lazarus even in 
> Windows?

- It only works partially.
- It would be harder to maintain the LCL. 
- Lazarus prefers platform independent solutions, so platform dependent
tricks are more difficult to achieve than under Delphi.

 
> For test purposes you can replicate the problem by creating a single form
> app  with the following two event procedures. When the form is resized it
> will  flicker red/grey on Linux but be solid red on Windows:
> 
> 
> Procedure TMainForm.FormCreate(Sender: TObject);
> Begin
>   Self.DoubleBuffered := True;
> end;
> 
> Procedure TMainForm.FormPaint(Sender: TObject);
> Begin
>   Canvas.Brush.Color:=clRed;
>   Canvas.FillRect(ClientRect);
> end;

As DoubleBuffered:=true has no effect on gtk1, it is painting grey, then
red.


Mattias

_________________________________________________________________
     To unsubscribe: mail [EMAIL PROTECTED] with
                "unsubscribe" as the Subject
   archives at http://www.lazarus.freepascal.org/mailarchives

Reply via email to