Delphi.cz

Český portál Delphi

Výběr adresáře

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.

Datum: 2012-06-25 22:40:00 Tagy: VCL, utrzky, praxe

Praxe