![]() |
Problem mit "ChooseFolder"
Hi, also ich will in meiner Anwendung nur nen Ordner auswählen und nicht den kompletten Pfad einer Datei. Dazu hatte Mathias nen Link ausn Forum gegeben, in dem ich eine solche Funktion gefunden habe. Nur bekomme ich hier Fehlermeldungen, das er bestimmte Bezeichner nicht kennt. Kann jemand ma über den Code schauen und mir sagen welche Units ich dafür noch brauche??
Delphi-Quellcode:
function ChooseFolder(const Title: string): string;
var Path: array [0..MAX_PATH] of char; pidl: PItemIDList; // Den kennt er nicht bi: TBrowseInfo; // Den auch nicht.. begin result := ''; OleInitialize(nil); with bi do begin hwndOwner := ; // Und den nicht (N Handle muss ich dann noch eintragen) pidlRoot := nil; pszDisplayName := Path; lpszTitle := PChar(Title); ulFlags := BIF_RETURNONLYFSDIRS or BIF_NEWDIALOGSTYLE; lpfn := nil; lParam := 0; end; pidl := ShBrowseForFolder(bi); if (pidl <> nil) and (SHGetPathFromIDList(pidl, path)) then result := path; OleUninitialize; end; |
Re: Problem mit "ChooseFolder"
Hi!
Sagst du uns vielleicht, welche Bezeichner er nicht kennt? [EDit] :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: :wall: Habe es im Quellcode gesehen, sorry! [/Edit] Ciao fkerber |
Re: Problem mit "ChooseFolder"
Ja ich habe es im Quellcode an die entsprechende Stelle mitn Kommentar geschrieben. Weiste da vielleicht, welche Uses ich noch nehmen muss??
|
Re: Problem mit "ChooseFolder"
ShlObj
|
Re: Problem mit "ChooseFolder"
Hallo!
Wenn ich "nur" eine Auswahl eines Pfades benötige, verwende ich immer
Delphi-Quellcode:
Du musst noch die Unit QDialogs einbinden, schon geht's.
SelectDirectory ('Titel','Root',pfad);
Das einzige, auf das du verzichten musst, ist der Button "Neuer Ordner". :( Pascal |
Re: Problem mit "ChooseFolder"
Hallo zusammen,
versuchmal folgende Unit einzu binden. Uses ShlObj; Gruß Orion3000 |
Re: Problem mit "ChooseFolder"
Hey danke euch!! Also das von Orion funzt prima und auch das von Pascal, jetzt stellt sich mir aber die Frage, wie ich den ausgewählten Ordner n Edit zuweißen kann..
Delphi-Quellcode:
funzt nicht, er meint "string und boolean sind inkompatible Typen". Dat mit ChooseFolder und den ShlObj funzt dagegen richtig. Also danke nochma!! :zwinker:
ed_new_sources.Text:=SelectDirectory ('Ordner für Sources auswählen','C:\',EmptyWideStr);
|
Re: Problem mit "ChooseFolder"
Kuck dir doch mal in der Hilfe nach SelectDirectory. Wenn du übrigens nur für Windows programmierst, würde ich nicht die QDialogs einbinden, sondern die Unit FileCtrls
|
Re: Problem mit "ChooseFolder"
Hallo zusammen, ich nutze folgende Funktion.
Delphi-Quellcode:
Function BrowseFolder(Caption:String):String;
var TitleName : string; lpItemID : PItemIDList; BrowseInfo : TBrowseInfo; DisplayName : array[0..MAX_PATH] of char; TempPath : array[0..MAX_PATH] of char; Temp:string; begin FillChar(BrowseInfo, sizeof(TBrowseInfo), #0); BrowseInfo.hwndOwner := application.handle; BrowseInfo.pszDisplayName := @DisplayName; TitleName := Caption; BrowseInfo.lpszTitle := PChar(TitleName); BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS; lpItemID := SHBrowseForFolder(BrowseInfo); if lpItemId <> nil then begin SHGetPathFromIDList(lpItemID, TempPath); Temp:=(TempPath); if length(trim(temp))=0 then exit; temp:=copy(temp,length(temp),1); if temp='\' then BrowseFolder:=trim(TempPath) else BrowseFolder:=trim(TempPath)+'\'; end; GlobalFreePtr(lpItemID); end; Aufruf var Temp:String; begin temp:=BrowseFolder('Wählen Sie einen Quellordner'); if DirectoryExists(temp) then Edit1.text:= temp end; Gruß Orion3000 |
Re: Problem mit "ChooseFolder"
Ich verwende den:
Delphi-Quellcode:
mfG
uses
ShlObj; function OpenFolder(root: Integer; Caption: string): string; var bi: TBrowseInfo; lpBuffer: PChar; pidlPrograms, pidlBrowse: PItemIDList; begin if (not SUCCEEDED(SHGetSpecialFolderLocation(GetActiveWindow, root, pidlPrograms))) then exit; lpBuffer := StrAlloc(MAX_PATH); bi.hwndOwner := GetActiveWindow; bi.pidlRoot := pidlPrograms; bi.pszDisplayName := lpBuffer; bi.lpszTitle := PChar(Caption); bi.ulFlags := BIF_RETURNONLYFSDIRS; bi.lpfn := nil; bi.lParam := 0; pidlBrowse := SHBrowseForFolder(bi); if (pidlBrowse <> nil) then if SHGetPathFromIDList(pidlBrowse, lpBuffer) then Result := lpBuffer; StrDispose(lpBuffer); end; /////////////////////////////////// // Aufruf var s: string; begin s := OpenFolder(CSIDL_DRIVES, 'Verzeichnis öffnen'); if s <> '' then // ... end; mirage228 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz