Page 1 sur 1

[Tuto] FileSaveDialog : récupérer automatiquement le filtre

Posté : mar. 01 nov. 2011 18:17
par ZOTHOP
Bonjour,

beaucoup comme moi, auront remarqué qu'il est impossible d'ajouter automatiquement le filtre d'un FileSaveDialog comme extension au bout du nom d'un fichier. Quand il y a qu'un filtre on peut l'ajouter soit même avec FileOpen mais quand il en y a plusieurs, il est impossible de connaître lequel a été choisit.

J'ai découvert dans les WinAPI qu'il existe une fonction qui permet, d'afficher un FileSaveDialog et d'ajouter automatiquement le filtre sélectionné au bout du nom de fichier, comme extension.

Tout d'abord, il faut ajouter : #include <WinAPI.au3>

puis utiliser la fonction suivante :

$file=_WinAPI_GetSaveFileName("titre","filtre(s)")

Contrairement au FileSaveDialog classique, _WinAPI_GetSaveFileName retourne le chemin d'accès dans un array :

$file[1]= lettre du disque:\dossier
$file[2]= nom du fichier.filtre choisit

Pour vous en rendre compte voici une GUI avec _WinAPI_GetSaveFileName qui ouvre un FileSaveDialog avec deux filtres et qui affichent ces valeurs avec _ArrayDisplay

Code : Tout sélectionner

#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <Array.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 212, 146, 192, 124)
$Button1 = GUICtrlCreateButton("Save", 64, 56, 75, 25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg=$Button1
        $aFile = _WinAPI_GetSaveFileName("Sélectionnez un fichier","Text(*.txt)|OGH Files(*.ogh)")
        _ArrayDisplay($aFile)
    EndSelect
   
    Switch $nMsg
        Case $GUI_EVENT_CLOSE
            Exit

    EndSwitch
WEnd
_WinAPI_GetSaveFileName a beaucoup d'options, je vous invite à les découvrir dans User Defined Function Reference
et WinAPI Management.