Difference between revisions of "LCL Tips/fr"
Paulatreides (talk | contribs) |
m (Fixed syntax highlighting) |
||
(14 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
{{LCL Tips}} | {{LCL Tips}} | ||
− | = Créer des contrôles manuellement sans surcoût de | + | = Créer des contrôles manuellement sans surcoût de traîtement = |
== Choisir le Parent à la fin == | == Choisir le Parent à la fin == | ||
− | '''Pour les utilisateurs de Delphi''': A la différence de Delphi la bibliothèque LCL permet de paramétrer presque toutes les propriétés dans n'importe quel ordre. Par exemple sous Delphi vous ne pouvez pas placer un contrôle sans un parent . La bibliothèque LCL permet ceci et cette fonctionnalité peut être employée pour réduire le surcoût supplémentaire(overhead). | + | '''Pour les utilisateurs de Delphi''': A la différence de Delphi la bibliothèque LCL permet de paramétrer presque toutes les propriétés dans n'importe quel ordre. Par exemple sous Delphi vous ne pouvez pas placer un contrôle sans un parent . La bibliothèque LCL permet ceci et cette fonctionnalité peut être employée pour réduire le surcoût de traîtement supplémentaire(overhead). |
− | < | + | <syntaxhighlight lang=pascal> |
with TButton.Create(Form1) do begin | with TButton.Create(Form1) do begin | ||
− | // 1. | + | // 1. créer un bouton fixe la taille par défaut |
− | // 2. change la position. | + | // 2. change la position. Cela n'a aucun effet secondaire, car Parent=nil |
SetBounds(10,10,Width,Height); | SetBounds(10,10,Width,Height); | ||
− | // 3. change | + | // 3. change la taille selon le thème. Pas d'effet encore , car Parent=nil |
AutoSize:=true; | AutoSize:=true; | ||
− | // 4. | + | // 4. taille changeante en raison de AutoSize=true. Pas d'effet encore, car Parent=nil |
Caption:='Ok'; | Caption:='Ok'; | ||
// 5. Choix du parent. Maintenant tout ce qui est ci-dessus se met en place, mais dans une seule action. | // 5. Choix du parent. Maintenant tout ce qui est ci-dessus se met en place, mais dans une seule action. | ||
Parent:=Form1; | Parent:=Form1; | ||
end; | end; | ||
− | </ | + | </syntaxhighlight> |
− | Quand un contrôle a un parent, alors toutes les propriétés prennent effet immédiatement. Sans un parent beaucoup de propriétés ne font rien de plus que de stocker la valeur . Et dès que le parent est choisi chaque propriété est appliquée. C'est particulièrement vrai pour les | + | Quand un contrôle a un parent, alors toutes les propriétés prennent effet immédiatement. Sans un parent beaucoup de propriétés ne font rien de plus que de stocker la valeur. Et dès que le parent est choisi chaque propriété est appliquée. C'est particulièrement vrai pour les petits enfants : |
− | < | + | <syntaxhighlight lang=pascal> |
GroupBox1:=TGroupBox.Create(Self); | GroupBox1:=TGroupBox.Create(Self); | ||
with GroupBox1 do begin | with GroupBox1 do begin | ||
Line 33: | Line 33: | ||
end; | end; | ||
Form1.Show; | Form1.Show; | ||
− | </ | + | </syntaxhighlight> |
− | + | Le dimensionnement automatique ne démarre pas avant que chaque parent soit choisi et que la fiche soit visible. | |
− | == | + | == Éviter de créer de bonne heure des Handles == |
− | + | Dès que le Handle d'un TWinControl est créé, chaque modification d'une propriété change les choses visuelles (appelé les composants graphiques). Même si un contrôle n'est pas visible, quand il a un Handle, les changements sont encore coûteux. | |
== Utilisez SetBounds au lieu de Left, Top, Width, Height == | == Utilisez SetBounds au lieu de Left, Top, Width, Height == | ||
Au lieu de | Au lieu de | ||
− | < | + | <syntaxhighlight lang=pascal> |
with Button1 do begin | with Button1 do begin | ||
Left:=10; | Left:=10; | ||
Line 51: | Line 51: | ||
Height:=25; | Height:=25; | ||
end; | end; | ||
− | </ | + | </syntaxhighlight> |
Utilisez | Utilisez | ||
− | < | + | <syntaxhighlight lang=pascal> |
with Button1 do begin | with Button1 do begin | ||
SetBounds(10,10,100,25); | SetBounds(10,10,100,25); | ||
end; | end; | ||
− | </ | + | </syntaxhighlight> |
− | Left, Top, Width, Height | + | Left, Top, Width, Height appellent SetBounds. Et chaque changement de la position ou de la taille appelle le recalcule de tout les contrôles enfants et peut-être périodiquement le contrôle parent et/ou l'enfant. |
= DisableAlign / EnableAlign = | = DisableAlign / EnableAlign = | ||
− | + | En plaçant beaucoup de contrôles, c'est une bonne idée de neutraliser le recalcul de tout redimensionnement, alignement, ancrage automatique. | |
− | + | <syntaxhighlight lang=pascal> | |
DisableAlign; | DisableAlign; | ||
try | try | ||
Line 72: | Line 72: | ||
EnableAlign; | EnableAlign; | ||
end; | end; | ||
+ | </syntaxhighlight> | ||
+ | '''Note''': Chaque appel à DisableAlign a besoin d'un appel à EnableAlign. Par exemple, si vous appelez deux fois DisableAlign, vous devez appeler deux fois EnableAlign. | ||
− | ''' | + | '''Pour les utilisateurs de Delphi''': Ceci travaille récursivement. Cela signifie que DisableAlign arrête l'alignement de tout les enfants et petits enfants. |
− | |||
− |
Latest revision as of 02:17, 19 February 2020
│
Deutsch (de) │
English (en) │
français (fr) │
русский (ru) │
中文(中国大陆) (zh_CN) │
Créer des contrôles manuellement sans surcoût de traîtement
Choisir le Parent à la fin
Pour les utilisateurs de Delphi: A la différence de Delphi la bibliothèque LCL permet de paramétrer presque toutes les propriétés dans n'importe quel ordre. Par exemple sous Delphi vous ne pouvez pas placer un contrôle sans un parent . La bibliothèque LCL permet ceci et cette fonctionnalité peut être employée pour réduire le surcoût de traîtement supplémentaire(overhead).
with TButton.Create(Form1) do begin
// 1. créer un bouton fixe la taille par défaut
// 2. change la position. Cela n'a aucun effet secondaire, car Parent=nil
SetBounds(10,10,Width,Height);
// 3. change la taille selon le thème. Pas d'effet encore , car Parent=nil
AutoSize:=true;
// 4. taille changeante en raison de AutoSize=true. Pas d'effet encore, car Parent=nil
Caption:='Ok';
// 5. Choix du parent. Maintenant tout ce qui est ci-dessus se met en place, mais dans une seule action.
Parent:=Form1;
end;
Quand un contrôle a un parent, alors toutes les propriétés prennent effet immédiatement. Sans un parent beaucoup de propriétés ne font rien de plus que de stocker la valeur. Et dès que le parent est choisi chaque propriété est appliquée. C'est particulièrement vrai pour les petits enfants :
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;
Le dimensionnement automatique ne démarre pas avant que chaque parent soit choisi et que la fiche soit visible.
Éviter de créer de bonne heure des Handles
Dès que le Handle d'un TWinControl est créé, chaque modification d'une propriété change les choses visuelles (appelé les composants graphiques). Même si un contrôle n'est pas visible, quand il a un Handle, les changements sont encore coûteux.
Utilisez SetBounds au lieu de Left, Top, Width, Height
Au lieu de
with Button1 do begin
Left:=10;
Top:=10;
Width:=100;
Height:=25;
end;
Utilisez
with Button1 do begin
SetBounds(10,10,100,25);
end;
Left, Top, Width, Height appellent SetBounds. Et chaque changement de la position ou de la taille appelle le recalcule de tout les contrôles enfants et peut-être périodiquement le contrôle parent et/ou l'enfant.
DisableAlign / EnableAlign
En plaçant beaucoup de contrôles, c'est une bonne idée de neutraliser le recalcul de tout redimensionnement, alignement, ancrage automatique.
DisableAlign;
try
ListBox1.Width:=ClientWidth div 3;
ListBox2.Width:=ClientWidth div 3;
ListBox3.Width:=ClientWidth div 3;
finally
EnableAlign;
end;
Note: Chaque appel à DisableAlign a besoin d'un appel à EnableAlign. Par exemple, si vous appelez deux fois DisableAlign, vous devez appeler deux fois EnableAlign.
Pour les utilisateurs de Delphi: Ceci travaille récursivement. Cela signifie que DisableAlign arrête l'alignement de tout les enfants et petits enfants.