LCL Tips/de
│
Deutsch (de) │
English (en) │
français (fr) │
русский (ru) │
中文(中国大陆) (zh_CN) │
Bedienelemente manuell erzeugen ohne Overhead
Parent zuletzt setzen
Für Delphianer: Im Gegensatz zu Delphi erlaubt die LCL beinahe alle Eigenschaften in beliebiger Reihenfolge zu setzen. Zum Beispiel unter Delphi können sie ein Bedienelement nicht ohne a parent positionieren. Die LCL erlaubt dies und dieses Feature kann benutzt werden, den Overhead zu reduzieren.
with TButton.Create(Form1) do begin // 1. Erzeugen eines button setzt die Vorgabegröße // 2. Ändern der Position. Keine Randeffekte, weil Parent=nil SetBounds(10,10,Width,Height); // 3. Ändern der Größe abhängig vom Thema. Noch nicht, weil Parent=nil AutoSize:=true; // 4. Ändern der Größe wegen AutoSize=true. Noch nicht, weil Parent=nil Caption:='Ok'; // 5. Setzen sie Parent. Jetzt geschieht all das obige, aber in einer einzigen Aktion. Parent:=Form1; end;
Wenn ein Bedienelement a Parent hat, dann werden alle Eigenschaften unverzüglich wirksam. Ohne a Parent tun viele Eigenschaften nicht mehr, als den Wert zu speichern. Und sobald the Parent gesetzt ist, wird jede Eigenschaft angewendet. Das trifft besonders für grand children zu:
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 startet nicht bevor jeder parent eingerichtet ist und das Formular sichtbar wird.
Vermeiden sie eine frühe Handle Erzeugung
Sobald das Handle eines TWinControl erzeugt ist, ändert jede Änderung einer Eigenschaft the visual thing (called the widget), sogar wenn ein Bedienelement nicht sichtbar ist. Wenn es ein Handle hat, sind Änderungen dennoch aufwändig.
Verwenden sie SetBounds anstelle von Left, Top, Width, Height
Anstelle von
with Button1 do begin Left:=10; Top:=10; Width:=100; Height:=25; end;
verwenden sie
with Button1 do begin SetBounds(10,10,100,25); end;
Left, Top, Width, Height rufen SetBounds auf. Und jede Änderung der Position oder Größe ruft die Neuberechnung aller sibling Bedienelemente und eventuell rekursiv die der parent und/oder der grandchild Bedienelemente auf.
DisableAlign / EnableAlign
Wenn sie viele Bedienelemente positionieren, ist es eine gute Idee, die Neuberechnungvon all auto sizing, aligning, anchoring zu deaktivieren.
DisableAlign; try ListBox1.Width:=ClientWidth div 3; ListBox2.Width:=ClientWidth div 3; ListBox3.Width:=ClientWidth div 3; finally EnableAlign; end;
Anmerkung: Jeder DisableAlign Aufruf benötigt einen EnableAlign Aufruf. Zum Beispiel wenn sie DisableAlign zweimal aufrufen, müssen sie auch EnableAlign zweimal aufrufen.
Für Delphianer: Dies funktioniert rekursiv. Das bedeutet, DisableAlign stoppt aligning in allen childs und grand childs.