Alignement boutons dans un Tpanel [Résolu]

softstar 3 Messages postés mardi 14 décembre 2004Date d'inscription 13 août 2006 Dernière intervention - 13 août 2006 à 10:19 - Dernière réponse : softstar 3 Messages postés mardi 14 décembre 2004Date d'inscription 13 août 2006 Dernière intervention
- 13 août 2006 à 23:42
bonjour tout le monde ,

je viens de terminer mon graduat d'analyste-programmeur en cours du soir

et je dois donc realiser un travail de fin d'études

j'ai choisi de faire la gestion complete d'un café-restaurant de ma région

j'utilise pour ce faire delphi 2005 , et microsoft access

voici mon probleme :

pour la réalisation de l interface de la caisse-enregistreuse de ce café

j'ai pensé qu'a la creation de ma Form , compter le nombre d'enregistrements de ma requetes concernant les familles de produits

exemple : pour ma famille alcool , j'ai 22 enregistrements et donc j'aimerais creer dynamiquement 22 boutons et les mettre dans un Tpanel

Mon probleme,j'arrive a creer dynamiquement mes boutons , mais le probleme c est que ca dépasse de mon Tpanel

Comment puis je faire pour par exemple les aligner en colonnes dans mon Tpanel et qu'ils ne dépassent pas de mon Tpannel ?

merci d'avance en tout cas a tous pour votre aide ;)
Afficher la suite 

Votre réponse

5 réponses

Cirec 4221 Messages postés vendredi 23 juillet 2004Date d'inscription 11 mai 2018 Dernière intervention - 13 août 2006 à 14:23
+3
Utile
Salut

Essaye voir ce bout de code .

Je l'avais écris pour aligner tous les composants (TWinControl) dans un Panel

Tu places un TPanel sur ta fiche que tu nommes MPanel et un TButton (en dessous du Panel don sur la fiche ) que tu nommes btn_Arrange.
(Le Panel porte le nom de MPanel pour Main-Panel où Master-Panel)
Tu places, dans le MPanel, autant de TWinControl que tu désires  (Button, Panel, BitBtn, Edit, Memo, CheckBox, RadioButton ...)
 
Tu double-Cliques sur le bouton "btn_Arrange"(en mode conception bien sur) et tu complète comme ceci :

Procedure TfrmMain.btn_ArrangeClick(Sender: TObject);
{Grâce à DeferWindowPos les controles sont redimenssionnés et déplacés en une fois
ce qui est plus jolie visuellement parlant}
Var
  ButtonsPerCol, ButtonWidth, ButtonHeight, FColumns,
    FMargin, WinCtrlCount, I, J: Integer;
  DeferHandle       : THandle;
  ALeft             : Integer;
Begin
  FColumns := 6; // Nombre de colonnes
  FMargin := 10; // Marge entre le bord du MPanel et le premier composant
  WinCtrlCount := 0;
  If MPanel.ControlCount <> 0 Then   // Si MPanel contient des controles
    For I : = 0 To MPanel.ControlCount - 1 Do
      If (MPanel.Controls[I] Is TWinControl) Then Inc(WinCtrlCount);// Si ils sont de type TWinControl alors on incrémente
  If WinCtrlCount <> 0 Then // Si on à trouvé des TWinControl dans MPanel
    Begin
      ButtonsPerCol := (WinCtrlCount + FColumns - 1) Div FColumns; // Calcule ddes positions
      ButtonWidth : = (MPanel.Width - FMargin) Div FColumns;
      ButtonHeight := (MPanel.Height - FMargin) Div ButtonsPerCol;
      MPanel.Width : = FMargin + ButtonWidth * FColumns;
      MPanel.Height := FMargin + ButtonHeight * ButtonsPerCol;
      DeferHandle := BeginDeferWindowPos(WinCtrlCount);
      J := 0;
      Try
        For I : = 0 To MPanel.ControlCount - 1 Do  // Et on applique les changements aux Controles
          If (MPanel.Controls[I] Is TWinControl) Then
            With (MPanel.Controls[I] As TWinControl) Do
              Begin
                BiDiMode := MPanel.BiDiMode;
                ALeft := (J Div ButtonsPerCol) * ButtonWidth + FMargin Div 2;
                If UseRightToLeftAlignment Then
                  ALeft : = MPanel.ClientWidth - ALeft - ButtonWidth;
                DeferHandle := DeferWindowPos(DeferHandle, Handle, 0,  ALeft,
                  (J Mod ButtonsPerCol) * ButtonHeight + FMargin Div 2,
                  ButtonWidth, ButtonHeight,
                  SWP_NOZORDER Or SWP_NOACTIVATE);
                Inc(J);
              End;
      Finally
        EndDeferWindowPos(DeferHandle);
      End;
    End;
End;

Bonne chance pour le reste
@+
Cirec
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de Cirec
cs_neko 135 Messages postés jeudi 14 août 2003Date d'inscription 12 octobre 2006 Dernière intervention - 13 août 2006 à 11:55
0
Utile
Je suis pas sûr de bien comprendre, pour modifier l'emplacement des bouton, il suffit de modifier le Top et le Left .

Pour aligner en colonnes perso je ferais:

I:=ListBoutons.Add(TButton.Create(Self));

Whith TButton(ListBouttons.Items[I]) Do
Begin

Parent:=Self;

Height:=BUTTON_HEIGHT; //Constante

Width:=BUTTON_WIDTH; //Constante

Caption:='Blablabla';

Top:=((I*BUTTON_HEIGHT) Mod (Panel.Height Div BUTTON_HEIGHT))+1;

Left:=(I Div BUTTON_WIDTH)+1;

End;

Bon, j'ai pas testé, mais normalement ça devrait marcher ( si c'est bien ce que tu demande ^^' )


bouh
Commenter la réponse de cs_neko
cs_neko 135 Messages postés jeudi 14 août 2003Date d'inscription 12 octobre 2006 Dernière intervention - 13 août 2006 à 11:57
0
Utile
Heu, faut mettre ton panel a AOwner (param du constructeur TButton ) et à parent

bouh
Commenter la réponse de cs_neko
softstar 3 Messages postés mardi 14 décembre 2004Date d'inscription 13 août 2006 Dernière intervention - 13 août 2006 à 12:00
0
Utile
ok neko , je vais tester ce que tu viens de me dire ,

mais , excuse-moi , je ne comprends pas trop bien ton second message :

"Heu, faut mettre ton panel a AOwner (param du constructeur TButton ) et à parent "  ?

tu sais m eclaircir par un bout de code ?

merci beaucoup ;)
Commenter la réponse de softstar
softstar 3 Messages postés mardi 14 décembre 2004Date d'inscription 13 août 2006 Dernière intervention - 13 août 2006 à 23:42
0
Utile
merci beaucoup cirec,cela me donne exactement ce que je désirais


tu rox ;)
Commenter la réponse de softstar

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.