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.


Nabízíme Delphi školení na různá témata, primárně ve Vaší firmě.

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

Partial English version.

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 nebo burzy práce).

Pokud chcete podpořit tento server libovolnou částkou, můžete použít PayPal. Moc děkuji.

Delphi Certified Developer

O Delphi.cz

Delphi je jediný moderní RAD nástroj podporující tvorbu nativních aplikací pro platformu Win32, Win64 , Mac OSX a na iPhone a Android (s výhledem na další platformy díky FireMonkey) na současném trhu (včetně Windows 8.1).

V současnosti je světová komunita přes dva miliónů vývojářů.

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.

Anketa

Poslední komentáře

Comment RSS