softstar
Messages postés3Date d'inscriptionmardi 14 décembre 2004StatutMembreDernière intervention13 août 2006
-
13 août 2006 à 10:19
softstar
Messages postés3Date d'inscriptionmardi 14 décembre 2004StatutMembreDernière intervention13 août 2006
-
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 ;)
Cirec
Messages postés3833Date d'inscriptionvendredi 23 juillet 2004StatutModérateurDernière intervention18 septembre 202250 13 août 2006 à 14:23
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;