Witam, w jaki sposób użyć opendialoga do wyboru nie konkretnego pliku ale katalogu ? tzn potrzebuje zeby uzytkownik mogl wskazac katalog i potrzebuje przejąć pełna sciezke wskazanego katalogu
a moze to nie za pomoca opendialoga ?
Witam, w jaki sposób użyć opendialoga do wyboru nie konkretnego pliku ale katalogu ? tzn potrzebuje zeby uzytkownik mogl wskazac katalog i potrzebuje przejąć pełna sciezke wskazanego katalogu
a moze to nie za pomoca opendialoga ?
Komponent ShellTreeView na zakładce SAMPLES, oraz jego właściwość: ShellTreeView1.Path (wskazuje na wybrany katalog)
SelectDirectory - istnieje w dwóch wersjach.
unit untBrowseForFolder;
interface
uses
ShlObj,
Windows;
function BrowseForFolder(BrowseTitle: PChar; InitialFolder: PChar; AHandle: HWND): PChar;
implementation
var
lg_StartFolder: String;
function BrowseForFolderCallBack(Wnd: HWND; uMsg: UINT; lParam, lpData: LPARAM): Integer stdcall;
begin
if uMsg = BFFM_INITIALIZED then
SendMessage(Wnd,BFFM_SETSELECTION,1,Integer(@lg_StartFolder[1]));
result := 0;
end;
function BrowseForFolder(BrowseTitle: PChar; InitialFolder: PChar; AHandle: HWND): PChar;
var
bi: TBrowseInfo;
Folder: array[0..MAX_PATH] of char;
FindContext: PItemIDList;
begin
FillChar(bi, SizeOf(bi), #0);
lg_StartFolder := InitialFolder;
bi.pszDisplayName := @Folder[0];
bi.lpszTitle := BrowseTitle;
bi.ulFlags := BIF_RETURNONLYFSDIRS;
bi.hwndOwner := AHandle;
if initialFolder <> '' then
bi.lpfn := BrowseForFolderCallBack;
FindContext := SHBrowseForFolder(bi);
if Assigned(FindContext) then
begin
if SHGetPathFromIDList(FindContext, Folder) then
result := Folder
else
result := '';
GlobalFreePtr(FindContext);
end
else
result := '';
end;
end.
Misiekd: w dzisiejszych czasach już nie ma po co tak się męczyć: jedna z wersji SelectDirectory robi to co BrowseForFolder w prostszy do napisania sposób :-0
Można jeszcze krócej:
uses ShlObj, ShellApi;
var
Bro : BROWSEINFO;
ItemID: PITEMIDLIST;
Result: array[1..MAX_PATH] of Char;
begin
Bro.hwndOwner := Handle;
Bro.pidlRoot := nil;
Bro.pszDisplayName := @Result;
Bro.lpszTitle := 'Wskaż folder';
Bro.ulFlags := 0;
Bro.lpfn := nil;
Bro.lParam := 0;
Bro.iImage := 0;
ItemID := SHBrowseForFolder(Bro);
if ItemID <> nil then
begin
Edit1.Text := '';
if SHGetPathFromIDList(ItemID, @Result) = True then Edit1.Text := Result;
Edit1.Text := Edit1.Text + '\';
end;
end;
Ech, czy moje posty to się w ogóle wyswietlają?
Najprościej:
uses FileCtrl;
var
Folder:string;
Folder:='C:\windows'; //na tym katalogu dialog bedzie otwarty
if SelectDirectory('Wybierz katalog', '' {pokazuj cale drzewo, mozna dac inny root}, Folder) then
WybranyKatalog:=Folder;
pq napisał(a)
Ech, czy moje posty to się w ogóle wyswietlają?
my wolimy harcorowe rozwiązania :D
//no widzę :D :D pq
wielkie dzieki panowie, pomogliscie, sprawa zalatwiona :)