Utiliser Sqlite

Rédigé par spheris Aucun commentaire
Classé dans : apprentisssage, base de donnees, gambas 2 Mots clés : aucun
interfacer gambasavec Sqlite3

Bonjour, à tous,
Aujourd 'hui nous allons nous intéresser à gambas et Sqlite.
Nous allons voir comment interfacer gambas avec une base de donnéessqlite.
Remarque : il faut savoir que sqlite.gb a été installé avec vospaquets gambas.

A) Le projet

width=

Démarrer l 'IDE de gambas,
Ensuite, Il vous faut créer un projet nommé essaibdd.

n 'oubliez pas de cocher la case accès aux base de données. (ce quise traduit par l 'importation du composant qui gère les bases dedonnées)

width=

Vous êtes devant fmain, Maintenant nous pouvons commencer.Posez 4 boutons sur le FORM Fmain .

width=



INFORMATION : lacreation d 'une base de donnée se decompose en trois etapes quisont:

  1. Création du fichier (assimilé dans cet exemple au bouton 1)
  2. Création d 'une table a l 'interieur(assimilé dans cet exempleau bouton 2)
  3. Création de champs dans la table(assimilé dans cet exemple aubouton 3)


Voir illustration PDF ICI

La table et les champs étant ainsi créés ,après, nous pouvonsajouter les données

Remarque : un fichier peut contenir plusieurs tables.


B) Création de la base de donnees Sqlite nommée nombase.sq3
Cette etape ne sera a réaliser qu 'une fois. La base n 'a besoind 'etre créée qu 'une fois.
definissons d 'abord des variables tout en haut de Fmain :

PUBLIC maconnexion AS NEW ConnectionPUBLIC matable AS TablePUBLIC monresultat AS Result


créez un bouton button1 et entrez ce code dans l 'evenement Button1_click :

PUBLIC SUB Button1_Click() '  'creation bdd sqlite '  'definition de la connexionmaconnexion.Type = Lower( sqlite3 )  'type de bddmaconnexion.Host = User.Home  'chemin dacces de la bddmaconnexion.Name =     'nom de la bdd que nous voulons utilisermaconnexion.Login =     'login pour se connecter a la basemaconnexion.Password =     ' mdp pour connecter a la basemaconnexion.Port =     ' port si bdd en reseau 'ouvre la connexion a la bdd sqlitemaconnexion.Open() 'creer une base sqlitemaconnexion.Databases.Add( nombase.sq3 )WAIT 0.5  'attend une demi seconde ' fermer la basemaconnexion.Close()END



Remarque : nous avons fermé la base une fois crée. Nous allonsmaintenant la ré-ouvrir pour créer un tableau ou plutôt une table .

Ré-ouvrons la et poursuivons avec ceci :

 ' ouvrir la nouvelle basemaconnexion.Host = Application.Pathmaconnexion.Name =  nombase.sq3 maconnexion.Open()END


Notre base de données existe à présent , nous pouvons creer untableau nommé unetable :
Pour se faire, créons un nouveau bouton button2 et mettonsce code dans l 'evenement click :

PUBLIC SUB Button2_Click() 'creation dune table dans la nouvelle bdd nombase.sq3matable = maconnexion.Tables.Add( unetable )END

3 ème étape, créons trois champs dans notre table unetable qui seront par exemple :

-ID
-nom
-prenom

Créeons un bouton 3 nommé button3 et ajoutons ceci dansl 'evenement click :

PUBLIC SUB Button3_Click() 'creation de deux champs type string dans la nouvelle tablematable.Fields.Add( id , db.Serial)matable.Fields.Add( nom , db.String, 0)matable.Fields.Add( prenom , db.String, 0)matable.PrimaryKey = [ id ]matable.Update()  'mise a jour de la tableEND


Voila ! notre bdd est créée.

Information : Nous aurions pu créer notrebase de données avec l 'excellent logiciel sqlite présent dansles dépôts de votre linux préféré.
Il simplifie grandement la création, l 'accès, l 'édition desbases sqlite.


C) Utiliser la base de données

Nous allons creer un bouton nommé button4 dans le formulairefmain qui va nous servir à ouvrir une autre fenêtre FORM1

width=

ensuite créons un nouveau formulaire nommé form1



bdd5.png
dans l 'evenement click de button4 nous allons ouvrir le form1 par

PUBLIC SUB Button4_click()Form1.showEND


rien de plus simple!

Maintenant nous allons nous intéresser au form1 :

width=


Créons un datasource1 (present dans les widgets si la caseacces aux bdd avait été cochée au debut)
dans la propriété table , ecrire : unetable

width=

maintenant dans notre datasource nous allons creer un databrowser1
Nous allons éditer la proprieté Columnsen ajoutant 3 colonnes qui sont respectivements :

  • id
  • nom
  • prenom

Maintenant toujours dans notre datasource1 qui est notrecontainer, nous allons mettre des datacontrol1 , 2 ,3qui sont des genres de textbox adapté pour les bdd
Dans la propriété Field(champs en francais), nous allons ecrirerespectivement id pour le datacontrol1, nom pour le 2 etprenom pour le 3

Ca y est nous sommes fin prêt :

Cliquons sur executer et cliquons sur :

button1 : creation fichier
button2 : creation table
button3 : creation champ dans la table
button4 : edition des données dans la table


saisissons des donnes dans les datacontrol 2 et 3 'le 1er est grisé,normal c 'est un compteur !)

voila pour aujourd 'hui.
TELECHARGER LES SOURCES ICI

Remarque : il est evident que laprochaine fois qu 'on lance l 'appli il ne faut pas recréer labase mais l 'ouvrir simplement en redéfinissant ce que j 'aiappelé dans le code definition de laconnexion

Dans un prochain tuto, je vais vous expliquer clairement commentajouter, éditer, ou supprimer des données de la base sqlite. Vousverrez, c 'est vraiment simple sous gambas. Un langage facile etrapide à apprendre.


A bientôt

cours 2eme partie

Rédigé par spheris 1 commentaire
Classé dans : apprentisssage, gambas 3, poo Mots clés : aucun
COURS NUMERO 2

DECOUVERTE DE LA POO

 Commencer par ouvrir gambas et créer un nouveau projet Application en ligne de commande :

 nom du projet -> ConfBase



INTRODUCTION

 Donc, Gambas est comme vous le savez, un langage très orienté objet.
Dans la vie courante des objets sont facilement repérables, et il en devient facile de les modéliser.

 La programmation Orienté Objet est un concept qui s 'apparent à tout (presque du moins) type de projet. lorsqu 'on concoit un projet et qu 'on utilise un modèle objet, il est impératif (pas nécessairement obligatoire mais vraiment recommandé) de fonder la base, un plan de l 'ensemble du projet a savoir :

 - Les taches principale que doit réaliser l 'applications
- la structure des données qui seront manipulés

 et (mais ca, ca restera pour les programmeurs expérité de la crevette bleue  ) un ensemble permettant d 'étendre le programme pour de futur améliorations sans devoir quasiment retoucher au 3/4 du code !

donc la POO (=Programmation Orienté Objet) est un concept à part du langage de programmation.

Un monde assez nouveau pour les débutants où c 'est une notion à savoir exploiter.
Penser objet, c 'est important pour tirer parti de Gambas.

Lorsque votre esprits commencera a concevoir des objets dans votre projet, alors vous serez moins étonné de trouver la solution vous même pour effecter tel tache sur tel contrôle (Bouton, [Autre...] )

Maintenant qu 'on a exploité et découvert le terrain du monde de la POO, un projet Gambas est un ensemble de classe. A savoir, des briques, des objets qui vont s 'assembler pour former votre programme
La manipulation d 'objets doit être plus que courant. Voici maintenant un exemple de modélisation à partir d 'un objet quelconque :

on va choisir simplement un être humain qui (bon certes, on est pas des objets mais passons cette remarque temporairement  ) possède pas mal d 'informations en lui même et établit plusieurs taches toutes aussi importante et utile .les taches sont facilement repérable, ce sont les Actions qui sait effectuer tels que :

- marcher
- parler
- manger
- dormir


pour ne citer qu 'eux à titre d 'exemple, les informations (les données) qu 'il a, c 'est son état :
- Son age
- son nom
- ses mots (lorsqu 'il parle)
- sa taille

 ... ect

dans un modèle OBJET, on peut modéliser celà :

on **encapsule** ces données et ces actions, le tout sous le jolie nom Humain

Donc maintenant, garder votre Gambas à porter de main, nous allons effectuer une premiere classe 

commencer dans votre éditeur par :

- faire un clic droit sur le dossier Classes puis -> Nouveau -> 'Classes...
Nom de la classe : Humain

Dans l 'arborescence de l 'IDE, vous voyez désormais que vous obtenez un fichier .class  , plus précisement de nom Humain.class 

Pour certains d 'entre vous, c 'est la première fois que vous voyez une classe dans votre projet  .
On va commencer par modéliser ce dont on a parlé juste avant a partir d 'une langue naturelle, d 'informations relevé sur une feuille et réfléchi auparavant, on va pouvoir transmettre celà dans un langage informatique qui nous permet d 'établir cette objet et ainsi de profiter pleinement de la POO !

une classe en informatique c 'est tout simplement une structure, un ensemble d 'informations
 { données, Actions } 

 Dans d 'autre classe il existe des mots clés pour définir une classe.
Exemple en ruby :
  '   class Humain           ...       end   '

en Gambas, la définition de la classe est le fichier en lui même donc aucun mot clés comme class n 'est nécessaire

Un contrôle est aussi une classe ?

INFORMATION : EN REALITE, IL EXISTE UN MOT CLE 'CLASS ' EN GAMBAS MAIS IL NE SERT QU 'A UNE UTILISATION PARTICULIERE QUE NOUS VERRONS PLUS TARD, LORSQUE NOUS MAITRISERONS LA POO.

tout ce qui touche à l 'interface graphique, on met ca de coté car l 'interface graphique et un autre monde qui regorge la POO avec d 'autre notion tels que la programmation événementielles
et il existe plusieurs état d 'un objet en GUI si je peux dire ça de facon simple.
GUI ???
Graphical User Interface = Inteface utilisateur Graphique

Double cliquez sur la classe Humain que nous avons créé à l 'instant
vous possédez déjà un commentaire :

' Gambas class file

en début de fichier. Pour les anti-english celà signifie -> fichier de classe Gambas

Ce qui est intéressant et les questions qui vont vite venir vous encombrer l 'esprit c 'est :
- Comment en langage informatique on modélise une Action ?
- et comment les données sont modélisés  ?

Les réponses sont à la base de ce dont vous avez appris jusqu 'à maintenant, à savoir
- Les données   --->  Les variables
- Les Actions     --->  Les fonctions/procédures.
Il est a noté qu 'en programmation orienté objet, le nom d 'une fonction et procédure se dit ---> METHODE !!!

 C 'est très important, le terme fonction et procédure sont réservés à la programmation impérative. Chose qui nous intéresse pas vraiment vu que Gambas est orienté-objet.

 Donc Si on reprends nos informations, voilà ce qu 'on obtiens :
- Son age
- son nom
- ses mots (lorsqu 'il parle)
- sa taille

son age -> est un entier
son nom -> une chaine de caractère
ses mots (qu 'on dira 'parole ' juste aprés)   ->  une chaine de caractère également
et sa taille -> un floattant (nombre décimal)

Si vous savez déclarer une variable, ce qui suit sera un véritable jeux d 'enfants

Il y a une regle FONDAMENTALE en POO :
(retenez la bien car la POO regorge 3 principes de base à ne pas négliger)

 - Les données doivent toujours être encapsuler

qu 'est-ce que ca veut dire ? Ca signifie que les données ne doivent pas être visible de l 'extérieur !
*** Hola mais attend ca commence a devenir flou !  Sur notre etre humain dans la vie reelle ca donne quoi ?

 Effectivement ca donne quoi ?

ca veut dire quoi que les membres (données) ne doivent pas être accesible de l 'extérieur
 pour faire plus simple encore, changeons notre être humain en voiture. Votre voiture est un objet, les données qu 'elle possède sont quoi à votre avis ?

- Le moteur,
- le niveau d 'huille,
- les cylindres,
...ect

 et les actions ?
- les 3 pédales par exemple
 et bien sur, vous avez un capots qui cache toute la mécanique
 et si vous voulez accélérer ? vous ne lever pas le capot en touchant les fils à l 'intérieur pour augmenter la vitesse !
les données de la voiture sont encapsulé !

 *** Mais alors, dit nous comment on fait pour modifier ces données dans ce cas ***
 Pour jouer avec vos 'données ' de votre voiture, vous utiliser une interface, qui sont on le rapelle
 les 3 pédales (3 Actions)

 ces actions vont travailler sur les données, c 'est EUX qui changent l 'état de vos variables !
pour définir l 'accessibilité d 'une variable, on possède 2 mots clés qui sont :
- PRIVATE
- PUBLIC
qui, s 'en va s 'en dire, se relève relativement simple à comprendre  .

PRIVATE -> privé       ->   réservé qu 'a la classe
PUBLIC -> publique    ->  disponible de l 'extérieur de la classe

pour éviter de vous perdre, référez-vous toujours à votre voiture dans les débuts
donc étant donnée qu 'on sait qu 'on ne doit pas voir les données et encore moins pouvoir les modifier de l 'extérieur on les met en PRIVATE
 ce qui donne :
' Gambas class file

PRIVATE age AS Integer
PRIVATE taille AS Integer
PRIVATE parole AS String
PRIVATE nom AS String


allez y taper moi ça dans votre éditeur
je continue, maintenant, les actions non plus à notre voiture mais à notre bon vieux être humain Gorge (Oui pourquoi pas ?  ) , on sait que c 'est des 'fonctions/procédures ' donc des SUB ou FUNCTION.

par contre, si vous avez bien suivit jusque là
quelle sera la nature d 'accessibilité de nos méthodes ?
si les données ne doivent pas être directement accessible à l 'utilisateur, les actions quant a elle doit être PUBLIC de manière qu 'on puisse modifier ses variables
static c 'est pas du ressort de ce court  . Je n 'en ai pas parlé donc pas possible que ce soit la réponse  .

Je vais prendre un autre exemple relativement classique mais utile
VOTRE TELE !
sur votre télé vous avez des boutons pour changer de chaine, monter le son ou le baisser, éteindre ou allumer la télé et à l 'intérieur de la télé vous avez tout plein de chose électroniques qui communique entre eux pour vous donner une image, pour changer la chaine, pour augmenter le son ect

Trés bien, quelle accessibilité donneriez-vous à ces boutons disponible sur votre télévision ?
PRIVATE ou PUBLIC ?
PUBLIC
Pourquoi ?
Tout le monde peut les actionner


En fait, en POO le programmeur est à la fois CREATEUR et CLIENT
c 'est à dire qu 'il fait les plan, il construit la classe, la bases. Et client à la fois lorsqu 'il créera des objets à partir de cette classe.


imaginez un moule à gateaux
vous crée d 'abord la classe de ce moule
et a partir de ce moule
vous pouvez créé autant de gateau que vous voulez
autant d 'objets que vous voulez
 on va revenir a nos actions de notre être humain


de manière assez simple, une méthode est presque toujours PUBLIC
elle peut aussi être privé
c 'est à dire dans ce cas qu 'on donne pas accés de l 'extérieur. Généralement une méthode privé sert juste au fonctionnement interne de l 'objet
on va commencer par coder une action simple


la méthode Parler avec un paramètre ... ce que l 'utilisateur veut que l 'humain dise
voici la méthode a insérer en dessous des  variables membres :

PUBLIC SUB parler(mot AS String)
PRINT mot
END


tout le monde connait bien les procédures et les fonctions ?
une fonction n 'est rien d 'autre qu 'une procédure à part qu 'elle renvoie une valeur
maintenant, on plonge dans le MMain
c 'est à dire le module


INFORMATION : UN MODULE EN GAMBAS N 'EST RIEN D 'AUTRE QU 'UNE CLASSE MAIS ___ STATIQUE


vous dans tous dans le PUBLIC SUB Main()   ?
Main() est une procédure principale, c 'est par là que va donc commencer notre programme
on va dire commencer par savoir afficher du texte à l 'écran tout simple
taper

 PRINT "Vive Gambas !"
 

et appuyez sur F5
résultat est affiché dans la console de l 'IDE en bas
maintenant expérimentons un peu le PRINT

taper celà :

 PRINT "Vive Gambas !" & "n"



Ca renvoie les mots à la ligne
le  n      <- est un caractère d 'échapement

c 'est à dire qu 'il est interprété d 'une certaine manière lorsque GB lit ceux-ci
il y a plusieurs caractère d 'échapement tels que la tabulation ect
mais c 'était à titre d 'information.


maintenant on va s 'intéresser à l 'autre coté de la POO
le coté CLIENT de toute à l 'heure. Donc on va mouler un humain a partir du four géant !

bien maintenant supprimez la ligne PRINT dans le Main()

Pour créer un objet à partir de notre classe, en GB (comme dans tout autre language Objet) ca se fait comme si vous déclarer une variable
donc étant donnée qu 'on est dans notre Main() et pas à l 'extérieur, on va utiliser le mot clé DIM
si on serai à l 'extérieur de Main()

on utiliserait PUBLIC ou PRIVATE
le principe et le même mais on verra celà plus tard également
on va s 'intéresse proprement dite à la création d 'objets
explications sur le DIM
DIM gorge AS NEW Humain


sur une variable normal on a par exemple : DIM age AS Integer
soit DIM leNomDeLaVariable AS SonType


Ici c 'est presque pareil à l 'exception qu 'il y a le NEW en plus ce qui indique Nouvelle objet
Humain -> étant la classe qu 'on a fait juste avant, et donc le type d 'objet qu 'on crée.
alors maintenant, c 'est là (grace à l 'IDE) que vous allez capter le PRIVATE et PUBLIC
notre ami george étant un objet de notre classe Humain
on peut créer si on veut un autre humain si ca nous chante !


DIM bernadette AS NEW Humain

pour utiliser ses actions, ca se présente comme ça syntaxiquement :   objet.methode()
les parenthèse sont facultatif, et sont obligatoire si des paramètres de la méthode sont présente
dans notre cas, on va faire parler notre ami gorge, on sent qu 'il a envie de parler celui là !!

george.parler( coucou toi l 'ami )

entrez ca à la MAIN !! dans votre éditeur

à partir du . (POINT) , Gambas est assez intelligent (bien qu 'une crevette vous voyez qu 'il y a un neurone qui se trabale dans les environs  ) pour déterminer ce que l 'objet peut faire !
ici dans notre cas, notre ami george sait parler
on peut utiliser la touche TAB pour compléter la méthode
(très pratique vous verrez  )
on ouvre ensuite une parenthèse car comme on la fait dans la classe
on a besoin de savoir ce que notre ami george veut dire !
et on met notre chaine de caractères entre guillemet.

george.parler( coucou toi l 'ami )

 et appuyer sur F5 pour admirer le résultat
maintenant tiens, on va retourner dans notre classe Humain et on va changer l 'age en PUBLIC
PUBLIC age AS Integer

maintenant si vous retournez dans l 'éditeur, et que vous entrer george.    <- ici la liste arrive et vous verrez certainement 'age 'en rose
bon et bien maintenant elle est accesible de l 'extérieur !

vous captez maintenant le PRIVATE et le PUBLIC ?
alors maintenant une question pourrait vous venir en tete
on vois pas les autres car elles sont private
*** d 'accord je vois maintenant comment rendre la visibilité d 'un membre mais.. pourquoi d 'ailleurs le principe est qu 'on ne doit pas modifier de l 'extérieur les variables ? ***

réponse :
tout simplement imaginez que quelqu 'un vient qui touche directement a votre voiture et met niveau carburant à 90 litres alors que le réservoir n 'en contient que 40 ou 50 .. aie aie aie
ca déborde de partout !

d 'ou le pourquoi on doit passer par une méthode pour modifier les variables interne à l 'objets. De cette manière on peut établir des vérification tels que par exemple :

PUBLIC SUB mettreEssence(litre as Integer)
IF litre > 50 THEN
    PRINT Le réservoir est déjà plein !
ELSE
    niveauEssence = litre
ENDIF


sachant que niveauEssence étant une variable PRIVATE pour la classe
ainsi si on a un objet voiture exemple maVoiture, alors si on veut mettre de l 'essence :

maVoiture.mettreEssence(80)
ca va me retourner --->  Le réservoir est déjà plein !
et on ne fait pas n 'importe quoi avec l 'objet

Il faut donc TOUJOURS utiliser le PRIVATE 

c 'est l 'encapsulation, un des principes de la programmation orienté objet !!
doit apparaitre du coté client, quasiment que des méthodes, Actions
pensez au bouton de la télé !
 dans l 'IDE qd vous avez eu la liste george.     <-     ce sont les boutons de l 'objet, ce qui est disponible

CONCLUSION :
[le vocabulaire a retenir : lorsqu 'on crée un objet d 'une classe, on dis qu 'on instancie un objet
une **instance** de classe n 'est qu 'un objet crée de la classe
donc si a partir de la classe Voiture
on a crée 3 objets  -> voitureMaison, voitureBoulot ... ect
on a 3 instances de la classe **Voiture**
- Découverte de la programmation orienté objet
- Créé une classe
- Crée des objets à partir de nos classe
en vocabulaire retenez :
- Classe
- Objet
- Instance
- principe de l 'encapsulation
- méthodes
- variables membres
en mot clés les découvertes sont :
- PUBLIC
- PRIVATE
- NEW

et surtout oubliez la GUI pour l 'instant la console permet d 'extraire le contenu le plus important
la GUI est un cadeau dangereux Gambas offre une facilité incroyable pour gérer la GUI
mais vous voyez derrière tous ça que la complicité est au rendez vous si on ne connais pas tout ces rudiments indispensable la GUI vous plonge dans plusieurs notions à connaitre

A bientôt

le pingouin

Rédigé par spheris Aucun commentaire
Classé dans : divers, gambas 2, Logiciels Mots clés : aucun
LE PINGOUIN

programme-inutile.png
ce programme est inutile mais est le compagnon ideal au bureau.
Il affiche un pingouin à lécran qui bouge lors de deplacement de la souris.
c 'est une adaptation du programme pioché sur GAMBAS-IT.ORG , site que je vous recommande vivement d 'aller voir .
TELECHARGER LE FICHIER
);

Utiliser les tableview

Rédigé par spheris Aucun commentaire
Classé dans : Tutoriels, Tableview, gambas 2 Mots clés : aucun
tableview.png

Pour utiliser la tableview, nous allons définir l 'objet par la commande :

Dim TB as tableview
TB=new tableview(me)


Nous definissons le nombre de lignes et colonnes :

TB.columns.count=5&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp '5 colonnes définies
TB.rows.count=21&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp '20 ligne définies


Définissons les dimensions des lignes et colonnes

TB.columns.width=100
TB.rows.height=20


Définissons les entêtes de chaque colonne :

TB.header=1 '0 -> Aucune&nbsp&nbsp&nbsp&nbsp 1 -> horizontal&nbsp&nbsp&nbsp&nbsp 2 -> vertical&nbsp&nbsp&nbsp&nbsp 3 -> les deux
TB.columns[0].title= Titre
TB.columns[0].width=50
TB.columns[1].title= Client
TB.columns[2].title= Facture
TB.columns[2].width=40
TB.columns[3].title= Etranger
TB.columns[3].width=50
TB.columns[4].title= type
TB.columns[4].width=50

Définissons la couleur du texte :

&nbspim Linea as integer, SwColor as boolean, Rec as result, Sql as string, Cn as connection
Sql= select * from clientes order by codigo
Rec=Cn.exec(sql)
TB.rows.count=Rec.count+1
do while Rec.available
&nbsp TB[linea, 0].text = Rec!Codigo
&nbsp TB[linea, 0].Background = IIf(SwColor, COLOR.White, COLOR.Black)
&nbsp TB[linea, 0].Foreground = IIf(SwColor, COLOR.Black, COLOR.White)
&nbsp TB[linea, 0].Alignment = 2
&nbsp TB[linea, 1].text = Rec!nombre
&nbsp TB[linea, 1].Background = IIf(SwColor, COLOR.White, COLOR.Black)
&nbsp TB[linea, 1].Foreground = IIf(SwColor, COLOR.Black, COLOR.White)
&nbsp TB[linea, 1].Alignment = 1
&nbsp TB[linea, 2].text = Rec!dir
&nbsp TB[linea, 2].Background = IIf(SwColor, COLOR.White, COLOR.Black)
&nbsp TB[linea, 2].Foreground = IIf(SwColor, COLOR.Black, COLOR.White)
&nbsp TB[linea, 2].Alignment = 1
&nbsp Rec.movenext
&nbsp Linea+=1
&nbsp SwColor=NOT swcolor 'inversion de la couleur
loop


Edition des cellules :


sub TB_change()
dim Tabla as new string[]
tabla.add( opcion 1 )
tabla.add( opcion 2 )
if TB.columnat=2 then
&nbsp&nbsp TB.edit(tabla,true) 'para actualizar la celda se mostrará un combo con las opciones descritas
&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp ' la opción TRUE de readonly indica que solo se podrá elegir del combo.
else
&nbsp TB.edit 'activar modo edición en celda en textbox
endif
end

sauvegarde de la table dans la base de données :

sub TB_save(Row AS Integer, Column AS Integer, Value AS String)
Dim Sql as string
Sql= update clientes set codigo= &amp TB[TB.row,0].text &amp ', nombre) ' &amp TB[TB.row,1].text &amp ', direccion= ' &amp TB[TB.row,2].text &amp '
Cn.exec(sql)
end

afficher un menu popup

Rédigé par spheris Aucun commentaire
Classé dans : Logiciels, gambas 2 Mots clés : aucun

Petit exemple pour afficher un menu popup.
Creez une fenetre.
Clic droit sur la fenetre, puis evenement puis mousedown (soit un clic de souris)

maintenant entrez le code :

PUBLIC SUB Form_MouseDown()

&nbsp 'Defini nos variables pour le menu popup
&nbsp DIM hmenus AS Menu
&nbsp DIM hmenu AS Menu
&nbsp 'Define the menu dans fmain
&nbsp hMenus = NEW Menu(FMain)
&nbsp 'crée le menu popup
&nbsp hMenu = NEW Menu(hMenus) AS hMenu
&nbsp 'Ajoute le texte au menu
&nbsp hMenu.Text = ( premier item )
&nbsp 'Ajoute un deuxieme texte
&nbsp hMenu = NEW Menu(hMenus) AS hMenu1
&nbsp hMenu.Text = ( deuxieme item )
&nbsp IF hMenus THEN hMenus.Popup()
END

Maintenant il faut definir deux fontions quand nous cliquons sur le menupopup car il y a deux entrées dans ce menu ;
PUBLIC SUB hMenu_Click()
message( Vous avez cliqué sur le premier item du menu )
END

PUBLIC SUB hMenu1_Click()
&nbsp message( Vous avez cliqué sur le deuxieme item du menu )
END

et voila. !
Bonne semaine

);

la gambas

Rédigé par spheris Aucun commentaire
Classé dans : Tutoriels, Librairie, apprentisssage Mots clés : aucun
gambas35.png

Petit crustacé décapode nageur, la crevette possède cinq paires de pattes, un grand abdomen et une carapace souple comme du plastique. La taille et la couleur des crevettes dépendent de l 'endroit de la planète où elles sont pêchées. A l 'heure actuelle, on compte plus de 160 espèces de crevettes, réparties dans toutes les eaux du monde ou presque, sur les côtes ou dans les profondeurs des mers.

Parmi toutes ces variétés, on comptent des crevettes issues des eaux chaudes (leurs oeufs se situent à l 'intérieur et leur troisième paire de pattes est plus développée que les quatre autres), et les crevettes des eaux froides (dont les oeufs sont retenus sur l 'abdomen entre les pattes).

Les grosses crevettes comme la gamba, ou la crevette rose du Sénégal, vivent le plus souvent dans les eaux chaudes de la planète. Les moins grandes, comme la bouquet , voire la grise boucaud pour la plus petite, se pêchent essentiellement dans les eaux fraîches et tempérées, de la Méditerranée, à la Manche et l 'Atlantique Nord. Parce que sa croissance est plus lente, plus une crevette est petite plus elle est savoureuse, en théorie du moins.

Aujourd 'hui, une grande partie de la production mondiale est issue de bassin et d 'élevages industriels. Cette production garantit des crevettes toute l 'année pour des consommateurs, notamment asiatiques, très demandeurs.

Lorsqu 'elle est pêchée, il est préférable que la crevette soit cuite sur place à bord des chalutiers, du fait de sa grande fragilité et de l 'extrême fraîcheur dont elle doit faire preuve au moment de la cuisson. Autrefois, la crevette était ramassée à pied ou à cheval, en traînant des filets sur le sable le long des côtes.

Enfin, quel est le point commun entre la crevette et la chèvre ? Aucun, si ce n 'est l 'étymologie de ces deux mots. En effet, la mot crevette vient de la forme picarde de chevrette . La crevette, qui se déplace dans l 'eau par petites impulsions, évoquait simplement à certains les sauts de cabri effectués par la chevrette...

la commande ACOS

Rédigé par spheris Aucun commentaire
Classé dans : Tutoriels, Instructions, mathematique Mots clés : aucun

Renvoi la valeur arc-cosinus d 'un nombre

Exemple :

PUBLIC SUB _new()
END

PUBLIC SUB Form_Open()
ME.Center
'valeur de depart
TextBox1.Text = 0.23

'valeur de sortie
TextBox2.Text = ACos(CFloat(TextBox1.Text))
END

 
acos.jpg

Freevideo editor

Rédigé par spheris Aucun commentaire
Classé dans : Logiciels, multimedia, video, gambas 2 Mots clés : aucun

Freevideo editor est un prjet gambas pour un petit logiciel de montage video.
Il uilise ffmpeg pour traiter la video.
Il est au stade alpha.
Les images ont l 'airde bien fonctionner.
a essayer, et si vous voulez m 'aider je suis preneur,

freevideo.jpg

TELECHARGER LE CODE ICI

Utiliser le container Wizard

Rédigé par spheris Aucun commentaire
Classé dans : Tutoriels, Wizard, gambas 2 Mots clés : aucun
wizardsample.jpg
Bonjour,
Aujourd 'hui nous allons utiliser le Wizard et réaliser un petit programme qui vous calcule l 'IMC, l 'indice de masse corporelle.
Ce qu 'il faut retenir d 'essentiel, ce sont ces trois évènements :

PUBLIC SUB Wizard1_enter()
END

cette fonction se lancera à l 'ouverture de la fenetre contenant le wizard.

PUBLIC SUB Wizard1_close()
END
Cette fonction sera exécutée lors de l 'appuie sur OK en dernière fenêtre

PUBLIC SUB Wizard1_Cancel()
END
Cette fonction sera exécutée lors de l 'appuie sur Cancel


Vous pouvez choisir le nombre d 'étapes du wizard par la propriété COUNT
wizard1.count = 4 'par exemple

C 'est a peu prés tout ce qu 'il faut savoir dessus
A bientôt
Voici les sources de l 'exemple ICI

 

utilisation de la progressbar

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

C 'est la barrre que l 'on trouve souvent dans un programme qui est une barre de progression.
Aujourd 'hui nous allons réaliser une petite application qui aura pour but de se servir de cette progressbar.
Un bouton incrementera la progressbar
un autre bouton la decrementera
un slider definira une possition voulue
et un timer la pilotera automatiquement .progressbar.jpg

Je vous laisse jeter un coup d 'oeil au sources.
Voici les sources de ce petit exemple ICI.
Bon courage a tous.

changer une image dans le code

Rédigé par spheris Aucun commentaire
Classé dans : Tutoriels, picturebox, IDE, gambas 2 Mots clés : aucun

journuit.jpgLa Propriété .Picture

 

Aujourd 'hui nous allons aborder la « Propriété » .picture pour une FMain et une PictureBox.

L ' idée est de pouvoir charger une image et d ' en changer à volonté. Suivant les besoins. Un »clic » ou une minuterie.

 

D ' abord créons une Feuille Fmain un bouton CmdFin pour quitter et une minuterie TimerJourNuit pour changer l ' image de la feuille.

Une PictureBox PictureBoxChange pour les images et un bouton

CmdChanger pour changer l ' image de la PictureBox si l ' on clique dessus

 

Une deuxième PictureBox PictureBoxArbre pour y mettre une image d ' un arbuste à aller chercher dans un Dossier : ici Documents ( attention il faut l ' y mettre ) ( Gambas aime bien les multiples de 8 en Pixels pour les images )

 

Il faut quelques variables pour faire avancer le tout.

 

Deux Variables Booléennes pour les images et la déclaration des images à charger comme : Public LaNuit As Picture ou Dim LeJour As Picture

LeJour , LaNuit : c 'est le nom des images sans leur extention ( attention Gambas n ' aime pas du tout les espaces dans les noms )

 

 

' Gambas class file

PUBLIC JeChange AS Boolean

PUBLIC LaNuit AS Picture

PUBLIC LeJour AS Picture

PUBLIC Rimage AS Boolean

 

PUBLIC SUB Form_Open()

 

PictureBoxArbre.Picture = « « « Sur une seule ligne » »

Picture[user.home & /Documents/MonArbuste02.png ]

 

END

 

PUBLIC SUB CmdFin_Click()

QUIT

END

 

PUBLIC SUB TimerJourNuit_Timer()

 

IF JeChange THEN

FMain.Picture = Picture[ LaNuit.png ]

ELSE

FMain.Picture = Picture[ LeJour.png ]

END IF

JeChange = NOT JeChange

 

END

 

PUBLIC SUB CmdChanger_Click()

 

DIM DanseDame02 AS Picture

DIM DanseDame AS Picture

 

IF Rimage THEN

PictureBoxChange.Picture = Picture[ DanseDame.png ]

ELSE

PictureBoxChange.Picture=Picture[ DanseDame02.png ]

END IF

Rimage = NOT Rimage

 

END


Merci à jacques pour sa contribution.
Voici les sources de l 'application à télécharger ICI

 

 

);

Ouvrir une page web lors du clic du bouton

Rédigé par spheris Aucun commentaire
Classé dans : apprentisssage, Bouton, gambas 2, Tutoriels, Widget Mots clés : aucun
Bonjour,
Aujourd'hui simple commande pour que lors d'un clic sur un bouton nous ouvrions une page web quelque soit votre navigateur installé.
N'oubliez pas dans les composants(propriétés de votre projet) de cocher GB.desktop.
Il suffit d'utiliser la commande :

PUBLIC SUB button1_click()
desktop.OPEN("http://gambaslinux.eg2.fr")
END

Voilà, c'est tout pour aujourd'hui !

(Merci à manu pour ses précieux conseils).

wink

Drag image entre deux form

Rédigé par spheris Aucun commentaire
Classé dans : apprentisssage, Drawarea, gambas 2, picturebox, Tutoriel, Widget, Drag Mots clés : drag, form

DRAG AND DROP ENTRE DEUX FORMULAIRES


dragentre2form.jpg


Aujourd'hui nous allons voir un drag and drop entre deux forms avec gambas.


fmain est composeé de :
1 drawarea, 1 picturebox, 1 bouton
 
voici les sources de fmain :

PUBLIC SUB _new()
END
PUBLIC SUB form_OPEN()
form1.show
me.center
END
PUBLIC SUB button1_click()
quit
END
PUBLIC SUB picturebox3_mousedrag()
'drag even
IF mouse.left THEN
drag.icon = last.picture
picturebox3.visible = FALSE
last.drag(last.picture.image)
ENDif
END
PUBLIC SUB drawingarea1_drop()
'drop receive picturebox1 on form1 or picturebox3 on fmain
'recupere les coordonnees x et y de l_image
picturebox3.x = drag.x
picturebox3.y = drag.y
'recupere limage
picturebox3.picture = drag.icon
picturebox3.visible = TRUE
END


et dans la Form1 nous aurons :
1 drawarea, 1 pictureBOX
Voici le code :

PUBLIC SUB drawingarea1_drop()
'receive picture x and y
picturebox1.x = drag.x
picturebox1.y = drag.y
'receive image
picturebox1.picture = drag.icon
picturebox1.visible = TRUE
END
PUBLIC SUB picturebox1_mousedrag()
'drag even
IF mouse.left THEN
drag.icon = last.picture
picturebox1.visible = FALSE
last.drag(last.picture.image)
ENDif
END
Une fois le concept assimilé, cela est très simple.
A bientôt !
wink



 

Drag and Drop d une image

Rédigé par spheris Aucun commentaire
Classé dans : Tutoriels, picturebox, gambas 2 Mots clés : drag, drop, image
electric.jpg

Aujourd 'hui, nous allons étudier plus en détail la fonction DRAG and DROP d 'une image de GAMBAS.
nous allons creer une petite application avec une feuille Fmain, une Drawarea1 et une picturebox.
L 'idée sera de pouvoir déplacer notre image n 'importe ou sur la feuille.

creeons un projet et nommez le drag_easy
Les propriétés de Fmain sont :
Maximized = TRUE

creeons une drawarea1
les proprietes sont :
drawarea1.X = 0
drawarea.y = 0

creeons la fonction Fmain_resize()
et ecrivons ce code :

PUBLIC SUB Fmain_resize()
drawarea1.height = ME.height
drawarea1.width = ME.width
END

nous demandons lors d 'une Maximisation soit agrandissement de la fenêtre de redimensionner la drawarea1 a son maximum par la commande : drawarea1.height = ME.height en verticale et drawarea1.width = ME.width en horizontale.

maintenant dans la drawarea1 creeons une pictureBox1 et insserons y une image (l 'image de l 'exemple)

tout est prêt&nbsp !

realisons notre DRAG and DROP :

PREMIERE ETAPE LE DRAG

le drag va être réalisé lorsque nous cliquerons sur la picturebox et que nous la bougerons.
donc voici la fonction :
PUBLIC SUB PictureBox1_mousedrag()


IF Mouse.Left THEN
&nbsp&nbsp&nbsp Drag.Icon = LAST.Picture
&nbsp&nbsp&nbsp LAST.Drag(LAST.Picture.Image)

&nbsp ENDIF

END

decortiquons le code :

IF Mouse.Left THEN est une boucle de test qui veut dire La souris prendra l 'objet à déplacer à gauche.
N 'essayez pas mouse.right ou mouse.middle cela ne marche pas.
nous dirons que c 'est une phrase a ajouter systematiquement pour faire un drag.

Drag.Icon = LAST.Picture veut dire simplement que l 'icone au moment du deplacement sera l 'objet déplacé.
pour essayer mettez cette phrase en commentaire, et vous verrez qu 'au&nbsp moment du déplacement, le curseur reste ...une simple fleche !

LAST.Drag(LAST.Picture.Image)
voila la fonction DRAG par excellence, c 'est ce bout de code qui autorise le deplacement de l 'objet
cela veut dire le dernier Drag(deplacement) était une image à déplacer

endif on sort de la boucle

entre Endif et END nous pourrions ajouter une boite à message du style :
message.info( j 'ai déplacé l 'élément! )
et nous verrons qu 'à la fin du DRAG au moment du relachement de la souris la fenêtre s 'affiche.

DEUXIEME ETAPE LE DROP

dans notre exemple qui va recevoir le DROP ? c 'est notre drawarea1
N 'oublions pas au début nous voulions déplacer une picturebox1 dans toute la drawarea1

Mettons dans la propriété DROP de la Drawarea1 à TRUE

Maintenant creeons une fonction qui va recevoir le DROP :

PUBLIC SUB DrawingArea1_Drop()
PictureBox3.X = Drag.X
PictureBox3.Y = Drag.Y

END

Décortiquons le code

PictureBox3.X = Drag.X
nous demandons simplement d 'ajuster les coordonnées de la picturebox1 en X à la valeur de la fin du DRAG
PictureBox3.Y = Drag.Y
Idem pour la verticale avec Y

Sur vb a la firme Redmond, au moment du DRAG la picturebox1 originale disparait, suit le curseur et apparait au Drop. Nous pouvons faire pareil.
Dans la fonction DRAG precedente nous ajoutons simplement :
PictureBox1.Visible = FALSE

voyons le code entier :
PUBLIC SUB PictureBox1_MouseDrag()
IF Mouse.Left THEN
Drag.Icon = LAST.Picture
PictureBox1.Visible = FALSE
LAST.Drag(LAST.Picture.Image)
ENDIF
PictureBox3.Visible = TRUE
END

CONCLUSION :
un drag and drop a trois etapes essentielles:
une fonction mousedrag de l 'emetteur du DRAG avec la boucle IF Mouse.Left THEN...ENDIF
la propriété du récepteur DROP est à TRUE
une fonction DROP du récepteur qui reçoit le drag (coordonnées,image,texte,etc...)

Voici les sources de cet exemple.
Bonne journee à tous.

Dessiner des courbes avec GB.CHART

Rédigé par spheris Aucun commentaire
Classé dans : apprentisssage, Composants, Drawarea, gambas 2, Tutoriel Mots clés : chart, gb.chart, courbe

DESSINER DES COURBES AVEC GB.CHART



chart.jpg



Dessiner des graphiques ou des courbes avec gambas c'est possible.
Voici un exemple que j'ai trouvé sur le net.
Vous pouvez vous inspirer du code.
A bientôt

 
TELECHARGER LE CODE ICI


Voici le code de l'application:

' Gambas class file

' ======================================
' This example is to make a bar chart
' using DrawingArea
' may be it can help you to make a chart
' if you have any question you can send to
'   yudi@kecoak.or.id
' Thank You

PUBLIC value AS Float[]
PUBLIC compt AS Integer
PUBLIC etiquette AS Float[]

PUBLIC SUB _new()
  ME.Center
END

PUBLIC SUB Form_Open()
  DIM nombre AS Float
  DIM fichier AS File
  DIM fichier_de_points AS String

fichier_de_points = User.Home &/ "fichier de points.txt"
compt = 0
value = NEW Float[]
etiquette = NEW Float[]

IF NOT Exist(fichier_de_points) THEN 
message("pas de fichier de données, copier le fichier  fichier de points.txt di projet  dans votre dossier home")
QUIT 
ENDIF 
fichier = OPEN fichier_de_points FOR READ 
  WHILE NOT Eof(fichier)
  compt += 1
  LINE INPUT #fichier, nombre
      value.Resize(compt + 1)
      etiquette.Resize(compt + 1)
      value[compt] = nombre
      etiquette[compt] = nombre
  WEND 
  CLOSE #fichier
  FormChart.Show
    Draw_Chart(0)
END

PUBLIC SUB Draw_Chart(affichage AS Boolean)
  DIM i AS Integer

  DIM skala_1 AS Integer
  DIM skala_2 AS Integer

  DIM distance_x AS Float
  DIM distance_y AS Float
  DIM old_distance_x AS Float

  DIM width_draw AS Integer
  DIM tot AS Integer
  DIM colors AS Integer[]
  DIM bottom AS Integer
  DIM somme_data AS Integer
  DIM old_value AS Float
  DIM maximum AS Float
  
  colors = NEW Integer[]
  colors.Resize(compt + 1)

  FOR i = 1 TO compt
    somme_data = somme_data + etiquette[i]
    IF maximum < etiquette[i] THEN maximum = etiquette[i]
  NEXT
  
  IF somme_data = 0 THEN 
  message("pas de dommées")
  ME.Close
  ENDIF 

  FOR i = 1 TO compt
    value[i] = (etiquette[i] / maximum) * 10
  NEXT

  drwchart.Clear

  draw.Begin(drwchart)

  skala_1 = drwchart.ClientH / 11
  distance_y = drwchart.ClientH - skala_1 
  bottom = distance_y + 8

  
  
  FOR i = 0 TO 100 STEP 10
    draw.ForeColor = color.black
    IF NOT affichage THEN 
    TextLabel1.Hide
    draw.Text(maximum / 100 * i, 0, distance_y)
    ELSE 
    TextLabel1.Show
    draw.Text(i, 0, distance_y)
    ENDIF 
    draw.Line(25, distance_y + 8, drwchart.clientw, distance_y + 8)
    distance_y = distance_y - skala_1
  NEXT


  draw.Line(30, 0, 30, drwchart.ClientH - 25)

  skala_2 = (drwchart.ClientW - 30)  compt
  distance_x = skala_2 + skala_2 / 2 '+ 30
  width_draw = skala_2 / 2

  FOR i = 1 TO compt
       draw.LineWidth = 1
       draw.ForeColor = color.Black
       draw.Text(i, distance_x - (width_draw / 2) - 4, drwchart.ClientH - 20)
       IF affichage THEN
       draw.Line(distance_x - (width_draw / 2), 0, distance_x - (width_draw / 2), drwchart.ClientH - skala_1 + 8) 'bout de ligne : 8 par défaut
       ELSE 
       draw.Line(distance_x - (width_draw / 2), 0, distance_x - (width_draw / 2), drwchart.ClientH - skala_1 + 20)
       ENDIF 
       
       draw.LineWidth = 2
       draw.ForeColor = color.RGB(2 * 100, 1 * 10, 1 * 50)
       tot = skala_1 * value[i] + skala_1 - 8 

       IF NOT affichage THEN 
        IF old_distance_x = 0 THEN 
        'pas de dessin
        ELSE 
        draw.Text(etiquette[i - 1], old_distance_x - (width_draw / 2), old_value - 20)
        draw.Line(old_distance_x - (width_draw / 2), old_value, distance_x - (width_draw / 2), drwchart.ClientH - tot)
        ENDIF 
       old_value = drwchart.ClientH - tot
       old_distance_x = distance_x
       ENDIF 
       
       IF affichage THEN 
       draw.LineWidth = width_draw
       draw.ForeColor = color.RGB(i * 100, i * 10, i * 50)
       draw.Line(distance_x - (width_draw / 2), bottom, distance_x - (width_draw / 2), drwchart.ClientH - tot)
       ENDIF
       distance_x = distance_x + skala_2
 NEXT
DRAW.End
END

PUBLIC SUB btnAbout_Click()
  DIM i AS String
  i = "<h2>Example to make bar chart</h2>n"
  i = i & "This example has made by : " & Chr(10)
  i = i & "   Yudi Astira" & Chr(10)
  i = i & "   yudi@kecoak.or.id" & Chr(10)
  i = i & "   necrose #hdteam on Dal.Net" & Chr(10)
  i = i & "Thank You"
  message.Info(i, "&Close")
END

PUBLIC SUB btnClose_Click()
ME.Close
END

PUBLIC SUB PictureBox1_MouseDown()
END

PUBLIC SUB pourcent_Click()
Form_Open()
Draw_Chart(1)
END

PUBLIC SUB nombres_Click()
Form_Open()
Draw_Chart(0)
END