[Lazarus] Repainting of TWinControl children

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

[Lazarus] Repainting of TWinControl children

Free Pascal - Lazarus mailing list
In a large project I found out that after on resizing of the form, some components get properly resized but don't receive an Invalidate call. I guess, it's caused by the test in lcl/include/control.inc

  if not ((csLoading in ComponentState) or (Self is TWinControl)) then
    InvalidateControl(IsControlVisible, False, true);

Our component extends TCustomControl, so it doesn't get invalidated. I guess, such components are supposed to use a different mechanism, but I can't see how? Can someone point me to the right doc.

--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Repainting of TWinControl children

vojtech.cihak

AFAIK with TCustomControl you obtain just Resize and then Paint.

Paint is preceded by WMPaint. You should move your code to one of these methods.

 

Vojtěch a.k.a. Blaazen

 

______________________________________________________________
> Od: "Martin Grajcar via lazarus" <[hidden email]>
> Komu: "Lazarus mailing list" <[hidden email]>
> Datum: 04.05.2020 17:33
> Předmět: [Lazarus] Repainting of TWinControl children
>

In a large project I found out that after on resizing of the form, some components get properly resized but don't receive an Invalidate call. I guess, it's caused by the test in lcl/include/control.inc

  if not ((csLoading in ComponentState) or (Self is TWinControl)) then
    InvalidateControl(IsControlVisible, False, true);
Our component extends TCustomControl, so it doesn't get invalidated. I guess, such components are supposed to use a different mechanism, but I can't see how? Can someone point me to the right doc.


----------

--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus

--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Repainting of TWinControl children

Free Pascal - Lazarus mailing list
On 06/05/2020 20:36, Vojtěch Čihák via lazarus wrote:

AFAIK with TCustomControl you obtain just Resize and then Paint.

Paint is preceded by WMPaint. You should move your code to one of these methods.

 


Probably done by the OS.

Example https://docs.microsoft.com/en-gb/windows/win32/api/winuser/nf-winuser-movewindow?redirectedfrom=MSDN
If called to change the size and called with bRepaint then invalidation is taken care of.

--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus
Reply | Threaded
Open this post in threaded view
|

Re: [Lazarus] Repainting of TWinControl children

Free Pascal - Lazarus mailing list
In reply to this post by Free Pascal - Lazarus mailing list
W dniu 2020-05-04 o 17:33, Martin Grajcar via lazarus pisze:
>    if not ((csLoading in ComponentState) or (Self is TWinControl)) then
>      InvalidateControl(IsControlVisible, False, true);
>
> Our component extends TCustomControl, so it doesn't get invalidated. I
> guess, such components are supposed to use a different mechanism, but I
> can't see how? Can someone point me to the right doc.

The TCustomControl class inherits from TWinControl class so problem must
be somewhere else.

Michał.
--
_______________________________________________
lazarus mailing list
[hidden email]
https://lists.lazarus-ide.org/listinfo/lazarus