Výběr adresáře

vložil Radek Červinka 25. června 2012 23:40

V programu je bohužel často nutné dovolit, aby si uživatel mohl zvolit adresář (pro mladší čtenáře složku) na disku. Když budu ignorovat fakt, že jakákoliv svoboda volby uživatele zmate, dostáváme se k tomu, jak to jednoduše naprogramovat.

Klasickým způsobem je použití jedné ze dvou variant SelectDirectory. Je to omezené, ale funguje to.

Ale cca rok nazpět jsem při hledání ve zdrojácích VCL narazil na unit StdActns a mezi předdefinovanými akcemi je i flexibilní TBrowseForFolder.

uses
  StdActns;

procedure TForm1.Button1Click(Sender: TObject);
var
  sDir: string;
begin
  with TBrowseForFolder.Create(nil) do
  begin
    try
      Folder := 'c:\Windows';
      BrowseOptions := [
        bifEditBox, bifNewDialogStyle, //bifNoTranslateTargets, bifReturnFSAncestors,
        bifUseNewUI];

      Execute; // pozor návratová hodnota Execute znamená jen, že 
      //se nepodařilo akci spustit
      if Folder = '' then
        Exit;

      sDir := Folder;
    finally
      Free;
    end;
  end;
  ShowMessage(sDir);
end;

Přijde mi to jako rozumnější řešení než používat přímo WinApi - snažím se ho minimilizovat i s ohledem na budoucnost. Tipl bych, že je dostupná i nějak přes TActionList, podobně jako ostatní standardní akce. A třeba je/bude dostupná tato akce i pro další platformy. Ušetřím si problémy.

Tagy: , ,

Praxe

Komentáře

28.6.2012 9:47:25 #

<z>

nechci ti kazit radost, ale SelectDirectory a TBrowseForFolder jsou dve stejne veci zabalene do jineho obalu ;)
alespon tak se mi jevi zdrojak

jinak TBrowseForFolder vypada dobre s temi moznostmi

<z>

28.6.2012 10:07:49 #

Radekc

Jo je to stejné API, ale TBrowseForFolder má více možností.

  TSelectDirExtOpt = (sdNewFolder, sdShowEdit, sdShowShares, sdNewUI, sdShowFiles, sdValidateDir);

  TBrowseForFolderOption = (bifBrowseForComputer, bifBrowseForPrinter, bifBrowseIncludeFiles,
    bifBrowseIncludeURLS, bifDontGoBelowDomain, bifEditBox, bifNewDialogStyle, bifNoNewFolderButton,
    bifNoTranslateTargets, bifReturnFSAncestors, bifReturnOnlyFSDirs,
    bifShareable, bifStatusText, bifUAHint, bifUseNewUI, bifValidate);

Radekc

Komentování ukončeno

Naše nabídka

MVP
Ing. Radek Červinka - Embarcadero MVP
profil na linkedin, Twitter:@delphicz

Nabízím placené poradenství a konzultace v oblasti programování a vývoje SW.
Dále nabízíme i vývoj speciálního software na zakázku.

Neváhejte nás kontaktovat (i ohledně reklamy).

love Delphi

O Delphi.cz

Delphi je moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64, Mac OSX, Linux a na iPhone a Android.

Delphi.cz je nezávislý portál pro uživatele Delphi. Portál není koncipován pro úplné začátečníky, i když i ti se zde nebudou nudit, ale spíše na programátory, kteří již něco znají a chtějí své znalosti dále rozvíjet a sledovat novinky.

Poslední komentáře

Comment RSS

Dle měsíců