gambaslinux.fr

Tutoriels › Création de votre logiciel

Vous trouverez sur cette page plein d'astuces et de tutoriels pour l'aide à la création de votre logiciel.

Aide sur les variables

Aujourd'hui nous allons essayer d'éclaircir ensemble plusieurs points fondamentaux sur les variables en Gambas 3.

A) introduction
Une variable est utilisée pour faire certaines actions en fonction de son type.
Exemple :
Une variable de type integer ou float pourra être utilisée pour des opérations mathématiques.
Une variable text pourra être utilisée pour manipuler des chaines de caractères.

B) Déclaration d'une variable.
Pour déclarer une variable, il est important de se poser la question pourquoi elle et surtout pour qui elle va être utilisée.3 cas s'offrent à nous :

Pour déclarer une variable qui sera utilisable par toute la Form, écrivez ceci tout en haut de la Form en dehors de toutes vos méthodes, juste en dessous le texte 'Gambas class comme ci-dessous:

'Gambas class
Private mavariable as integer


Pour déclarer une variable qui sera utilisée par tout le logiciel et consultable ou éditable dans toutes les Form, rendez la déclaration Publique comme ceci:

Public mavariable as integer


Enfin,  pour déclarer une variable à l'intérieur d'une méthode (Public monbouton_click() par exemple), utilisez la commande Dim comme ceci :

Public monbouton_click()
Dim mavariable as integer
End Sub


Cette variable ne sera visible qu'à l'intérieur de cette méthode.

Par souci de clarté et surtout pour une optimisation de votre programme, il est très important de n'utiliser au maximum que des variables utilisables en Private et/ou à l'intérieur des méthodes.

Je vous vois immédiatement poser la question:
Mais comment fait-on si on veut interchanger des données entre méthodes?
Il suffit de passer en paramètre la variable et de récupérer le résultat par la commande RETURN

Un exemple concret:

J'envoi à une méthode une variable integer, et je veux récupérer un texte.
Si j'envois 0, alors je veux avoir "Bonjour"
Si j'envois 1, alors je veux avoir "Au revoir"

J'écris ma méthode comme ceci:

Private Sub Quandca(mavariable as integer) as string
select case mavariable
case 0
Return "Bonjour"
Case 1
Return "Au revoir"
End Select


Décortiquons ce bout de code:
Private Sub Quandca est une déclaration en privé uniquement visible dans ma form en cours.
(mavariable as integer) je déclare une variable qui sera reçue par l'appel de cette méthode.
As String informe que la commande Return renverra une variable de type String.

Enfin, j'appelle cette méthode ailleurs dans mon programme de cette façon:

Dim montexte as string
montexte = Quandca(0)


Attention: Si vous ne mettez rien entre parenthèse, Gambas renverra une erreur en disant qu'il manque un paramètre.

Une dernière chose, Si vous souhaitez utiliser une variable dans tout le programme, déclarez votre variable de type Public et mettez la dans un Module comme ceci :

Dans le module monmodule, ecrivez ceci:

Public mavariable as string


Ainsi dans tout les programme, vous pourrez lire/écrire cette variable comme ceci :

monmodule.mavariable = "J'ai modifié la variable"

Merci pour votre attention.

Conversion heure minutes secondes

Bonjour,
Aujourd'hui une astuce bien pratique pour convertir automatiquement des secondes en Heures/minutes/secondes

Exemple :
Je veux convertir 5000 secondes en heures/minutes/secondes.
Voici le code :

PUBLIC SUB Main()
DIM myseconds AS INTEGER = 5000
PRINT Format$(Date(0, 0, 0, 0, 0, 0, myseconds * 1000), "hh nmin ssec")
END


Petite explication :
La date ci dessus est écrite sous ce format :

Date(year,month,day,hour,minute,second, millisecond)
C'est pour cela que nous avons multiplié par 1000

Si nous voulions convertir des minutes il aurait fallut écrire :

PRINT Format$(Date(0, 0, 0, 0, 0, 0, Myminutes * 600000), "hh nmin ssec")


Merci pour votre attention.

Manipuler les Bits


bits.png

La manipulation de bits sous gambas est une chose aisée car il existe beaucoup de fonctions dont voici la liste :
BClr     Efface un bit dans un nombre entier.
BSet     Positionne un bit dans un nombre entier.
BTst     Teste un bit dans un nombre entier.
BChg     Inverse un bit dans un nombre entier.
Lsl     Décale un nombre entier vers la gauche.
Lsr     Décale un nombre entier vers la droite.
Shl / Asl     Décale un nombre entier vers la gauche et conserve son signe.
Shr / Asr     Décale un nombre entier vers la gauche et conserve son signe.
Rol     Rotation d’un entier vers la gauche.
Ror     Rotation d’un entier vers la droite.

Par l'intermédiaire de ce petit exemple, vous pourrez suivre l'evolution de votre nombre binaire.

TELECHARGER L'EXEMPLE ICI

Utiliser MOD

modfunction.jpg

Bonjour,
parfois dans le code, nos devons utiliser une routine qui incrémente de 1 puis reboucle à 0 une fois un maximum atteind.
Comme dans cet exemple programme, nous pourrions écrire ce code ci :

Public Sub Button1_Click()
Select Case mycounter
Case 0
TextBox1.Text = "text for one clic"
Inc mycounter
Case 1
TextBox1.Text = "text for two clic"
Inc mycounter
Case 2
TextBox1.Text = "text for three clic"
Inc mycounter
Case 3
TextBox1.Text = "text for four clic"
Inc mycounter
Case 4
TextBox1.Text = "text for five clic"
Inc mycounter
Case 5
TextBox1.Text = "text to return to the beggining"
mycounter = 0
End Select
LCDLabel1.Value = mycounter
End


Ce code fonctionne très bien mais beaucoup de répétition que nous pouvons retirer en utilisant la fonction MOD, et réécrire le code comme ci dessous :

Select Case mycounter
Case 0
TextBox2.Text = "text for one clic"
Case 1
TextBox2.Text = "text for two clic"
Case 2
TextBox2.Text = "text for three clic"
Case 3
TextBox2.Text = "text for four clic"
Case 4
TextBox2.Text = "text for five clic"
Case 5
TextBox2.Text = "text to return to the beggining"
End Select
mycounter = (mycounter + 1) Mod 6
LCDLabel2.Value = mycounter

L'astuce réside dans cette ligne :

mycounter = (mycounter + 1) Mod 6


Télécharger les sources de l'exemple.(renommez le fichier en tar.gz pour le decompresser)

 

Message WARNING

vvarning.png




Voici le code de l'application :

Bonjour,
avec ce petit exemple nous allons voir comment utiliser la boite message.warning et récuperer les actions du bouton.

Le type d'action renvoyée du clic du bouton est INTEGER
Il suffit donc de définir une variable INTEGER et de la lire comme ceci :

DIM mareponse AS Integer
mareponse = Message.Warning("ma question?", "reponse1", "reponse2", "reponse3")

vous pouvez maintenant télécharger l'exemple :

PUBLIC SUB _new()
END

PUBLIC SUB Form_Open()
ME.Center
END

PUBLIC SUB Button1_Click()
DIM mareponse AS Integer
mareponse = Message.Warning("aimez vous les radis?", "oui", "non", "pastrop")
SELECT CASE mareponse
CASE 1
Label2.Text = "vous avez cliqué Oui"
CASE 2
Label2.Text = "vous avez cliqué Non"
CASE 3
Label2.Text = "pourtant c'est bon les radis !!!"
END SELECT
END

 

Utiliser RETURN pour retourner des données

La commande RETURN nous permet de passer un paramètre en retour d'une fonction.
Mais comment pouvons nous retourner plusieurs paramètres ?
Nous pouvons nous servir d'une Classe.

Définition :
Je ne rentrerai pas dans des termes techniques compliqués mais vous présenterai une classe comme un ensemble de fonctions, variables et autres...

Prenons par exemple une classe d'un humain que nous appellerons "TPersonne"

un humain a un poid, une taille, une tête, un caractère. ce sont des paramètres.

nous pouvons donc creer cette classe comme ceci :

PUBLIC lepoid AS Float
PUBLIC lataille AS Float
PUBLIC limage AS picture
PUBLIC caractere AS Integer
PUBLIC sensibilite AS String

PUBLIC SUB lafonction() AS TPersonne
DIM hPersonne AS NEW TPersonne
WITH hpersonne
.lepoid = 33
.lataille = 125
.limage = Picture["monimage.png"]
.caratere = 3
.sensibilite = "vraiement sensible"
END WITH
RETURN hPersonne
END FUNCTION


et pour appeler notre fonction comme ceci:

DIM hPersonne AS TPersonne
hPersonne = lafonction()
PRINT hPersonne.lepoid


ce qui peut se traduire par le schema suivant pour une bonne comprehension.

TELECHARGER LE SCHEMA PDF

C'est un concept objet dur a assimiler pour des programmeurs proceduraux comme nous les BASIC like men mais entrainez vous cela vient assez vite.

Les opérateurs logiques

En Gambas, nous pouvons utiliser les opérateurs logiques dans nos programmes por tester telle ou telle variable..
Les opérateurs sont les même que les autres langages de programmation, à savoir :

NOT
Le non logique NOT renvoi la valeur inverse d'une valeur
sa table de vérité( ou comportement)peut être schématisé par le tableau ci dessous :

 X NON X
 0 1
 1  0


AND

le ET logique AND peut etre assimilé à un montage electrique série de deux interrupteurs avec une ampoule.
ainsi, il faut que les deux soit fermé pour allumer notre lampe.
Ce qui nous conduit au tableau suivant :

 X Y X AND Y
 0 0 0
 0 1 0
 1  0 0
1 1  1


L'application pratique dans gambas est simple .Renvoyer le résultat d'un ET logique de deux nombre.
Comment cela se passe ? si nous réalisons cette exemple soit :
10 AND 25, pour comprendre nous devons convertir ces deux valeurs décimales en binaire soit :
01010 AND 11001, nous obtiendrons d'arpès la table de vérité le résultat suivant : 1000 en binaire soit 8 en décimal.

OR
le OU logique OR peut etre assimilé à un montage electrique parallèle de deux interrupteurs en série avec une ampoule.
ainsi, il faut que un des deux soit fermé pour allumer notre lampe.
Ce qui nous conduit au tableau suivant :

 X Y X OR Y
 0 0 0
 0 1 1
 1  0 1
1 1  1


L'application pratique dans gambas est simple .Renvoyer le résultat d'un OU logique de deux nombre.
Comment cela se passe ? si nous réalisons cette exemple soit :
10 OR 25, pour comprendre nous devons convertir ces deux valeurs décimales en binaire soit :
01010 OR 11001, nous obtiendrons d'arpès la table de vérité le résultat suivant : 11011 en binaire soit 27 en décimal.