GB3- Simplifier le code du bouton

Rédigé par spheris Aucun commentaire
Classé dans : Bouton, gambas 3, Tutoriels Mots clés : aucun

Utiliser ACTION pour simplifier le code



Bonjour,
Aujourd'hui pour ce tutoriel, nous allons réaliser une application avec 4 boutons.
Je souhaite que quand je clique sur un bouton, les trois autres se désactivent à la manière du comportement des radiobutton.

A) création de l'interface.

Créons 4 boutons comme ceci :


et un bouton Button5 dont la propriété Text est : Reset qui nous permet de réactiver tous les boutons.

B) Ecriture du code

Tout naturellement nous pouvons écrire le code comme ci-dessous qui consiste à désactiver les boutons non cliqués comme ceci :

Public Sub Button1_Click()
Button1.Enabled = True
Button2.Enabled = False
Button3.Enabled = False
Button4.Enabled = False
End

Public Sub Button2_Click()
Button1.Enabled = False
Button2.Enabled = True
Button3.Enabled = False
Button4.Enabled = False
End

Public Sub Button3_Click()
Button1.Enabled = False
Button2.Enabled = False
Button3.Enabled = True
Button4.Enabled = False
End

Public Sub Button4_Click()
Button1.Enabled = False
Button2.Enabled = False
Button3.Enabled = False
Button4.Enabled = True
End

Public Sub Button5_Click()
Button1.Enabled = True
Button2.Enabled = True
Button3.Enabled = True
Button4.Enabled = True
End


C) Simplification du code en utilisant les groupes

Nous pouvons simplifier ce code en utilisant les groupes.
En effet, les groupes servent à regrouper plusieurs widgets ensemble qui réagiront au même évènement.
dans la propriété GROUP de chaque bouton, saisissez toto. Tous ces boutons appartiendrons au groupe toto.

Dans la propriété Tag de chaque bouton, saisssez respectivement 1,2,3,4.
Ainsi nous n'aurons qu'un seul évènement click comme ceci :

PUBLIC SUB toto_Click()
SELECT CASE LAST.tag
CASE 0
bouton0.Enabled = FALSE
bouton1.Enabled = TRUE
bouton2.Enabled = TRUE
bouton3.Enabled = TRUE
CASE 1
bouton0.Enabled = TRUE
bouton1.Enabled = FALSE
bouton2.Enabled = TRUE
bouton3.Enabled = TRUE
CASE 2
bouton0.Enabled = TRUE
bouton1.Enabled = TRUE
bouton2.Enabled = FALSE
bouton3.Enabled = TRUE
CASE 3
bouton0.Enabled = TRUE
bouton1.Enabled = TRUE
bouton2.Enabled = TRUE
bouton3.Enabled = FALSE
END SELECT
END


D) simplification du code à l'extrême.

Nous pouvons encore simplfier le code.
 En regardant de plus près, nous jouons sur la propriété enabled pour activer ou désactiver le bouton.
Ainsi, nous pouvons utiliser la propriété ACTION en saisissant pour chaque bouton le texte bouton.
En cumulant le groupe et action, nous écrivons alors ce code :

PUBLIC SUB toto_Click()
Action["bouton", ME].Enabled = TRUE
LAST.Enabled = FALSE
END


Expliquons ce code :
public Sub toto_click Lors d'un click sur un widget appartenant au groupe toto
Action["bouton", ME].Enabled = TRUE la propriété enable passera à true sur la widget dont l'action se prénomme bouton,
LAST.Enabled = FALSE et ce dernier qui a été cliqué aura sa propriété enabled à False.

En conclusion, nous avons simplifié le code en à peine 3 lignes.
C'est ça la puissance de gambas.
Merci à tous pour votre attention.

GB3- Copier recursivement fichiers et repertoires

Rédigé par spheris Aucun commentaire
Classé dans : fichiers, gambas 3, Tutoriels Mots clés : aucun

Il est très simple de copier des fichiers sous gambas en utilisantl 'instruction COPY.
Seulement pour le moment il n 'existe pas d 'instruction toute prêtepour copier récursivement tous les dossiers et fichiers présentsdans un répertoire.
J 'ai donc créé une petite méthode pour le faire.

Il suffit d 'ajouter dans votre code cette méthode :

Private Sub mycopy(mysource As String, mydestination As String)
Dim s As String
Mkdir mydestination
For Each s In RDir(mysource, * )
If Not IsDir(mysource &amp/ s) Then
  If Not Exist(mydestination &amp/ s) Then
    Copy mysource &amp/ s To mydestination &/ s
Else
Mkdir mydestination &/ s
Endif
Next
End


Il vous suffit simplement de l 'appeler avec le code ci-dessous:


mycopy(foldertocopypath ,destinationpath)


foldertocopypath sera le chemin du répertoire à copier
destinationpath sera le répertoire qui recevra lesfichiers.

Merci pour votre attention et merci a vuott pour son aide.