[Lazarus] Repainting nested components

Roland Turcan konf at rotursoft.sk
Wed Jul 2 11:01:14 CEST 2008

Thanks for you answer.

I am converting one project from Delphi/Kylix to Lazarus and using SVN
versions of Lazarus with FPC 2.2.0.

This behavior is currently related to i386-linux-gtk. But I am going
to port it under MacOS too (Carbon).

MG> Some widgetsets use a mixture. That means it depends on the type of widget, what
MG> technique is used.

Where I can find information of differences among widgets?


<<< 30.6.2008 12:57 - Mattias Gärtner "nc-gaertnma at netcologne.de" >>>
MG> Zitat von Roland Turcan <konf at rotursoft.sk>:

>> Hello lazarus project!
>> How to assure, that all nested components will be repainted after
>> calling MyPanel.Paint, because actually all components are behind new
>> rectangle.

MG> I'm not sure, if you found a bug or if you misunderstood the concept of event
MG> based painting and/or clipping.

MG> In general:
MG> TPanel and TRadioButton are TWinControls and have their own handle. So it is up
MG> to the widgetset (windows, gtk, carbon, qt, fpgui ...) to control the order and
MG> how (double buffered, default background, clipping, overlapping) these widgets
MG> are painted. If they use clipping, then they can paint in any order. They can
MG> even paint only one of them. If they don't use clipping, then they will first
MG> paint TPanel and then TRadioButton.
MG> Some widgetsets use a mixture. That means it depends on the type of widget, what
MG> technique is used.

MG> What widgetset are you using?
MG> What effect do you expect and what do you get?
MG> What lazarus, fpc and OS version are you using?

>> procedure TMyPanel.Paint;
>> var rect :TRect;
>> begin
>>   rect := GetClientRect;
>>   InflateRect(rect,-50,-50);
>>   Canvas.Brush.Color:= clYellow;
>>   Canvas.Rectangle(rect);
>>   inherited Paint;
>> end;
>> procedure TForm1.FormCreate(Sender: TObject);
>> var mp:TMyPanel;
>> begin
>>   mp := TMyPanel.Create (self);
>>   with mp do begin
>>     Parent := self;
>>     Left := 0;
>>     Top := 0;
>>     Width := 200;
>>     Height := 150;
>>     Color:= clRed;
>>   end;
>>   with TRadioButton.Create(mp) do begin
>>     Left:= 10;
>>     Top := mp.Height div 2;
>>     Width:=150;
>>     Caption:= 'Roland';
>>     Parent := mp;
>>   end;
>> end;
>> Thanks in advance.

MG> Mattias

Best regards, TRoland

More information about the Lazarus mailing list