wskazywanie katalogu

0

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 ?

0

Komponent ShellTreeView na zakładce SAMPLES, oraz jego właściwość: ShellTreeView1.Path (wskazuje na wybrany katalog)

0

SelectDirectory - istnieje w dwóch wersjach.

0
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.
0

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

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;
0

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;
0
pq napisał(a)

Ech, czy moje posty to się w ogóle wyswietlają?

my wolimy harcorowe rozwiązania :D

//no widzę :D :D pq

0

wielkie dzieki panowie, pomogliscie, sprawa zalatwiona :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0