je rencontre un point bloquant sur un de mes script
j'ai deux fichier .ini (Data2.ini et DataF)
mon script remplis bien le fichier DataF.ini comme ceci
[1]
Nom=2F
DateDep=mardi 20 novembre 2018
Observation=
Recupere=NOK
mais quand je veux recopier ces infos dans le Fichier Data2.ini il viens écraser une sections déjà existante
je pense qu'il faut que je dise au script de lire le nombre de section du fichier Data2
pour mettre a la suite la section que je veux ajouter dans celle ci
IniWrite($DataF,$Section[$Indice],"Recupere","OK"); change la clef "recupere" dans $DataF $Temp=IniReadSection($DataF,$Section[$Indice]);je lis la section du fichier $DataF IniWriteSection($Data2,$Section[$Indice],$Temp); j'écris la section complete dans $Data2 IniDelete($DataF,$Section[$Indice]);efface dans $DataF ce qui a été selectionné
$contenu=FileRead($DataF) ;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&"\DataF.ini",2) FileWrite($hndout,$contenu) FileClose($hndout) ;### ###
Si vous ne souhaitez pas mettre à jour les sections existantes, vous devez changer le nom de celle-ci.
Pour plus d'aide, donnez un peux plus d'explication sur le fonctionnement désiré.
- Que reçoit DataF.ini comme données (1 ou plusieurs sections) ?
- Comment sont enchainées les sections (si utilisé) ?
- Que doit recevoir/stocker Data2.ini ?
- Est-ce que les sections des deux fichiers doivent correspondre ?
- Etc ...
en fait je pense que mon soucis viens de mes checkbox , j'aurai du ne pas utiliser les checkbox pour chaque action sur les bouton "EN ATTENTE" , "LITIGE OK" etc .
en gros j'aimerai que quand dans le tableau quand on selectionne une checkbox qu'il soit impossible d'en selectionner d'autre
#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#####################
For$i=1ToUBound($Section)-1; Boucle de lecture $Cle=IniReadSection($Data,$Section[$i]); Lecture des clés de la section en cours IfIsArray($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
Func _GUICtrlListView_SetCheckedStates(Const$hListView,Const$iType); Fonction des selections des chekbox (0 = Tout Deselectionner , 1 = Tout Selectionner et 2 = Inversion) Local$fState=False
#region Boucle Principale While1; 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
; ######################################## 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 ############################################################## IfNotFileExists($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=-1Then; 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
$file2=FileOpen($Data2,1); On ouvre le fichier Data2.ini If$file2=-1Then; 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
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
$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) ;### ###
$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) ;### ###
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é
$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) ;### ###
quand on selectionne une checkbox qu'il soit impossible d'en selectionner d'autre
Dans ce cas, vous devez aire une boucle sur la liste des ID des Checkbox de votre liste pour les désactiver et inversement, si vous désactivé la Checkbox précédemment activée, alors vous devez refaire la même boucle pour ré-activer toutes les Chekbox.
Autre solution : A l'action de cocher une checkbox, écrire un flag d'indication et si un autre checkbox est cochée, on décoche et/ou on affiche un message.
la deuxième solution me parait très bien mais n'ayant pas fait ce script seul j'avoue que je fais surement chercher un moment
je vais essayer quand même
un truc de ce genre la ?
par contre dans mon code je suis perdu
Func CheckBox ()
Local $maxCheck = 2
Local $nbCheck = 0
; Si l'on coche une case.
If (GUICtrlRead (@GUI_CtrlId) = $GUI_CHECKED) Then
; On incrémente le nombre de cases cochées.
$nbCheck += 1
EndIf
; Si l'on atteint la limite.
If ($nbCheck = $maxCheck) Then
MsgBox(64, 'Info', "vous ne pouvez qu'une selection à la fois)
EndIf