ne pouvoir selectionner qu'une seule checkbox
Posté : jeu. 22 nov. 2018 14:53
Bonjour , voici un script qui me permet dans mon tableau de selectionner une ou plusieur checkbox
j'aimerai n'avoir la possibilité d'en selectionner qu'une seule et que les autres soit grisés
le problème c'est que je n'arrive pas l'inclure dans mon script
le voici
j'aimerai n'avoir la possibilité d'en selectionner qu'une seule et que les autres soit grisés
le problème c'est que je n'arrive pas l'inclure dans mon script
le voici
#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 Litiges - v1.0.0", 565, 213, 192, 124)
Global $Lbl_Titre = GUICtrlCreateLabel("GESTION DES LITIGES", 112, 16, 400, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
Global $Btn_NewPret = GUICtrlCreateButton("NOUVEAU LITIGE", 32, 72, 209, 89)
Global $Btn_ModifPret = GUICtrlCreateButton("VOIR / MODIFIER / SUPPRIMER UN LITIGE", 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 Litige", 531, 438, 192, 123)
GUISetIcon("C:\Users\g056050\Desktop\422.ico", -1)
Global $Lbl_TitreN = GUICtrlCreateLabel("Données du nouveau litige", 64, 20, 450, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
Global $Lbl_NomEmp = GUICtrlCreateLabel("N° De Serie : ", 55, 114, 112, 17)
Global $Inp_NomEmp = GUICtrlCreateInput("", 152, 114, 300, 21)
Global $Lbl_DateDep = GUICtrlCreateLabel("Date du Litige :", 55, 146, 95, 17)
Global $Date_Depart = GUICtrlCreateDate("", 152, 146, 194, 21)
Global $Lbl_Obs = GUICtrlCreateLabel("Observation :", 16, 200, 67, 17)
Global $Edt_Obs = GUICtrlCreateEdit("", 90, 200, 409, 150)
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 $Data2 = @ScriptDir & "\Data2.ini"
Global $F_Tableau = GUICreate("Liste des Empreints", 1074, 645)
Global $Chk_Seltab = GUICtrlCreateCheckbox("Sélectionner tout", 32, 544, 97, 25)
Global $Btn_SupprVisu = GUICtrlCreateButton("SUPPRIMER", 368, 596, 161, 33)
Global $Btn_OK = GUICtrlCreateButton("LITIGE OK", 168, 544, 161, 33)
Global $Btn_RetourVisu = GUICtrlCreateButton("RETOUR", 559, 594, 161, 33)
Global $Btn_Attente = GUICtrlCreateButton("EN ATTENTE", 169, 593, 161, 33)
Global $Btn_Autre = GUICtrlCreateButton("AUTRE", 366, 545, 161, 33)
Global $Inp_Autre = GUICtrlCreateInput("", 560, 544, 161, 31)
$Pic1 = GUICtrlCreatePic("C:\Users\g056050\Desktop\Capture.jpg", 912, 592, 135, 37)
; ############################################## Fin de la création #######################################################################
#endregion
#region Fonction
;##################### Zone des Fonctions nouveau litige#####################
Func _CreationListView()
$Section = IniReadSectionNames($Data) ; Lecture des sections
$hListView = _GUICtrlListView_Create($F_Tableau, "N° De Serie|Date Du Litige|Commentaire|Statut", 10, 6, 1050,520, 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, 150)
_GUICtrlListView_SetColumnWidth($hListView, 2, 625)
_GUICtrlListView_SetColumnWidth($hListView, 3, 84)
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
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 $Btn_Valider ; Si clic sur le bouton Valider
; ######################################## Creation des fichiers .ini si inexistant ##############################################################
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
If Not FileExists($Data2) Then ; Si le fichier Data2.ini n'existe pas alors
FileWrite($Data2,"") ; On le crée
Endif ; Fin SI
$file2 = FileOpen($Data2, 1) ; On ouvre le fichier Data2.ini
If $file2 = -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_Observation = GUICtrlRead ($Edt_Obs)
; #################################################### Fin de la récupération ########################################################
$Statut = "NOK"
$Section = IniReadSectionNames($Data) ; Lecture des sections
$NbSection = UBound($Section)
$Key1 = "Nom="& $val_NomEmp
$Key2 = "DateDep="& $val_DateDep
$Key7 = "Observation="& $val_Observation
$Key8 = "Recupere="& $Statut
Local $sData = $Key1 & @LF & $Key2 & @LF & $Key7 & @LF & $Key8
IniWriteSection($Data, $NbSection, $sData) ;écris le contenu des Key dans le fichier ini Data.ini
FileClose($file)
MsgBox(64, "OK", "Le Litige a bien été prise en compte.")
GUICtrlSetData ($Inp_NomEmp, "") ; On vide la cellule
GUICtrlSetData ($Date_Depart, "") ; On vide la cellule
GUICtrlSetData ($Edt_Obs, "") ; 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 Supprimer
; 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
IniDelete($Data,$Section[$Indice]) ;efface dans $Data ce qui a été selectionné
_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
$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)
Case $Btn_Attente ; 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
IniWrite($Data,$Section[$Indice], "Recupere", "EN ATTENTE" )
_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
$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_OK ; 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
IniWrite($Data,$Section[$Indice], "Recupere", "OK" ) ; change la clef "recupere" dans $Data
$Temp = IniReadSection($Data,$Section[$Indice])
IniWriteSection($Data2,$Section[$Indice] ,$Temp)
IniDelete($Data,$Section[$Indice]) ;efface dans $Data ce qui a été selectionné
_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
$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()
EndSwitch ; Fin du sélecteur de cas
WEnd ; Fin de la boucle infinie
#endregion
#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 Litiges - v1.0.0", 565, 213, 192, 124)
Global $Lbl_Titre = GUICtrlCreateLabel("GESTION DES LITIGES", 112, 16, 400, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
Global $Btn_NewPret = GUICtrlCreateButton("NOUVEAU LITIGE", 32, 72, 209, 89)
Global $Btn_ModifPret = GUICtrlCreateButton("VOIR / MODIFIER / SUPPRIMER UN LITIGE", 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 Litige", 531, 438, 192, 123)
GUISetIcon("C:\Users\g056050\Desktop\422.ico", -1)
Global $Lbl_TitreN = GUICtrlCreateLabel("Données du nouveau litige", 64, 20, 450, 41)
GUICtrlSetFont(-1, 24, 800, 0, "MS Sans Serif")
Global $Lbl_NomEmp = GUICtrlCreateLabel("N° De Serie : ", 55, 114, 112, 17)
Global $Inp_NomEmp = GUICtrlCreateInput("", 152, 114, 300, 21)
Global $Lbl_DateDep = GUICtrlCreateLabel("Date du Litige :", 55, 146, 95, 17)
Global $Date_Depart = GUICtrlCreateDate("", 152, 146, 194, 21)
Global $Lbl_Obs = GUICtrlCreateLabel("Observation :", 16, 200, 67, 17)
Global $Edt_Obs = GUICtrlCreateEdit("", 90, 200, 409, 150)
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 $Data2 = @ScriptDir & "\Data2.ini"
Global $F_Tableau = GUICreate("Liste des Empreints", 1074, 645)
Global $Chk_Seltab = GUICtrlCreateCheckbox("Sélectionner tout", 32, 544, 97, 25)
Global $Btn_SupprVisu = GUICtrlCreateButton("SUPPRIMER", 368, 596, 161, 33)
Global $Btn_OK = GUICtrlCreateButton("LITIGE OK", 168, 544, 161, 33)
Global $Btn_RetourVisu = GUICtrlCreateButton("RETOUR", 559, 594, 161, 33)
Global $Btn_Attente = GUICtrlCreateButton("EN ATTENTE", 169, 593, 161, 33)
Global $Btn_Autre = GUICtrlCreateButton("AUTRE", 366, 545, 161, 33)
Global $Inp_Autre = GUICtrlCreateInput("", 560, 544, 161, 31)
$Pic1 = GUICtrlCreatePic("C:\Users\g056050\Desktop\Capture.jpg", 912, 592, 135, 37)
; ############################################## Fin de la création #######################################################################
#endregion
#region Fonction
;##################### Zone des Fonctions nouveau litige#####################
Func _CreationListView()
$Section = IniReadSectionNames($Data) ; Lecture des sections
$hListView = _GUICtrlListView_Create($F_Tableau, "N° De Serie|Date Du Litige|Commentaire|Statut", 10, 6, 1050,520, 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, 150)
_GUICtrlListView_SetColumnWidth($hListView, 2, 625)
_GUICtrlListView_SetColumnWidth($hListView, 3, 84)
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
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 $Btn_Valider ; Si clic sur le bouton Valider
; ######################################## Creation des fichiers .ini si inexistant ##############################################################
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
If Not FileExists($Data2) Then ; Si le fichier Data2.ini n'existe pas alors
FileWrite($Data2,"") ; On le crée
Endif ; Fin SI
$file2 = FileOpen($Data2, 1) ; On ouvre le fichier Data2.ini
If $file2 = -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_Observation = GUICtrlRead ($Edt_Obs)
; #################################################### Fin de la récupération ########################################################
$Statut = "NOK"
$Section = IniReadSectionNames($Data) ; Lecture des sections
$NbSection = UBound($Section)
$Key1 = "Nom="& $val_NomEmp
$Key2 = "DateDep="& $val_DateDep
$Key7 = "Observation="& $val_Observation
$Key8 = "Recupere="& $Statut
Local $sData = $Key1 & @LF & $Key2 & @LF & $Key7 & @LF & $Key8
IniWriteSection($Data, $NbSection, $sData) ;écris le contenu des Key dans le fichier ini Data.ini
FileClose($file)
MsgBox(64, "OK", "Le Litige a bien été prise en compte.")
GUICtrlSetData ($Inp_NomEmp, "") ; On vide la cellule
GUICtrlSetData ($Date_Depart, "") ; On vide la cellule
GUICtrlSetData ($Edt_Obs, "") ; 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 Supprimer
; 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
IniDelete($Data,$Section[$Indice]) ;efface dans $Data ce qui a été selectionné
_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
$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)
Case $Btn_Attente ; 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
IniWrite($Data,$Section[$Indice], "Recupere", "EN ATTENTE" )
_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
$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_OK ; 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
IniWrite($Data,$Section[$Indice], "Recupere", "OK" ) ; change la clef "recupere" dans $Data
$Temp = IniReadSection($Data,$Section[$Indice])
IniWriteSection($Data2,$Section[$Indice] ,$Temp)
IniDelete($Data,$Section[$Indice]) ;efface dans $Data ce qui a été selectionné
_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
$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()
EndSwitch ; Fin du sélecteur de cas
WEnd ; Fin de la boucle infinie
#endregion