Forum > LCL

repainting Form Canvas fails while window movement

(1/1)

Martin V:
Hello,

I have got a strange behaviour. The application is a form where the Form.Canvas is drawn directly, it is a text editor.

When moving the window over the screen without changing the window size, I get Paint events. First, I wonder about this behaviour, because the operating system should make this job and the application shouldn't have the necessity of repainting.

Second, repainting fails in this case. I get an empty white form window. (White is the background color.) Paint seems to fill the canvas with the background color - I haven't programmed it -, and drawing has no effect, even the drawing code gets executed. I can restore the content by changing the window size, in this case repainting works.

To observe the behaviour, I have checked
- the cliprect region is the whole window
- the foreground color / font color is OK.

I have really no idea anymore what happend. Perhaps someone had a similar problem.

My questions are:
related to the first subject: Is it a bug or a feature that Paint events are generated if the window is moved and not resized
related to the second subject: What else can I test to understand the malfunction of failed repainting?

Debug sessions are difficult, because the activating/deactivating the test form changes the behaviour.

Thanks for any hints.

Martin V:
Hi,

I have noticed now that Canvas.Height is zero in the paint message while moving the window. Because I need to calculate my graphical output coordinates, I read the false Canvas.Height value and recalculation of the cooridinates fails. A workaround is the usage of ClientHeight instead of Canvas.Height, now the program works. But it seems that this behaviour is not correct. I will send a bugreport in a few days if noone here answers.

theo:
I can't confirm this. I do not get paint events while moving and the Canvas.Height is non-zero. (GTK2)
Lazarus 0.9.29 r25483 FPC 2.4.0 i386-linux-gtk 2 (beta)

Martin V:
I made additional tests and when Canvas.Height is zero, I have the following in the "call stack" window (in reverse order)

twincontrol__wmmove
tcontrol__setboundskeepbase
twincontrol__setbounds
tcontrol__changebounds
resize

That means, I do not get a paint message directly, I get a resize message which starts my redraw. Resize shouldn't be executed when moving the window.

My OS are Win2000 and Vista.

Navigation

[0] Message Index

Go to full version