Bonsoir,

Question stupide, direz-vous ?

Au départ j'étais parti sur une histoire classique de contrôle.Left := (parent.Width-contrôle.Width) div 2; et pareil pour le Top et la hauteur, mais j'avais des effets de bord trop longs à expliquer ici, alors j'ai un peu googlé et bien mal m'en a pris, parce qu'au plus je lis au plus je m'enfonce...

Pour la faire courte, je me suis retrouvé sur le wiki, où j'ai pu voir la mise en application de choses que je n'utilise jamais, l'aide étant tellement vide sur ce sujet...

Bref, j'ai trouvé ça (je n'ai mis que les parties en rapport avec mon souci) :
Citation Envoyé par wiki
http://wiki.freepascal.org/Autosize_...#BorderSpacing
The BorderSpacing properties controls the minimum amount of space around a control.
The properties are:
CellAlignHorizontal: This is used in table layouts
like ChildSizing.Layout=cclLeftToRightThenTopToBottom.
If the control is smaller than the table cell,
this property defines where to align the control: to the left ccaLeftTop,
to the right ccaRightBottom or in the middle ccaCenter.

http://wiki.freepascal.org/Autosize_...dividual_cells
There are four possible values for CellAlignHorizontal/CellAlignVertical:
ccaCenter: the child control uses its preferred width (height) and will be centered in the cell
Lisant "This is used in table layouts" j'ai supposé qu'il pouvait être question de grilles, j'ai donc dessiné une fiche avec une DrawGrid, j'ai mis les options d'alignement de la cellule (il n'y en a qu'une) à ccaCenter et pour le panneau que j'espère aligner, tous les Anchors (akTop, etc.) à False comme expliqué + ou - dans le wiki,
Citation Envoyé par wiki
http://wiki.freepascal.org/Autosize_...chored_control
When changing the size of a parent all anchored child controls are moved and/or resized immediately
With no akLeft and no akRight their centers are scaled:
et tout mon code est là :
Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.FormCreate(Sender: TObject);
begin
  dg.DefaultDrawing := False; // pour éviter le pointillé de sélection
  Panel4Grid.Parent := dg; // pour aligner le panel dans la cellule de la dg
end;
 
procedure TForm1.Panel2Resize(Sender: TObject); // pour voir le comportement du Panel4Grid
begin
  with dg do begin
    Height:= panel2.Height div 2;
    Width := panel2.Width-20;
    Columns[0].Width := Width-20;
    RowHeights[0] := Height;
    Color:=clSkyBlue;
    Columns[0].Color:=clYellow;
  end;
end;

Ce code donne ça :
Nom : centercontrol.png
Affichages : 488
Taille : 9,4 Ko

Le Panel1 est aligné à gauche, le 2 à client, et le Panel4Grid, comme son nom l'indique, se retrouve sur la DrawGrid, mais bien mal placé...

Questions : c'est moi qui me suis gourré quelque part ?
C'est le wiki qui est à la ramasse ?
C'est pas supporté sous Linux ?
Ah, sous Windows XP et Laz 1.6rc1, sans rien changer au code ni aux réglages dans l'EDI (qui sont corrects !), le centrage vertical fonctionne.
Nom : edi.png
Affichages : 369
Taille : 3,5 Ko

Le boulot à moitié fait ? Allez comprendre...

Nom : sous_xp.png
Affichages : 399
Taille : 4,6 Ko
J'ai "estranciné" la fiche pour montrer la réduction du Panel2, et donc la DrawGrid, et on voit bien le panel qui se barre lamentablement à gauche...

EDIT 5 minutes + tard : après avoir fait la copie d'écran sous Linux avec le panneau pas du tout centré puis être passé sous XP où j'ai découvert l'alignement vertical, je suis repassé sous Linux et là, l'alignement vertical est apparu également !
Est-ce que le passage sous un EDI + récent que mon vieux 1.4 aurait rajouté quelque chose ? Mystère et boule de gomme...