SQLite dans le local-storage du navigateur.
Re: SQLite dans le local-storage du navigateur.
Petite information à prendre en compte concernant SQLite pour les webapps: en plus d'être à la merci de perte de données, c'est un gros pavé de 2mo de js, ça prend "beaucoup" de temps à DL et encore "beaucoup" à parser. Je pense que cette lib est vraiment plus adaptée à cordova qu'aux webapps.
			
			
									
									
						- falsam
 - Messages : 7334
 - Inscription : dim. 22/août/2010 15:24
 - Localisation : IDF (Yvelines)
 - Contact :
 
Re: SQLite dans le local-storage du navigateur.
Oui +++poshu a écrit :Je pense que cette lib est vraiment plus adaptée à cordova qu'aux webapps.
■ Une application pour Android publier avec SpiderBasic embarque son propre navigateur pour pouvoir fonctionner. Si vous utiliser un utilitaire de nettoyage de cache comme CCLeaner pour Android, celui çi ne touchera pas l'application.
■ Une webapps tourne avec le navigateur de votre ordinateur. L'utilisation d'un utilitaire de nettoyage comme CCleaner videra aussi le cache de votre application et adieu la base de données.
Oui c'est vrai.poshu a écrit :SQLite pour les webapps ... est un gros pavé de 2mo de js, ça prend "beaucoup" de temps à DL et encore "beaucoup" à parser.
La taille de stockage de fichiers en local Forage étant limité à 50 Mo sous Ios et 100 sous Android (Information à vérifier), je préconise l'utilisation de fichier JSON pour la sauvegarde de données pour plus de rapidité
@patrick88 : Ne confond pas LocalStorage et LocalForage
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%
						Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: SQLite dans le local-storage du navigateur.
j'en connais un qui nous faire la démo avec un petit code dans un petit postfalsam a écrit :je préconise l'utilisation de fichier JSON pour la sauvegarde de données pour plus de rapidité![]()
je pensais que "LocalForage" c'était une faute de frappe et que c'était en réalité "LocalStorage"falsam a écrit :@patrick88 : Ne confond pas LocalStorage et LocalForage
Patrick
Re: SQLite dans le local-storage du navigateur.
https://www.purebasic.fr/french/viewtop ... =4&t=15928Patrick88 a écrit :j'en connais un qui nous faire la démo avec un petit code dans un petit posthmm quoique JSON y'a déja dû y avoir des choses d'écrite ...
Aie, ça a quand même pris bien 2 secondes de recherche... Je vais me reposer un peut les doigts, j'ai des crampes.
Re: SQLite dans le local-storage du navigateur.
Aïe, 
SpiderBasic ne connais pas la fonction SaveJSON(...) , pas dans la doc non plus (F1 etc...)
bizarre, parce qu'il y a la fonction LoadJSON(...)
la fonction ExportJSON() Export the given JSON data to the user through a download, donc pas dans le fromage local
comment faire pour "enregistrer" le fichier JSON avec la fonction writeData(..) ?
je pédale dans le café.
je vais continuer sur le code exemple de la base sqlite au moins y'a toutes les fonctions et ça avait l'air de marcher tant pis pour les 2 mo...
Pat
			
			
									
									
						SpiderBasic ne connais pas la fonction SaveJSON(...) , pas dans la doc non plus (F1 etc...)
bizarre, parce qu'il y a la fonction LoadJSON(...)
la fonction ExportJSON() Export the given JSON data to the user through a download, donc pas dans le fromage local
comment faire pour "enregistrer" le fichier JSON avec la fonction writeData(..) ?
je pédale dans le café.
je vais continuer sur le code exemple de la base sqlite au moins y'a toutes les fonctions et ça avait l'air de marcher tant pis pour les 2 mo...
Pat
- falsam
 - Messages : 7334
 - Inscription : dim. 22/août/2010 15:24
 - Localisation : IDF (Yvelines)
 - Contact :
 
Re: SQLite dans le local-storage du navigateur.
@Patrick : Commence par ce petite tutoriel qui va te permettre de comprendre qu'on peut stocker n'importe quel type de fichier en local  Forage : A commencer par un petit fichier texte  
 
 
 https://www.purebasic.fr/french/viewtop ... 24&t=17385
			
			
									
									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%
						Vidéo NVIDIA GeForce GTX 1650 Ti - Résolution 1920x1080 - Mise à l'échelle 125%
Re: SQLite dans le local-storage du navigateur.
mais oui quel nouille je suis, createfile(...) puis writestringn(...) pas besoin d'aller chercher midi à quatorze heure... j'avais pigé l'histoire du Fromage Local, et la lecture écriture des fichiers n'est pas très éloigné de ce que  fait PureBasic... 
merci Falsam.
Pat
			
			
									
									
						merci Falsam.
Pat
- 
				PCPixMusic
 - Messages : 106
 - Inscription : ven. 06/janv./2017 9:50
 
Re: SQLite dans le local-storage du navigateur.
Bonjour.
J'écris une application de test avec vos codes d'exemples.
Mais je n'arrive pas à updater les fiches.
Au départ je voulais en créer un certain nombres dés le début, mais ça ne fonctionne pas bien.
Car au lieu que les fiches vides se trouvent à la fin, elles se mettent au début et à la fin.
Pouvez m'aidez s'il vous plaît ?
Merci par avance.
À bientôt.
			
			
									
									
						J'écris une application de test avec vos codes d'exemples.
Mais je n'arrive pas à updater les fiches.
Au départ je voulais en créer un certain nombres dés le début, mais ça ne fonctionne pas bien.
Car au lieu que les fiches vides se trouvent à la fin, elles se mettent au début et à la fin.
Pouvez m'aidez s'il vous plaît ?
Merci par avance.
À bientôt.
Code : Tout sélectionner
;Sources : https://www.purebasic.fr/french/viewtopic.php?p=200842#p200842
;App Name : Mon test
;HTML File Name : index.html
;JavaScript filename : montest.js
;SpiderBasic library path : core
;Coche la Case Copy SpiderBasic libraries
;CloseDebugOutput()
EnableExplicit 
Enumeration
  #Fenetre_Notes  
  #ID_Canvas
  #SBN
  
  #Bouton_Selection
  
  #Index_Un
  
  #Image_Presentation
  #Image_Nouveau
  #Image_Ouvrir  
  #Image_Import
  
  #Image_Ban
  #Icone_DB
  #Icone_Open_DB
  #Icone_DB_Update
  #Icone_Recherche
  #Icone_Blob
  #Icone_Parametres
  #Icone_A_Propos
  
  #ID_OK
  
  #Prenom_Texte
  #Nom_Texte
  #Entreprise_Texte
  #Adresse_Texte
  #Code_Postal_Texte
  #Ville_Texte
  #Pays_Texte
  #Telephone_Texte
  #Mail_Texte
  #Site_Texte
  
  #Prenom_Entree
  #Nom_Entree
  #Entreprise_Entree
  #Adresse_Entree
  #Code_Postal_Entree
  #Ville_Entree
  #Pays_Entree
  #Telephone_Entree
  #Mail_Entree
  #Site_Entree
  
  #Info_X
  #Info_Y   
  
  #Font_Notes
  
  #Pres
  #Suiv
EndEnumeration
Global FileName.s = "notes.db"
Global DataBase
;Global.i FenX =  DesktopHeight(#Fenetre_Notes) / 2 + 50
;Global.i FenY =  DesktopWidth(#Fenetre_Notes) + 400
Global.i FenX =  448
Global.i FenY =  720
Global.i Largeur_String = (FenX / 2) + 12
Global.i Taille_Caractere = 20
Global.i MouseX,MouseY
Global.s Prenom_Entree,Nom_Entree,Entreprise_Entree,Adresse_Entree,Code_Postal_Entree
Global.s Ville_Entree,Pays_Entree,Telephone_Entree,Mail_Entree,Site_Entree
Global.s Fichier_SBN,db_sbn
Global.i IndexFiches = 1,La_Fiche = 1
      
ExamineDesktops()
;Plan de l'application
Declare Start()
Declare InsertRecords()                               ;Insertion de quelques enregistrements
Declare SelectRecords(index.i)                               ;Selection des enregistrements
Declare SaveDatabase()                                ;Sauvegarde de la base de données en local storage
Declare onReadFile(Status, Filename$, File, SizeRead) ;CallBack si lecture d'un fichier en local storage
Declare onSaveFile(Status, Filename$, File, SizeRead) ; Callback si ecriture d'un fichier en local storage
Declare Affiche_Strings()
; Lecture de la 
Procedure Start()
  Debug "Lecture de la base de données en cours ...."
  ReadFile(0, FileName, @onReadFile(), #PB_LocalStorage)
EndProcedure
;Insertion de quelques enregistements 
Procedure InsertRecords()
  Protected.i Index
  
  DatabaseUpdate(DataBase, "Insert Into notes (prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site) Values ('Marie', 'Durand','Marie flûte', '25 Avenue Melody','11100', 'Narbonne', 'France','06.52.31.12.21','contact@mariedurand.fr','mariedurand.fr')")  
  DatabaseUpdate(DataBase, "Insert Into notes (prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site) Values ('Julie', 'Magic','Juju Couture', '10 Rue des arts', '26200', 'Montélimar','France','07.21.88.90.16','contact@jujucouture.fr','jujucouture.fr')")  
  DatabaseUpdate(DataBase, "Insert Into notes (prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site) Values ('Pierre','Rock', 'Pierrot Soft', '27 Rue du prog',  '34000', 'Montpellier','France','06.50.48.29.78','contact@pierrotsoft.fr','pierrotsoft.fr')")  
  
  For Index = 1 To 2
    DatabaseUpdate(DataBase, "Insert Into notes(prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site) Values ('','','','','','','','','','')")  
  Next
    
EndProcedure
Procedure UpdatetRecords(La_Fiche.i)
  Protected psSQLRequest.s
  psSQLRequest = "UPDATE notes SET "
  psSQLRequest + "contact_prenom='"+GetGadgetText(#Prenom_Entree)+"', "
  psSQLRequest + "contact_nom='"+GetGadgetText(#Nom_Entree)+"', "  
  psSQLRequest + "contact_entreprise='"+GetGadgetText(#entreprise_Entree)+"', "
  psSQLRequest + "contact_adresse='"+GetGadgetText(#adresse_Entree)+"', "
  psSQLRequest + "contact_code_postal='"+GetGadgetText(#code_postal_Entree)+"', "
  psSQLRequest + "contact_ville='"+GetGadgetText(#ville_Entree)+"', "
  psSQLRequest + "contact_pays='"+GetGadgetText(#pays_Entree)+"', "
  psSQLRequest + "contact_telephone='"+GetGadgetText(#telephone_Entree)+"', "     
  psSQLRequest + "contact_mail='"+GetGadgetText(#mail_Entree)+"', "
  psSQLRequest + "contact_site='"+GetGadgetText(#site_Entree)+"'"   
  psSQLRequest + " WHERE id_notes="+Str(La_Fiche)  
  DatabaseUpdate(DataBase,psSQLRequest)
  
  Debug psSQLRequest
EndProcedure
;Selection des enregistrements
Procedure SelectRecords(index.i)
  Protected ReqSql.s = "select prenom,nom,entreprise,adresse,code_postal,ville,pays,telephone,mail,site From notes order by nom"   
  
  
  If DatabaseQuery(DataBase, ReqSql)
    ;While NextDatabaseRow(DataBase)      
    
    For IndexFiches = 1 To index 
      NextDatabaseRow(DataBase)      
      ;Debug GetDatabaseString(DataBase, 0) + " , " + GetDatabaseString(DataBase, 1)    
      
      Prenom_Entree = GetDatabaseString(DataBase, 0)      
      Nom_Entree = GetDatabaseString(DataBase, 1)           
      Entreprise_Entree = GetDatabaseString(DataBase, 2)
      Adresse_Entree = GetDatabaseString(DataBase, 3)
      Code_Postal_Entree = GetDatabaseString(DataBase, 4)
      Ville_Entree = GetDatabaseString(DataBase, 5)
      Pays_Entree = GetDatabaseString(DataBase, 6)
      Telephone_Entree = GetDatabaseString(DataBase, 7)
      Mail_Entree = GetDatabaseString(DataBase, 8)
      Site_Entree = GetDatabaseString(DataBase, 9)
    Next    
    
    Affiche_Strings()
    
      ;IndexFiches = IndexFiches + 1
    ;Wend    
    
    FinishDatabaseQuery(DataBase)
  Else
    Debug "Une erreur c'est produite : " + DatabaseError()
  EndIf  
EndProcedure
Procedure SaveDatabase()
  Protected *Buffer = ExportDatabaseMemory(DataBase)
  
  If CreateFile(0, FileName, @onSaveFile(), #PB_LocalStorage)
    WriteData(0, *Buffer, 0, MemorySize(*Buffer))
    CloseFile(0)
  EndIf
EndProcedure
; CallBack si lecture d'un fichier en local storage
Procedure onReadFile(Status, Filename.s, File, SizeRead)
  Protected *Buffer, ReqSql.s
  
  Select Status
      
    Case #PB_Status_Loaded
      ; La base de données existe 
      ; - Memorisation de la base dans un buffer de travail
      ; - Visualisation des enregistrements
      Debug "Ouverture de la base de données " + Filename 
      
      ; Mémorisation de la base de données dans un buffer 
      *Buffer = ExportFileMemory(File)
      
      ; Ouverture de la base de données 
      DataBase = OpenDatabase(#PB_Any, *Buffer)
      If DataBase
        SelectRecords(La_Fiche)
      EndIf
      
    Case #PB_Status_Error
      ; La base de données n'existe pas
      ; - Création de la base de données 
      ; - Insertion de quelques enregistrements 
      ; - Visualisation des enregistrements
      ; - Sauvegarde des données en Local Storage
      Debug "Création de la base de données " + Filename 
      
      DataBase = OpenDatabase(#PB_Any)
      
      If DataBase
        ; Creation de la table SQlite
        ReqSql = "create table notes (id_notes INTEGER PRIMARY KEY AUTOINCREMENT Not NULL,prenom TEXT, nom TEXT,entreprise TEXT, adresse TEXT, code_postal TEXT, ville TEXT, pays TEXT, telephone TEXT, mail TEXT, site TEXT)"
        
        DatabaseUpdate(DataBase, ReqSql)        
        ; Insertion de quelques enregistrements 
        InsertRecords()                
        ; Visualisation des enregistrements
        SelectRecords(La_Fiche)        
        ; Sauvegarde de la base de données en "Local Storage"
        SaveDataBase()
        
        CloseDatabase(DataBase)
      Else
        
        Debug "Impossible d'ouvrir la base de données !!"
      EndIf
  EndSelect
EndProcedure
; Callback si ecriture d'un fichier en local storage
Procedure onSaveFile(Status, Filename.s, File, SizeRead)
  Select Status
    Case #PB_Status_Saved
      Debug "Fichier " + Filename.s + "(" + SizeRead + " bytes) sauvegardé" 
      
    Case #PB_Status_Error
      Debug "Impossible de sauvegarder le fichier " + Filename
  EndSelect
EndProcedure
Procedure PosClic(MouseX.i,MouseY.i, x0.i,y0.i,x1.i,y1.i)   
  If MouseX >= x0 And MouseX <= x0+x1 And MouseY >= y0 And MouseY <= y0+y1
    ProcedureReturn #True
  Else
    ProcedureReturn #False
  EndIf  
EndProcedure
Procedure Charges_Images()  
  LoadImage(#Icone_DB,"/Icones/01-Precedente.png")
  LoadImage(#Icone_Open_DB,"/Icones/02-Suivante.png")
  LoadImage(#Icone_DB_Update,"/Icones/03-db_update.png")
  LoadImage(#Icone_Recherche,"/Icones/04-recherche.png")
  LoadImage(#Icone_Blob,"/Icones/05-blob.png")
  LoadImage(#Icone_Parametres,"/Icones/06-parametres.png")
  LoadImage(#Icone_A_Propos,"/Icones/07-a_propos.png")
EndProcedure
Procedure CadreCel(X1.i,Y1.i,FacX.i,FacY.i,Color.i)
  LineXY(X1,Y1,X1+FacX,Y1,Color) ;Ligne Horizontale Haut 1
  LineXY(X1,Y1,X1,Y1+FacY,Color) ;Ligne Verticale Gauche 1
 
  LineXY(X1,Y1+1,X1+FacX,Y1+1,Color) ;Ligne Horizontale Haut 2
  LineXY(X1+1,Y1,X1+1,Y1+FacY,Color) ;Ligne Verticale Gauche 2
 
 
  LineXY(X1+FacX-1,Y1,X1+FacX-1,Y1+FacY,Color) ;Ligne Verticale Droite 1
  LineXY(X1,Y1+FacY-1,X1+FacX,Y1+FacY-1,Color) ;Ligne Horizontale Bas 1
 
  LineXY(X1+FacX,Y1,X1+FacX,Y1+FacY,Color) ;Ligne Verticale Droite 2
  LineXY(X1,Y1+FacY,X1+FacX,Y1+FacY,Color) ;Ligne Horizontale Bas 1   
EndProcedure
Procedure BarreIcones()
  CadreCel(0,0,64,64,#White)
  CadreCel(64,0,64,64,#White)
  CadreCel(128,0,64,64,#White)
  CadreCel(192,0,64,64,#White)    
  CadreCel(256,0,64,64,#White)      
  CadreCel(320,0,64,64,#White)    
  CadreCel(384,0,64,64,#White)
EndProcedure
Procedure Affiche_Strings()                    
  StringGadget(#Prenom_Entree,     150,110,Largeur_String,40,Prenom_Entree)
  StringGadget(#Nom_Entree,        150,150,Largeur_String,40,Nom_Entree)
  StringGadget(#Entreprise_Entree, 150,190,Largeur_String,40,Entreprise_Entree)
  StringGadget(#Adresse_Entree,    150,230,Largeur_String,40,Adresse_Entree)
  StringGadget(#Code_Postal_Entree,150,270,Largeur_String,40,Code_Postal_Entree)
  StringGadget(#Ville_Entree,      150,310,Largeur_String,40,Ville_Entree)
  StringGadget(#Pays_Entree,       150,350,Largeur_String,40,Pays_Entree)
  StringGadget(#Telephone_Entree,  150,390,Largeur_String,40,Telephone_Entree)
  StringGadget(#Mail_Entree,       150,430,Largeur_String,40,Mail_Entree)
  StringGadget(#Site_Entree,       150,470,Largeur_String,40,Site_Entree)
EndProcedure 
      
Procedure GadgetEvent()
  Protected.i Index
  
  Select EventGadget()
    Case #ID_Canvas
      MouseX = GetGadgetAttribute(#ID_Canvas, #PB_Canvas_MouseX)
      MouseY = GetGadgetAttribute(#ID_Canvas, #PB_Canvas_MouseY)
            
    ;Case #ID_OK :  End
  EndSelect      
  
      If PosClic(MouseX,MouseY,0,0,64,64) 
        BarreIcones()
        CadreCel(0,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,64,0,64,64) 
        BarreIcones()
        CadreCel(64,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,128,0,64,64) 
        BarreIcones()
        CadreCel(128,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,192,0,64,64)
        BarreIcones()
        CadreCel(192,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,256,0,64,64) 
        BarreIcones()
        CadreCel(256,0,64,64,#Blue)        
      EndIf
      
      If PosClic(MouseX,MouseY,320,0,64,64) 
        BarreIcones()
        CadreCel(320,0,64,64,#Blue)        
      EndIf      
      
      If PosClic(MouseX,MouseY,384,0,64,64) 
        BarreIcones()
        CadreCel(384,0,64,64,#Blue)      
      EndIf
      
  Select EventType()     
    Case #PB_EventType_LeftButtonDown
       BarreIcones()
      
      If PosClic(MouseX,MouseY,0,0,64,64) ; Nouvelle base de données SQLite3
        If La_Fiche > 1
          La_Fiche = La_Fiche - 1
          SelectRecords(La_Fiche)
        EndIf
      EndIf
      
      If PosClic(MouseX,MouseY,64,0,64,64) ; Ouvrir une base de données SQlite3        
        If La_Fiche < 1001
          La_Fiche = La_Fiche + 1
          SelectRecords(La_Fiche)
        EndIf   
      EndIf
      
      If PosClic(MouseX,MouseY,128,0,64,64) ; Mettre à jour une base de donnée SQlite3                 
        UpdatetRecords(Index)                
        MessageRequester("Mise à jour de la base de données")
      EndIf
      
      If PosClic(MouseX,MouseY,192,0,64,64) ; Recherche dans la base de données SQlite 3       
        ;MessageRequester("Nouvelle base de données SQLite3")
      EndIf
      
      If PosClic(MouseX,MouseY,256,0,64,64) ; Import Image BLOB   
        ;MessageRequester("Nouvelle base de données SQLite3")
      EndIf
      
      If PosClic(MouseX,MouseY,320,0,64,64) ; Parametres
        CadreCel(320,0,64,64,#Blue)
        ;MessageRequester("Nouvelle base de données SQLite3")
      EndIf      
      
      If PosClic(MouseX,MouseY,384,0,64,64) ; A Propos        
        MessageRequester("Notysoft Notes SQlite3 - v1.00")
      EndIf
      
  EndSelect
  
  Select EventGadget()    
      
    Case #Index_Un
      La_Fiche = 1
      SelectRecords(La_Fiche)
      
  ;  Case #Pres      
  ;    If La_Fiche > 1
  ;      La_Fiche = La_Fiche - 1
  ;      SelectRecords(La_Fiche)
  ;    EndIf
    
  ;  Case #Suiv      
  ;    If La_Fiche < 1001
  ;      La_Fiche = La_Fiche + 1
  ;      SelectRecords(La_Fiche)
  ;    EndIf      
  EndSelect
  
EndProcedure
Procedure Fenetre_Notes()    
  If OpenWindow(#Fenetre_Notes, 0, 0, FenX,FenY, "Notysoft Note - 1.00",#PB_Window_BorderLess)       
    ;If OpenWindow(#Fenetre_Notes, 0, 0, FenX,FenY, "Notysoft Note - 1.00",#PB_Window_Background)       
      CanvasGadget(#ID_Canvas,0,0,FenX,FenY)      
      LoadFont(#Font_Notes, "Arial",Taille_Caractere)               
      SetGadgetFont(#PB_Default, FontID(#Font_Notes))      
      
      If StartDrawing(CanvasOutput(#ID_Canvas))
        DrawImage(ImageID(#Icone_DB),0,0,64,64)
        DrawImage(ImageID(#Icone_Open_DB),64,0,64,64)
        DrawImage(ImageID(#Icone_DB_Update),128,0,64,64)
        DrawImage(ImageID(#Icone_Recherche),192,0,64,64)
        DrawImage(ImageID(#Icone_Blob),256,0,64,64)
        DrawImage(ImageID(#Icone_Parametres),320,0,64,64)
        DrawImage(ImageID(#Icone_A_Propos),384,0,64,64)
        BarreIcones()
        StopDrawing()
      EndIf                                                    
      
    TextGadget(#Prenom_Texte,        20,110,130,40,"Prenom",#PB_Text_Border)
    TextGadget(#Nom_Texte,           20,150,130,40,"Nom",#PB_Text_Border)
    TextGadget(#Entreprise_Texte,    20,190,130,40,"Entreprise",#PB_Text_Border)
    TextGadget(#Adresse_Texte,       20,230,130,40,"Adresse",#PB_Text_Border)
    TextGadget(#Code_Postal_Texte,   20,270,130,40,"Code Postal",#PB_Text_Border)
    TextGadget(#Ville_Texte,         20,310,130,40,"Ville",#PB_Text_Border)
    TextGadget(#Pays_Texte,          20,350,130,40,"Pays",#PB_Text_Border)
    TextGadget(#Telephone_Texte,     20,390,130,40,"Telephone",#PB_Text_Border)
    TextGadget(#Mail_Texte,          20,430,130,40,"Mail",#PB_Text_Border)
    TextGadget(#Site_Texte,          20,470,130,40,"Site",#PB_Text_Border)   
    
    Affiche_Strings()
    
    TextGadget(#Info_X,20 ,550,130,40,Str(FenX),#PB_Text_Border)
    TextGadget(#Info_Y,150,550,Largeur_String,40,Str(DesktopHeight(#Fenetre_Notes)),#PB_Text_Border)
  
    ;ButtonGadget(#ID_OK, (FenX/2)-40, FenY-80, 80, 50, "Ok")      
    
    ;ButtonGadget(#Pres,(FenX/2)-120, FenY-80, 120, 50,"Précédente")      
    ;ButtonGadget(#Suiv,(FenX/2), FenY-80, 120, 50,   "Suivante")         
    
    ButtonGadget(#Index_Un,(FenX/2)-120, FenY-80, 200, 50,"Index 1")      
    
    BindEvent(#PB_Event_Gadget, @GadgetEvent())
    
    IndexFiches = 1
    
  CompilerIf #PB_Compiler_OS <> #PB_OS_Web
    Repeat 
      LoadFont(#Font_Notes, "Arial",Taille_Caractere)
      Event = WaitWindowEvent() 
    Until Event = #PB_Event_CloseWindow  ; If the user has pressed on the window close button
  CompilerEndIf
      
    EndIf
  EndProcedure      
  
  Start() 
  Charges_Images()   
  BindEvent(#PB_Event_Loading,@Fenetre_Notes())