Voici une petit procedure sympa pour positionner des composants. Par exemple mettre à droite ou au centre des bouton fermer d'une fenetre quelque soit sa taille
Source / Exemple :
//==============================================================================
// Procedure pour modifier la position des contrôles passés en parametre
// il y a 4 paramètres
// - aCentrage : définis le type de potionnement (Gauche,Droite,Centre)
// - aCentrerHauteur : Si vrai alors on centre aussi selon la hauteur
// - aControles : liste des controles à positionner
// - aDistanceBord : Distance en pixels par rapport aux bords (8 par défaut)
//==============================================================================
procedure PositionnerHorizontalementControles(aPositionnement : TPositionnement;aCentrerHauteur : Boolean; aControles: array of TControl;aDistanceBord : Integer =8);
var
i, lLongueurBloc, lLeftBloc : Integer;
lEcartAvecPrecedent : array of Integer;
lParent: TControl;
begin
if length(aControles) < 1 then Exit;
for i := 0 to length(aControles)-1 do
if aControles[i] = nil then
Raise Exception.Create('Aucun contrôle ne peut etre à nil');
lParent := aControles[0].Parent; // tous les parents doivent identiques
// Vérifications que tous les contrôles possedent le même parent
for i := 0 to length(aControles)-1 do
if aControles[i].Parent <> lParent then
Raise Exception.Create('Tous les contrôles n''ont pas le même parent');
SetLength(lEcartAvecPrecedent,length(aControles));
// On recupere les ecarts en pixels entre tous les controles
for i := 0 to length(aControles)-1 do
begin
if i = 0 then
lEcartAvecPrecedent[i] := 0 // Pas d'ecart, c'est le premier
else
lEcartAvecPrecedent[i] := (aControles[i].Left-(aControles[i-1].Left+aControles[i-1].Width));
end;
// on recupere la longueur du bloc qui doit posseder la longueur de tous les
// controles, en comptant l'ecarts entre chaque
for i := 0 to length(aControles)-1 do
begin
if i = 0 then
lLongueurBloc := aControles[i].Width
else
lLongueurBloc := lLongueurBloc + lEcartAvecPrecedent[i] + aControles[i].Width;
end;
// Determine le Left du Bloc qui represente les controles
// avec ce left, le bloc est centré
case aPositionnement of
pGauche : lLeftBloc := aDistanceBord;
pDroite : lLeftBloc := lParent.Width-lLongueurBloc-aDistanceBord;
pCentre : lLeftBloc := (lParent.Width DIV 2) - (lLongueurBloc DIV 2);
end;
// on change le Left de tous les controles
for i := 0 to length(aControles) -1 do
begin
if aCentrerHauteur then
aControles[i].Top := (lParent.Height DIV 2) - (aControles[i].Height DIV 2);
if i = 0 then
aControles[i].Left := lLeftBloc
else
// le left d'un controle, c'est le left du précedent + la longueur du precedent
// + l'ecart avec le precedent
aControles[i].Left := aControles[i-1].Left+aControles[i-1].Width+lEcartAvecPrecedent[i];
end;
end;
Conclusion :
si vous avec des commentaires envoyer moi un mail
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.