Code : Tout sélectionner
#region Includes
#include <ButtonConstants.au3>
#include <DateTimeConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <GuiConstants.au3>
#include <GuiEdit.au3>
#include <GuiListView.au3>
#include <WinAPI.au3>
#endregion
#region Variable Global hors Interface
Global $hListView
#endregion
#region Interface Menu
; ####################################### Début de la création de l'interface Menu ########################################################
Global $F_Menu = GUICreate("Gestion des prêts - v1.0.0", 565, 213, 192, 124)
GUISetIcon("C:\Users\kabbaravi\Desktop\AutoIT\Prêts\Pret.ico", -1)
Global $Lbl_Titre = GUICtrlCreateLabel("GESTION DES PRÊTS", 112, 16, 353, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
Global $Btn_NewPret = GUICtrlCreateButton("NOUVEAU PRÊT", 32, 72, 209, 89)
Global $Btn_ModifPret = GUICtrlCreateButton("VOIR / MODIFIER / SUPPRIMER UN PRÊT", 328, 72, 209, 89, $BS_MULTILINE)
; ############################################### Fin de la création ######################################################################
#endregion
#region Interface Formulaire
; ################################# Début de la création de l'interface Formulaire ########################################################
Global $F_Formulaire = GUICreate("Nouveau Prêt", 531, 438, 192, 123)
GUISetIcon("C:\Users\kabbaravi\Desktop\AutoIT\Prêts\Pret.ico", -1)
Global $Lbl_TitreN = GUICtrlCreateLabel("Données du nouveau prêt", 64, 8, 394, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
Global $Lbl_NomEmp = GUICtrlCreateLabel("Nom de l'emprunteur : ", 16, 64, 112, 17)
Global $Inp_NomEmp = GUICtrlCreateInput("", 152, 64, 361, 21)
Global $Lbl_DateDep = GUICtrlCreateLabel("Date de l'empreint :", 16, 96, 95, 17)
Global $Date_Depart = GUICtrlCreateDate("", 152, 96, 194, 21)
Global $Llb_MatEmp = GUICtrlCreateLabel("Matériels empruntés :", 16, 136, 106, 17)
Global $Chk_BadgeCtrl = GUICtrlCreateCheckbox("Badge ctrl accé", 152, 136, 97, 17)
Global $Llb_NumAcce = GUICtrlCreateLabel("Numéro :", 288, 136, 47, 17)
Global $Inp_NumAcce = GUICtrlCreateInput("", 344, 136, 145, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $Chk_BadgePark = GUICtrlCreateCheckbox("Badge Parking", 152, 168, 97, 17)
Global $Llb_NumPark = GUICtrlCreateLabel("Numéro :", 288, 168, 47, 17)
Global $Inp_NumPark = GUICtrlCreateInput("", 344, 168, 145, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $Chk_Cle = GUICtrlCreateCheckbox("Clés", 152, 200, 97, 17)
Global $Lbl_Lieux = GUICtrlCreateLabel("Lieux :", 288, 200, 35, 17)
Global $Inp_NomLieu = GUICtrlCreateInput("", 344, 200, 145, 21)
GUICtrlSetState(-1, $GUI_DISABLE)
Global $Lbl_Obs = GUICtrlCreateLabel("Observation :", 16, 264, 67, 17)
Global $Edt_Obs = GUICtrlCreateEdit("", 104, 248, 409, 65)
Global $Lbl_DateRet = GUICtrlCreateLabel("Date de retour :", 16, 328, 78, 17)
Global $Date_Retour = GUICtrlCreateDate("", 152, 328, 186, 21)
Global $Btn_Valider = GUICtrlCreateButton("VALIDER", 16, 376, 161, 33)
Global $Btn_Retour = GUICtrlCreateButton("RETOUR", 352, 376, 161, 33)
; ############################################## Fin de la création #######################################################################
#endregion
#region Interface Tableau
; ################################# Début de la création de l'interface Tableau ########################################################
Global $hEdit, $hDC, $hBrush, $Item = -1, $SubItem = 0
Global $Style = BitOR($WS_CHILD, $WS_VISIBLE, $ES_AUTOHSCROLL, $ES_LEFT)
Global $Data = @ScriptDir & "\Data.ini"
Global $F_Tableau = GUICreate("Liste des Empreints", 1074, 768)
Global $Chk_Seltab = GUICtrlCreateCheckbox("Sélectionner tout", 10, 660, 97, 17)
Global $Btn_SupprVisu = GUICtrlCreateButton("SUPPRIMER", 120, 650, 161, 33)
Global $Btn_RetourVisu = GUICtrlCreateButton("RETOUR", 300, 650, 161, 33)
; ############################################## Fin de la création #######################################################################
#endregion
#region Fonction
;##################### Zone des Fonctions #####################
Func _CreationListView()
$Section = IniReadSectionNames($Data) ; Lecture des sections
$hListView = _GUICtrlListView_Create($F_Tableau, "Nom|Date Depart|Num Badge Accès|Num Badge Parking|Cle Empruntées|Date Retour Prévue|Observation|Récupéré", 2, 6, 1068, 600, BitOR($LVS_EDITLABELS, $LVS_REPORT))
_GUICtrlListView_SetExtendedListViewStyle($hListView, BitOR($LVS_EX_CHECKBOXES, $LVS_EX_GRIDLINES))
; Taille des colonnes
_GUICtrlListView_SetColumnWidth($hListView, 0, 190)
_GUICtrlListView_SetColumnWidth($hListView, 1, 140)
_GUICtrlListView_SetColumnWidth($hListView, 2, 120)
_GUICtrlListView_SetColumnWidth($hListView, 3, 120)
_GUICtrlListView_SetColumnWidth($hListView, 4, 120)
_GUICtrlListView_SetColumnWidth($hListView, 5, 140)
_GUICtrlListView_SetColumnWidth($hListView, 6, 200)
_GUICtrlListView_SetColumnWidth($hListView, 7, 78)
For $i = 1 To UBound($Section) - 1 ; Boucle de lecture
$Cle = IniReadSection($Data, $Section[$i]) ; Lecture des clés de la section en cours
If IsArray($Cle) Then ; Si la section n'est pas vide
_GUICtrlListView_AddItem($hListView, $Cle[1][1]) ; Récupére valeur de la clé 1 de la section en cours
_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[2][1], 1) ; Récupére valeur de la clé 2 de la section en cours
_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[3][1], 2) ; Récupére valeur de la clé 3 de la section en cours
_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[4][1], 3) ; Récupére valeur de la clé 4 de la section en cours
_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[5][1], 4) ; Récupére valeur de la clé 5 de la section en cours
_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[6][1], 5) ; Récupére valeur de la clé 6 de la section en cours
_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[7][1], 6) ; Récupére valeur de la clé 7 de la section en cours
_GUICtrlListView_AddSubItem($hListView, $i - 1, $Cle[8][1], 7) ; Récupére valeur de la clé 8 de la section en cours
EndIf
Next
GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
EndFunc
Func _GUICtrlListView_SetCheckedStates(Const $hListView, Const $iType) ; Fonction des selections des chekbox (0 = Tout Deselectionner , 1 = Tout Selectionner et 2 = Inversion)
Local $fState = False
Local Const $iCount = _GUICtrlListView_GetItemCount($hListView)
If $iType < 0 Or $iType > 2 Then
Return SetError(1, 0, 0)
EndIf
If $iType Then
$fState = True
EndIf
For $i = 0 To $iCount - 1
If $iType = 2 Then
$fState = Not _GUICtrlListView_GetItemChecked($hListView, $i)
EndIf
_GUICtrlListView_SetItemChecked($hListView, $i, $fState)
Next
EndFunc
Func _ISCHECKED($control)
Return BitAND(GUICtrlRead($control), $GUI_CHECKED) = $GUI_CHECKED
EndFunc
Func WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
Local $iCode = BitShift($wParam, 16)
Switch $lParam
Case $hEdit
Switch $iCode
Case $EN_KILLFOCUS
Local $iText = _GUICtrlEdit_GetText($hEdit)
_GUICtrlListView_SetItemText($hListView, $Item, $iText, $SubItem)
; Après maj de la listView
$item = $item + 1
$SubItem = $SubItem + 1
$Section = IniReadSectionNames($Data) ; Lecture des sections
For $i = 1 To UBound($Section) - 1 ; Boucle de lecture
If $i = $item Then
$Cle = IniReadSection($Data, $Section[$i]) ; Lecture des clés de la section en cours
If IsArray($Cle) Then ; Si la section n'est pas vide
IniWrite($Data,$Section[$i],$cle[$SubItem][0], $iText)
EndIf
EndIf
Next
_WinAPI_DeleteObject($hBrush)
_WinAPI_ReleaseDC($hEdit, $hDC)
_WinAPI_DestroyWindow($hEdit)
$Item = -1
$SubItem = 0
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func FrameRect($hDC, $nLeft, $nTop, $nRight, $nBottom, $hBrush)
Local $stRect = DllStructCreate("int;int;int;int")
DllStructSetData($stRect, 1, $nLeft)
DllStructSetData($stRect, 2, $nTop)
DllStructSetData($stRect, 3, $nRight)
DllStructSetData($stRect, 4, $nBottom)
DllCall("user32.dll", "int", "FrameRect", "hwnd", $hDC, "ptr", DllStructGetPtr($stRect), "hwnd", $hBrush)
EndFunc
Func WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $tNMHDR, $hWndFrom, $iCode
$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = DllStructGetData($tNMHDR, "hWndFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hListView
Switch $iCode
Case $NM_DBLCLK
Local $aHit = _GUICtrlListView_SubItemHitTest($hListView)
If ($aHit[0] <> -1) And ($aHit[1] = 0) Then
$Item = $aHit[0]
$SubItem = 0
Local $aRect = _GUICtrlListView_GetItemRect($hListView, $Item)
ElseIf ($aHit[0] <> -1) And ($aHit[1] > 0) Then
$Item = $aHit[0]
$SubItem = $aHit[1]
Local $aRect = _GUICtrlListView_GetSubItemRect($hListView, $Item, $SubItem)
Else
Return $GUI_RUNDEFMSG
EndIf
Local $iItemText = _GUICtrlListView_GetItemText($hListView, $Item, $SubItem)
Local $iLen = _GUICtrlListView_GetStringWidth($hListView, $iItemText)
$hEdit = _GUICtrlEdit_Create($F_Tableau, $iItemText, $aRect[0] + 3, $aRect[1], $iLen + 10, 17, $Style)
_GUICtrlEdit_SetSel($hEdit, 0, -1)
_WinAPI_SetFocus($hEdit)
$hDC = _WinAPI_GetWindowDC($hEdit)
$hBrush = _WinAPI_CreateSolidBrush(0x0000FF)
FrameRect($hDC, 0, 0, $iLen + 10 , 17, $hBrush)
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
;##################### Fin de la zone #########################
#endregion
GUISetState(@SW_SHOW, $F_Menu)
#region Boucle Principale
While 1 ; Début de la boucle infinie
$nMsg = GUIGetMsg() ; Récupération des messages de l'interface
Switch $nMsg ; Début du sélecteur de cas
Case $GUI_EVENT_CLOSE ; Si clic fermeture fenêtre, on sort
MsgBox(64, 'Info', 'Vous avez choisi de fermer la fenêtre en cours') ; Message
Exit ; Fin du script
; ############################################## Action sur l'interface MENU #############################################################
Case $Btn_NewPret ; Si clic sur le bouton Nouveau Prêt
GUISetState(@SW_HIDE, $F_Menu) ; On masque le Menu
GUISetState(@SW_SHOW, $F_Formulaire) ; On affiche le Formulaire
Case $Btn_ModifPret ; Si clic sur le bouton Modification
GUISetState(@SW_HIDE, $F_Menu) ; On masque le Menu
_CreationListView()
GUISetState(@SW_SHOW, $F_Tableau) ; On affiche le Tableau
; ######################################## Action sur l'interface Formulaire ################################################################
Case $Btn_Retour ; Si clic sur le bouton Retour
GUISetState(@SW_HIDE, $F_Formulaire) ; On masque le Formulaire
GUISetState(@SW_SHOW, $F_Menu) ; On affiche le Menu
Case $Chk_BadgeCtrl ; Si on coche la case Badgeacce
If _ISCHECKED($Chk_BadgeCtrl) Then ; Si case coche alors
GUICtrlSetState($Inp_NumAcce,$GUI_ENABLE) ; On active la zone de saisie du numero
Else ; Sinon
GUICtrlSetState($Inp_NumAcce,$GUI_DISABLE) ; Si elle n'est pas coche, la zone est desactive
GUICtrlSetData ($Inp_NumAcce, "") ; On vide la cellule
EndIf ; Fin SI
Case $Chk_BadgePark ; Si on coche la case BadgeParking
If _ISCHECKED($Chk_BadgePark) Then ; Si la case est coche alors
GUICtrlSetState($Inp_NumPark,$GUI_ENABLE) ; On active la zone de saisie du numero
Else ; Sinon
GUICtrlSetState($Inp_NumPark,$GUI_DISABLE) ; Si elle n'est pas coche, la zone est desactive
GUICtrlSetData ($Inp_NumPark, "") ; On vide la cellule
EndIf ; Fin SI
Case $Chk_Cle; Si on coche la case Cle
If _ISCHECKED($Chk_Cle) Then ; Si la case est coche alors
GUICtrlSetState($Inp_NomLieu,$GUI_ENABLE) ; On active la zone de saisie du Lieux
Else ; Sinon
GUICtrlSetState($Inp_NomLieu,$GUI_DISABLE) ; Si elle n'est pas coche, la zone est desactive
GUICtrlSetData ($Inp_NomLieu, "") ; On vide la cellule
EndIf ; Fin SI
Case $Btn_Valider ; Si clic sur le bouton Valider
; ######################################## Action sur le fichier Data.ini ##############################################################
If Not FileExists($Data) Then ; Si le fichier Data.ini n'existe pas alors
FileWrite($Data,"") ; On le crée
Endif ; Fin SI
$file = FileOpen($Data, 1) ; On ouvre le fichier Data.ini
If $file = -1 Then ; Si data.ini n'est pas trouvé alors erreur
MsgBox(0, "Erreur", "Impossible d'ouvrir le fichier de données.")
Exit ; Sort du logiciel
EndIf ; Fin SI
; ################################################# Fin de l'action ##################################################################
; ############################################ Je récupère les valeurs ###############################################################
Local $val_NomEmp = GUICtrlRead($Inp_NomEmp)
Local $val_DateDep =GUICtrlRead ($Date_Depart)
Local $val_NumAcce = GUICtrlRead($Inp_NumAcce)
Local $val_NumPark = GUICtrlRead($Inp_NumPark)
Local $val_NomLieu = GUICtrlRead($Inp_NomLieu)
Local $val_Observation = GUICtrlRead ($Edt_Obs)
Local $val_DateRet = GUICtrlRead ($Date_Retour)
; #################################################### Fin de la récupération ########################################################
$Section = IniReadSectionNames($Data) ; Lecture des sections
$NbSection = UBound($Section)
$Key1 = "Nom="& $val_NomEmp
$Key2 = "DateDep="& $val_DateDep
$Key3 = "BadgeAcce="& $val_NumAcce
$Key4 = "BadgePark="& $val_NumPark
$Key5 = "Cle="& $val_NomLieu
$Key6 = "DateRetour="& $val_DateRet
$Key7 = "Observation="& $val_Observation
$Key8 = "Recupere=NON"
Local $sData = $Key1 & @LF & $Key2 & @LF & $Key3 & @LF & $Key4 & @LF & $Key5 & @LF & $Key6 & @LF & $Key7 & @LF & $Key8
IniWriteSection($Data, $NbSection, $sData)
FileClose($file)
MsgBox(64, "OK", "L'enregistrement a bien été prise en compte.")
GUICtrlSetData ($Inp_NomEmp, "") ; On vide la cellule
GUICtrlSetData ($Date_Depart, "") ; On vide la cellule
GUICtrlSetData ($Inp_NumAcce, "") ; On vide la cellule
GUICtrlSetData ($Inp_NumPark, "") ; On vide la cellule
GUICtrlSetData ($Inp_NomLieu, "") ; On vide la cellule
GUICtrlSetData ($Edt_Obs, "") ; On vide la cellule
GUICtrlSetData ($Date_Retour, "") ; On vide la cellule
; ################################################## Action sur l'interface Tableau ##################################################
Case $Chk_Seltab ; Si on coche la case Badgeacce
If _ISCHECKED($Chk_Seltab) Then ; Si case coche alors
_GUICtrlListView_SetCheckedStates($hListView, 1) ; On selectionne tout
Else ; Sinon
_GUICtrlListView_SetCheckedStates($hListView, 0) ; Si elle n'est pas coche, On deselectionne tout
EndIf ; Fin SI
Case $Btn_SupprVisu ; Si clic sur le bouton Valider
; Je fais un deselection de toutes les lignes
$fSelected = False
$iCount = _GUICtrlListView_GetItemCount($hListView)
For $i = 0 To $iCount - 1
_GUICtrlListView_SetItemSelected($hListView, $i, $fSelected = True)
Next
; Je compte le nombre de ligne dans le tableau
$iCount = _GUICtrlListView_GetItemCount($hListView)
$Section = IniReadSectionNames($Data) - 1 ; Lecture des sections
; J'execute une action selon le qui est coché
For $i = 0 To $iCount - 1
$Indice = ""
$Chek = _GUICtrlListView_GetItemChecked($hListView, $i) ; Recupere dans une variable si une ligne est coche ou pas
If $Chek = True Then ; Si elle est coche alors
_GUICtrlListView_SetItemSelected($hListView, $i) ; Je selectionne la ligne
$Indice = _GUICtrlListView_GetSelectedIndices($hListView)
EndIf
If $Indice <> "" Then
$Indice = $Indice + 1
MsgBox(4160, "Information", "Indice selectionne : " & $Indice)
IniDelete($Data,$Section[$Indice])
_GUICtrlListView_SetItemSelected($hListView, $i, $fSelected = True)
EndIf
Next
$Section = IniReadSectionNames($Data) ; Lecture des sections
For $i = 1 To UBound($Section) - 1
IniRenameSection($Data,$Section[$i],$i)
Next
; ### Merci à sylvanie (Modérateur du site http://www.autoitscript.fr) pour cette partie ###
$contenu=FileRead($Data)
;première passe : Cherche plusieurs sauts de lignes depuis le début
$contenu=StringRegExpReplace($contenu,'\A('&@CRLF&')+','')
;deuxième passe : cherche une succession de 2 sauts ou plus successifs pour les remplacer par un seul (sinon les chaînes de textes sont collées)
$contenu=StringRegExpReplace($contenu,'('&@CRLF&'){2,}',@CRLF)
;troisième passe : cherche plusieurs suts de ligne depuis la fin du fichier
$contenu=StringRegExpReplace($contenu,'('&@CRLF&')+\Z','')
$hndout=FileOpen(@ScriptDir&"\Data.ini",2)
FileWrite($hndout,$contenu)
FileClose($hndout)
;### ###
_GUICtrlListView_Destroy($hListView)
_CreationListView()
Case $Btn_RetourVisu ; Si clic sur le bouton Retour
GUISetState(@SW_HIDE, $F_Tableau) ; On masque le Tableau
GUISetState(@SW_SHOW, $F_Menu) ; On affiche le Menu
_GUICtrlListView_Destroy($hListView)
EndSwitch ; Fin du sélecteur de cas
WEnd ; Fin de la boucle infinie
#endregion