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.