Page 1 sur 1
[R] Edition d'un fichier choisi dans une liste
Posté : sam. 05 mars 2011 11:48
par pierrotm777
Bonjour,
J'ai deux petits soucis !
-Editer un fichier choisi dans une liste
-Fermer une fenêtre fille sans fermer la fenêtre principale
Pour le premier problème , j'essai donc cela:
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <GuiListBox.au3>
#include <File.au3>
#include <ListBoxConstants.au3>
#include <WindowsConstants.au3>
Dim $SkinList = _FileListToArray(@ScriptDir,"*.txt",1)
;Gui Principale
$MainGUI = GUICreate("Skinner Tool ", 500, 603, -1,-1)
$EditAnyScreen = GUICtrlCreateButton("***", 310, 220, 60, 13, $WS_GROUP)
GUISetState()
;Gui All skin files
$AllSkinFilesGUI = GUICreate("", 490, 350, 0,235,$MainGUI)
GUICtrlCreateLabel("Select the file that you want to edit !!!",100, 5, 300, 20)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$AllSkinList = GUICtrlCreateList("",2, 22, 488, 300, BitOR($LBS_STANDARD, $LBS_EXTENDEDSEL))
GUICtrlSetFont(-1, 10, 450, 0, "MS Sans Serif")
For $i = 1 To $SkinList[0]
GUICtrlSetData($AllSkinList, $SkinList[$i])
Next
$EditSelectedFile = GUICtrlCreateButton("Edit", 150, 325, 168, 25)
GUISetState(@SW_HIDE,$AllSkinFilesGUI)
$AllSkinFilesGUIStatus = False
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $EditAnyScreen
GUISwitch($AllSkinFilesGUI);edition de l'écran choisi dans une liste
if $AllSkinFilesGUIStatus = True Then
GUISetState(@SW_HIDE,$AllSkinFilesGUI)
$AllSkinFilesGUIStatus = False
Else
GUISetState(@SW_SHOW,$AllSkinFilesGUI)
$AllSkinFilesGUIStatus = True
EndIf
Case $EditSelectedFile
$SkinList[0][0] = _GUICtrlListBox_GetCount($AllSkinList)+1
redim $SkinList[$SkinList[0][0]][2]
for $i = 0 to $SkinList[0][0] -2
$SkinList[$i+1]=_GUICtrlListBox_GetText($AllSkinList, $i)
Next
ShellExecute($SkinList, "", @ScriptDir , "edit")
EndSwitch
Wend
Mais avec une erreur au bout !
Pour le problème de fermeture de la fenêtre fille , je ne sais pas comment faire !
Merci de votre aide
Re: [..] Edition d'un fichier chois dans une liste
Posté : sam. 05 mars 2011 11:55
par Tlem
Une re-lecture du titre de votre sujet est requise ...
Re: [..] Edition d'un fichier choisi dans une liste
Posté : sam. 05 mars 2011 12:15
par pierrotm777
Désolé

Re: [..] Edition d'un fichier choisi dans une liste
Posté : sam. 05 mars 2011 18:13
par pierrotm777
Bon , he bien j'ai trouvé une solution à mon premier problème:
J'ai remplacé:
Code : Tout sélectionner
Dim $SkinList = _FileListToArray(@ScriptDir,"*.txt",1)
For $i = 1 To $SkinList[0]
GUICtrlSetData($AllSkinList, $SkinList[$i])
Next
par:
Code : Tout sélectionner
_GUICtrlListBox_Dir($AllSkinList,@ScriptDir & "\"&GUICtrlRead($EditSelectedFilter))
Ce qui évite de passer par un tableau.
J'ai rajouté un filtre créé par un combo !
► Afficher le texte
Code : Tout sélectionner
#include <GUIConstantsEx.au3>
#include <GuiListBox.au3>
#include <ListBoxConstants.au3>
#include <WindowsConstants.au3>
;Gui Principale
$MainGUI = GUICreate("Skinner Tool ", 500, 603, -1,-1)
$EditAnyScreen = GUICtrlCreateButton("***", 310, 220, 60, 13, $WS_GROUP)
GUISetState()
;Gui All skin files
$AllSkinFilesGUI = GUICreate("", 490, 350, 0,235,BitOR($WS_SYSMENU,$WS_DLGFRAME,$WS_POPUP,$WS_CLIPSIBLINGS),bitor($WS_EX_MDICHILD,$WS_EX_CLIENTEDGE),$MainGUI)
GUICtrlCreateLabel("Select the skin file that you want to edit !!!",100, 5, 300, 20)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
$AllSkinList = GUICtrlCreateList("",2, 22, 488, 300, BitOR($LBS_STANDARD, $LBS_EXTENDEDSEL))
GUICtrlSetFont(-1, 10, 450, 0, "MS Sans Serif")
$EditSelectedFile = GUICtrlCreateButton("Edit", 150, 325, 168, 25)
GUICtrlCreateLabel("Filter :",370,327,45,25)
GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
$EditSelectedFilter = GUICtrlCreateCombo("", 420, 325, 60, 25)
GUICtrlSetData(-1, "*.skin|*.txt|*.png|*.*", "*.*")
GUICtrlSetFont(-1, 10, 450, 0, "MS Sans Serif")
GUISetState(@SW_HIDE,$AllSkinFilesGUI)
$AllSkinFilesGUIStatus = False
_GUICtrlListBox_Dir($AllSkinList,@ScriptDir & "\"&GUICtrlRead($EditSelectedFilter))
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $EditAnyScreen
GUISwitch($AllSkinFilesGUI);edition de l'écran choisi dans une liste
if $AllSkinFilesGUIStatus = True Then
GUISetState(@SW_HIDE,$AllSkinFilesGUI)
$AllSkinFilesGUIStatus = False
Else
GUISetState(@SW_SHOW,$AllSkinFilesGUI)
$AllSkinFilesGUIStatus = True
EndIf
Case $EditSelectedFile
[color=#FF0000] $testthis = _GUICtrlListBox_GetSelItems($AllSkinList)
$sItems = ''
For $iI = 1 To $testthis[0]
$sItems &= _GUICtrlListBox_GetText($AllSkinList,$testthis[$iI])
Next[/color]
ShellExecute($sItems, "", @ScriptDir , "edit")
Case $EditSelectedFilter
[color=#80BF00] _GUICtrlListBox_ResetContent($AllSkinList)
_GUICtrlListBox_BeginUpdate($AllSkinList)
_GUICtrlListBox_Dir($AllSkinList,@ScriptDir & "\"&GUICtrlRead($EditSelectedFilter))
_GUICtrlListBox_EndUpdate($AllSkinList)[/color]
EndSwitch
Wend
La partie rouge permet de de choisir une ligne de la liste.
La partie verte permet de choisir selon le combo avec une mise à jour automatique .
Re: [..] Edition d'un fichier choisi dans une liste
Posté : sam. 05 mars 2011 19:00
par oOanthonyOo
Si tu peu post une indication de comment tu l'as résolu sa permettra a tout utilisateur passant par la de pouvoir essayer a leur tour de faire sa.
Re: [..] Edition d'un fichier choisi dans une liste
Posté : dim. 06 mars 2011 05:10
par overflow
pour la fermeture de la gui fille tu peu t orienter vers un truc comme ca :
Code : Tout sélectionner
$MaForm=GUICreate("My GUI") ; cration d une gui
bla bla code
bla bla code
GUIDelete($Maform) ; effacement de gui
et si tu ne met pas d infos entre parenthèse cela delete la gui active
Re: [..] Edition d'un fichier choisi dans une liste
Posté : dim. 06 mars 2011 11:16
par pierrotm777
Oui mais ça c'est sur un bouton !
Mon besoin est de pouvoir fermer une fenêtre avec la croix en haut à droite de celle ci sans fermer l'ensemble du script !
Re: [..] Edition d'un fichier choisi dans une liste
Posté : lun. 07 mars 2011 11:07
par sksbir
Bonjour
La partie du code qui s'exécute quand on ferme une fenetre est pourtant accessible, elle est même inscrite dans ton script:
Sauf que dans ton cas, il faut bien sûr faire autre chose que juste "exit" : Tu dois analyser quelle fenêtre est active, et en fonction de laquelle est active, conduire soit un exit, soit juste un guidelete comme suggéré.
Re: [..] Edition d'un fichier choisi dans une liste
Posté : lun. 07 mars 2011 11:20
par pierrotm777
Oui, mais elle ferme non seulement la fenêtre fille mais aussi le script !
Je voudrait éviter d'avoir à passer par un bouton avec Guidelete($fifille)
Re: [..] Edition d'un fichier choisi dans une liste
Posté : lun. 07 mars 2011 11:22
par matwachich
Dans mes programmes, je fait toujours mes fenêtres de configuration (fenêtres filles) de la même manière:
► Afficher le texte
Code : Tout sélectionner
Global $Config_GUI
_createConfigGui()
... Gui principale avec sa boucle ...
... Et l'événement qui lance la fenêtre de configuration
disant qu'il appel la fonction _cfg() ...
Func _cfg()
GuiSetState(@SW_SHOW, $Config_GUI)
Local $valider = 0
While 1
Case $Bouton_OK
$valider = 1
ExitLoop
Case $GUI_EVENT_CLOSE, $Bouton_Annuler
ExitLoop
WEnd
If $valider Then
; on valid les paramètres
EndIf
GuiSetState(@SW_HIDE, $Config_GUI)
EndFunc
Func _createConfigGui()
$Config_GUI = GuiCreate(...)
; On créer ici la gui de configuration
EndFunc
De cette manière, la gui fille est créer des le début du script, et on ne fait que la caché/montré lorsque on en a besoin
Re: [..] Edition d'un fichier choisi dans une liste
Posté : lun. 07 mars 2011 11:36
par pierrotm777
Là, vous utilisée un bouton annuler !
C'est impossible de tester quelle fenêtre demande à être fermée par ce bouton X ?
Re: [..] Edition d'un fichier choisi dans une liste
Posté : lun. 07 mars 2011 11:40
par sksbir
pierrotm777 a écrit :Oui, mais elle ferme non seulement la fenêtre fille mais aussi le script !
Je voudrait éviter d'avoir à passer par un bouton avec Guidelete($fifille)
Je pense que tu n'as pas très bien compris ce que je raconte. Alors, fait le test suivant : remplace la portion de code suivante
par celle ci
Code : Tout sélectionner
Case $GUI_EVENT_CLOSE
msgbox(0,"test","coucou") ; ya plus "exit" ici!!
et essaye ensuite de fermer tes fenêtres...
Re: [..] Edition d'un fichier choisi dans une liste
Posté : lun. 07 mars 2011 11:49
par pierrotm777
Oui est là je ne ferme plus aucune fenêtre !
J'avais déjà essayé ça !
Re: [..] Edition d'un fichier choisi dans une liste
Posté : lun. 07 mars 2011 12:03
par sksbir
Evidemment, c'était un exemple pour te montrer que quand on clique sur la croix, ça ne ferme pas le programme, mais ça exécute la portion de code qui est là pour ça!
Comme je l'ai expliqué précédemment, l'instruction exit doit être conditionnée pour n'agir que quand on ferme la fenêtre "mère".
dans cet exemple, $MAFENETRE1, c'est la fenêtre "fille", celle pour laquelle le script ne doit pas se finir quand on la ferme.
Pour ton script ça doit être $AllSkinFilesGUI...
Code : Tout sélectionner
Case $GUI_EVENT_CLOSE
$TEST=wingetstate($MAFENETRE1)
if bitand($TEST,8) then
guidelete($MAFENETRE1)
else
exit
endif
Re: [..] Edition d'un fichier choisi dans une liste
Posté : lun. 07 mars 2011 14:00
par pierrotm777
J'ai trouvé sur le forum anglais cette solution qui semble fonctionner.
Je regarde si cela fonctionne avec plusieurs fenêtres filles quelque soit leur position d'ouverture !
► Afficher le texte
Code : Tout sélectionner
Case $GUI_EVENT_CLOSE
If WinActive($MainGUI) Then
Exit
ElseIf WinActive($DebugGUI) Then
GUISetState(@SW_HIDE,$DebugGUI)
ElseIf WinActive($MousePosGUI) Then
GUISetState(@SW_HIDE,$MousePosGUI)
EndIf
Re: [..] Edition d'un fichier choisi dans une liste
Posté : lun. 07 mars 2011 14:09
par pierrotm777
Je viens de faire le test avec cette solution qui fonctionne trés bien !
► Afficher le texte
Code : Tout sélectionner
Case $GUI_EVENT_CLOSE
If WinActive($MainGUI) Then
Exit
ElseIf WinActive($DebugGUI) Then
GUISetState(@SW_HIDE,$DebugGUI)
ElseIf WinActive($KeyCodeGUI) Then
GUISetState(@SW_HIDE,$KeyCodeGUI)
ElseIf WinActive($ColorGUI) Then
GUISetState(@SW_HIDE,$ColorGUI)
ElseIf WinActive($GpsGUI) Then
GUISetState(@SW_HIDE,$GpsGUI)
ElseIf WinActive($WindowInfoGUI) Then
GUISetState(@SW_HIDE,$WindowInfoGUI)
ElseIf WinActive($MousePosGUI) Then
GUISetState(@SW_HIDE,$MousePosGUI)
EndIf
Merci pour votre aide
