Code : Tout sélectionner
Enumeration
#Window_0
#ListIcon_0
#Button_0
#Button_1
#Button_2
#Button_3
#Button_4
#Image_0
#Text_0
#Text_1
#Text_2
#Text_4
#Text_5
#Text_6
#Text_7
#Text_8
#Text_9
#Text_10
#Text_11
#Text_12
#String_0
#String_1
#String_2
#String_3
#String_4
#String_5
#String_6
#String_7
#String_8
#String_9
#String_10
EndEnumeration
Global glDBSQLite.l
Global glListviewItemSelected.l = -1
Global glImageMemory.l
UseJPEG2000ImageDecoder()
UseJPEG2000ImageEncoder()
UseJPEGImageDecoder()
UseJPEGImageEncoder()
UsePNGImageDecoder()
UsePNGImageEncoder()
Procedure Main_WindowOpen()
If OpenWindow(#Window_0, 200, 200, 800, 390, "DVP - Gestion de Contacts", #PB_Window_SystemMenu | #PB_Window_TitleBar | #PB_Window_ScreenCentered )
ListIconGadget(#ListIcon_0, 10, 10, 300, 370, "Nom", 100)
AddGadgetColumn(#ListIcon_0, 1, "Prénom", 100)
ButtonGadget(#Button_0, 320, 350, 080, 30, "Reset")
ButtonGadget(#Button_1, 400, 350, 100, 30, "Ajouter")
ButtonGadget(#Button_2, 500, 350, 100, 30, "Mettre à jour")
ButtonGadget(#Button_3, 600, 350, 100, 30, "Supprimer")
ButtonGadget(#Button_4, 700, 350, 100, 30, "Parcourir")
TextGadget(#Text_0, 320, 20, 110, 20, "Nom :")
TextGadget(#Text_1, 320, 50, 110, 20, "Prénom : ")
TextGadget(#Text_2, 320, 80, 110, 20, "Profession : ")
TextGadget(#Text_4, 320, 110, 110, 20, "Société :")
TextGadget(#Text_5, 320, 140, 110, 20, "Adresse :")
TextGadget(#Text_6, 320, 170, 110, 20, "Code Postal :")
TextGadget(#Text_7, 320, 200, 110, 20, "Ville :")
TextGadget(#Text_8, 320, 230, 110, 20, "Pays :")
TextGadget(#Text_9, 320, 260, 110, 20, "Téléphone :")
TextGadget(#Text_10, 320, 290, 110, 20, "Fax : ")
TextGadget(#Text_11, 320, 320, 110, 20, "Mail :")
TextGadget(#Text_12, 620, 20, 110, 20, "Photo :")
StringGadget(#String_0, 450, 20, 150, 20, "")
StringGadget(#String_1, 450, 50, 150, 20, "")
StringGadget(#String_2, 450, 80, 150, 20, "")
StringGadget(#String_3, 450, 110, 150, 20, "")
StringGadget(#String_4, 450, 140, 150, 20, "")
StringGadget(#String_5, 450, 170, 150, 20, "")
StringGadget(#String_6, 450, 200, 150, 20, "")
StringGadget(#String_7, 450, 230, 150, 20, "")
StringGadget(#String_8, 450, 260, 150, 20, "")
StringGadget(#String_9, 450, 290, 150, 20, "")
StringGadget(#String_10, 450, 320, 150, 20, "")
ImageGadget(#Image_0, 620, 50, 160, 240, 0, #PB_Image_Border)
EndIf
EndProcedure
Procedure DB_Init()
Protected plFile.l
Protected psSQLRequest.s
UseSQLiteDatabase()
If FileSize(#PB_Compiler_FilePath+"GestionContacts.sqlite") < 0
plFile = CreateFile(#PB_Any, #PB_Compiler_FilePath+"GestionContacts.sqlite")
If plFile
CloseFile(plFile)
EndIf
EndIf
glDBSQLite = OpenDatabase(#PB_Any, #PB_Compiler_FilePath+"GestionContacts.sqlite", "", "", #PB_Database_SQLite)
If glDBSQLite = 0
MessageRequester("DVP - Gestion de Contacts", DatabaseError())
End
ElseIf plFile
psSQLRequest = "CREATE TABLE IF NOT EXISTS contacts ("
psSQLRequest + "id_contact INTEGER PRIMARY KEY AUTOINCREMENT Not NULL, "
psSQLRequest + "contact_nom TEXT Not NULL, "
psSQLRequest + "contact_prenom TEXT Not NULL, "
psSQLRequest + "contact_job TEXT, "
psSQLRequest + "contact_company TEXT, "
psSQLRequest + "contact_address TEXT, "
psSQLRequest + "contact_postalcode TEXT, "
psSQLRequest + "contact_city TEXT, "
psSQLRequest + "contact_country TEXT, "
psSQLRequest + "contact_phone TEXT, "
psSQLRequest + "contact_fax TEXT, "
psSQLRequest + "contact_mail TEXT, "
psSQLRequest + "contact_photo BLOB, "
psSQLRequest + "contact_photo_size INTEGER"
psSQLRequest + ")"
; Debug psSQLRequest
If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
MessageRequester("DVP - Gestion de Contacts - DB_Init()", DatabaseError())
EndIf
EndIf
If DatabaseQuery(glDBSQLite, "SELECT * FROM contacts") <> 0
While NextDatabaseRow(glDBSQLite)
AddGadgetItem(#ListIcon_0, CountGadgetItems(#ListIcon_0), GetDatabaseString(glDBSQLite, 1) + " " + GetDatabaseString(glDBSQLite, 2))
SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0)-1, GetDatabaseLong(glDBSQLite, 0))
Wend
FinishDatabaseQuery(glDBSQLite)
EndIf
EndProcedure
Procedure DB_InsertContact()
Protected psSQLRequest.s
psSQLRequest = "INSERT INTO contacts"
psSQLRequest + "(contact_nom, contact_prenom, contact_job, contact_company, contact_address, "
psSQLRequest + "contact_postalcode, contact_city, contact_country, contact_phone, contact_fax, contact_mail, contact_photo, contact_photo_size)"
psSQLRequest + "VALUES ("
psSQLRequest + "'"+GetGadgetText(#String_0)+"',"
psSQLRequest + "'"+GetGadgetText(#String_1)+"',"
psSQLRequest + "'"+GetGadgetText(#String_2)+"',"
psSQLRequest + "'"+GetGadgetText(#String_3)+"',"
psSQLRequest + "'"+GetGadgetText(#String_4)+"',"
psSQLRequest + "'"+GetGadgetText(#String_5)+"',"
psSQLRequest + "'"+GetGadgetText(#String_6)+"',"
psSQLRequest + "'"+GetGadgetText(#String_7)+"',"
psSQLRequest + "'"+GetGadgetText(#String_8)+"',"
psSQLRequest + "'"+GetGadgetText(#String_9)+"',"
psSQLRequest + "'"+GetGadgetText(#String_10)+"',"
psSQLRequest + "?,"
If glImageMemory
psSQLRequest + Str(MemorySize(glImageMemory))
Else
psSQLRequest + "0"
EndIf
psSQLRequest + ")"
;Debug psSQLRequest
If glImageMemory
SetDatabaseBlob(glDBSQLite, 0, glImageMemory, MemorySize(glImageMemory))
Else
ReplaceString(psSQLRequest, "?", "'0'")
EndIf
If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
MessageRequester("DVP - Gestion de Contacts - DB_InsertContact()", DatabaseError())
EndIf
; Ajoute le dernier element ajouté à la base
If DatabaseQuery(glDBSQLite, "SELECT max(id_contact), contact_nom, contact_prenom FROM contacts") <> 0
While NextDatabaseRow(glDBSQLite)
AddGadgetItem(#ListIcon_0, CountGadgetItems(#ListIcon_0), GetDatabaseString(glDBSQLite, 1) + " " + GetDatabaseString(glDBSQLite, 2))
SetGadgetItemData(#ListIcon_0, CountGadgetItems(#ListIcon_0)-1, GetDatabaseLong(glDBSQLite, 0))
Wend
FinishDatabaseQuery(glDBSQLite)
Else
MessageRequester("DVP - Gestion de Contacts - DB_InsertContact", DatabaseError())
EndIf
EndProcedure
Procedure DB_SelectContact(GadgetItem.l)
Protected psSQLRequest.s
Protected plFileImageSize.l
Protected plFileImage.l
psSQLRequest = "SELECT * FROM contacts WHERE id_contact="+Str(GetGadgetItemData(#ListIcon_0, GadgetItem))
;Debug psSQLRequest
If DatabaseQuery(glDBSQLite, psSQLRequest) <> 0
While NextDatabaseRow(glDBSQLite)
SetGadgetText(#String_0, GetDatabaseString(glDBSQLite, 1))
SetGadgetText(#String_1, GetDatabaseString(glDBSQLite, 2))
SetGadgetText(#String_2, GetDatabaseString(glDBSQLite, 3))
SetGadgetText(#String_3, GetDatabaseString(glDBSQLite, 4))
SetGadgetText(#String_4, GetDatabaseString(glDBSQLite, 5))
SetGadgetText(#String_5, GetDatabaseString(glDBSQLite, 6))
SetGadgetText(#String_6, GetDatabaseString(glDBSQLite, 7))
SetGadgetText(#String_7, GetDatabaseString(glDBSQLite, 8))
SetGadgetText(#String_8, GetDatabaseString(glDBSQLite, 9))
SetGadgetText(#String_9, GetDatabaseString(glDBSQLite, 10))
SetGadgetText(#String_10, GetDatabaseString(glDBSQLite, 11))
plFileImageSize = GetDatabaseLong(glDBSQLite, 13)
If plFileImageSize > 0
glImageMemory = AllocateMemory(plFileImageSize)
GetDatabaseBlob(glDBSQLite, 12, glImageMemory, plFileImageSize)
plFileImage = CatchImage(#PB_Any, glImageMemory, plFileImageSize)
If plFileImage
ResizeImage(plFileImage, 160, 240)
SetGadgetState(#Image_0, ImageID(plFileImage))
FreeImage(plFileImage)
EndIf
Else
SetGadgetState(#Image_0, 0)
EndIf
Wend
FinishDatabaseQuery(glDBSQLite)
Else
MessageRequester("DVP - Gestion de Contacts - DB_SelectContact", DatabaseError())
EndIf
EndProcedure
Procedure DB_UpdateContact(GadgetItem.l)
Protected psSQLRequest.s
psSQLRequest = "UPDATE contacts SET "
psSQLRequest + "contact_nom='"+GetGadgetText(#String_0)+"', "
psSQLRequest + "contact_prenom='"+GetGadgetText(#String_1)+"', "
psSQLRequest + "contact_job='"+GetGadgetText(#String_2)+"', "
psSQLRequest + "contact_company='"+GetGadgetText(#String_3)+"', "
psSQLRequest + "contact_address='"+GetGadgetText(#String_4)+"', "
psSQLRequest + "contact_postalcode='"+GetGadgetText(#String_5)+"', "
psSQLRequest + "contact_city='"+GetGadgetText(#String_6)+"', "
psSQLRequest + "contact_country='"+GetGadgetText(#String_7)+"', "
psSQLRequest + "contact_phone='"+GetGadgetText(#String_8)+"', "
psSQLRequest + "contact_fax='"+GetGadgetText(#String_9)+"', "
psSQLRequest + "contact_mail='"+GetGadgetText(#String_10)+"', "
psSQLRequest + "contact_photo = ?,"
If glImageMemory
psSQLRequest + "contact_photo_size = " + Str(MemorySize(glImageMemory))
Else
psSQLRequest + "contact_photo_size = 0"
EndIf
psSQLRequest + " WHERE id_contact="+Str(GetGadgetItemData(#ListIcon_0, GadgetItem))
;Debug psSQLRequest
If glImageMemory
SetDatabaseBlob(glDBSQLite, 0, glImageMemory, MemorySize(glImageMemory))
Else
ReplaceString(psSQLRequest, "?", "'0'")
EndIf
If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
MessageRequester("DVP - Gestion de Contacts - DB_UpdateContact()", DatabaseError())
Else
SetGadgetItemText(#ListIcon_0, GadgetItem, GetGadgetText(#String_0)+" "+GetGadgetText(#String_1))
EndIf
EndProcedure
Procedure DB_DeleteContact(GadgetItem.l)
Protected psSQLRequest.s
psSQLRequest = "DELETE FROM contacts WHERE id_contact="+Str(GetGadgetItemData(#ListIcon_0, GadgetItem))
;Debug psSQLRequest
If DatabaseUpdate(glDBSQLite, psSQLRequest) = 0
MessageRequester("DVP - Gestion de Contacts - DB_DeleteContact()", DatabaseError())
Else
RemoveGadgetItem(#ListIcon_0, GadgetItem)
EndIf
EndProcedure
Main_WindowOpen()
DB_Init()
Repeat
glEvent = WaitWindowEvent()
glGadget= EventGadget()
glType = EventType()
If glEvent = #PB_Event_Gadget
Select glGadget
Case #ListIcon_0 ;{
If GetGadgetState(#ListIcon_0) >= 0 And GetGadgetState(#ListIcon_0) <= CountGadgetItems(#ListIcon_0)
If GetGadgetState(#ListIcon_0) <> glListviewItemSelected
glListviewItemSelected = GetGadgetState(#ListIcon_0)
DB_SelectContact(GetGadgetState(#ListIcon_0))
EndIf
EndIf
;}
Case #Button_0 ;{ Reset
If glType = #PB_EventType_LeftClick
Define.l dlInc
For dlInc = #String_0 To #String_10
SetGadgetText(dlInc, "")
Next
SetGadgetState(#Image_0, 0)
If glImageMemory
FreeMemory(glImageMemory)
glImageMemory = 0
EndIf
glListviewItemSelected = -1
EndIf
;}
Case #Button_1 ;{ Ajouter
If GetGadgetText(#String_0) <> "" And GetGadgetText(#String_1) <> ""
If glType = #PB_EventType_LeftClick
DB_InsertContact()
EndIf
EndIf
;}
Case #Button_2 ;{ Mettre à jour
If GetGadgetState(#ListIcon_0) >= 0 And GetGadgetState(#ListIcon_0) <= CountGadgetItems(#ListIcon_0)-1
If glType = #PB_EventType_LeftClick
DB_UpdateContact(GetGadgetState(#ListIcon_0))
EndIf
EndIf
;}
Case #Button_3 ;{ Supprimer
If GetGadgetState(#ListIcon_0) >= 0 And GetGadgetState(#ListIcon_0) <= CountGadgetItems(#ListIcon_0)-1
If glType = #PB_EventType_LeftClick
If MessageRequester("DVP - Gestion de Contacts", "Voulez vous vraiment supprimer le contact courant "+Chr(34)+GetGadgetItemText(#ListIcon_0, GetGadgetState(#ListIcon_0))+Chr(34)+" ?", #PB_MessageRequester_YesNo) = #PB_MessageRequester_Yes
DB_DeleteContact(GetGadgetState(#ListIcon_0))
EndIf
EndIf
EndIf
;}
Case #Button_4 ;{ Parcourir
Define.s psFileImage
Define.l plFileImage
; Ouvre une boîte de dialogue standard pour choisir une image
psFileImage = OpenFileRequester("Choisissez une image à charger", "", "Fichiers Images|*.png;*.bmp;*.jpg;*.jpeg|Tous les fichiers (*.*)|*.*", 0)
If psFileImage
; Charge une image
plFileImage = LoadImage(#PB_Any, psFileImage)
If plFileImage
; Redimensionne l'image à la taille de l'ImageGadget
ResizeImage(plFileImage, 160, 240)
; Change l'image affichée par l' ImageGadget
SetGadgetState(#Image_0, ImageID(plFileImage))
; Libère l'image
FreeImage(plFileImage)
; Charge l'image dans la zone mémoire globale dédiée 'glImageMemory'
plFileImage = OpenFile(#PB_Any, psFileImage)
If plFileImage
glImageMemory = AllocateMemory(Lof(plFileImage))
If glImageMemory
ReadData(plFileImage, glImageMemory, Lof(plFileImage))
EndIf
CloseFile(plFileImage)
EndIf
EndIf
EndIf
;}
EndSelect
EndIf
Until glEvent = #PB_Event_CloseWindow
End