NUR das Verzeichnis auswählen?
-
Hi ihr!
Ich habe folgendes Problem:Ich möchte für eine Installationsroutine ein Installationsverzeichnis auswählen lassen. Leider finde ich nur OpenFile und andere Standarddialoge und bei denen muss ja eine Datei direkt ausgewählt werden.
Weiß hierfür jemand eine Lösung, eine Art OpenDirectoryDialog?Eine kleinere Frage, kann ich beim OpenFileDialog auch ein Flag setzen, dass "Multiselect" erlaubt ist? Und für den fall, dass das geht, wie wird dann abgefragt, welche Dateien ausgewählt wurden?
Ich bedanke mich im Voraus für eure Hilfe.
-
Zur ersten Frage: Schau mal auf meine Homepage. Da gibt es eine Komponente TOpenFolderDialog. Funzt wunderbar.
-
Hi,
das ist schon genaudas, was ich brauche, vielen Dank erstmal.
Obwohl ich in der FAQ gesucht habe, bekomme ich die Komponente nicht installiert, da eine andere Endung verlangt wird (*.bpk).
Liegt der fehler bei mir?
-
-
Danke, das hat geholfen!
Frage 2 (das mit dem Multiselect) bliebe aber noch offen, in der MFC ist klar wie das geht, für die VCL hab ich leider nix gefunden.
-
Unter Options: ofAllowMultiselect
-
An die einzelnen Dateien mit vollständigem Pfad kommst Du dann z.B. mit
for (int i=0; i<OpenDialog1->Files->Count; i++) ShowMessage(OpenDialog1->Files->Strings[i]);
Gruß,
Goldfinger
-
@ -]-
OK, wenn du dir die Mühe machen willst, das alles zu coden... bitteschön. Mit meiner Kompo wärst du aber auf jeden Fall besser dran - ist viel einfacher.Anleitung zur Installation:
- Komponente->Komponente installieren->In neues Package
- Unit auswählen: TOpenFolderDialog.cpp
- Bei "Package" Durchsuchen klicken und in die Edit-Zeile des folgenden OpenDialogs den gewünschten Namen (z.B. "ofdPack")eingeben im gleichen Verzeichnis wie die cpp-Datei
- OK klicken
- OK klicken
- [Kompilation]
- Projekt->"ofdPack erstellen" auswählen
- [Kompilation]
- Datei->"Alle schließen" wählen
- Immer OK klicken
-
@Jansen
Ich habe mir nicht die Mühe gemacht, diese Kompo zu schreiben (war garnicht so einfach für mich), damit du hier auf die FAQ verweist. Ich habe sie geschrieben, damit alle sie benutzen können. Warum sollte man alles nochmal coden, wenns schon in ner Klasse fertig zu haben ist?
Und das, was in der FAQ steht, beinhaltet die minimale Funktionalität dieses Dialogs. Man kann z.B. noch auf OnChange reagieren und vieles mehr. Das alles ist in der FAQ nicht dokumentiert, ist mit meiner Kompo aber leicht zu machen.
-
Danke, beide Wege funktionieren tadellos.
Vielen Dank für die Antworten!
-
Original erstellt von WebFritzi:
Ich habe sie geschrieben, damit alle sie benutzen können.Aber nicht müssen, oder? Deshalb ist der Hinweis auf die (ab BCB5) vergleichsweise einfache Variante mit SelectDirectory wohl legitim.
-
Jo Jansen, das mit SelectDirectory ist ja auch OK. Aber in der FAQ ist noch ein Link zu BCBDEV, und da steht doch meines Wissens eine kleine Anleitung zu SHOpenFolder (oder wie auch immer die Funktion noch heißt). Ich dachte, -J- hätte das genommen, und da ist die Verwendung einer Klasse ja wohl einfacher und besser.
P.S.: Wir waren uns doch einig, dass SelectDirectory scheiße aussieht, oder?
-
Ich bin noch hin- und hergerissen, welche Lösung ich nehme, im Grunde erfüllt SelectDirectory meine Anforderungen aber die Klasse von Webfritzi kann schon einiges
wenn man sie mal installiert ha *g*
-
Es steht dir frei. Ich finde SelectDirectory() nur ziemlich hässlich. Und zudem ist TOpenFolderDialog der Standard-Windows-Dialog für diese Aufgabe.
-
Original erstellt von WebFritzi:
Wir waren uns doch einig, dass SelectDirectory scheiße aussieht, oder?Nicht im BCB5 und höher (wie auch schon gesagt). Dort ist SelectDirectory offensichtlich eine Wrapper-Funktion für SHBrowseForFolder.
-
Achso. Man lernt, man lernt...
-
Hallo WebFritzi,
hab gerade versuch deine OpenFolder-Komponente zu installieren. Ich habe hier den BCB6.0 Professional und bin genau deiner Installationsanleitung gefolgt. Nur bringt das Kompilieren folgende Meldungen:
-------------------------------
[C++ Fehler] shobjidl.h(2193): E2238 Bezeichner 'FOLDERSETTINGS' mehrfach deklariert
[C++ Fehler] shobjidl.h(8095): E2238 Bezeichner 'DESKBANDINFO' mehrfach deklariert
[C++ Fehler] shlobj.h(1422): E2238 Bezeichner 'FVSHOWINFO' mehrfach deklariert
[C++ Fehler] shlobj.h(3457): E2238 Bezeichner 'SHELLFLAGSTATE' mehrfach deklariert
[C++ Fehler] OpenFolderDialog.h(14): E2015 Mehrdeutigkeit zwischen 'TBrowseInfo' und 'Shlobj::TBrowseInfo'
[Linker Fataler Fehler] Fatal: Unable to open file 'OPENFOLDERDIALOG.OBJ'
-------------------------------Was hat es denn mit dieser Datei "shobj..." auf sich?
Gruß,
Mipe
-
Im BCB 6 sind beide Versionen von SelectDirectory enthalten:
bool __fastcall SelectDirectory(const AnsiString Caption, const WideString Root, AnsiString &Directory); //Neuer Windowsdialog bool __fastcall SelectDirectory(AnsiString &Directory, TSelectDirOpts Options, int HelpCtx); //Alter Borlanddialog