Announcement

Collapse
No announcement yet.

Wie verwendet man den Dialog "Verzeichnis auswählen" 'SHBrowseForFolder(&browseInfo)'

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Wie verwendet man den Dialog "Verzeichnis auswählen" 'SHBrowseForFolder(&browseInfo)'

    Hallo zusammen,

    Kann mir jemand sagen, wie man die Funktion 'SHBrowseForFolder(&browseInfo)' anwendet? Könntet Ihr mir bitte eine detailierte Vorgensweise aufzeigen, da ich die Beispiele, die Borland liefert, nicht nachvollziehen kann.

    Ich bin ein C++ Neuling und benötige diese Dialog für mein Vordiplom.

    Ich währe Euch sehr dankbar für eine rasche Antwort.

    Vielen Dank im Voraus

    DanyS

  • #2
    Na dann wollen wir einem angehenden Diplomaten nicht im Wege stehen ;-)

    <pre>
    #define NO_WIN32_LEAN_AND_MEAN
    #include <slhobj.h>

    String __fastcall TFormMain:lgBrowseDir(const String& sDlgTitel)
    {
    String sReturn = NULL;
    char szPfad[MAX_PATH];
    BROWSEINFO Browse;

    Browse.hwndOwner = FormMain->Handle;
    Browse.pidlRoot = NULL;
    Browse.pszDisplayName = szPfad;
    Browse.lpszTitle = sDlgTitel.c_str();
    Browse.ulFlags = BIF_RETURNONLYFSDIRS;
    Browse.lpfn = NULL;
    //Browse.lParam;
    //Browse.iImage;
    //WINSHELLAPI WINAPI
    LPITEMIDLIST ItemList = SHBrowseForFolder( &Browse);
    if (ItemList != NULL) {
    if (SHGetPathFromIDList(ItemList, szPfad))
    sReturn = szPfad;
    }
    // delete ItemList;
    return sReturn;
    }
    </pre>

    Gruß Thorste

    Comment


    • #3
      Sollte das nicht lieber

      #include "shlobj.h"

      heissen???

      ;-)
      Christia
      Christian

      Comment


      • #4
        Ok, erwischt. Das 'h' weiter links oder rechts....

        Aber auf die < > bestehe ich, ist zwar beim Builder nicht unbedingt nözig, finde ich aber schöner um zu zeigen, das es sich um allgemeine Header handelt und nicht um selbstgeschriebene.

        Gruß Thorste

        Comment


        • #5
          Hallo Thorsten,

          Vielen Dank für Deine schnelle Antwort.
          Ich habe da noch ein kleines Problem, wenn ich den Code hinzugefügt habe und compilieren möchte, bringt mir der Compailer folgende Fehlermeldungen:

          [C++ Fehler] shlobj.h(1762): E2238 Bezeichner 'FVSHOWINFO' mehrfach deklariert

          [C++ Fehler] shlobj.h(1936): E2238 Bezeichner 'FOLDERSETTINGS' mehrfach deklariert

          [C++ Fehler] shlobj.h(3717): E2238 Bezeichner 'DESKBANDINFO' mehrfach deklariert

          [C++ Fehler] shlobj.h(4808): E2238 Bezeichner 'SHELLFLAGSTATE' mehrfach deklariert

          Könntest du mir vielleicht weiterhelfen?

          Vielen Dank schon im Voraus.

          mfg
          Dany

          Comment


          • #6
            Es hat geklappt.
            Ich hatte die Datei <shlobj.h> im Headerfile meiner Unit includiert und nicht im .cpp, deswegen hatte ich die oben aufgefürhten Fehlermeldungen.

            Kann ich diesem Dialog auch ein Verzeichnispfad übergeben?

            Vielen Dank für Eure Hilfe!

            Gruss
            Dany

            Comment


            • #7
              Hi,

              Übergabe des Vezeichnisses habe ich noch nicht probiert.

              Zu Deinem ersten Fehler:

              Hast Du in Deinen Headern ein Define eigefügt z.B.<br>
              <pre>
              Datei: test.h<br>
              #ifdef TEST_H
              #define TEST_H

              ... Jede Menge Code

              #endif
              </pre>

              Dann sollte so ein Fehler wie bei Dir wahrscheinlich nicht auftauchen.<br>
              Oder es lag daran, das Du den o.g. define NO_WIN32_LEAN_AND_MEAN nicht vor dem einbinden der shlobj.h definiert hast.

              Soweit meine Vermutungen.

              Thorste

              Comment

              Working...
              X