LCL Tips

From Lazarus wiki
Jump to navigationJump to search

Create controls manually without overhead

Set the Parent as last

 with TButton.Create(Form1) do begin
   // 1. creating a button sets the default size
   // 2. change position. No side effects, because Parent=nil
   SetBounds(10,10,Width,Height);
   // 3. change size depending on theme. Not yet, because Parent=nil
   AutoSize:=true;
   // 4. changing size because of AutoSize=true. Not yet, because Parent=nil
   Caption:='Ok';
   // 5. Set Parent. Now all the above takes place, but in a single action.
   Parent:=Form1;
 end;

When a control has a Parent, then all properties take effect immediately. Without a Parent many properties do nothing more than store the value. And as soon as the Parent is set every property is applied. This is especially true for grand children:

 GroupBox1:=TGroupBox.Create(Self);
 with GroupBox1 do begin
   with TButton1.Create(Self) do begin
     AutoSize:=true;
     Caption:='Click me';
     Parent:=GroupBox1;
   end;
   Parent:=Form1;
 end;
 Form1.Show;

Autosizing starts not before every parent is setup and the form becomes visible.


Avoid early Handle creation

When the Handle of a Control