TUTO Les dialogues de PureBasic

Informations pour bien débuter en PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

TUTO Les dialogues de PureBasic

Message par microdevweb »

Bonjour à tous,

Nous allons découvrir ici une autre manière d'afficher les données, il s’agit des dialogues qui utilise un système de layouts extrêmement efficace.

:idea: Le lien pour téléchargé les fichiers sources est dans la description de la vidéo
Première Partie (présentation)
:arrow: https://youtu.be/NHVv3TAkln8
Deuxième Partie
mise en place de la fenêtre de la table des contacts
:arrow: http://youtu.be/UJ6fzhSFs3U
Troisième Partie
mise en place de la fenêtre fiche d'un contact
:arrow: http://youtu.be/LcZqqtoDUBI
Quatrième Partie
mise en place de la base de donnée, ajout d'un contact
:arrow: https://youtu.be/bGVLqvEk3PE
Cinquième Partie(Fin)
Affichage des contacts dans la table,édition d'un contact,suppression d'un contact
:arrow: http://youtu.be/KtdCBX-nwM4

8O Voila c'est fini

Le code complet (ce code peut différé du code des vidéos)
Le fichier Main.pbi

Code : Tout sélectionner

EnableExplicit
UseSQLiteDatabase()
#Title="Tuto Dialog"
#D_contact_table=0
#D_contact_sheet=1
Global  gDbName$="Contact.sqlite"
Global gXmlContactTable$="Contact_table.xml"
Global gEvent,gExit.b=#False
Global IdXml
Global IdContactTable,IdContactSheet
Global gModeEdit.b=#False
Procedure LoadForm()
      IdXml=LoadXML(#PB_Any,gXmlContactTable$)
      If IdXml=0 Or XMLStatus(IdXml)<>#PB_XML_Success
            MessageRequester("XML error on line ", Str(XMLErrorLine(IdXml)) + ": " + XMLError(IdXml))
            ProcedureReturn #False
      EndIf
      ProcedureReturn #True
EndProcedure
Procedure TestEdit()
      Protected idTable=DialogGadget(#D_contact_table,"table")
      If GetGadgetState(idTable)=-1
            DisableGadget(DialogGadget(0,"edit"),#True)
      Else
            DisableGadget(DialogGadget(0,"edit"),#False)
      EndIf
EndProcedure
Procedure MakeDb()
      Protected Query$
      ;Création du fichier de la base de données sqlite
      If FileSize(gDbName$)=-1
            CreateFile(0,gDbName$)
            CloseFile(0)
      EndIf
      ;Ouvre la base de donées
      OpenDatabase(0,gDbName$,"","",#PB_Database_SQLite)
      ;Génére la requète
      Query$="CREATE TABLE  If Not EXISTS CONTACT ("
      Query$+"Id INTEGER PRIMARY KEY AUTOINCREMENT,"
      Query$+"name VARCHAR(50),"
      Query$+"adress VARCHAR(80),"
      Query$+"city VARCHAR(50),"
      Query$+"zip_code VARCHAR(10),"
      Query$+"contry VARCHAR(50),"
      Query$+"phone VARCHAR(20 ),"
      Query$+"mail VARCHAR(80)"
      Query$+")"
      ;Envoie de la requète
      If DatabaseUpdate(0,Query$)=0
            MessageRequester("Erreur Sql",DatabaseError())
      EndIf
      CloseDatabase(0)
EndProcedure
Procedure ReadItem()
      Protected line$
      OpenDatabase(0,gDbName$,"","",#PB_Database_SQLite)
      Protected Query$,N
      Query$="SELECT * FROM CONTACT ORDER BY 'name'"
      ClearGadgetItems(DialogGadget(#D_contact_table,"table"))
      If DatabaseQuery(0,Query$ )=0
            MessageRequester("Erreur Sql",DatabaseError())
            ProcedureReturn #False
      EndIf
      While NextDatabaseRow(0)
            line$=GetDatabaseString(0,1)+Chr(10)+GetDatabaseString(0,3)+Chr(10)+GetDatabaseString(0,5)
            AddGadgetItem(DialogGadget(#D_contact_table,"table"),-1,line$)
            SetGadgetItemData(DialogGadget(#D_contact_table,"table"),N,GetDatabaseLong(0,0))
            N+1
      Wend
      CloseDatabase(0)
EndProcedure
Procedure OpenContactTable()
      CreateDialog(#D_contact_table)
      If OpenXMLDialog(#D_contact_table,IdXml,"Contact_table")=0
            MessageRequester("Dialog creation error: " ,DialogError(#D_contact_table))
            ProcedureReturn #False
      EndIf
      ;Ajout des colonnes
      Protected IdTable=DialogGadget(#D_contact_table,"table")
      AddGadgetColumn(IdTable,0,"Nom",200)
      AddGadgetColumn(IdTable,1,"Localité",200)
      AddGadgetColumn(IdTable,2,"Code postal",200)
      AddGadgetColumn(IdTable,3,"Pays",200)
      ;Ajout des items à la table
      ReadItem()
      TestEdit()
      ProcedureReturn #True
EndProcedure
Procedure OpenContactSheet()
     CreateDialog(#D_contact_sheet)
      If OpenXMLDialog(#D_contact_sheet,IdXml,"Contact_Sheet")=0
            MessageRequester("Dialog creation error: " ,DialogError(#D_contact_sheet))
            ProcedureReturn #False
      EndIf
EndProcedure
Procedure AddContact()
      ;Ouvre la base de donées
     OpenDatabase(0,gDbName$,"","",#PB_Database_SQLite)
     Protected Query$
     Query$="INSERT INTO CONTACT  (name,adress,city,zip_code,contry,phone,mail)"
     Query$+" VALUES  ("
     Query$+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"name"))+Chr(34)+","
     Query$+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"adress"))+Chr(34)+","
     Query$+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"city"))+Chr(34)+","
     Query$+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"zip_code"))+Chr(34)+","
     Query$+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"contry"))+Chr(34)+","
     Query$+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"phone"))+Chr(34)+","
     Query$+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"mail"))+Chr(34)
     Query$+")"
     If DatabaseUpdate(0,Query$)=0
           MessageRequester("Erreur Sql",DatabaseError())
           CloseDatabase(0)
           ProcedureReturn #False
     EndIf
     CloseDatabase(0)
     ProcedureReturn #True
EndProcedure
Procedure UpdateContact()
      ;Ouvre la base de donées
     OpenDatabase(0,gDbName$,"","",#PB_Database_SQLite)
     Protected Query$,line,id
     line=GetGadgetState(DialogGadget(#D_contact_table,"table"))
      id=GetGadgetItemData(DialogGadget(#D_contact_table,"table"),line)
     Query$="UPDATE  CONTACT  SET "
     Query$+"name="+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"name"))+Chr(34)+","
     Query$+"adress="+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"adress"))+Chr(34)+","
     Query$+"city="+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"city"))+Chr(34)+","
     Query$+"zip_code="+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"zip_code"))+Chr(34)+","
     Query$+"contry="+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"contry"))+Chr(34)+","
     Query$+"phone="+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"phone"))+Chr(34)+","
     Query$+"mail="+Chr(34)+GetGadgetText(DialogGadget(#D_contact_sheet,"mail"))+Chr(34)
     Query$+" WHERE id="+id
     If DatabaseUpdate(0,Query$)=0
           MessageRequester("Erreur Sql",DatabaseError())
           CloseDatabase(0)
           ProcedureReturn #False
     EndIf
     CloseDatabase(0)
     ProcedureReturn #True
EndProcedure
Procedure ReadSheet()
      OpenDatabase(0,gDbName$,"","",#PB_Database_SQLite)
      Protected Query$,id,line
      line=GetGadgetState(DialogGadget(#D_contact_table,"table"))
      id=GetGadgetItemData(DialogGadget(#D_contact_table,"table"),line)
      Query$="SELECT * FROM CONTACT WHERE id="+id
      If DatabaseQuery(0,Query$)=0
            MessageRequester("Erreur Sql",DatabaseError())
            CloseDatabase(0)
            ProcedureReturn #False
      EndIf
      While NextDatabaseRow(0)
            SetGadgetText(DialogGadget(#D_contact_sheet,"name"),GetDatabaseString(0,1))
            SetGadgetText(DialogGadget(#D_contact_sheet,"adress"),GetDatabaseString(0,2))
            SetGadgetText(DialogGadget(#D_contact_sheet,"city"),GetDatabaseString(0,3))
            SetGadgetText(DialogGadget(#D_contact_sheet,"zip_code"),GetDatabaseString(0,4))
            SetGadgetText(DialogGadget(#D_contact_sheet,"contry"),GetDatabaseString(0,5))
            SetGadgetText(DialogGadget(#D_contact_sheet,"phone"),GetDatabaseString(0,6))
            SetGadgetText(DialogGadget(#D_contact_sheet,"mail"),GetDatabaseString(0,7))
      Wend
      
      CloseDatabase(0)
EndProcedure
Runtime Procedure Edit()
      If GetGadgetState(DialogGadget(#D_contact_table,"table"))=-1
            ProcedureReturn #False
      EndIf
      gModeEdit=#True
      DisableWindow(0,#True)
      OpenContactSheet()
      ReadSheet()
EndProcedure
Runtime Procedure Delete()
      If GetGadgetState(DialogGadget(#D_contact_table,"table"))=-1
            ProcedureReturn #False
      EndIf
      If MessageRequester("Contact","Etes-vous sur de vouloir supprimer ce contact?",#PB_MessageRequester_YesNo)=#PB_MessageRequester_No
            ProcedureReturn 
      EndIf
      OpenDatabase(0,gDbName$,"","",#PB_Database_SQLite)
      Protected Query$,line,id
      line=GetGadgetState(DialogGadget(#D_contact_table,"table"))
      id=GetGadgetItemData(DialogGadget(#D_contact_table,"table"),line)
      Query$="DELETE FROM CONTACT WHERE id="+id
      If DatabaseUpdate(0,Query$)=0
            MessageRequester("Erreur Sql",DatabaseError())
            CloseDatabase(0)
            ProcedureReturn #False
      EndIf
      ReadItem()
      ProcedureReturn #True
EndProcedure
Runtime Procedure Exit()
      gExit=#True
EndProcedure
Runtime Procedure Submit()
      If Len(GetGadgetText(DialogGadget(#D_contact_sheet,"name")))=0
            MessageRequester("Contact","Le nom est obligatoire")
            SetActiveGadget(DialogGadget(#D_contact_sheet,"name"))
            ProcedureReturn #False
      EndIf
      Select gModeEdit
            Case #False
                  AddContact()
            Case #True
                  UpdateContact()
      EndSelect
      ReadItem()
      PostEvent(#PB_Event_CloseWindow,1,0)
EndProcedure
Runtime Procedure Chancel()
     PostEvent(#PB_Event_CloseWindow,1,0)
EndProcedure
Runtime Procedure New()
     DisableWindow(0,#True)
     OpenContactSheet()
     SetActiveGadget(DialogGadget(#D_contact_sheet,"name"))
EndProcedure
Runtime Procedure SelectTable()
      TestEdit()
EndProcedure
If Not LoadForm():End :EndIf
MakeDb()
If Not OpenContactTable():End :EndIf
Repeat
      gEvent=WaitWindowEvent()
      Select EventWindow()
            Case 1
                  If gEvent=#PB_Event_CloseWindow
                        CloseWindow(1)
                        DisableWindow(0,#False)
                        SetActiveWindow(0)
                  EndIf
            Case 0
                  If gEvent=#PB_Event_CloseWindow
                        gExit=#True
                  EndIf
      EndSelect
Until gExit=#True
End
Le fichier Xml

Code : Tout sélectionner

<?xml version="1.0"?>
<dialogs>
      <window id="0" name="Contact_Table" text="Liste des contacts" minwidth="800" minheight="600" flags="#PB_Window_SizeGadget | 
      #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget| #PB_Window_ScreenCentered">
        <hbox expand="item:1">
                 <listicon name="table" width="auto" height="auto" flags="#PB_ListIcon_GridLines|#PB_ListIcon_FullRowSelect" onevent="SelectTable()"/>
          <vbox expand="no">
                   <button name="add" text="Nouveau" width="150" height="30" onevent="New()"/>
                  <button name="edit" text="Editer" width="150" height="30" onevent="Edit()"/>
                  <button name="delete" text="Supprimer" width="150" height="30" onevent="Delete()"/>
                  <button name="exit" text="Sortir" width="150" height="30" onevent="Exit()"/>
          </vbox>
        </hbox>
      </window>
      <window id="1" name="Contact_Sheet" text="Ficher d'un contact" minwidth="800" minheight="600" flags="#PB_Window_SizeGadget | 
      #PB_Window_MaximizeGadget | #PB_Window_MinimizeGadget| #PB_Window_ScreenCentered">
        <hbox expand="item:1">
                 <vbox expand="no">
                        <text text="Nom"/>
                        <string name="name" width="auto" maxheight="60"/>
                        <text text="Adresse"/>
                        <string name="adress" width="auto" maxheight="60"/>
                        <text text="Localite"/>
                        <string name="city" width="auto" maxheight="60"/>
                        <text text="Code postal"/>
                        <string name="zip_code" width="auto" maxheight="60"/>
                        <text text="Pays"/>
                        <string name="contry" width="auto" maxheight="60"/>
                         <text text="Telephone"/>
                        <string name="phone" width="auto" maxheight="60"/>
                         <text text="Email"/>
                        <string name="mail" width="auto" maxheight="60"/>
                 </vbox>
                 <singlebox width="40"/>
          <vbox expand="no">
                  <button name="submit" text="Valider" width="150" height="30" onevent="Submit()"/>
                  <button name="chancel" text="Annuler" width="150" height="30" onevent="Chancel()"/>
          </vbox>
        </hbox>
      </window>
</dialogs>
Dernière modification par microdevweb le jeu. 28/mai/2015 11:52, modifié 4 fois.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Micheao
Messages : 533
Inscription : dim. 07/déc./2014 10:12
Localisation : Sud-Est

Re: TUTO Les dialogues de PureBasic

Message par Micheao »

Merci pour les tutos
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: TUTO Les dialogues de PureBasic

Message par Kwai chang caine »

Bonjour MicroDevWeb,

Ne pouvant accéder à youtube, dans la majeure partie du temps, et n'ayant sur mon tel portable trop souvent pas assez de réseau, j'ai donc aujourd'hui pour la 1ere fois pu voir un de tes nombreux tutos et donc entendre ta fameuse voix qu'un membre a déclaré détentrice d'un accent.

Les copains ont raison, c'est la grande classe.
Déjà les "jingles" à l'image de ton logo, puis ta voix que je trouve pour ma part impeccable, très adaptée à ce genre d'exercice, mais surtout ton phrasé qui est de grande qualité, tout en en n'étant pas trop "pompeux"

Voilà, je tenais par ce message, faire de même que mes camarades, en te confortant dans cette formidable initiative de tutos.
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: TUTO Les dialogues de PureBasic

Message par microdevweb »

Bonjour Kwai chang caine,

Merci pour ces agréables compliments. Et oui même si mon épouse est française (Marne) et que je lui parle avec les expressions typiques tel-que (soixante dix et non septante, serpillère et non torchon) je n'en reste pas moins Belge et conserve malgré tout un léger accent.
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: TUTO Les dialogues de PureBasic

Message par microdevweb »

partie 3 online
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: TUTO Les dialogues de PureBasic

Message par microdevweb »

partie 4 online
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: TUTO Les dialogues de PureBasic

Message par Kwai chang caine »

je n'en reste pas moins Belge et conserve malgré tout un léger accent.
Sincèrement dans la présentation je ne l'ai pas entendu 8O
Cool !! avec GEBONET vous devriez être deux du plat pays 8)
serpillère et non torchon
Pour moi qui suis Lyonnais, la serpillère et le torchon sont deux objets complètements différents.
Le torchon, est un style de serviette de basse engeance, qui est traditionnellement usité pour essuyer divers objets.
L'adage "On ne mélange pas les torchons et les serviettes" prouve cet état de fait.
La serpillère est encore un étage plus bas, si je peux m'exprimer ainsi, elle sert quant à elle à nettoyer les sols.
L'adage "Kcc est la serpillère des forums PB" prouve quand à lui, que KCC n'a de point commun avec le divin langage PB que son "Bas niveau" :mrgreen: :lol:

Et ben dis donc !!! si l'on m'avait dit qu'un jour je parlerais tricot avec un informaticien sur un forum, je crois bien que l'en aurais mouillé mon mouchoir
Le mouchoir est un morceau de chiffon permettant principalement de se moucher .... :lol:

En tout les cas, merci de partager ton savoir sur ce forum 8)
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: TUTO Les dialogues de PureBasic

Message par microdevweb »

En Belgique, on appelle souvent les serpillères torchon... Et torchon essuies de vaisselle
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
falsam
Messages : 7324
Inscription : dim. 22/août/2010 15:24
Localisation : IDF (Yvelines)
Contact :

Re: TUTO Les dialogues de PureBasic

Message par falsam »

Il arrive aussi qu'on soit Torchon Chiffon Carpette : La tête en sky les cheveux qui poussent à l'intérieur.

Extrait : https://www.youtube.com/watch?v=F_UNYO-WSx8
Configuration : Windows 11 Famille 64-bit - PB 6.20 x64 - AMD Ryzen 7 - 16 GO RAM
Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Avatar de l’utilisateur
Kwai chang caine
Messages : 6989
Inscription : sam. 23/sept./2006 18:32
Localisation : Isere

Re: TUTO Les dialogues de PureBasic

Message par Kwai chang caine »

Et torchon essuies de vaisselle
C'est vrai aussi que le torchon sert à essuyer la vaisselle 8)
Quant à "essuies de vaisselle" y s'est pas foulé le belge qui a trouvé ce mot dans votre dictionnaire :lol:

C'est dans la lignée de
Aveugle = "Non voyant"
Sourd = "Mal entendant"
Abruti = "Mal comprenant" :mrgreen:
Falsam a écrit :Il arrive aussi qu'on soit Torchon Chiffon Carpette : La tête en sky les cheveux qui poussent à l'intérieur.
:lol:
Y sont trop génial ces "Mal connus" :mrgreen:
ImageLe bonheur est une route...
Pas une destination

PureBasic Forum Officiel - Site PureBasic
Avatar de l’utilisateur
microdevweb
Messages : 1802
Inscription : mer. 29/juin/2011 14:11
Localisation : Belgique

Re: TUTO Les dialogues de PureBasic

Message par microdevweb »

Dernière partie Online
Windows 10 64 bits PB: 5.70 ; 5.72 LST
Work at Centre Spatial de Liège
Avatar de l’utilisateur
SPH
Messages : 4945
Inscription : mer. 09/nov./2005 9:53

Re: TUTO Les dialogues de PureBasic

Message par SPH »

Félicitation microdevweb

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre