je souhaiterais faire un planning, mais je n'arrive pas à le mettre en ordre chronologique.
Il ne doit afficher que les rendez-vous dont la date est à venir exclusivement.
Code : Tout sélectionner
DisableDebugger
; Enumerations / DataSections
Enumeration
#Fenetre_principale
#Base_de_donnees
EndEnumeration
Enumeration
#Liste
#Bouton_Quitter
EndEnumeration
Structure Rdv
Quand.s
Qui.s
AvecQui.s
Ville.s
Heure.s
Duree.s
Note.s
EndStructure
Global NewList Rdv.Rdv()
;Application
Global TitreApplication.s="Planning"
;Base_de_donnees
Global Base_de_donnees.s = "D:\Programmation\Compil\Planning.Sqlite"
Global.s Table = "Rdv", ReqSql = ""
Global.i NbRdv = 0
; Déclarer les variables
Global.s Date_Quand, Qui, AvecQui, Ville, Heure, Duree, Note
UseJPEGImageDecoder()
UseSQLiteDatabase()
Procedure CentrerTitreFenetre(TitreFenetre.s, NumeroFenetre)
Protected NCM.NonClientMetrics, ValeurRetournee, DcSauve, AncObjet
Protected hFonteConsole, HdcCourant, TailleTs.SIZE
Protected Espace_a_remplir, RectFenetre.Rect, NbrEspaceDemandes
NCM\cbSize = SizeOf(NCM)
ValeurRetournee = SystemParametersInfo_(#SPI_GETNONCLIENTMETRICS, 0, @NCM, 0)
hFonteConsole = CreateFontIndirect_(@NCM\lfCaptionFont)
If hFonteConsole <> 0
HdcCourant = GetDC_(WindowID(NumeroFenetre))
DcSauve = SaveDC_(HdcCourant)
AncObjet = SelectObject_(HdcCourant, hFonteConsole)
ValeurRetournee = GetWindowRect_(WindowID(NumeroFenetre), @RectFenetre)
ValeurRetournee = GetTextExtentPoint32_(HdcCourant, @TitreFenetre, Len(TitreFenetre), @TailleTs)
Espace_a_remplir = RectFenetre\right - RectFenetre\left - 4 * NCM\iCaptionWidth - TailleTs\cx
ValeurRetournee = GetTextExtentPoint32_(HdcCourant, " ", 1, @TailleTs)
NbrEspaceDemandes = (Espace_a_remplir / TailleTs\cx)/2
If NbrEspaceDemandes > 0
TitreFenetre = Space(NbrEspaceDemandes) + TitreFenetre
EndIf
EndIf
ValeurRetournee = SetWindowText_(WindowID(NumeroFenetre), TitreFenetre)
ValeurRetournee = RestoreDC_(HdcCourant, DcSauve) ; mettre en ordre
ValeurRetournee = DeleteObject_(hFonteConsole)
ReleaseDC_(WindowID(NumeroFenetre), HdcCourant)
EndProcedure
Procedure Erreurs(Valeur.l)
Select Valeur
Case 0 ;Erreur dans la création de la base de données
MessageRequester(TitreApplication,"Erreur durant la création de la base de données")
Case 1 ;Base pas accessible
MessageRequester(TitreApplication,"La base de donnée n'est pas accessible "+DatabaseError())
Case 2 ;Erreur lors de l'execution de la requete
MessageRequester(TitreApplication,"Erreur durant l'exécution de la requete "+DatabaseError())
EndSelect
;Sortie de l'application
End
EndProcedure
Procedure DatabaseOpen()
If OpenDatabase(#Base_de_donnees, Base_de_donnees, "", "", #PB_Database_SQLite)
Else
Erreurs(1)
End
EndIf
EndProcedure
Procedure ViewRecord()
ReqSql = "SELECT * FROM " + Table
If DatabaseQuery(#Base_de_donnees, ReqSql) <> 0
While NextDatabaseRow(#Base_de_donnees)
AddElement(Rdv())
Rdv()\Quand = Left(GetDatabaseString(#Base_de_donnees, 1),2)+"/"+Mid(GetDatabaseString(#Base_de_donnees, 1),3,2)+"/"+
Right(GetDatabaseString(#Base_de_donnees, 1),4)
Rdv()\Qui = GetDatabaseString(#Base_de_donnees, 2)
Rdv()\AvecQui = GetDatabaseString(#Base_de_donnees, 3)
Rdv()\Ville = GetDatabaseString(#Base_de_donnees, 4)
Rdv()\Heure = GetDatabaseString(#Base_de_donnees, 5)
;EndIf
Wend
FinishDatabaseQuery(#Base_de_donnees)
Else
Erreurs(2)
EndIf
EndProcedure
Procedure Ouvrir_Fenetre_principale()
If OpenWindow(#Fenetre_principale, 0, 0, 675, 330, "", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_ScreenCentered)
CentrerTitreFenetre(".:LISTE RDV Par Michel Lye © 30/05/2013:.", #Fenetre_principale)
ListIconGadget(#Liste, 0, 0, 675, 250, "Nom", 200,
#PB_ListIcon_FullRowSelect)
AddGadgetColumn(#Liste, 1,"Rdv le", 70)
AddGadgetColumn(#Liste, 2,"avec", 200)
AddGadgetColumn(#Liste, 3, "où", 150)
AddGadgetColumn(#Liste, 4, "heure", 50)
ButtonGadget(#Bouton_Quitter, 297, 280, 80, 30, "Quitter")
EndIf
EndProcedure
;Création de la base de données si inexistante
If Not ReadFile(#Base_de_donnees, Base_de_donnees)
MessageRequester("ATTENTION", "Votre base de données" + Base_de_donnees + #CRLF$ + "n'existe pas !", #MB_ICONWARNING)
Else
CloseFile(#Base_de_donnees)
EndIf
;Ouverture de la base de données
DatabaseOpen()
;Lire la base de données
ViewRecord()
Ouvrir_Fenetre_principale()
;Trier la liste dans l'ordre chronologique
SortStructuredList(Rdv(), #PB_Sort_Ascending, OffsetOf(Rdv\Quand), #PB_Sort_String)
;Analyser les données et les ajouter à la liste si elle correspondent à nos critères
ForEach rdv()
Aujourdhui = Date(Year(Date()), Month(Date()), Day(Date()), 0, 0, 0)
difference =(Date(Val(Right(Rdv()\Quand,4)), Val(Mid(Rdv()\Quand, 4, 2)), Val(Left(Rdv()\Quand,2)), 0, 0, 0)-Aujourdhui)/86400
If difference >= 0
NbRdv + 1
Texte.s = Rdv()\Qui + #LF$ + Rdv()\Quand + #LF$ + Rdv()\AvecQui + #LF$ + Rdv()\Ville + #LF$ + Left(Rdv()\Heure, 2)+" h " +
Right(Rdv()\Heure, 2)
AddGadgetItem(#Liste, -1, Texte)
EndIf
Next
;- Boucle
;{- Boucle d'événements
Repeat
Event = WaitWindowEvent()
Select Event
Case #PB_Event_Gadget
EventGadget = EventGadget()
EventType = EventType()
If EventGadget = #Bouton_Quitter
CloseWindow(#Fenetre_principale)
Break
EndIf
Case #PB_Event_CloseWindow
EventWindow = EventWindow()
If EventWindow = #Fenetre_principale
CloseWindow(#Fenetre_principale)
Break
EndIf
EndSelect
ForEver