IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

[VB2008] structure BrowseInfo + repertoire par défaut


Sujet :

VB.NET

  1. #1
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut [VB2008] structure BrowseInfo + repertoire par défaut
    Salut,

    Je migre un code vb6 en vb.net, et j'utilise l'api SHBrowseForFolder pour choisir un dossier. Cette api fonctionne avec la structure BrowseInfo tel qu'expliqué dans ce post de 2005 à ce sujet mais sous ACCESS, donc vb6 grosso modo :

    http://www.developpez.net/forums/d25...rtoire-racine/

    C'est la façon dont mon code est fait en vb6 et il fonctionne parfaitement (avec repertoire par défaut grace à fonction callback)

    Je tente cependant desespérément de migrer ça en vb.net, je suis passé par le système de delegate en lieu et place de adressof mais sans résultat.

    Voici mon code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    Option Strict Off
    Option Explicit On
    Module mdlFolder
     
    	Delegate Function BrowseCallbackProcDlg(ByVal hWnd As Long, ByVal uMsg As Long, ByVal lParam As Long, ByVal lpData As Long) As Long
     
        Private Structure BrowseInfo
            Dim hWndOwner As Long
            Dim pIDLRoot As Long
            Dim pszDisplayName As Long
            Dim lpszTitle As String
            Dim ulFlags As Long
            Dim lpfnCallback As BrowseCallbackProcDlg
            Dim lParam As Long
        End Structure
     
        Private Declare Function SHGetPathFromIDList Lib "SHELL32.DLL" Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) As Long
        Private Declare Function SHBrowseForFolder Lib "SHELL32.DLL" Alias "SHBrowseForFolderA" (ByRef lpBrowseInfo As BrowseInfo) As Long
        Private Declare Function SHGetIDListFromPath Lib "SHELL32.DLL" Alias "#162" (ByVal szPath As String) As Long
        Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Long) As Long
     
        Public Function GetFolderName(ByRef lngHandle_I As Long, ByVal strDefaultDirectory_I As String) As String
        Dim lngIDList As Long
        Dim strBuffer As String
        Dim tBrowseInfo As new BrowseInfo()
        Dim dlgCallBack As BrowseCallbackProcDlg
        Const BIF_RETURNONLYFSDIRS As Short = 1
     
            GetFolderName = ""
     
            'Initialisation de la structure
            dlgCallBack = new BrowseCallbackProcDlg(AddressOf BrowseCallbackProc)
            With tBrowseInfo
            	.hWndOwner = lngHandle_I
            	.lpszTitle = "Sélectionner le répertoire"
            	.ulFlags = BIF_RETURNONLYFSDIRS
            	.lpfnCallback = dlgCallBack
    			.lParam = SHGetIDListFromPath(Convert.ToString(strDefaultDirectory_I))
            End With
     
             'Affichage de la fenêtre de sélection du répertoire
            lngIDList = SHBrowseForFolder(tBrowseInfo)
     
             'Récupération du répertoire sélectionné
            If lngIDList Then
            	strBuffer = Space(512)
            	SHGetPathFromIDList(lngIDList, strBuffer)
            	GetFolderName = Left(strBuffer, InStr(strBuffer, vbNullChar) - 1)
            End If
        End Function
     
        Public Function BrowseCallbackProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal lParam As Long, ByVal lpData As Long) As Long
        Const BFFM_INITIALIZED As Short = 1
        Const WM_USER As Long = &H400
        Const BFFM_SETSELECTIONA As Decimal = (WM_USER + 102)
     
            If uMsg = BFFM_INITIALIZED Then Call SendMessage(hWnd, BFFM_SETSELECTIONA, 0, lpData)
        End Function
    End Module
    La dialog box se lance bien, mais à aucun moment elle ne passe dans BrowseCallbackProc (point d'arret)

    si vous avez une idée ...

    merci, bonne journée
    seb

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    bonjour,

    En Vb.net tu as les outils de boite de dialogue, notamment :

    - OpenFileDialog
    - SaveFileDialog

    Mais je n'ai pas bien compris ce que faisait ton code.

    Mais regarde de ce coté la ca devrait t'aider je pense.

    ++

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    salut et merci de ta réponse

    en fait le client exige une compatibilité maximale, donc les fenêtres doivent rester les mêmes .... la boite de dialogue choisit un dossier et non un fichier

    merci !

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    bonjour

    il existe une autre boite de dialogue :

    FolderBrowserDialog.

    lui permet de choisir un dossier si je dis pas de betise.

    en fait le client exige une compatibilité maximale, donc les fenêtres doivent rester les mêmes
    Présentation graphique particulière de la boite de dialogue? La je pense qu'il faudra recreer un outil personnalisé mais je connais pas du tout la methodologie pour recreer un élément personnalisé, un peu comme la classe que tu as créé.

    Peut etre qu'en regardant le détail de la classe folderBrowserDialog tu trouveras des éléments.

    ++

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    FolderBrowserDialog n'admet pas de repertoire par défaut et c'est précisément là oú je coince

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    bon ce code fonctionne :

    http://www.codeguru.com/vb/controls/.../?thread=39884

    il est égal à 1 goutte d'eau près au mien, je pige pas ... à tous les coups c'est une connerie du genre "ah oui mais on vous a pas dit il fallait déclarer en public sinon ça marche pas"

    enfin bref résolu

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Bonjour,

    Il y a bien la propriété RootFolder :

    Cependant il offre une liste, on ne peut pas saisir son propre répertoire, de plus cela ne permet une navigation que dans ce répertoire.

    Il est vrai que c'est bizarre qu'il n'y ai pas possibilité comme dans opendialog ou savedialog de definir un répertoire par défaut à l'ouverture de la boite de dialogue

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    Bonjour,

    Je viens de regarder ton lien. Et j'avais une petite question :

    Il semble qu'il s'agisse d'un module.

    Comment tu intègres ce module dans ton projet?


  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 483
    Points : 309
    Points
    309
    Par défaut
    bonjour,

    oups autant pour moi la réponse est ici :

    http://www.codeguru.com/vb/controls/...cle.php/c3051/

    ++

  10. #10
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    1 173
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Argentine

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 173
    Points : 1 418
    Points
    1 418
    Par défaut
    salut

    je ne cherche pas un rootfolder mais un defaultfolder !
    sinon ton lien m'aurait convenu

    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Repertoire par défaut
    Par vinystic dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 04/12/2008, 17h53
  2. Selection de repertoire, repertoire par défaut
    Par ofinot dans le forum VBA Access
    Réponses: 4
    Dernier message: 11/07/2008, 10h06
  3. BATCH (repertoire par défaut)
    Par BURDOM dans le forum Windows XP
    Réponses: 3
    Dernier message: 04/12/2006, 09h33
  4. sqlplus modifier repertoire par défaut
    Par couse1 dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 13/09/2006, 09h29
  5. [outlook]repertoire par défaut de sauvegarde
    Par SpaceFrog dans le forum Outlook
    Réponses: 5
    Dernier message: 28/02/2006, 16h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo