Gambas France BETA


Pas de compte ? Incription

Les Boutons (Gambas Acnéique ?)

1
AuteurMessages
ericigor5962#1 Posté le 12/3/2011 à 12:39:00
Dans la forme principale:
Créez 2 cadres appelés respectivement CadreN2, Frame1

1
' Gambas class file' Pas obligatoire mais recommandé d'aprés l'auteurPUBLIC CONST _DefaultEvent AS String = "Click"PUBLIC FavorisUn1 AS Object[150] 'La variable FavorisUn1 sont comme des objets de contrôles, elles servent à créer les boutonsPUBLIC FavorisUn2 AS Object[150] ' idemPUBLIC LeNomDesBoutons AS Object[150] ' La variable LeNomDesBoutons sont comme des objets de contrôles, elles servent à créer les boutonsPUBLIC SUB _new()ME.AutoResize = TRUE ME.CenterEND ' Fin de _NewPUBLIC SUB Form_Open()CreationDeBouton(ME, CadreN2, "ToggleButton", FavorisUn1, 20, "GroupeFavorisUn")CreationDeBouton(ME, Frame1, "ToggleButton", FavorisUn2, 21, "GroupeFavorisDeux")END 'Fin De Form_OpenPUBLIC SUB GroupeFavorisUn_Click() PRINT "Vous êtes dans l'événement GroupeFavorisUn " PRINT "LAST.text "; LAST.text END ' 'Fin De GroupeFavorisUnPUBLIC SUB GroupeFavorisDeux_Click() PRINT "Vous êtes dans l'événement GroupeFavorisDeux " PRINT "LAST.text "; LAST.text END ' Fin De GroupeFavorisDeuxPUBLIC SUB CreationDeBouton(NoObject, OPTIONAL LeNomDuConteneur AS Container, SorteDeBouton AS String, LeNomDesBoutons AS Object, LeNombreDeBouton AS Integer, LeNomDuGroupe AS String)DIM CoordonneesDuBoutonEnX AS IntegerDIM CoordonneesDuBoutonEnY AS IntegerDIM Boucle AS IntegerDIM PasDeX AS IntegerDIM EspacementDuBoutonEnHauteur AS IntegerDIM EspacementDuBoutonEnLargeur AS IntegerDIM LargeurDuBouton AS IntegerDIM HauteurDuBouton AS IntegerDIM CodeAscii AS IntegerLargeurDuBouton = 32HauteurDuBouton = 32CoordonneesDuBoutonEnX = 14CoordonneesDuBoutonEnY = 28PasDeX = CoordonneesDuBoutonEnXEspacementDuBoutonEnHauteur = HauteurDuBouton + 6EspacementDuBoutonEnLargeur = LargeurDuBouton + 6FOR Boucle = 1 TO LeNombreDeBouton' Choix automatique du boutonIF SorteDeBouton = "ToggleButton" THENNomDeLaForme.LeNomDesBoutons[Boucle] = NEW ToggleButton(LeNomDuConteneur) AS {LeNomDuGroupe}ELSE IF SorteDeBouton = "RadioButton" THENNomDeLaForme.LeNomDesBoutons[Boucle] = NEW RadioButton(LeNomDuConteneur) AS {LeNomDuGroupe}ELSE IF SorteDeBouton = "ToolButton" THENNomDeLaForme.LeNomDesBoutons[Boucle] = NEW ToolButton(LeNomDuConteneur) AS {LeNomDuGroupe}ELSE IF SorteDeBouton = "Button" THENNomDeLaForme.LeNomDesBoutons[Boucle] = NEW Button(LeNomDuConteneur) AS {LeNomDuGroupe}ENDIF ' On déclare que le bouton MesBoutons[Boucle] avec Boucle=1 est un Bouton (ToggleButton,RadioButton,ToolButton,Button) poser sur la forme active avec pour largeur 32 pixelsNomDeLaForme.LeNomDesBoutons[Boucle].width = LargeurDuBouton ' On déclare que le bouton MesBoutons[Boucle] avec Boucle=1 est un Bouton (ToggleButton,RadioButton,ToolButton,Button) poser sur la forme active avec pour hauteur 32 pixelsNomDeLaForme.LeNomDesBoutons[Boucle].height = HauteurDuBouton' On déclare que le bouton MesBoutons[Boucle] avec Boucle=1 est un Bouton (ToggleButton,RadioButton,ToolButton,Button) poser sur la forme active positionner à 125 pixels du bord' gauche du contrôle relatif à son parent(form ou frame etc). NomDeLaForme.LeNomDesBoutons[Boucle].x = CoordonneesDuBoutonEnX' On déclare que le bouton MesBoutons[Boucle] avec Boucle=1 est un Bouton (ToggleButton,RadioButton,ToolButton,Button) poser sur la forme active positionner à 125 pixels' de la bordure haut du contrôle relatif à son parent(form ou frame etc)..NomDeLaForme.LeNomDesBoutons[Boucle].y = CoordonneesDuBoutonEnY ' On affecte la valeur de la variable Boucle à la propriété Text de NomDeLaForme.LeNomDesBoutons[Boucle].TextNomDeLaForme.LeNomDesBoutons[Boucle].Text = Boucle'On affecte la valeur FALSE à la propriété Value de NomDeLaForme.LeNomDesBoutons[Boucle].ValueNomDeLaForme.LeNomDesBoutons[Boucle].Value = FALSE'On affecte la valeur &hfdfdfd(=ButtonBackground) à la propriété Background de NomDeLaForme.LeNomDesBoutons[Boucle].BackgroundNomDeLaForme.LeNomDesBoutons[Boucle].Background = &hfdfdfd'On affecte la valeur Bold,+3 à la propriété Font de NomDeLaForme.LeNomDesBoutons[Boucle].FontNomDeLaForme.LeNomDesBoutons[Boucle].Font = Font["Bold,+3"]'Lorsque 4 boutons sont créer alors la variable CoordonneesDuBoutonEnX passe à PasDeX ainsi que CoordonneesDuBoutonEnY s'incrémenteIF (Boucle MOD 4) = 0 THENCoordonneesDuBoutonEnX = PasDeX' Incrémentation de CoordonneesDuBoutonEnY de l'Espacement Du Bouton En HauteurCoordonneesDuBoutonEnY = CoordonneesDuBoutonEnY + EspacementDuBoutonEnHauteurELSE ' Incrémentation de CoordonneesDuBoutonEnX de l'Espacement Du Bouton En LargeurCoordonneesDuBoutonEnX = CoordonneesDuBoutonEnX + EspacementDuBoutonEnLargeurENDIF NEXT END ' Fin De CreationDeBouton

' A mon avis on peut faire mieux, mais voilà, je ne suis pas fortiche fortiche !
Prokopy#2 Posté le 12/3/2011 à 15:01:00
Kinder PinguiTu peux utiliser des conteneurs avec arrangements pour ranger tes contrôles comme il faut, ce qui t'épargnera les calculs de coordonnées.

Le plus simple est sans doute d'utiliser deux HPanel à la place des Frame, qui rangent leurs enfants comme ceci :

| 1 2 3 4 |
| 5 6 7 8 |

Tu n'as pas besoin non plus des tableaux d'objets, il te suffit de faire comme ça :

1
' Gambas class filePublic Sub _new() Me.Arrangement = Arrange.Vertical CreerBoutons(20, HPanel1, "Groupe1") CreerBoutons(28, HPanel2, "Groupe2") Me.Center()EndPublic Sub CreerBoutons(nombre As Integer, parent As Control, Groupe As String) Dim BoutonTemporaire As Button Dim i As Integer For i = 1 To nombre BoutonTemporaire = New Button(parent) As {Groupe} BoutonTemporaire.Text = i BoutonTemporaire.Resize(30, 30) Next EndPublic Sub Groupe1_Click() Print "Vous avez cliqué sur le bouton " & Last.Text & " du groupe Groupe1." EndPublic Sub Groupe2_Click() Print "Vous avez cliqué sur le bouton " & Last.Text & " du groupe Groupe2." End


C'est quand même plus buvable, et en plus comme ça les boutons s'arrangent automatiquement quand tu redimensionnes la fenêtre. :)
La théorie, c'est quand on sait tout et que rien ne fonctionne.
La pratique, c'est quand ça marche mais qu'on ne sait pas pourquoi.
Quand la théorie rejoint la pratique, rien ne fonctionne et on ne sait pas pourquoi.
GarulfoUnix#3 Posté le 24/3/2011 à 13:00:00
By the wayTu aurais du utiliser les balises afin de conserver l'indentation du code et surtout pour apporter plus de clarté.
Car là dans ton message c'est pas très lisible :) .
1