#NoTrayIcon ;~ #Tidy_Parameters=/sf ; Trier les procédures par ordre alphabétique #include ; Utilisé pour débogguer et autres opérations concernant les matrices #include #include #include #include #include #include #include #include #include #include ; Pour _GUIDisable() ; Fonctions personnalisées #include Opt("GUIOnEventMode", 1) ; L'interface graphique est considérée comme un programme indépendant Opt("MustDeclareVars", 1) ; Toutes les variables doivent être déclarées (une bonne chose!!!) #cs ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ DACODATE - Modificateur de date de fichier Page de base sur les forums AutoIt ... https://www.autoitscript.com/forum/topic/207602-standalone-file-date-changer-with-gui-multilanguage-interface-and-list-management/ Contient du code de "guinness" : _GUIDisable() https://www.autoitscript.com/forum/topic/126319-_guidisable-create-a-dimmed-effect-on-a-gui/ Contient du code de "KaFu" : https://www.autoitscript.com/forum/topic/92616-another-hyperlink-question Liste de procédures via Function Name Lister de "Jaberwacky" : https://www.autoitscript.com/forum/topic/120820-function-name-lister-06272014/ ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦ À FAIRE ============================================================================ - Revoir la séquence et le texte pour importer / exporter la liste des fichiers. Standarsier. Ne pas demander si on veut avant. - Problème d'écriture de rangées au registre? OK --> Oui --> Annuler --> Annuler - Expliquer le système multilingue sur la page du forum - Transformer en "include" pour faciliter son utilisation ailleurs --> Encapsuler la loupe principale ============================================================================ COMPLÉTÉ - Accélérer la copie des éléments dans $aGUI_Lang[][] ==> Section "Mémoire" et "Options" pas besoin de peupler, saut par deux dans _LANG_Charger, $aMaintenant plus requis dans _GUI_Peupler - GUICtrlCreateGroup("", -99, -99, 1, 1) n'est pas nécessaire - Importer des fichiers depuis un fichier .LOG ==> Créé et intégré - Exporter: procède même quand la liste est vide ==> Ubound($aFICHIER_Liste) vide donne 1 puisque la première cellule indique 0 - Annuler pendant l'importation / exportation d'une liste ne devrait pas quitter le programme. ==> Return au lieu de Exit - Recevoir un sous-répertoire comme une invitation à charger son contenu? Sélecteur de fichiers n'accepte QUE des fichiers. ==> Remis à plus tard. Maintenant _CMD_Lire() ignore ausi les répertoires - Vérifier si les entrées sont des répertoires (et les ignorer) dans _CMD_Lire() - Remplacer, lors de la création de l'interface, tous les items par " "; mettre "" donne une ligne horizontale. Texte en français dans les commentaires. - Vérifier si on a encore besoin de bloquer les flèches dans les sous-menus (et / ou peut-ont régler ça?) ==> OUI et franchement je ne sais pas pourquoi. - Registre: transformer les variables numériques $iLangue, $iJournal et $iUNESection en DWord32 - Après OK, menu progression arrive avant demander de sélectionner des fichiers! ==> Déplacer la ligne GUISetState(@SW_SHOW, $aGUI_Progres[0]) - Tester = 0 dans l'expression If GUICtrlRead($aGUI_Main[33]) = "" ==> Au final toute cette section de code n'était jamais utilisée. Il y avait toujours une valeur. - Vérifier si "" est la même chose que Null ==> PAS DU TOUT et cela cause toutes sortes de problèmes - Enlever les GUICtrlSetTip(-1, Null) là où ça ne fait aucun sens ==> Un "résidu" d'une des versions prédécdentes - Question finale: Voulez-vous vraiment quitter? - Décrire toutes les variables LOCAL sur une ligne chaque avec un commentaire ET les paramètres également ==> Ouf c'était long! - Vérifier si le dernier dossier utilisé existe toujours. Sinon mettre le dossier où se trouve le programme / script - Revoir logique _GUI_Main_UpDown(); on devrait passer par $aGUI_Main[] et non pas directement par @GUI_Ctrl ==> Problématique élucidée: voir commentaires - Option: copier dans "mémoire 2" ne marche pas ==> Pas du tout. Fonctionne très bien. - BOGUE - "O" quand même accessible dans "Modifié" et "Accédé" ==> Index commençait à 53 alors qu'il devait commencer à 52 - Me faire une liste des procédures via Function Name Lister (voir entête ci-haut) - Donner un titre à la fenêtre "Mémoire", "Option" et "A Propos". Pour l'instant c'est "" - Concaténer RAZ et RAZ_Urgence ==> Variable globale crée car AutoIt n'aime pas ($iInvite = 1) lorsqu'appelé via GuiCtrlSetOnEvent() - Après l'utilisation de ReDim $aFICHIER_Liste[0] erreur dans _GUI_Main_ListeVoir() ==> $aFICHIER_Liste mal formatté dans _CMD_Lire et $aTempo doit = [0] - _GUI_Main_ListeVider() ne met pas "0000" dans le bouton correspondant ==> Utilisé Redim - Faire une procédure pour afficher le nombre de fichiers; retourne formatté à 4 chiffres - Réduire la taille de l'appel à _GUI_Main_Lang dans la création du menu - Penser à la taille des champs dans d'autres langues ==> Requiert une vérification des traductions - Rajouter crédit pour MutiDrop et lien vers page forum dans "à propos" ==> Pour l'instant inutilisé car plus d'espace pour "dropper" des fichiers - Accepter des fichiers déposés sur l'interface principale? Uniquement à travers un des boutons / items? - Modifier et mettre à jour la page correspondante sur le forum (voir lien ci-haut) - Décaler tous les textes reliés à $aGUI_Lang[][] ==> J'ai rajouté des champs dans l'interface "À Propos" - Rajouter des hyperliens dans la fenêtre "à propos" (veut probablement dire une refonte du fichier DacoDate.res!) ==> EN COURS - Remplacer les couleurs en hexa par des variables texte - Faire texte en anglais aussi si DacoDate.res est manquant OU anglais pour toutes les langues sauf le français - RAZ doit ABSOLUMENT choisir la langue correspondant au système d'opération comme valeur par défaut #ce ; Texte Global Const $sVer = "4.0h" ; Version du logiciel Const Global $sFichier ; Variable qui contient le dossier où on va choisir les fichiers à traiter Global Const $sREG_Base = "HKCU\SOFTWARE\DrLouis\DacoDate" ; Adresse registre pour l'application DacoDate ; Chiffres entiers Global $iQuitter ; Permet de quitter la boucle principale Global $iUNESection = 0 ; Identifie si seul la rangée "Crée" peut être modifiée ou non Global $iJournal = 0 ; Indique si, oui ou non, le programme doit faire un journal de ses opérations Global $iLong ; Détermination du nom de fichier le plus long Global $iLang = _LANG_Definir() ; Contient une valeur numérique correspondant à la langue : 0 = français, 1 = anglais, etc. Global $iEntete ; Variable qui détermine si on met une entête au fichier journal Global $iInvite ; Variable qui permet de contourner l'autorisation de l'utilisateur si on dmande une RAZ d'urgence (Ctrl+Shift+Alt+'r') Global $iMsgBoxAnswer ; Variable contenant la réponse d'une invite. ; Couleurs Global Const $COLOR_RED_PASTEL = 0xFFF0FF Global Const $COLOR_GREEN_PASTEL = 0xF0FFF0 Global Const $COLOR_BLUE_PASTEL = 0xF0FFFF Global Const $COLOR_SILVER = 0xC0C0C0 Global Const $COLOR_BLUE = 0x0000FF ; Variables matricielles Global $aGUI_Lang = _LANG_Charger() ; Grosse matrice contient toutes les traductions Global $aGUI_Main[95] ; Interface principale Global $aGUI_Memoire[6] ; Sous-menu Mémoire Global $aGUI_Option[8] ; Sous-menu Option Global $aGUI_APropos[9] ; Sous-menu À Propos Global $aFICHIER_Liste = _CMD_Lire() ; Matrice contenant tous les noms de fichiers à traiter. CMD = ligne de commande Global $aGUI_Progres[3] ; Barre qui indique le progrès lors de l'étape finale ; Pointeurs Global $hGD ; Contient le pointeur vers le cache créé par _GUIDisable() Global $hFileOpen ; Pointeur vers le fichier journal. Global pour pouvoir écrire / fermer dans d'autres procédures ; Function list created via Function Name Lister : https://www.autoitscript.com/forum/topic/120820-function-name-lister-06272014/ ; Ctrl+'j' while on the name of a function to JUMP to it. ; Ctrl+Shift+Alt+'f' to refresh #Region ; Functions ; _CMD_Lire ; _FICHIER_Ecrire ; _FICHIER_Journal ; _FICHIER_Log_Convert ; _FICHIER_Selection ; _GUI_APropos ; _GUI_Apropos_Lien ; _GUI_Main ; _GUI_Main_CreeEtiquette ; _GUI_Main_CreeRangee ; _GUI_Main_Fichier ; _GUI_Main_Journal ; _GUI_Main_Lang ; _GUI_Main_LireRangee ; _GUI_Main_ListeExporter ; _GUI_Main_ListeImporter ; _GUI_Main_ListeVider ; _GUI_Main_ListeVoir ; _GUI_Main_OK ; _GUI_Main_Quitter ; _GUI_Main_Raz ; _GUI_Main_Section ; _GUI_Main_UpDown ; _GUI_Memoire ; _GUI_Memoire_Copie ; _GUI_Option ; _GUI_Option_EcrireMem ; _GUI_Option_LireMem ; _GUI_Option_Maintenant ; _GUI_Peupler ; _GUI_Section_Activer ; _GUI_Section_Duplicata ; _GUI_Sub_Quitter ; _LANG_Charger ; _LANG_Definir ; _PROG_Verif ; _PROGRESSION_Quitter ; _RAZ_Urgence ; _REG_Ecrire ; _REG_Lire ; _VAR_Convertir ; _VAR_Maintenant #EndRegion ; Functions ; ============================================================================ ; LOUPE PRINCIPALE _PROG_Verif() ; First of all make sure this is the only instance running _GUI_Main() ; Créer puis afficher l'interface principale _REG_Lire() ; Lire des valeurs fixées dans le registre (et les créer si elles n'y sont pas) _GUI_Peupler() ; Remplit l'interface principale avec des valeurs HotKeySet("!+^r", "_RAZ_Urgence") ; Control-Shift-Alt + R pour réinitialiser toutes les variables sans demander la permission While 1 ; Boucle principale. L'utilisateur doit appuyer sur des boutons! Sleep(100) ; Il faut une petite pause sinon on "étouffe" le système. Un chiffre plus gros peut rendre l'interface moins réactive. If $iQuitter = 1 Then ExitLoop ; Quelqu'un a cliqué sur "OK" If $iQuitter = 2 Then ; Quelqu'un tente de quitter $iMsgBoxAnswer = MsgBox(36, $aGUI_Lang[267][$iLang], $aGUI_Lang[268][$iLang]) ; "Voulez-vous vraiment quitter?", "Voulez-vous vraiment quitter ce logiciel?" Select Case $iMsgBoxAnswer = 6 ;Yes Exit ; Oui. Quitter EndSelect $iQuitter = 0 ; Sinon, remettre cette variable à zéro EndIf WEnd _FICHIER_Ecrire() ; Procéder avec la liste des fichiers avec la / les dates choisies. On écrit les fichiers ou encore on renvoie les valeurs Exit ; Programme doit finir ICI. Func _CMD_Lire() ; Lire la ligne de commande, pour l'instant n'accepte QUE des noms de fichier Local $i ; Variable générique Local $aTempo[UBound($CmdLine)] ; Matrice temporaire, exactement la même taille que la ligne de commande Local $sAtt ; Contient l'attribut de chaque fichier pointé par les paramètres de la ligne de commande Local $iCompteur = 1 ; Compteur qui indique le nombre d'entrées validées If $CmdLine[0] = 0 Then ; La matrice est vide. Return $CmdLine ; Simplement retourner cette matrice Else ; Et donc si on se rend ici, il y a quelque chose sur la ligne de commande For $i = 1 To $CmdLine[0] ; Vérifier toutes les entrées dans la ligne de commande sont valides If FileExists($CmdLine[$i]) Then ; Le fichier / dossier existe $sAtt = FileGetAttrib($CmdLine[$i]) ; Trouver les attributs de ce fichier / dossier If StringInStr($sAtt, "D") Then ContinueLoop ; C'est un dossier, ignorer cette entrée If StringLen($CmdLine[$i]) > $iLong Then $iLong = StringLen($CmdLine[$i]) ; Trouver le numéro de ligne le plus long $aTempo[$iCompteur] = $CmdLine[$i] ; Copier le contenu de la cellule $i de la ligne de commande dans la variable temporaire à l'index $iCompteur $iCompteur += 1 ; Augmenter le compteur EndIf Next EndIf $aTempo[0] = $iCompteur - 1 ; Mettre le compteur dans la cellule "0" : -1 car à la fin on rajoute 1 pour la prochaine itération ReDim $aTempo[$iCompteur] ; Ajuster la taille de la variable en conséquence Return $aTempo ; Retourner une variable vide EndFunc ;==>_CMD_Lire Func _FICHIER_Ecrire() ; C'est ici que les dates sont écrites au disque Local $i ; Variable générique Local $j ; Compteur d'erreurs Local $sStatut ; Variable qui contient le statut d'un fichier: Barré, Succès ou Échec lors de l'écriture de la date. On ne peut pas modifier la date sur un fichier barré. Local $sMaintenant = _VAR_Maintenant(1) ; Contient la date et l'heure actuelle en format "YYYYMMDDHHMMSS" Local $iMsgBoxAnswer ; Variable générique, réponse à une invite Local $iPct ; Variable qui contient le pourcentage de la complétion du travail, sans décimales Local $sAtt ; Variable qui contient les attributs du fichier en train d'être traité en format "RASHNDOCTX". If Not IsPtr($hGD) Then $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale If UBound($aFICHIER_Liste) = 0 Then ; Aviser qu'il n'y a pas de fichiers et proposer d'ouvrir le sélecteur de fichiers $iMsgBoxAnswer = MsgBox(308, $aGUI_Lang[252][$iLang], $aGUI_Lang[253][$iLang]) ; "Aucun fichier dans la liste", "Aimeriez-vous sélectionner des fichiers maintenant?" If $iMsgBoxAnswer = 6 Then $aFICHIER_Liste = _FICHIER_Selection() ; Procéder avec la sélection de fichiers EndIf GUISetState(@SW_SHOW, $aGUI_Progres[0]) ; Afficher la barre de progression For $i = 1 To $aFICHIER_Liste[0] ; Passer la liste de tous les fichiers ... $iPct = Int(($i / $aFICHIER_Liste[0]) * 100) ; Déterminer quel est le pourcentage avec zéro décimales ; Afficher les informations fichier dans l'interface (et dans le titre de la fenêtre) WinSetTitle($aGUI_Progres[0], "", "Progression " & StringFormat("%02d" & $iPct) & "% [" & $i & "/" & $aFICHIER_Liste[0] & "] (" & $aFICHIER_Liste[$i] & ")") GUICtrlSetData($aGUI_Progres[2], $iPct) ; Faire la besogne $j += FileSetTime($aFICHIER_Liste[$i], _GUI_Main_LireRangee(1, 0), 0) ; Écrire la date de modification $j += FileSetTime($aFICHIER_Liste[$i], _GUI_Main_LireRangee(0, 0), 1) ; Écrire la date de création $j += FileSetTime($aFICHIER_Liste[$i], _GUI_Main_LireRangee(2, 0), 2) ; Écrire la date du dernier accès If $j < 3 Then ; Si $j est plus petit que 3 ça veut dire qu'une ou plus des opérations ne s'est pas complétée correctement. $sAtt = FileGetAttrib($aFICHIER_Liste[$i]) ; Aller chercher les attributs If StringInStr($sAtt, "R") > 0 Then ; Le fichier est en lecture seule "R" $sStatut = $aGUI_Lang[266][$iLang] Else $sStatut = $aGUI_Lang[264][$iLang] ; Une autre erreur EndIf Else ; $j est = 3 $sStatut = $aGUI_Lang[265][$iLang] ; "Succès" EndIf If $iJournal = 1 Then ; Il faut faire le journal _FICHIER_Journal($sMaintenant, $aFICHIER_Liste[$i], _GUI_Main_LireRangee(0, 0), _GUI_Main_LireRangee(1, 0), _GUI_Main_LireRangee(2, 0), $sStatut) EndIf $sStatut = "" ; Vider le statut $j = 0 ; Remettre le compteur d'erreur à zero Next EndFunc ;==>_FICHIER_Ecrire Func _FICHIER_Journal($sMaintenant, $sFichier, $sDateCree, $sDateModif, $sDateAccede, $sStatut) ; Écrire une ligne au fichier journal ; $sMaintenant = Date et heure actuelle ; $sFichier = Nom du fichier traité ; $sDateCree = Date de création écrite sur le fichier ; $sDateModif = Date de modification écrite sur le fichier ; $sDateAccede = Date d'accès écrite sur le fichier ; $sStatut = Statut de l'écriture ; Le fichier s'appelle "DacoDate.log" et se trouve dans le même répertoire que les fichiers traités If Not $hFileOpen Then ; Le fichier journal est-il ouvert? $hFileOpen = FileOpen(@WorkingDir & "\DacoDate.log", $FO_OVERWRITE) ; Ouvrir le fichier et réécrire par-dessus EndIf If $iEntete = 0 Then ; Première fois! On ouvre le fichier et on met une entête FileWriteLine($hFileOpen, $aGUI_Lang[262][$iLang] & _StringRepeat(" ", $iLong - 16) & $aGUI_Lang[263][$iLang]) ; Écrore la ligne d'entête $iEntete += 1 EndIf ; Logique colonne $sfichier: Nombre d'espace = ($iLong + 5) - StringLen($sFichier) (la longueur du fichier le plus long + 5 (5 = marge) moins la longueur du nom de fichier actuel) FileWriteLine($hFileOpen, $sMaintenant & " " & $sFichier & _StringRepeat(" ", ($iLong + 5) - StringLen($sFichier)) & _VAR_Convertir($sDateCree, 1) & " " & _VAR_Convertir($sDateModif, 1) & " " & _VAR_Convertir($sDateAccede, 1) & " " & $sStatut) EndFunc ;==>_FICHIER_Journal Func _FICHIER_Log_Convert(ByRef $aTempo) ; Convertit le contenu d'un fichier .LOG (créé par DacoDate) en matrice utilisable par ce logiciel Local $sTempo2 ; Variable contenant le résultat de l'opération StringSplit() Local $aTempo3[UBound($aTempo)] ; Variable matricielle qui contient la liste à retourner Local $iCompteur = 1 ; Compteur utilisé lors du transvidage Local $iAvant = 27 ; Nombre de cactères à éviter pour récupérer le nom de fichier (date + 6 espaces) Local $iApres = 0 ; Nombre de caractères à élaguer à droite (4 colonnes et des poussières) Local $sAtt ; Contient l'attribut de chaque fichier If StringLeft($aTempo[0], 1) <> "|" Then Return $aTempo ; N'est pas un fichier .LOG compatible. Retourner la variable For $i = 1 To UBound($aTempo) - 1 ; passer toutes les cellules. La rangée 0 est une entête. On la saute $sTempo2 = StringMid($aTempo[$i], $iAvant) ; Enlever tout sur cette ligne jusqu'au début du nom de fichier $iApres = StringInStr($sTempo2, " ", 0, -4) ; Chercher la 4eme colonne (cinq espaces) depuis la droite $sTempo2 = StringLeft($sTempo2, $iApres) ; Ne garder que le début, pas ce qu'il y a "après" $sTempo2 = StringStripWS($sTempo2, $STR_STRIPTRAILING) ; Il reste des espaces à la fin de chaque fichier. Les effacer. ; Déterminer si le fichier existe et si c'est un répertoire If FileExists($sTempo2) Then ; Le fichier / dossier existe $sAtt = FileGetAttrib($sTempo2) ; Trouver les attributs de ce fichier / dossier If StringInStr($sAtt, "D") Then ContinueLoop ; C'est un dossier, ignorer cette entrée If StringLen($sTempo2) > $iLong Then $iLong = StringLen($sTempo2) ; Trouver le numéro de ligne le plus long $aTempo3[$iCompteur] = $sTempo2 $iCompteur += 1 ; Augmenter le compteur EndIf Next $aTempo3[0] = $iCompteur - 1 ; Mettre le compteur dans la cellule "0" : -1 car à la fin on rajoute 1 pour la prochaine itération ReDim $aTempo3[$iCompteur] ; Ajuster la taille de la variable en conséquence Return $aTempo3 EndFunc ;==>_FICHIER_Log_Convert Func _FICHIER_Selection() ; Selection de fichier avec chemin sur chaque fichier. Retourne une variable matricielle Local $sSelection ; Contient le résultat d'un dialogue de séleciton de fichiers Local $aListe[99999] ; Variable matricielle qui retourne la liste des fichies en bonne et due forme Local $aTempo ; Variable matricielle qui contient la sélection de fichiers si > 1 fichiers Local $ierr ; Copie de la variable @error (doit être copié immédiatement après l'opération) Local $iMsgBoxAnswer ; Variable de réponse d'invite Local $i ; Variable générique If Not IsPtr($hGD) Then $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale While 1 $sSelection = FileOpenDialog($aGUI_Lang[238][$iLang], $sFichier, $aGUI_Lang[239][$iLang], BitOR($FD_FILEMUSTEXIST, $FD_PATHMUSTEXIST, $FD_MULTISELECT)) ; "Veuiller sélectionner des fichiers à traiter", "Tout (*.*)" $ierr = @error ; Noter s'il y a erreur If $ierr > 0 Then ; il y a erreur $iMsgBoxAnswer = MsgBox(309, $aGUI_Lang[240][$iLang], $aGUI_Lang[241][$iLang]) ; "Erreur sélection de fichier", "Il y a eu erreur lors de la sélection de fichier." Select Case $iMsgBoxAnswer = 4 ;Retry ContinueLoop ; Retourner au début de la loupe While Case $iMsgBoxAnswer = 2 ;Cancel Exit ; Quitter le programme ; On pourrait retourner aussi avec un code d'erreur EndSelect EndIf If $sSelection Then ExitLoop ; Sélection avec succès. Quitter cette loupe et continuer. WEnd If Not StringInStr($sSelection, "|") Then ; Il n'y a pas de "|" et donc un seul fichier sélectionné $aListe[0] = 1 ; Il y a une entrée $aListe[1] = $sSelection ; Et la voici ReDim $aListe[2] ; Ajuster la taille en conséquence $sFichier = StringLeft($sSelection, StringInStr($sSelection, "\", 0, -1)) ; Extraire le chemin où se trouve le fichier sélectionné Else ; Conséquemment, il y plusieurs fichiers $aTempo = StringSplit($sSelection, "|") ; Transformer cette liste en variable matricielle MAIS il faut rajouter le chemin sur tous les fichiers $aListe[0] = $aTempo[0] - 1 ; Ajuster la taille de la matrice -1 car la première variable est le chemin For $i = 2 To $aTempo[0] ; Passer à travers toutes les valeurs de $aTempo en sautant 1 car c'est le chemin $aListe[$i - 1] = $aTempo[1] & "\" & $aTempo[$i] ; Transvider $aTempo dans $aListe en s'assurant que le chemin est mentionné sur chaque fichier If StringLen($aListe[$i - 1]) > $iLong Then $iLong = StringLen($aListe[$i - 1]) ; Trouver le numéro de ligne le plus long Next ReDim $aListe[$aTempo[0]] ; Ajuster la taille $sFichier = $aTempo[1] ; Utiliser le chemin tel que renvoyé par FileOpenDialog EndIf _REG_Ecrire() ; Si le répertoire est choisi, écrire les valeurs au registre $hGD = _GUIDisable($hGD, 1) ; Désactiver l'interface "grisée" Return $aListe ; Retourner le résultat de l'opération EndFunc ;==>_FICHIER_Selection Func _GUI_APropos() ; Ouvre interface "À propos" If Not IsPtr($hGD) Then $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale GUISetState(@SW_SHOW, $aGUI_APropos[0]) ; Afficher le sous-menu EndFunc ;==>_GUI_APropos Func _GUI_Apropos_Lien($hWnd, $Msg, $wParam, $lParam) ; Agit en fonction d'un bouton cliqué sur l'interface "À Propos" ; Les paramètres viennent du sous-système appelé par la fonction GUIRegisterMsg() ; $hWnd = Le pointeur vers l'interface où un bouton a été cliqué ; $Msg = Le "message" renvoyé par Windows ; $wParam = C'est ce qui nous intéresse: ça donne une valeur qu'on peut masquer pour nous dire quel bouton / étiquette a été cliqué ; $lParam = Deuxième paramètre renvoyé par Windows, inutilisé Local $iIDFrom = BitAND($wParam, 0xFFFF) ; Masque $wParam pour avoir un équivalent à l'adresse de l'étiquette Local $sHTTP_Base = "https://www.autoitscript.com/forum/topic/" ; adresse de base pour tous les hyperliens Switch $iIDFrom ; Comparer cette valeur ... Case $aGUI_APropos[5] ; ... à l'étiquette qui envoie à l'article sur DacoDate dans le forum ShellExecute($sHTTP_Base & "207602-standalone-file-date-changer-with-gui-multilanguage-interface-and-list-management/") Case $aGUI_APropos[6] ; ... à l'étiquette qui envoie à l'article _GUIDisable ShellExecute($sHTTP_Base & "126319-_guidisable-create-a-dimmed-effect-on-a-gui/") ; Exemple donné par guiness Case $aGUI_APropos[7] ; ... à l'étiquette qui envoie à l'exemple donné par KaFu ShellExecute($sHTTP_Base & "92616-another-hyperlink-question/") ; Exemple donné par KaFu EndSwitch EndFunc ;==>_GUI_Apropos_Lien Func _GUI_Main() ; Créer puis afficher l'interface principale Local $i ; Variable générique Local $aEtiqH[6] = [72, 128, 176, 240, 288, 336] ; Matrice indiquant le positionnement horizontal des étiquettes (année, mois, etc) ; Menu $aGUI_Main[0] = GUICreate("DacoDate " & $sVer, 408, 334, 192, 124, $WS_SYSMENU, $WS_EX_ACCEPTFILES) ; Fenêtre principale GUISetOnEvent($GUI_EVENT_CLOSE, "_GUI_Main_Quitter") ; Où aller si l'utilisateur veut quitter $aGUI_Main[1] = GUICtrlCreateMenu(" ") ; Menu: Fichier $aGUI_Main[2] = GUICtrlCreateMenuItem(" ", $aGUI_Main[1]) ; Voir liste des fichiers GUICtrlSetOnEvent(-1, "_GUI_Main_ListeVoir") $aGUI_Main[3] = GUICtrlCreateMenuItem(" ", $aGUI_Main[1]) ; Importer liste des fichiers GUICtrlSetOnEvent(-1, "_GUI_Main_ListeImporter") $aGUI_Main[4] = GUICtrlCreateMenuItem(" ", $aGUI_Main[1]) ; Exporter liste des fichiers GUICtrlSetOnEvent(-1, "_GUI_Main_ListeExporter") $aGUI_Main[5] = GUICtrlCreateMenuItem(" ", $aGUI_Main[1]) ; Vider liste des fichiers GUICtrlSetOnEvent(-1, "_GUI_Main_ListeVider") $aGUI_Main[6] = GUICtrlCreateMenuItem(" ", $aGUI_Main[1]) ; &Quitter GUICtrlSetOnEvent(-1, "_GUI_Main_Quitter") $aGUI_Main[7] = GUICtrlCreateMenu(" ") ; Options $aGUI_Main[8] = GUICtrlCreateMenuItem(" ", $aGUI_Main[7]) ; &Journal GUICtrlSetOnEvent(-1, "_GUI_Main_Journal") $aGUI_Main[9] = GUICtrlCreateMenuItem(" ", $aGUI_Main[7]) ; Une &Section GUICtrlSetOnEvent(-1, "_GUI_Main_Section") $aGUI_Main[10] = GUICtrlCreateMenuItem(" ", $aGUI_Main[7]) ; &Remise à zero GUICtrlSetOnEvent(-1, "_GUI_Main_Raz") $aGUI_Main[11] = GUICtrlCreateMenu(" ", $aGUI_Main[7]) ; Langue $aGUI_Main[12] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Français $aGUI_Main[13] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; English $aGUI_Main[14] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Deutsch $aGUI_Main[15] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Spanisch $aGUI_Main[16] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Suomalainen $aGUI_Main[17] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Italiano $aGUI_Main[18] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Hollandsk $aGUI_Main[19] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Norsk $aGUI_Main[20] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Polskie $aGUI_Main[21] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Português $aGUI_Main[22] = GUICtrlCreateMenuItem(" ", $aGUI_Main[11]) ; Svenska For $i = 12 To 22 ; Passer toutes les langues GUICtrlSetOnEvent($aGUI_Main[$i], "_GUI_Main_Lang") ; Change la langue Next $aGUI_Main[23] = GUICtrlCreateMenu("?") ; ? $aGUI_Main[24] = GUICtrlCreateMenuItem(" ", $aGUI_Main[23]) ; &A propos GUICtrlSetOnEvent(-1, "_GUI_APropos") ; Interface graphique $aGUI_Main[25] = GUICtrlCreateCheckbox("Journal", 8, 12, 128, 17) ; Journal GUICtrlSetOnEvent(-1, "_GUI_Main_Journal") $aGUI_Main[26] = GUICtrlCreateCheckbox("Une section", 8, 32, 128, 17) ; Une seule section GUICtrlSetOnEvent(-1, "_GUI_Main_Section") $aGUI_Main[27] = GUICtrlCreateLabel("Memoire 1", 208, 11, 59, 17) ; Mémoire 1: $aGUI_Main[28] = GUICtrlCreateButton("Bouton 1", 272, 8, 121, 21) GUICtrlSetOnEvent(-1, "_GUI_Memoire") $aGUI_Main[29] = GUICtrlCreateLabel("Memoire 2", 208, 35, 59, 17) ; Mémoire 2: $aGUI_Main[30] = GUICtrlCreateButton("Bouton 2", 272, 32, 121, 21) GUICtrlSetOnEvent(-1, "_GUI_Memoire") $aGUI_Main[31] = GUICtrlCreateGroup("Créé", 8, 56, 385, 57) ; CRÉÉ $aGUI_Main[32] = GUICtrlCreateButton("O", 23, 82, 27, 21) ; O pour Options GUICtrlSetFont(-1, 7, 400, 0, "MS Sans Serif") GUICtrlSetOnEvent(-1, "_GUI_Option") _GUI_Main_CreeRangee(33, "1980", 72, 82, 2100, 1980, $COLOR_RED_PASTEL) ; Année _GUI_Main_CreeRangee(35, "01", 128, 82, 12, 1, $COLOR_RED_PASTEL) ; Mois _GUI_Main_CreeRangee(37, "01", 176, 82, 31, 1, $COLOR_RED_PASTEL) ; Jour _GUI_Main_CreeRangee(39, "00", 240, 82, 23, 0, $COLOR_RED_PASTEL) ; Heure _GUI_Main_CreeRangee(41, "00", 288, 82, 59, 0, $COLOR_RED_PASTEL) ; Minute _GUI_Main_CreeRangee(43, "00", 336, 82, 59, 0, $COLOR_RED_PASTEL) ; Seconde $aGUI_Main[51] = GUICtrlCreateGroup("Modifié", 8, 120, 385, 57) ; MODIFIÉ $aGUI_Main[52] = GUICtrlCreateButton("O", 23, 146, 27, 21) ; O pour Options GUICtrlSetFont(-1, 7, 400, 0, "MS Sans Serif") GUICtrlSetOnEvent(-1, "_GUI_Option") _GUI_Main_CreeRangee(53, "1980", 72, 146, 2100, 1980, $COLOR_GREEN_PASTEL) ; Année _GUI_Main_CreeRangee(55, "01", 128, 146, 12, 1, $COLOR_GREEN_PASTEL) ; Mois _GUI_Main_CreeRangee(57, "01", 176, 146, 31, 1, $COLOR_GREEN_PASTEL) ; Jour _GUI_Main_CreeRangee(59, "00", 240, 146, 23, 0, $COLOR_GREEN_PASTEL) ; Heure _GUI_Main_CreeRangee(61, "00", 288, 146, 59, 0, $COLOR_GREEN_PASTEL) ; Minute _GUI_Main_CreeRangee(63, "00", 336, 146, 59, 0, $COLOR_GREEN_PASTEL) ; Seconde $aGUI_Main[71] = GUICtrlCreateGroup("Accédé", 8, 184, 385, 57) ; ACCÉDÉ $aGUI_Main[72] = GUICtrlCreateButton("O", 23, 210, 27, 21) ; ; O pour Options GUICtrlSetFont(-1, 7, 400, 0, "MS Sans Serif") GUICtrlSetOnEvent(-1, "_GUI_Option") _GUI_Main_CreeRangee(73, "1980", 72, 210, 2100, 1980, $COLOR_BLUE_PASTEL) ; Année _GUI_Main_CreeRangee(75, "01", 128, 210, 12, 1, $COLOR_BLUE_PASTEL) ; Mois _GUI_Main_CreeRangee(77, "01", 176, 210, 31, 1, $COLOR_BLUE_PASTEL) ; Jour _GUI_Main_CreeRangee(79, "00", 240, 210, 23, 0, $COLOR_BLUE_PASTEL) ; Heure _GUI_Main_CreeRangee(81, "00", 288, 210, 59, 0, $COLOR_BLUE_PASTEL) ; Minute _GUI_Main_CreeRangee(83, "00", 336, 210, 59, 0, $COLOR_BLUE_PASTEL) ; Seconde For $i = 0 To 5 ; S'occuper des étiquettes qui décrivent les champs de date et d'heure _GUI_Main_CreeEtiquette(45 + $i, $aGUI_Lang[90 + ($i * 2)][$iLang], $aEtiqH[$i], 66) ; Rangée Créé _GUI_Dec(21 + $i) _GUI_Main_CreeEtiquette(65 + $i, $aGUI_Lang[90 + ($i * 2)][$iLang], $aEtiqH[$i], 130) ; Rangée Modifié _GUI_Dec(41 + $i) _GUI_Main_CreeEtiquette(85 + $i, $aGUI_Lang[90 + ($i * 2)][$iLang], $aEtiqH[$i], 194) ; Rangée Accédé _GUI_Dec(61 + $i) Next $aGUI_Main[91] = GUICtrlCreateIcon("shell32.dll", 1001, 8, 244) ; Utiliser icône windows pour le menu "À propos de". GUICtrlSetOnEvent(-1, "_GUI_APropos") $aGUI_Main[92] = GUICtrlCreateButton("", 79, 248, 116, 25, $BS_FLAT) ; Bouton indiquant le nombre de fichiers en banque GUICtrlSetOnEvent(-1, "_GUI_Main_ListeVoir") $aGUI_Main[93] = GUICtrlCreateButton("OK", 232, 248, 75, 25) ; OK GUICtrlSetOnEvent(-1, "_GUI_Main_OK") $aGUI_Main[94] = GUICtrlCreateButton("Annuler", 320, 248, 75, 25, $BS_DEFPUSHBUTTON) ; Annuler GUICtrlSetOnEvent(-1, "_GUI_Main_Quitter") ; Sous-menu Mémoire $aGUI_Memoire[0] = GUICreate(0, 320, 145, 302, 218, BitOR($WS_SYSMENU, $WS_POPUP)) ; Fenêtre pas de "tête" GUISetBkColor($COLOR_SILVER) ; Gris pour faire contraste! GUISetOnEvent($GUI_EVENT_CLOSE, "_GUI_Sub_Quitter") $aGUI_Memoire[1] = GUICtrlCreateGroup("", 8, 8, 305, 97) $aGUI_Memoire[2] = GUICtrlCreateRadio("", 16, 32, 289, 17) ; Memoire 1 $aGUI_Memoire[3] = GUICtrlCreateRadio("", 16, 56, 289, 17) ; Memoire 2 $aGUI_Memoire[4] = GUICtrlCreateRadio("", 16, 80, 289, 17) ; Memoire 3 $aGUI_Memoire[5] = GUICtrlCreateButton("Annuler", 236, 112, 75, 25, $BS_DEFPUSHBUTTON) GUICtrlSetOnEvent(-1, "_GUI_Sub_Quitter") ; Sous-menu Options $aGUI_Option[0] = GUICreate("", 257, 194, 302, 218, BitOR($WS_SYSMENU, $WS_POPUP)) ; Fenêtre pas de "tête" GUISetBkColor($COLOR_SILVER) ; Gris pour faire contraste! GUISetOnEvent($GUI_EVENT_CLOSE, "_GUI_Sub_Quitter") $aGUI_Option[1] = GUICtrlCreateGroup("", 8, 8, 241, 145) ; Groupe pour forcer la sélection d'un seul bouton radio "Mémoire" _GUI_Dec(1 + $iOffset) $aGUI_Option[2] = GUICtrlCreateRadio("", 16, 32, 230, 17) ; LIRE la date et l'heure depuis MÉMOIRE1_GUI_Dec(2 + $iOffset) $aGUI_Option[3] = GUICtrlCreateRadio("", 16, 56, 225, 17) ; LIRE la date et l'heure depuis MÉMOIRE2 _GUI_Dec(3 + $iOffset) $aGUI_Option[4] = GUICtrlCreateRadio("", 16, 80, 225, 17) ; ÉCRIRE la date et l'heure à MÉMOIRE1 _GUI_Dec(4 + $iOffset) $aGUI_Option[5] = GUICtrlCreateRadio("", 16, 104, 225, 17) ; ÉCRIRE la date et l'heure à MÉMOIRE2 _GUI_Dec(5 + $iOffset) $aGUI_Option[6] = GUICtrlCreateRadio("", 16, 128, 225, 17) ; ÉCRIRE la date et l'heure ACTUELLE _GUI_Dec(6 + $iOffset) $aGUI_Option[7] = GUICtrlCreateButton("Annuler", 176, 161, 75, 25, $BS_DEFPUSHBUTTON) ; Annuler _GUI_Dec(7 + $iOffset) GUICtrlSetOnEvent(-1, "_GUI_Sub_Quitter") ; Sous-menu À Propos $aGUI_APropos[0] = GUICreate("", 320, 228, 302, 218, BitOR($WS_SYSMENU, $WS_POPUP)) ; Fenêtre pas de "tête" GUISetBkColor($COLOR_SILVER) ; Fond gris pour faire contraste! GUISetOnEvent($GUI_EVENT_CLOSE, "_GUI_Sub_Quitter") ; Que faire si on ferme la fenêtre? GUIRegisterMsg($WM_COMMAND, "_GUI_Apropos_Lien") ; Envoie vers cette procédure quand quelqu'un clique sur cette interface $aGUI_APropos[1] = GUICtrlCreateGroup("À propos de ...", 8, 8, 304, 212) ; Facultatif et pour le style: un groupe qui crée un cadre tout le tour de cette interface. $aGUI_APropos[2] = GUICtrlCreateLabel("", 16, 32, 288, 16) ; Afficher la version "DacoDac! Version ~" $aGUI_APropos[3] = GUICtrlCreateLabel("", 16, 56, 288, 32) ; Affiche la description "Un petit logiciel pour gérer les dates des fichiers" $aGUI_APropos[4] = GUICtrlCreateLabel("", 16, 96, 288, 16) ; Affiche le copyright LOL "(C) 2022 Louis Horvath / DrLouis" $aGUI_APropos[5] = GUICtrlCreateLabel("", 16, 120, 288, 16) ; Lien vers la page dans les forums "DacoDate sur le forum https://www.autoitscript.com/" $aGUI_APropos[6] = GUICtrlCreateLabel("", 16, 144, 288, 16) ; Lien vers l'exemple de _GUIDisable "Merci à guiness pour _GUIDisable" $aGUI_APropos[7] = GUICtrlCreateLabel("", 16, 168, 288, 16) ; Lien vers l'exemple KaFu "Merci à KaFu pour le truc à hyperliens" $aGUI_APropos[8] = GUICtrlCreateButton("", 247, 187, 57, 25, $BS_DEFPUSHBUTTON) ; Bouton OK, mis en évidence GUICtrlSetOnEvent(-1, "_GUI_Sub_Quitter") ; Si quelqu'un appuie sur enter ou sur le bouton OK For $i = 5 To 7 ; Peinture les dernières étiquettes GUICtrlSetColor($aGUI_APropos[$i], $COLOR_BLUE) ; Couleur bleue d'un hyper lien GUICtrlSetCursor($aGUI_APropos[$i], 0) ; Curseur devient une main quand on passe dessus Next ; Barre de progression $aGUI_Progres[0] = GUICreate("", 600, 57, 195, 282, $WS_SYSMENU) ; Créer la barre de progression avec le moins de boutons possible GUISetOnEvent($GUI_EVENT_CLOSE, "_PROGRESSION_Quitter") ; Où aller si l'utilisateur veut quitter $aGUI_Progres[1] = GUICtrlCreateButton($aGUI_Lang[188][$iLang], 512, 2, 83, 25) ; Un bouton "Annuler" GUICtrlSetOnEvent(-1, "_PROGRESSION_Quitter") ; Il demande si on veut quitter à la personne qui clique dessus $aGUI_Progres[2] = GUICtrlCreateProgress(0, 0, 505, 28) ; Et finalement la barre de progression elle-même EndFunc ;==>_GUI_Main Func _GUI_Peupler() ; Remplit l'interface principale avec des valeurs Local $aAccel = [["j", $aGUI_Main[25]], ["l", $aGUI_Main[25]], ["p", $aGUI_Main[25]], ["u", $aGUI_Main[26]], ["{F1}", $aGUI_Main[28]], ["{F2}", $aGUI_Main[30]], _ ["{F3}", $aGUI_Main[32]], ["{F4}", $aGUI_Main[52]], ["{F5}", $aGUI_Main[72]], ["i", $aGUI_Main[91]]] ; Crée une matrice qui contient les raccourcis clavier. Local $i ; Variable générique Local $iOffset ; Variable qui indique à quelle ligne doit commencer les valeurs dans la variable $aGUI_Lang. La colonne indique toujours la langue. GUISetAccelerators($aAccel, $aGUI_Main[0]) ; Le menu principal a maintenant des raccourcis. GUICtrlSetState($aGUI_Main[12 + $iLang], $GUI_CHECKED) ; Cocher à la bonne place pour indiquer la langue d'affichage ; Peupler l'interface principale avec les valeurs dans $aGUI_Lang For $i = 0 To UBound($aGUI_Main) - 1 ; Toutes les cellules de l'interface $aGUI_Main If $aGUI_Lang[$i * 2][$iLang] <> "" Then GUICtrlSetData($aGUI_Main[$i], $aGUI_Lang[$i * 2][$iLang]) ; Généralement devrait être une étiquette texte If $aGUI_Lang[($i * 2) + 1][$iLang] <> "" Then GUICtrlSetTip($aGUI_Main[$i], $aGUI_Lang[($i * 2) + 1][$iLang]) ; Généralement un indice Next WinSetTitle($aGUI_Memoire[0], "", $aGUI_Lang[$iOffset][$iLang]) ; Donner un titre à la fenêtre "Mémoire" ou le mot dans la langue sélectionnée WinSetTitle($aGUI_Option[0], "", $aGUI_Lang[$iOffset][$iLang]) ; Donner un titre à la fenêtre "Option" ou le mot dans la langue sélectionnée ; Peupler le sous-menu ÀPropos avec les valeurs dans $aGUI_Lang $iOffset = 218 For $i = 0 To UBound($aGUI_APropos) - 1 ; Toutes les cellules de l'interface $aGUI_Main If $aGUI_Lang[($i * 2) + $iOffset][$iLang] <> "" Then GUICtrlSetData($aGUI_APropos[$i], $aGUI_Lang[($i * 2) + $iOffset][$iLang]) ; Généralement devrait être une étiquette texte If $aGUI_Lang[($i * 2) + 1 + $iOffset][$iLang] <> "" Then GUICtrlSetTip($aGUI_APropos[$i], $aGUI_Lang[($i * 2) + $iOffset + 1][$iLang]) ; Généralement un indice Next WinSetTitle($aGUI_APropos[0], "", $aGUI_Lang[$iOffset][$iLang]) ; Donner un titre à la fenêtre "À Propos" ou le mot dans la langue sélectionnée If StringLen(GUICtrlRead($aGUI_Main[28])) < 12 Then ; Mémoire1 est vide GUICtrlSetData($aGUI_Main[28], _VAR_Maintenant(1)) ; Mettre la date actuelle en mode "fancy" EndIf If StringLen(GUICtrlRead($aGUI_Main[30])) < 12 Then ; Mémoire2 est vide GUICtrlSetData($aGUI_Main[30], _VAR_Maintenant(1)) ; Mettre la date actuelle en mode "fancy" EndIf If $iUNESection = 1 Then ; $iUNESection active GUICtrlSetState($aGUI_Main[26], $GUI_CHECKED) GUICtrlSetState($aGUI_Main[9], $GUI_CHECKED) ; Dans le menu Else GUICtrlSetState($aGUI_Main[26], $GUI_UNCHECKED) GUICtrlSetState($aGUI_Main[9], $GUI_UNCHECKED) ; Dans le menu EndIf _GUI_Section_Activer($iUNESection) ; Activer / désactiver les rangées If $iJournal = 1 Then ; Journal activé GUICtrlSetState($aGUI_Main[25], $GUI_CHECKED) GUICtrlSetState($aGUI_Main[8], $GUI_CHECKED) ; Dans le menu Else GUICtrlSetState($aGUI_Main[25], $GUI_UNCHECKED) GUICtrlSetState($aGUI_Main[8], $GUI_UNCHECKED) ; Dans le menu EndIf GUICtrlSetData($aGUI_Main[27], $aGUI_Lang[54][$iLang]) ; "Mémoire 1", dans la langue donnée GUICtrlSetData($aGUI_Main[29], $aGUI_Lang[58][$iLang]) ; "Mémoire 2", dans la langue donnée GUICtrlSetData($aGUI_Main[92], _GUI_Main_Fichier()) ; Indiquer le nombre de fichiers dans la liste GUISetState(@SW_SHOW, $aGUI_Main[0]) ; Afficher le tout! EndFunc ;==>_GUI_Peupler Func _GUI_Main_CreeEtiquette($iOffset, $sDesc, $iDeltaV, $iDeltaH) ; Créer et peuple une étiquette ; $iOffset = Numéro de rangée dans la matrice $aGUIDate ; $sDesc = Texte à mettre dans l'étiquette ; $iDeltaV = Offset vertical ; $iDeltaH = Offset horizontal $aGUI_Main[$iOffset] = GUICtrlCreateLabel($sDesc, $iDeltaV, $iDeltaH, 49, 17) ; Créer l'étiquette et y insérer une valeur. Largeur et hauteur ne changent pas. GUICtrlSetBkColor($aGUI_Main[$iOffset], $GUI_BKCOLOR_TRANSPARENT) ; Fond transparent car la boîte dépasse un peu GUICtrlSetFont(-1, 4, 0, 0, "MS Sans Serif") ; Taille de police très petite EndFunc ;==>_GUI_Main_CreeEtiquette Func _GUI_Main_CreeRangee($iOffset, $iInit, $iDeltaV, $iDeltaH, $iMax, $iMin, $iCouleur) ; Créer les rangées dans l'interface ; $iOffset = Numéro de rangée dans la matrice $aGUIDate ; $iInit = Contenu de la cellule ; $iDeltaV = Offset vertical ; $iDeltaH = Offset horizontal ; $iMax = Valeur maximale pour le contrôle UPDOWN ; $iMin = Valeur minimale pour le contrôle UPDOWN ; $iLarge = valeur calculée qui détermine la largeur en pixels d'un champs ; $iCouleur = Couleur de fond de la rangée Local $iLarge = (StringLen($iInit) = 2) ? (41) : (49) ; Si c'est une case à deux chiffre, largeur 41 pixels. Si c'est à 4 chiffres alors 49 pixels $aGUI_Main[$iOffset] = GUICtrlCreateInput("", $iDeltaV, $iDeltaH, $iLarge, 21, $ES_READONLY) ; Le nerf de la guerre: on crée l'item avec les bons paramètres GUICtrlSetBkColor(-1, $iCouleur) ; Mettre la bonne couleur (pastel) $aGUI_Main[$iOffset + 1] = GUICtrlCreateUpdown($aGUI_Main[$iOffset], BitOR($UDS_ARROWKEYS, $UDS_NOTHOUSANDS, $UDS_WRAP)) ; le contrôle répond aux flèches, pas d'espace de milliers et recommence à $iMin quand $iMax est dépassé GUICtrlSetLimit(-1, $iMax, $iMin) ; Mettre les valeurs minimales et maximales en conséquence. GUICtrlSetOnEvent(-1, "_GUI_Main_UpDown") ; Toujours appeler cette procédure si on joue avec les flèches, ça reformate la valeur : 0 --> 00 EndFunc ;==>_GUI_Main_CreeRangee Func _GUI_Main_Fichier() ; Retourne le nombre de fichiers dans $aFICHIERS formatté pour 4 chiffres Return $aGUI_Lang[184][$iLang] & " (" & StringFormat("%04d", (UBound($aFICHIER_Liste) = 0) ? (0) : (UBound($aFICHIER_Liste) - 1)) & ")" ; Retourner le mot "Fichier" dans la langue choisie, des parenthèses, si $aFICHIER_Liste est vide retoune "0000" sinon retourne la quantité d'éléments -1 (la première cellule est le décompte) EndFunc ;==>_GUI_Main_Fichier Func _GUI_Main_Journal() ; Changer l'état du bouton "Créer un journal". Le faire aussi dans le menu. $iJournal = ($iJournal = 1) ? (0) : (1) ; Opération ternaire. Si $iJournal =1 alors =0, autrement =1 If $iJournal = 0 Then ; La variable indique PAS de journal GUICtrlSetState($aGUI_Main[25], $GUI_UNCHECKED) ; Dans l'interface GUICtrlSetState($aGUI_Main[8], $GUI_UNCHECKED) ; Dans le menu Else ; Sinon on assume qu'un journal sera fait. GUICtrlSetState($aGUI_Main[25], $GUI_CHECKED) ; Dans l'interface GUICtrlSetState($aGUI_Main[8], $GUI_CHECKED) ; Dans le menu EndIf EndFunc ;==>_GUI_Main_Journal Func _GUI_Main_Lang() ; Changer la langue, appelé depuis le menu Langue --> Nom de la langue Local $iCtrlId = @GUI_CtrlId ; On prend en note le dernier item cliqué GUICtrlSetState($aGUI_Main[12 + $iLang], $GUI_UNCHECKED) ; Enlever la coche devant la langue acutellement $iLang = $iCtrlId - 14 ; Déterminer la langue désirée par l'item dans le menu (14 = valeur minimum retournée par le menu et donc si on clique "français", 14 - 14 = 0) GUICtrlSetState($aGUI_Main[12 + $iLang], $GUI_CHECKED) ; ... et remettre la coche (pourrait être redondant _GUI_Peupler() ; Va tout redessiner EndFunc ;==>_GUI_Main_Lang Func _GUI_Main_LireRangee($iRangee, $iMode = 0) ; Rangée 0 = Créé, 1 = Modifié, 2 = Accédé ; Mode 0 = Modèle "YYYYMMDDHHMMSS" ; Mode 1 = "2022-01-01 23:59:59" ; Mode 2 = Variable matricielle Local $iOffset ; Numéro de rangée dans la matrice $aGUIDate Local $iAAAA ; Année Local $iMM ; Mois Local $iDD ; Jour Local $iHH ; Heure Local $iMN ; ATTENTION, M 'N' et non pas M 'M, minute Local $iSS ; Seconde If Not IsInt($iRangee) Or ($iRangee < 0 Or $iRangee > 2) Then ; Vérification de $iRangee: nombre entier entre 0 et 2 $iRangee = 0 ; Entrée invalide, on lit donc la rangée "Crée" EndIf If Not IsInt($iMode) Or ($iMode < 0 Or $iMode > 2) Then ; Vérification de $iMode: nombre entier entre 0 et 2 $iMode = 0 ; Entrée invalide, on retourne donc la valeur formattée pour FileSetTime() EndIf $iOffset = 33 + ($iRangee * 20) ; Naviguer dans la matrice: chaque rangée est à 20 items d'intervalle et l'année commence à la valeur 9 $iAAAA = GUICtrlRead($aGUI_Main[$iOffset]) ; Lecture de l'année $iMM = GUICtrlRead($aGUI_Main[$iOffset + 2]) ; Lecture du mois $iDD = GUICtrlRead($aGUI_Main[$iOffset + 4]) ; Lecture de la journée $iHH = GUICtrlRead($aGUI_Main[$iOffset + 6]) ; Lecture de l'heure $iMN = GUICtrlRead($aGUI_Main[$iOffset + 8]) ; Lecture de la minute $iSS = GUICtrlRead($aGUI_Main[$iOffset + 10]) ; Lecture de la seconde If $iMode = 0 Then ; Retour standard , prêt pour la fonction FileSetTime() Return $iAAAA & StringFormat("%02d", $iMM) & StringFormat("%02d", $iDD) & StringFormat("%02d", $iHH) & StringFormat("%02d", $iMN) & StringFormat("%02d", $iSS) ElseIf $iMode = 1 Then ; Besoin d'une date "lisible" Return $iAAAA & "-" & StringFormat("%02d", $iMM) & "-" & StringFormat("%02d", $iDD) & " " & StringFormat("%02d", $iHH) & ":" & StringFormat("%02d", $iMN) & ":" & StringFormat("%02d", $iSS) Else ; Besoin d'une matrice contenant la date Local $aTempo[6] = [$iAAAA, StringFormat("%02d", $iMM), StringFormat("%02d", $iDD), StringFormat("%02d", $iHH), StringFormat("%02d", $iMN), StringFormat("%02d", $iSS)] Return $aTempo EndIf EndFunc ;==>_GUI_Main_LireRangee Func _GUI_Main_ListeExporter() ; Exporter la liste des fichiers dans $aFICHIER_Liste Local $iMsgBoxAnswer ; Réponse d'invite Local $sSelection ; Fichier sélectionné par l'utilisateur via FileSaveDialog() Local $ierr ; Contient le résultat de la commande FileSaveDialog() ou l'état de la commande _FileWriteFromArray() Local $iErr2 ; Contient le message d'erreur étendu de la fonction _FileWriteFromArray() If UBound($aFICHIER_Liste) <= 1 Then Return ; La liste est vide. Retour au programme $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale $iMsgBoxAnswer = MsgBox(292, $aGUI_Lang[242][$iLang], $aGUI_Lang[243][$iLang]) ; "Voulez vous exporter la liste?", "Voulez-vous exporter la liste de fichiers?" If $iMsgBoxAnswer = 7 Then ; NON _GUIDisable($hGD, 1) ; Désactiver l'interface "grisée" Return ; Non, l'usager ne veut pas exporter, retourner au programme principal EndIf While 1 ; Loupe infinie $sSelection = FileSaveDialog($aGUI_Lang[244][$iLang], $sFichier, $aGUI_Lang[245][$iLang], BitOR($FD_PATHMUSTEXIST, $FD_PROMPTOVERWRITE), "DacoDate.lst") ; "Veuiller sélectionner nom de fichier à exporter", "Liste (*.lst)" $ierr = @error ; Noter s'il y a erreur If $ierr > 0 Then ; il y a erreur $iMsgBoxAnswer = MsgBox(309, $aGUI_Lang[240][$iLang], $aGUI_Lang[241][$iLang]) ; "Erreur sélection de fichier", "Il y a eu erreur lors de la sélection de fichier." Select Case $iMsgBoxAnswer = 4 ;Retry ContinueLoop ; Retourner au début de la loupe While Case $iMsgBoxAnswer = 2 ;Cancel $hGD = _GUIDisable($hGD, 1) ; Désactiver l'interface "grisée" Return ; On pourrait retourner aussi avec un code d'erreur EndSelect EndIf If $sSelection Then ExitLoop ; Sélection avec succès. Quitter cette loupe et continuer. WEnd ; Redemander de sélectionner une fichier si on se rend ici $ierr = _FileWriteFromArray($sSelection, $aFICHIER_Liste) ; Écrire la variable matricielle au disque ! $iErr2 = @error ; Il y a potentiellement deux codes d'erreur: $ierr = 1 si un succès, 0 si non / $ierr2 = code détaillé de l'erreur If $ierr = 0 Then ; L'écriture a échoué MsgBox(48, $aGUI_Lang[248][$iLang], $aGUI_Lang[249][$iLang] & "(" & $iErr2 & ")") ; "Erreur, écriture de fichier", "Erreur lors de l'écriture du fichier. Sortie abrupte du programme.") Exit ; On quitte? On pourrait aussi demander à l'utilisateur de réessayer, peut-être dans une version future. EndIf _GUIDisable($hGD, 1) ; Désactiver l'interface "grisée" EndFunc ;==>_GUI_Main_ListeExporter Func _GUI_Main_ListeImporter() ; Importer la liste des fichiers dans $aFICHIER_Liste Local $sSelection ; Variable qui contient la liste des fichiers sélectionnés par l'utilisateur via FileOpenDialog() Local $i ; Variable générique Local $ierr ; Contient un code d'erreur (si c'est le cas) Local $iMsgBoxAnswer ; Réponse d'invite Local $aTempo ; Matrice temporaire If Not IsPtr($hGD) Then $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale While 1 ; Loupe infinie $sSelection = FileOpenDialog($aGUI_Lang[258][$iLang], $sFichier, $aGUI_Lang[259][$iLang], BitOR($FD_FILEMUSTEXIST, $FD_PATHMUSTEXIST)) ; "Veuiller sélectionner UN fichier à importer", "Liste (*.lst)" $ierr = @error ; Noter s'il y a erreur If $ierr > 0 Then ; il y a erreur $iMsgBoxAnswer = MsgBox(309, $aGUI_Lang[246][$iLang], $aGUI_Lang[247][$iLang]) ; "Erreur sélection de fichier", "Il y a eu erreur lors de la sélection de fichier." Select Case $iMsgBoxAnswer = 4 ;Retry ContinueLoop ; Retourner au début de la loupe While Case $iMsgBoxAnswer = 2 ;Cancel $hGD = _GUIDisable($hGD, 1) ; Désactiver l'interface "grisée" Return ; On pourrait retourner aussi avec un code d'erreur EndSelect EndIf If $sSelection Then ExitLoop ; Sélection avec succès. Quitter cette loupe et continuer. WEnd $aTempo = FileReadToArray($sSelection) ; On charge maintenant le fichier sélectionné dans une variable matricielle temporaire If StringRight($sSelection, 3) = "log" Then ; $aTempo = _FICHIER_Log_Convert($aTempo) ; If $aTempo[0] = 0 --> Code pour fichier log vide, donc incompatible ; Code pour traiter un fichier log incompatible ici Else ; Sinon c'est un fichier lst For $i = 1 To $aTempo[0] ; Vérifier que tous les fichiers référencés dans cette liste sont valides If Not FileExists($aTempo[$i]) Then ; Si le fichier n'existe pas ... MsgBox(48, $aGUI_Lang[236][$iLang], $aGUI_Lang[237][$iLang] & " " & Chr(34) & $aTempo[$i] & Chr(34)) ; "Fichier manquant", "Le fichier est introuvable. Arrêt immédiat du programme" Exit ; On quitte mais on pourrait aussi demander à l'utilisateur de choisir un autre fichier ... EndIf If StringLen($aTempo[$i]) > $iLong Then $iLong = StringLen($aTempo[$i]) ; Trouver le numéro de ligne le plus long (sert à la création d'un fichier journal) Next EndIf $aFICHIER_Liste = $aTempo ; Maintenant la variable globale contient ce qu'il y a dans la variable temporaire. GUICtrlSetData($aGUI_Main[92], _GUI_Main_Fichier()) ; Écrire le nombre de fichiers $hGD = _GUIDisable($hGD, 1) ; Désactiver l'interface "grisée" EndFunc ;==>_GUI_Main_ListeImporter Func _GUI_Main_ListeVider() ; Vider la liste des ficheirs avec avertissement. Local $iMsgBoxAnswer ; Réponse d'invite $iMsgBoxAnswer = MsgBox(308, $aGUI_Lang[250][$iLang], $aGUI_Lang[251][$iLang]) ; "Vider la liste de fichiers", "Voulez-vous vider la liste de fichiers?" If $iMsgBoxAnswer = 6 Then ;Yes ReDim $aFICHIER_Liste[0] ; Mettre la variable à zéro GUICtrlSetData($aGUI_Main[92], _GUI_Main_Fichier()) ; Indiquer le nombre de fichiers dans la liste EndIf EndFunc ;==>_GUI_Main_ListeVider Func _GUI_Main_ListeVoir() ; Affichier la liste des fichiers sélectionnés Local $iMsgBoxAnswer ; Réponse d'invite If Not IsPtr($hGD) Then $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale If UBound($aFICHIER_Liste) = 0 Then ; Variable vide? ; Aviser qu'il n'y a pas de fichiers et proposer d'ouvrir le sélecteur de fichiers $iMsgBoxAnswer = MsgBox(308, $aGUI_Lang[252][$iLang], $aGUI_Lang[253][$iLang]) ; "Aucun fichier dans la liste", "Aimeriez-vous sélectionner des fichiers maintenant?" If $iMsgBoxAnswer = 6 Then $aFICHIER_Liste = _FICHIER_Selection() ; Procéder avec la sélection de fichiers GUICtrlSetData($aGUI_Main[92], _GUI_Main_Fichier()) ; Indiquer le nombre de fichiers dans la liste Else _ArrayDisplay($aFICHIER_Liste, "", "1:") ; Afficher la matrice sans la cellule 0 EndIf $hGD = _GUIDisable($hGD, 1) ; Désactiver l'interface "grisée" EndFunc ;==>_GUI_Main_ListeVoir Func _GUI_Main_OK() ; Bouton "OK" appuyé sur l'interface principale $iQuitter = 1 ; Indiquer que OK a été appuyé. On peut procéder avec les données telles quelles EndFunc ;==>_GUI_Main_OK Func _GUI_Main_Quitter() ; Échappe ou "Annuler" appuyé. On quitte le programme $iQuitter = 2 EndFunc ;==>_GUI_Main_Quitter Func _GUI_Main_Raz() ; Remise à zéro de l'application Local $iMsgBoxAnswer ; Réponse d'invite Local $i ; Variable générique Local $aTempo = _VAR_Maintenant(1) ; Temps actuel sous forme "Fancy" Local $aTempo2 = _VAR_Maintenant(2) ; Temps actuel sous forme matricielle $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale If $iInvite = 0 Then ; Ne vient pas de la procédure _RAZ_Urgence() $iMsgBoxAnswer = MsgBox(308, $aGUI_Lang[254][$iLang], $aGUI_Lang[255][$iLang]) ; "Remise à zéro", "Voulez-vous remettre tous les champs et les mémoires à la date et heure d'aujourd'hui?" Else $iMsgBoxAnswer = 6 ; Oui mais forcé EndIf If $iMsgBoxAnswer = 6 Then ;Yes $iJournal = 0 ; Défaut: pas de journal GUICtrlSetState($aGUI_Main[25], $GUI_UNCHECKED) ; Décocher dans l'interface GUICtrlSetState($aGUI_Main[8], $GUI_UNCHECKED) ; et dans le menu $iUNESection = 1 ; Défaut: activé GUICtrlSetState($aGUI_Main[26], $GUI_CHECKED) ; Cocher dans l'interface GUICtrlSetState($aGUI_Main[9], $GUI_CHECKED) ; et dans le menu _GUI_Section_Activer($iUNESection) ; Griser les sections "Modifié" et "Accédé" $sFichier = @WorkingDir & "\" ; Chemin par défaut ReDim $aFICHIER_Liste[0] ; Vider en ramenant à zéro GUICtrlSetData($aGUI_Main[28], $aTempo) ; Mémoire 1 GUICtrlSetData($aGUI_Main[30], $aTempo) ; Mémoire 2 For $i = 0 To 5 ; Passer toutes les cellules et les remettre à l'heure / date actuelle GUICtrlSetData($aGUI_Main[33 + ($i * 2)], $aTempo2[$i]) ; Rangée "Créé" GUICtrlSetData($aGUI_Main[53 + ($i * 2)], $aTempo2[$i]) ; Rangée "Créé" GUICtrlSetData($aGUI_Main[73 + ($i * 2)], $aTempo2[$i]) ; Rangée "Créé" Next $iLang = _LANG_Definir() ; Remettre à la langue du système d'opération _REG_Ecrire() ; Sauver le tout dans le registre _GUI_Peupler() ; redessiner le tout EndIf $iInvite = 0 ; Remettre cette variable à zéro _GUIDisable($hGD, 1) ; Désactiver l'interface "grisée" EndFunc ;==>_GUI_Main_Raz Func _GUI_Main_Section() ; Changer l'état du bouton "Une seule section" $iUNESection = ($iUNESection = 1) ? (0) : (1) ; Opération ternaire. Si $iUNESection =1 alors =0, autrement =1 _GUI_Section_Activer($iUNESection) ; Activer / désactiver les rangées If $iUNESection = 1 Then ; COPIER la valeur dans "CRÉÉ" dans les deux sections suivantes, advenant que le bouton est appuyé _GUI_Section_Duplicata() ; Copier la section 'Créé' dans la section 'Modifié' et 'Accédé' EndIf If $iUNESection = 1 Then ; Appliquer l'état du bouton car ne change pas avec un raccourci clavier GUICtrlSetState($aGUI_Main[26], $GUI_CHECKED) ; Dans l'interface GUICtrlSetState($aGUI_Main[9], $GUI_CHECKED) ; Dans le menu Else ; Décocher car $iUNESection = 0 GUICtrlSetState($aGUI_Main[26], $GUI_UNCHECKED) ; Dans l'interface GUICtrlSetState($aGUI_Main[9], $GUI_UNCHECKED) ; Dans le menu EndIf EndFunc ;==>_GUI_Main_Section Func _GUI_Main_UpDown() ; Formatter une entrée après avoir changé sa valeur Local $iCtrlId = @GUI_CtrlId - 1 ; Dernier bouton appuyé Local $sVal = StringFormat("%02d", GUICtrlRead(@GUI_CtrlId - 1)) ; Formatter le chiffre dans la cellule juste avant le contrôle "UpDown" GUICtrlSetData($iCtrlId, $sVal) ; Afficher la valeur formattée avec un zéro devant, si nécessaire. If $iUNESection = 1 Then ; "Une seule section" coché: il faut copier la valeur dans les sections "Modifié" et "Accédé" GUICtrlSetData($iCtrlId + 15, $sVal) ; Copier dans la section "Modifié". Le +15 fait référence à une valeur "système" et non pas à la valeur correspondante dans $aGUI_Main GUICtrlSetData($iCtrlId + 30, $sVal) ; Copier dans la section "Accédé". Le +30 fait référence à une valeur "système" et non pas à la valeur correspondante dans $aGUI_Main EndIf EndFunc ;==>_GUI_Main_UpDown Func _GUI_Memoire() ; Bouton "Mémoire" appuyé. Afficher et peupler l'interface graphique! Local $i ; Variable générique Local $iCtrlId = @GUI_CtrlId ; Détermine quel bouton a été appuyé pour arriver ici : mémoire 1 ou mémoire 2 Local $iOffset = ($iCtrlId = 28) ? (28) : (30) ; Pointe vers la bonne cellule, dépenant du bouton mémoire choisi Local $Accel = [["{UP}", $aGUI_Memoire[0]], ["{DOWN}", $aGUI_Memoire[0]]] ; Désactiver les flèches "haut" et "bas" car elles ferment la fenêtre Local $sTempo ; Variable texte temporaire If Not IsPtr($hGD) Then $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale GUISetAccelerators($Accel, $aGUI_Memoire[0]) ; Truc pour empêcher les touches haut / bas de fermer la fenêtre !!! Alternative: boutons GUICtrlSetData($aGUI_Memoire[1], ($iCtrlId = 30) ? ($aGUI_Lang[54][$iLang]) : ($aGUI_Lang[58][$iLang])) ; Afficher le bon titre à la fenêtre ("MÉMOIRE 1") : ("MÉMOIRE 2") $sTempo = StringReplace($aGUI_Lang[194][$iLang], "}", GUICtrlRead($aGUI_Main[$iOffset])) GUICtrlSetData($aGUI_Memoire[2], $sTempo) ; Afficher la première opération "Copier " & GUICtrlRead($aGUI_Main[$iOffset]) & " dans la section 'CRÉÉ'" GUICtrlSetOnEvent($aGUI_Memoire[2], "_GUI_Memoire_Copie") ; Quelle fonction appeler si on appuie ce bouton $sTempo = StringReplace($aGUI_Lang[196][$iLang], "}", GUICtrlRead($aGUI_Main[$iOffset])) GUICtrlSetData($aGUI_Memoire[3], $sTempo) ; Afficher la deuxième opération "Copier " & GUICtrlRead($aGUI_Main[$iOffset]) & " dans la section 'MODIFIÉ'" GUICtrlSetOnEvent($aGUI_Memoire[3], "_GUI_Memoire_Copie") ; Quelle fonction appeler si on appuie ce bouton $sTempo = StringReplace($aGUI_Lang[198][$iLang], "}", GUICtrlRead($aGUI_Main[$iOffset])) GUICtrlSetData($aGUI_Memoire[4], $sTempo) ; Affichier la troisième opération "Copier " & GUICtrlRead($aGUI_Main[$iOffset]) & " dans la section 'ACCÉDÉ'" GUICtrlSetOnEvent($aGUI_Memoire[4], "_GUI_Memoire_Copie") ; Quelle fonction appeler si on appuie ce bouton GUISetState(@SW_SHOW, $aGUI_Memoire[0]) ; Afficher la fenêtre $aGUI_Memoire For $i = 2 To 4 ; Passer toutes les trois options GUICtrlSetState($aGUI_Memoire[$i], $GUI_UNCHECKED) ; On ne veut pas les voir cochées! Next GUICtrlSetStyle($aGUI_Memoire[5], $BS_DEFPUSHBUTTON) ; Mettre le bouton "Annuler" en focus et en gras. If $iUNESection = 1 Then ; $iUNESection est activé GUICtrlSetState($aGUI_Memoire[3], $GUI_DISABLE) ; Les options #2 et #3 ne doivent pas etre accessibles. GUICtrlSetState($aGUI_Memoire[4], $GUI_DISABLE) Else GUICtrlSetState($aGUI_Memoire[3], $GUI_ENABLE) ; Les options #2 et #3 doivent etre accessibles. GUICtrlSetState($aGUI_Memoire[4], $GUI_ENABLE) EndIf EndFunc ;==>_GUI_Memoire Func _GUI_Memoire_Copie() ; Bouton choisi dans l'interface "Mémoire" Local $iMenu = StringRight(GUICtrlRead($aGUI_Memoire[1]), 1) ; Déterminer quel menu vient de nous appeler (va donner "1" ou "2" à cause de "Mémoire '1' ") Local $i ; Variable générique Local $iCtrlId = @GUI_CtrlId ; Déterminer quel bouton a été cliqué pour arriver ici Local $aTempo ; Variable matricielle temporaire Local $iOffset ; Détermine le décalage en fonction de la rangée If $iMenu = 1 Then ; On travaille à partir de MEMOIRE 1 $aTempo = GUICtrlRead($aGUI_Main[28]) ; Lire la valeur Memoire 1 $aTempo = _VAR_Convertir($aTempo, 2) ; Convertir en Matrice If $iCtrlId = 101 Then ; Première commande $iOffset = 33 ; Écrire vers la rangée "Créé" ElseIf $iCtrlId = 102 Then ; Deuxième commande $iOffset = 53 ; Écrire vers la rangée "Modifié" Else ; C'est donc la troisième commande $iOffset = 73 ; Écrire vers la rangée "Accédé" EndIf Else ; C'est donc "MEMOIRE 2" $aTempo = GUICtrlRead($aGUI_Main[30]) ; Lire la valeur Memoire 2 $aTempo = _VAR_Convertir($aTempo, 2) ; Convertir en Matrice If $iCtrlId = 101 Then ; Première commande $iOffset = 33 ; Écrire vers la rangée "Créé" ElseIf $iCtrlId = 102 Then ; Deuxième commande $iOffset = 53 ; Écrire vers la rangée "Modifié" Else ; C'est donc la troisième commande $iOffset = 73 ; Écrire vers la rangée "Accédé" EndIf EndIf For $i = 0 To 5 ; Passer toutes les cellules et écrire dans l'interface principale GUICtrlSetData($aGUI_Main[$iOffset + ($i * 2)], $aTempo[$i]) ; Copier le contenu de la cellule "Mémoire n" dans la bonne rangée Next If $iOffset = 33 Then ; Copie dans la rangée 'CRÉÉ' _GUI_Section_Duplicata() ; Si $iUNESection = 1 alors copier la valeur dans les deux rangées suivantes EndIf _GUI_Sub_Quitter() ; Fermer l'interface, retour au menu principal EndFunc ;==>_GUI_Memoire_Copie Func _GUI_Option() ; Bouton "O", afficher le menu Option Local $i ; Variable générique Local $iCtrlId = @GUI_CtrlId ; Déterminer quel bouton a été cliqué pour arriver ici Local $Accel = [["{UP}", $aGUI_Option[0]], ["{DOWN}", $aGUI_Option[0]]] ; Désactiver les flèches "haut" et "bas" car elles ferment la fenêtre If Not IsPtr($hGD) Then $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale GUISetAccelerators($Accel, $aGUI_Option[0]) ; Truc pour empêcher les touches haut / bas de fermer la fenêtre !!! Alternative: boutons If $iCtrlId = 34 Then ; Je viens du bouton O sur la rangée "Créé" GUICtrlSetData($aGUI_Option[1], $aGUI_Lang[202][$iLang] & " " & $aGUI_Lang[62][$iLang]) ; Changer le titre de l'interface "Mémoire 'CRÉÉ'" ElseIf $iCtrlId = 49 Then ; Je viens du bouton O sur la rangée "Modifié" GUICtrlSetData($aGUI_Option[1], $aGUI_Lang[202][$iLang] & " " & $aGUI_Lang[102][$iLang]) ; Changer le titre de l'interface "Mémoire 'MODIFIÉ'" Else ; Je viens nécessairement du bouton O sur la rangée "Accédé" GUICtrlSetData($aGUI_Option[1], $aGUI_Lang[202][$iLang] & " " & $aGUI_Lang[142][$iLang]) ; Changer le titre de l'interface "Mémoire 'ACCÉDÉ'" EndIf GUICtrlSetData($aGUI_Option[2], $aGUI_Lang[206][$iLang]) ; LIRE la date et l'heure depuis MÉMOIRE1_GUI_Dec(2 + $iOffset) GUICtrlSetOnEvent($aGUI_Option[2], "_GUI_Option_LireMem") GUICtrlSetData($aGUI_Option[3], $aGUI_Lang[208][$iLang]) ; LIRE la date et l'heure depuis MÉMOIRE2 _GUI_Dec(3 + $iOffset) GUICtrlSetOnEvent($aGUI_Option[3], "_GUI_Option_LireMem") GUICtrlSetData($aGUI_Option[4], $aGUI_Lang[210][$iLang]) ; ÉCRIRE la date et l'heure à MÉMOIRE1 _GUI_Dec(4 + $iOffset) GUICtrlSetOnEvent($aGUI_Option[4], "_GUI_Option_EcrireMem") GUICtrlSetData($aGUI_Option[5], $aGUI_Lang[212][$iLang]) ; ÉCRIRE la date et l'heure à MÉMOIRE2 _GUI_Dec(5 + $iOffset) GUICtrlSetOnEvent($aGUI_Option[5], "_GUI_Option_EcrireMem") GUICtrlSetData($aGUI_Option[6], $aGUI_Lang[214][$iLang]) ; ÉCRIRE la date et l'heure ACTUELLE _GUI_Dec(6 + $iOffset) GUICtrlSetOnEvent($aGUI_Option[6], "_GUI_Option_Maintenant") For $i = 2 To 6 ; Passer par toutes les options GUICtrlSetState($aGUI_Option[$i], $GUI_UNCHECKED) ; Les décocher pour éviter la confusion (autremment la deuxième fois qu'on passe par le menu l'option reste sélectionnée Next GUICtrlSetStyle($aGUI_Option[7], $BS_DEFPUSHBUTTON) ; Mettre le bouton "Annuler" en focus et en gras. GUISetState(@SW_SHOW, $aGUI_Option[0]) ; Afficher le sous-menu EndFunc ;==>_GUI_Option Func _GUI_Option_EcrireMem() ; Bouton mémoire: ÉCRIRE la date et l'heure à MÉMOIRE 1 Local $sDate ; Variable qui contientra la date en format "YYYYMMDDHHMMSS" Local $sSection = GUICtrlRead($aGUI_Option[1]) ; Déterminer de quelle section ce bouton a été appelé Local $iCtrlId = @GUI_CtrlId ; Déterminer quel bouton a été appuyé Local $i ; Variable générique If $sSection = $aGUI_Lang[202][$iLang] & " " & $aGUI_Lang[62][$iLang] Then ; "Mémoire 'CRÉÉ'" $sDate = _GUI_Main_LireRangee(0, 1) ; Lire la rangée n ElseIf $sSection = $aGUI_Lang[202][$iLang] & " " & $aGUI_Lang[102][$iLang] Then ; "Mémoire 'MODIFIÉ'" $sDate = _GUI_Main_LireRangee(1, 1) ; Lire la rangée n Else $sDate = _GUI_Main_LireRangee(2, 1) ; Lire la rangée n EndIf $i = ($iCtrlId = 109) ? (28) : (30) ; Établir quelle mémoire choisir vs. le bouton appuyé. 109 = 28 et 110 = 30 GUICtrlSetData($aGUI_Main[$i], $sDate) ; Écrire cette réponse dans la bonne mémoire _GUI_Sub_Quitter() ; Fermer l'interface, retour au menu principal EndFunc ;==>_GUI_Option_EcrireMem Func _GUI_Option_LireMem() ; Bouton "O": LIRE la date et l'heure depuis MÉMOIRE 1 Local $aMemoire ; Variable qui contient une copie de ce qu'il y a dans le bouton "mémoire" choisi Local $i ; Variable générique Local $sSection = GUICtrlRead($aGUI_Option[1]) ; Déterminer de quelle section ce bouton a été appelé Local $iCtrlId = @GUI_CtrlId ; Déterminer quel bouton a été appuyé Local $iOffset ; Décalage: le premier ou le deuxième bouton mémoire? $iOffset = ($iCtrlId = 107) ? (28) : (30) ; Ternaire: Si $iCtrlID = 107 (premièreme option) alors choisir 28, autrement 30 $aMemoire = GUICtrlRead($aGUI_Main[$iOffset]) ; Lire la valeur dans le bouton Mémoire correspondant $aMemoire = _VAR_Convertir($aMemoire, 2) ; On veut une matricielle avec la date contenue dans le bouton "Mémoire n" If $sSection = $aGUI_Lang[202][$iLang] & " " & $aGUI_Lang[62][$iLang] Then ; Vient de Crée --> Option "Mémoire 'CRÉÉ'" For $i = 0 To 5 GUICtrlSetData($aGUI_Main[33 + ($i * 2)], $aMemoire[$i]) ; Copier la matrice à l'écran (offset 33 et par deux) Next ElseIf $sSection = $aGUI_Lang[202][$iLang] & " " & $aGUI_Lang[102][$iLang] Then ; Vient de Modifié --> Option "Mémoire 'MODIFIÉ'" For $i = 0 To 5 GUICtrlSetData($aGUI_Main[53 + ($i * 2)], $aMemoire[$i]) ; Copier la matrice à l'écran (offset 53 et par deux) Next Else ; Vient de Accédé --> Option For $i = 0 To 5 GUICtrlSetData($aGUI_Main[73 + ($i * 2)], $aMemoire[$i]) ; Copier la matrice à l'écran (offset 73 et par deux) Next EndIf _GUI_Section_Duplicata() ; Si $iUNESection = 1 alors copier la valeur dans les deux rangées suivantes _GUI_Sub_Quitter() ; Fermer l'interface, retour au menu principal EndFunc ;==>_GUI_Option_LireMem Func _GUI_Option_Maintenant() ; Bouton mémoire: ÉCRIRE la date et l'heure ACTUELLE Local $aMaintenant = _VAR_Maintenant(2) ; Date actuelle, sous forme matricielle Local $i ; Variable générique Local $sSection = GUICtrlRead($aGUI_Option[1]) ; Lire le titre de la fenêtre pour déterminer de quelle section vient la demande If $sSection = $aGUI_Lang[202][$iLang] & " " & $aGUI_Lang[62][$iLang] Then ; Vient de Crée --> Option "Mémoire 'CRÉÉ'" For $i = 0 To 5 GUICtrlSetData($aGUI_Main[33 + ($i * 2)], $aMaintenant[$i]) ; Copier la matrice à l'écran (offset 9 et par deux) Next ElseIf $sSection = $aGUI_Lang[202][$iLang] & " " & $aGUI_Lang[102][$iLang] Then ; Vient de Modifié --> Option "Mémoire 'MODIFIÉ'" For $i = 0 To 5 GUICtrlSetData($aGUI_Main[53 + ($i * 2)], $aMaintenant[$i]) ; Copier la matrice à l'écran (offset 29 et par deux) Next Else ; Vient de Accédé --> Option For $i = 0 To 5 GUICtrlSetData($aGUI_Main[73 + ($i * 2)], $aMaintenant[$i]) ; Copier la matrice à l'écran (offset 49 et par deux) Next EndIf _GUI_Section_Duplicata() ; Si $iUNESection = 1 alors copier la valeur dans les deux rangées suivantes _GUI_Sub_Quitter() ; Fermer l'interface, retour au menu principal EndFunc ;==>_GUI_Option_Maintenant Func _GUI_Section_Activer($iActiver = 0) ; Active ou désactive les sections "Modifié" et "Accédé" ; $iActiver valeur numérique qui indique si on doit ou non activer les sections : 0 = activé, 1 = désactivé Local $i ; Variable générique $iActiver = ($iActiver = 0) ? (0) : (1) ; Opération ternaire pour s'assurer d'une réponse entre 0 et 1 peu importe le paramètre passé If $iActiver = 1 Then ; Il faut désactiver les sections "Modifié" et "Accédé" For $i = 52 To 64 ; Passer tous les items dans les sections pour les désactiver GUICtrlSetState($aGUI_Main[$i], $GUI_DISABLE) ; Rangée "Modifié" GUICtrlSetState($aGUI_Main[$i + 20], $GUI_DISABLE) ; Rangée "Accédé" Next Else ; Il faut plutôt les activer For $i = 52 To 64 ; Passer tous les items dans les sections pour les désactiver GUICtrlSetState($aGUI_Main[$i], $GUI_ENABLE) ; Rangée "Modifié" GUICtrlSetState($aGUI_Main[$i + 20], $GUI_ENABLE) ; Rangée "Accédé" Next EndIf EndFunc ;==>_GUI_Section_Activer Func _GUI_Section_Duplicata() ; Recopie la section "Créer" sur la section "Modifié" et "Accédé" Local $i If $iUNESection = 1 Then ; COPIER la valeur dans "CRÉÉ" dans les deux sections suivantes, advenant que le bouton est appuyé For $i = 33 To 44 Step 2 GUICtrlSetData($aGUI_Main[$i + 20], GUICtrlRead($aGUI_Main[$i])) GUICtrlSetData($aGUI_Main[$i + 40], GUICtrlRead($aGUI_Main[$i])) Next EndIf EndFunc ;==>_GUI_Section_Duplicata Func _GUI_Sub_Quitter() ; Fermer toutes les fenêtres et revenir à l'interface principale $hGD = _GUIDisable($hGD, 1) ; Désactiver l'interface "grisée" GUISetState(@SW_HIDE, $aGUI_Memoire[0]) ; Cacher la fenêtre "Mémoire" GUISetState(@SW_HIDE, $aGUI_Option[0]) ; Cacher la fenêtre "Option" GUISetState(@SW_HIDE, $aGUI_APropos[0]) ; Cacher la fenêtre "À Propos" GUISetState(@SW_ENABLE, $aGUI_Main[0]) ; Afficher et activer la fenêtre principale WinActivate($aGUI_Main[0]) ; Lui redonner le focus EndFunc ;==>_GUI_Sub_Quitter Func _LANG_Charger() ; Retourne les traductions dans une matrice Local $aTempo ; Variable matricielle temporaire Local $ierr ; Statut venant de la commande _FileReadToArray() Local $iErr2 ; Enregistre le message d'erreur étendu s'il y en a un If Not FileExists(@ScriptDir & "\" & "DacoDate.res") Then ; GRAVE : le fichier ressource n'existe pas If $iLang = 0 Then ; Si windows est en français, écrire le message en ... français MsgBox(16, "Fichier ressource manquant!", "Le fichier ressource 'DacoDate.res' est manquant" & @CRLF & "Fin abrupte du logiciel.") Else ; Autrement en anglais pour toutes les autres langues MsgBox(16, "Missing ressource file!", "The required 'DacoDate.res' ressource file is missing" & @CRLF & "Immediate program exit.") EndIf Exit ; Impossible de continuer! EndIf $ierr = _FileReadToArray(@ScriptDir & "\" & "DacoDate.res", $aTempo, $FRTA_NOCOUNT, ",") ; Lire le fichier dans $aTempo, pas de numéro de ligne, utiliser la virgule comme séparateur $iErr2 = @error ; Copier le message d'erreur "étendu". If $iErr2 > 0 Or $ierr = 0 Then ; Erreur grave lors du chargement du fichier ressource If $iLang = 0 Then ; Si windows est en français, écrire le message en ... français MsgBox(16, "Erreur chargement du fichier ressource", "Une erreur inattendue est arrivée lors du chargement de 'DacoDate.res'" & @CRLF & "Erreur #" & $iErr2) Else ; Autrement en anglais pour toutes les autres langues MsgBox(16, "Error loading ressource file", "There was an error loading the required 'DacoDate.res' file" & @CRLF & "Error #" & $iErr2) EndIf Exit ; Impossible de continuer! EndIf For $i = 0 To UBound($aTempo) - 1 ; Passer toutes les lignes For $j = 0 To UBound($aTempo, 2) - 1 ; Passer toutes les colonnes $aTempo[$i][$j] = StringReplace($aTempo[$i][$j], "{", @CRLF) ; Substituter un retour du chariot pour chaque 'ouvrir accolade' $aTempo[$i][$j] = StringReplace($aTempo[$i][$j], "~", $sVer) ; Substituter la variable $sVer pour chaque 'tilde' Next Next ReDim $aTempo[UBound($aTempo)][UBound($aTempo, 2) - 1] ; Enlever la dernière colonne; J'y ai mis des "!" car sans rien dans cette cellule, les cellules vides ne sont pas exportées Return $aTempo ; Retourner une matrice de traduction complète EndFunc ;==>_LANG_Charger Func _LANG_Definir() ; Détermine la langue du système d'opération (valeur par défaut: français = 0) Local $iL = @OSLang ; La langue rapportée par le système d'opération Switch StringRight($iL, 2) ; Truc venant des instructions : les deux derniers caractères donnent la FAMILLE de langue. Donc français Belgique est la même chose que français Canada Case "0c" Return 0 ; "French", default Case "09" Return 1 ; "English" Case "07" Return 2 ; "German" Case "0a" Return 3 ; "Spanish" Case "0b" Return 4 ; "Finnish" Case "10" Return 5 ; "Italian" Case "13" Return 6 ; "Dutch" Case "14" Return 7 ; "Norwegian" Case "15" Return 8 ; "Polish" Case "16" Return 9 ; "Portuguese" Case "1d" Return 10 ; "Swedish" EndSwitch Return 0 ; En cas de doute, mettre l'interface en français EndFunc ;==>_LANG_Definir Func _PROG_Verif() ; Check if an instance is already running ; Source: https://www.autoitscript.com/forum/topic/32301-start-script-check-if-script-is-running-if-it-is-kill-it-and-continue/ Local $g_szVersion = $sVer ; Give this program a name If WinExists($g_szVersion) Then Exit (255) ; If a window has this name, close this program. Return code 255. AutoItWinSetTitle($g_szVersion) ; Set windows title accordingly EndFunc ;==>_PROG_Verif Func _PROGRESSION_Quitter() ; L'usager veut quitter alors que le programme est en train de changer la date et heure des fichiers Local $iMsgBoxAnswer ; Réponse d'invite $iMsgBoxAnswer = MsgBox(36, $aGUI_Lang[260][$iLang], $aGUI_Lang[261][$iLang]) ; "Quitter pendant l'écriture","Modification des dates et heures en cours. Voulez-vous vraiment quitter?" If $iMsgBoxAnswer = 6 Then Exit ; L'usager voulait vraiment quitter EndFunc ;==>_PROGRESSION_Quitter Func _RAZ_Urgence() ; Touche d'urgence! On remet tout à zero. Ctrl + Shift + Alt + R $iInvite = 1 ; Indique qu'on ne veut pas répondre à la question Oui ou Non parce qu'elle sera peut-être affichée dans une langue inconnue _GUI_Main_Raz() ; Faire la remise à zéro mais sans poser de questions EndFunc ;==>_RAZ_Urgence Func _REG_Ecrire() ; Écrire les valeurs internes au registre Local $i ; Variable générique, sert ici à identifier combien d'opérations ont été réussies avec succès. $i += RegWrite($sREG_Base, "Mem1", "REG_SZ", GUICtrlRead($aGUI_Main[28])) ; Écrire la valeur le premier bouton mémoire dans le registre. $i += RegWrite($sREG_Base, "Mem2", "REG_SZ", GUICtrlRead($aGUI_Main[30])) ; Écrire la valeur du deuxième bouton mémoire dans le registre. $i += RegWrite($sREG_Base, "UNESection", "REG_DWORD", $iUNESection) ; Écrire la valeur pour $iUNESection dans le registre. $i += RegWrite($sREG_Base, "Fichier", "REG_SZ", $sFichier) ; Écrire la valeur pour $sFichier dans le registre. $i += RegWrite($sREG_Base, "Journal", "REG_DWORD", $iJournal) ; Écrire la valeur pour $iJournal dans le registre. $i += RegWrite($sREG_Base, "RANGÉECréé", "REG_SZ", _GUI_Main_LireRangee(0, 0)) ; Écrire le contenu de la rangée "Créé" dans le registre en format "YYYYMMDDHHMMSS" $i += RegWrite($sREG_Base, "RANGÉEModif", "REG_SZ", _GUI_Main_LireRangee(1, 0)) ; Écrire le contenu de la rangée "Modifié" dans le registre en format "YYYYMMDDHHMMSS" $i += RegWrite($sREG_Base, "RANGÉEAcces", "REG_SZ", _GUI_Main_LireRangee(2, 0)) ; Écrire le contenu de la rangée "Accédé" dans le registre en format "YYYYMMDDHHMMSS" $i += RegWrite($sREG_Base, "Langue", "REG_DWORD", $iLang) ; Écrire la dernière langue utilisée dans le registre If $i < 9 Then ; Problème d'écriture au registre! En théorie, chaque écriture doit retourner 1, si le total est moins que 9, cela indique une erreur ou plus If Not IsPtr($hGD) Then $hGD = _GUIDisable($aGUI_Main[0], 0, 50, -1) ; Griser l'interface principale MsgBox(48, $aGUI_Lang[256][$iLang], $aGUI_Lang[257][$iLang]) ; "Erreur écriture au registre", "Ce logiciel a tenté d'écrire au registre et n'a pas pu. Fin abrupte du logiciel." Exit ; Sortie dure du logiciel EndIf EndFunc ;==>_REG_Ecrire Func _REG_Lire() ; lire le registre, peuple les variables Local $sTempo ; Variable temporaire à tout faire Local $i ; Variable générique $sTempo = RegRead($sREG_Base, "Mem1") ; Lire la valeur "Mémoire 1" If @error Or $sTempo = "" Then ; N'existe pas. La variable devient donc l'heure et la date actuelle GUICtrlSetData($aGUI_Main[28], _VAR_Maintenant(1)) ; Assigner la date d'aujourd'hui en texte lisible Else ; Assigner la valeur trouvée dans le registre GUICtrlSetData($aGUI_Main[28], $sTempo) EndIf $sTempo = RegRead($sREG_Base, "Mem2") ; Lire la valeur "Mémoire 2" If @error Or $sTempo = "" Then ; N'existe pas. La variable devient donc l'heure et la date actuelle GUICtrlSetData($aGUI_Main[30], _VAR_Maintenant(1)) ; Assigner la date d'aujourd'hui en texte lisible Else ; Assigner la valeur trouvée dans le registre GUICtrlSetData($aGUI_Main[30], $sTempo) EndIf $iJournal = RegRead($sREG_Base, "Journal") ; Lire la valveur "Journal" If @error Or $iJournal < 0 Or $iJournal > 1 Then $iJournal = 0 ; N'existe pas. La variable acquiert donc sa valeur par défaut. If $iJournal = 1 Then ; Le journal est activé GUICtrlSetState($aGUI_Main[8], $GUI_CHECKED) ; Cocher menu GUICtrlSetState($aGUI_Main[25], $GUI_CHECKED) ; Cocher interface Else GUICtrlSetState($aGUI_Main[8], $GUI_UNCHECKED) ; Déocher menu GUICtrlSetState($aGUI_Main[25], $GUI_UNCHECKED) ; Cocher interface EndIf $iUNESection = RegRead($sREG_Base, "UNESection") ; Lire la valeur If @error Or $iUNESection < 0 Or $iUNESection > 1 Then $iUNESection = 1 ; N'existe pas. La variable acquiert donc sa valeur par défaut. If $iUNESection = 1 Then ; Une seule section activé GUICtrlSetState($aGUI_Main[9], $GUI_CHECKED) ; Cocher menu GUICtrlSetState($aGUI_Main[26], $GUI_CHECKED) ; Cocher interface _GUI_Section_Activer($iUNESection) ; Désactiver les cellules 'Modifié' et 'Accédé' _GUI_Section_Duplicata() ; Recopier les valeurs du champs "Créer" dans les deux autres Else GUICtrlSetState($aGUI_Main[9], $GUI_UNCHECKED) ; Déocher menu GUICtrlSetState($aGUI_Main[26], $GUI_UNCHECKED) ; Décocher interface EndIf $sFichier = RegRead($sREG_Base, "Fichier") ; Lire le dernier chemin utilisé dans le cadre de ce logiciel If @error Or $sFichier = "" Then $sFichier = @WorkingDir & "\" ; La valeur n'existe pas? On utilise l'endroit où se trouve l'exécutable / script par défaut If FileExists($sFichier) = 0 Then $sFichier = @WorkingDir & "\" ; Le dossier n'existe pas / plus. On lui donne la valeur par défaut $sTempo = RegRead($sREG_Base, "RANGÉECréé") ; Lire la rangée "Crée" If @error Or $sTempo = "" Then ; N'existe pas. La variable devient donc l'heure et la date actuelle $sTempo = _VAR_Maintenant(2) ; Date actuelle en format matriciel Else ; Autrement il y a une valeur. Il faut la convertir $sTempo = _VAR_Convertir($sTempo, 2) ; On veut une valeur matricielle EndIf For $i = 0 To 5 GUICtrlSetData($aGUI_Main[33 + ($i * 2)], $sTempo[$i]) ; Copier dans l'interface Next $sTempo = RegRead($sREG_Base, "RANGÉEModif") ; Lire la rangée "Modifié" If @error Or $sTempo = "" Then ; N'existe pas. La variable devient donc l'heure et la date actuelle $sTempo = _VAR_Maintenant(2) ; Date actuelle en format matriciel Else ; Autrement il y a une valeur. Il faut la convertir $sTempo = _VAR_Convertir($sTempo, 2) ; On veut une valeur matricielle EndIf For $i = 0 To 5 GUICtrlSetData($aGUI_Main[53 + ($i * 2)], $sTempo[$i]) ; Copier dans l'interface Next $sTempo = RegRead($sREG_Base, "RANGÉEAcces") ; Lire la rangée "Accédé" If @error Or $sTempo = "" Then ; N'existe pas. La variable devient donc l'heure et la date actuelle $sTempo = _VAR_Maintenant(2) ; Date actuelle en format matriciel Else ; Autrement il y a une valeur. Il faut la convertir $sTempo = _VAR_Convertir($sTempo, 2) ; On veut une valeur matricielle EndIf For $i = 0 To 5 GUICtrlSetData($aGUI_Main[73 + ($i * 2)], $sTempo[$i]) ; Copier dans l'interface Next $sTempo = RegRead($sREG_Base, "Langue") ; Lire la valeur "Langue" If @error Or $sTempo < 0 Or $sTempo > 10 Then ; N'existe pas ou a une valeur invalide. On lui donne la valeur par défaut $iLang = _LANG_Definir() ; Trouver la langue système Else ; Assigner la valeur trouvée dans le registre $iLang = $sTempo EndIf EndFunc ;==>_REG_Lire Func _VAR_Convertir(ByRef $Tempo, $iMode) ; Automagiquement transformer une date / heure au format voulu ; 0 = "YYYYMMDDHHMMSS" ; 1 = "2022-01-01 23:59:59" ; 2 = Variable matricielle Local $i ; Variable générique Local $aTempo[6] ; Matricielle tempoaire pour la date et l'heure Local $sTempo ; Contient la date et l'heure en mode "lisible" ou "fancy" If Not IsInt($iMode) Or ($iMode < 0 Or $iMode > 2) Then ; Vérification de $iMode: nombre entier entre 0 et 2 $iMode = 0 ; Entrée invalide, on retourne donc la valeur formattée pour FileSetTime() EndIf If StringLen($Tempo) = 14 Then ; C'est donc une valeur "YYYYMMDDHHMMSS". NOTE: INT() ne marchait pas ... If $iMode = 0 Then Return $Tempo ; Même valeur que l'entrée If $iMode = 1 Then ; Il faut convertir en texte "lisible" $sTempo &= StringLeft($Tempo, 4) & "-" ; Rajouter l'année $sTempo &= StringMid($Tempo, 5, 2) & "-" ; Rajouter le mois $sTempo &= StringMid($Tempo, 7, 2) & " " ; Rajouter le jour $sTempo &= StringMid($Tempo, 9, 2) & ":" ; Rajouter l'heure $sTempo &= StringMid($Tempo, 11, 2) & ":" ; Rajouter la minute $sTempo &= StringMid($Tempo, 13, 2) ; Rajouter la seconde Return $sTempo Else ; Autrement retourner une matricielle $aTempo[0] = StringLeft($Tempo, 4) ; Rajouter l'année $aTempo[1] = StringMid($Tempo, 5, 2) ; Rajouter le mois $aTempo[2] = StringMid($Tempo, 7, 2) ; Rajouter le mois $aTempo[3] = StringMid($Tempo, 9, 2) ; Rajouter le mois $aTempo[4] = StringMid($Tempo, 11, 2) ; Rajouter le mois $aTempo[5] = StringMid($Tempo, 13, 2) ; Rajouter le mois Return $aTempo EndIf ElseIf IsString($Tempo) Then ; La source est en texte "lisible" If $iMode = 1 Then Return $Tempo ; Même valeur que l'entrée If $iMode = 0 Then ; Il faut convertir en "YYYYMMDDHHMMSS" $Tempo = StringReplace($Tempo, "-", "") ; Effacer les tirets $Tempo = StringReplace($Tempo, " ", "") ; Effacer les espaces $Tempo = StringReplace($Tempo, ":", "") ; Effacer les "deux points" Return $Tempo ; C'est prêt. Retourner avec la réponse Else ; Autrement retourner une matricielle $aTempo = StringSplit($Tempo, "- :", 2) ; Séparer en cellules sans décompte For $i = 3 To 5 $aTempo[$i] = $aTempo[$i + 1] ; décaler les valeurs Next ReDim $aTempo[6] Return $aTempo EndIf Else ; La source est une variable matricielle If $iMode = 2 Then Return $Tempo ; Même valeur que l'entrée If $iMode = 0 Then ; Il faut convertir en "YYYYMMDDHHMMSS" For $i = 0 To 5 $sTempo &= $Tempo[$i] ; Copier le contenu texte Next Return $sTempo Else ; Il faut convertir en texte "lisible" $sTempo &= $Tempo[0] & "-" ; Mettre l'année $sTempo &= StringFormat("%02d", $Tempo[1]) & "-" ; Mettre le mois $sTempo &= StringFormat("%02d", $Tempo[2]) & " " ; Mettre le jour $sTempo &= StringFormat("%02d", $Tempo[3]) & ":" ; Mettre l'année $sTempo &= StringFormat("%02d", $Tempo[4]) & ":" ; Mettre l'année $sTempo &= StringFormat("%02d", $Tempo[5]) ; Mettre l'année Return $sTempo EndIf EndIf ; Personne ne devrait se rendre ici. EndFunc ;==>_VAR_Convertir Func _VAR_Maintenant($iMode = 0) ; Retourner la date actuelle. Spécifier le type de retour requis ; 0 = Modèle "YYYYMMDDHHMMSS" ; 1 = "2022-01-01 23:59:59" ; 2 = Variable matricielle If Not IsInt($iMode) Or ($iMode < 0 Or $iMode > 2) Then ; Vérification de $iMode: nombre entier entre 0 et 2 $iMode = 0 ; Entrée invalide, on retourne donc la valeur formattée pour FileSetTime() EndIf If $iMode = 0 Then ; Retour standard , prêt pour la fonction FileSetTime() Return @YEAR & StringFormat("%02d", @MON) & StringFormat("%02d", @MDAY) & StringFormat("%02d", @HOUR) & StringFormat("%02d", @MIN) & StringFormat("%02d", @SEC) ElseIf $iMode = 1 Then ; Besoin d'une date "lisible" Return @YEAR & "-" & StringFormat("%02d", @MON) & "-" & StringFormat("%02d", @MDAY) & " " & StringFormat("%02d", @HOUR) & ":" & StringFormat("%02d", @MIN) & ":" & StringFormat("%02d", @SEC) Else ; Besoin d'une matrice contenant la date ou encore $iMode invalide Local $aTempo[6] = [@YEAR, StringFormat("%02d", @MON), StringFormat("%02d", @MDAY), StringFormat("%02d", @HOUR), StringFormat("%02d", @MIN), StringFormat("%02d", @SEC)] Return $aTempo EndIf EndFunc ;==>_VAR_Maintenant