Difference between revisions of "LCL Tips"
From Lazarus wiki
Jump to navigationJump to searchLine 2: | Line 2: | ||
== Set the Parent as last == | == Set the Parent as last == | ||
+ | |||
+ | '''For Delphians''': Contrary to Delphi the LCL allows to set nearly all properties in any order. For example under Delphi you can not position a control without a parent. The LCL allows this and this feature can be used to reduce overhead. | ||
with TButton.Create(Form1) do begin | with TButton.Create(Form1) do begin | ||
Line 29: | Line 31: | ||
Autosizing starts not before every parent is setup and the form becomes visible. | Autosizing starts not before every parent is setup and the form becomes visible. | ||
− | |||
== Avoid early Handle creation == | == Avoid early Handle creation == | ||
When the Handle of a Control | When the Handle of a Control |
Revision as of 23:21, 25 July 2006
Create controls manually without overhead
Set the Parent as last
For Delphians: Contrary to Delphi the LCL allows to set nearly all properties in any order. For example under Delphi you can not position a control without a parent. The LCL allows this and this feature can be used to reduce overhead.
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