Difference between revisions of "LCL Tips/fr"

From Lazarus wiki
Jump to navigationJump to search
m (Fixed syntax highlighting)
 
(12 intermediate revisions by 3 users not shown)
Line 7: Line 7:
 
'''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).
 
'''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).
  
<delphi>
+
<syntaxhighlight lang=pascal>
 
   with TButton.Create(Form1) do begin
 
   with TButton.Create(Form1) do begin
     // 1. crée un bouton fixe la taille de défaut  
+
     // 1. créer un bouton fixe la taille par défaut  
     // 2. change la position. No side effects, because Parent=nil
+
     // 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 size depending on theme. Not yet, because Parent=nil
+
     // 3. change la taille selon le thème. Pas d'effet encore , car Parent=nil
 
     AutoSize:=true;
 
     AutoSize:=true;
     // 4. changing size because of AutoSize=true. Not yet, because Parent=nil
+
     // 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;
</delphi>
+
</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 grands enfants :
+
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 :
  
<delphi>
+
<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;
</delphi>
+
</syntaxhighlight>
  
Autosizing starts not before every parent is setup and the form becomes visible.
+
Le dimensionnement automatique ne démarre pas avant que chaque parent soit choisi et que la fiche soit visible.
  
== Avoid early Handle creation ==
+
== Éviter de créer de bonne heure des Handles  ==
  
As soon as the Handle of a TWinControl is created, every change of a property changes the visual thing (called the widget). Even if a control is not visible, when it has a Handle, changes are still expensive.
+
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  
<delphi>
+
<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;
</delphi>
+
</syntaxhighlight>
 
Utilisez
 
Utilisez
<delphi>  
+
<syntaxhighlight lang=pascal>  
 
   with Button1 do begin
 
   with Button1 do begin
 
     SetBounds(10,10,100,25);
 
     SetBounds(10,10,100,25);
 
   end;
 
   end;
</delphi>
+
</syntaxhighlight>
Left, Top, Width, Height are calling SetBounds. And every change of position or size invokes recalculation of all sibling controls and maybe recursively the parent and/or the grandchild controls.
+
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 =
  
When positioning many controls, it is a good idea to disable the recalculation of all auto sizing, aligning, anchoring.
+
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.
  
'''Note''': Every DisableAlign call needs a EnableAlign call. For example if you call two times DisableAlign, you must call two times 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.
 
 
'''For Delphians''': This works recursively. That means DisableAlign stops aligning in all childs and grand childs.
 

Latest revision as of 01: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.