Вы также можете использовать TBrowseForFolder
класс действия (stdActns.pas
).
var
dir: string;
begin
with TBrowseForFolder.Create(nil) do try
RootDir := 'C:\';
if Execute then
dir := Folder;
finally
Free;
end;
end;
или использовать функцию WinAPI - SHBrowseForFolder
непосредственно (второй SelectDirectory
перегрузки использует его, вместо того, чтобы первая перегрузку, что создает собственную DELPHI-окно со всеми элементами управления во время выполнения):
var
dir : PChar;
bfi : TBrowseInfo;
pidl : PItemIDList;
begin
ZeroMemory(@bfi, sizeof(bfi));
pidl := SHBrowseForFolder(bfi);
if pidl <> nil then try
GetMem(dir, MAX_PATH + 1);
try
if SHGetPathFromIDList(pidl, dir) then begin
// use dir
end;
finally
FreeMem(dir);
end;
finally
CoTaskMemFree(pidl);
end;
end;
ответ Кена (только один до сих пор) является большим, но это, кажется, как DUP из: http://stackoverflow.com/questions/ 7422689/delphi-selection-a-directory-with-topendialog – Argalatyr
В этом случае вы можете использовать потомок 'TOpenDialog' -' TSaveDialog' (да, это довольно быстро и грязно) – OnTheFly
Проголосовало за закрытие, но я буду отсутствовать ['teran's answer'] (http://stackoverflow.com/a/9529154/960757). – TLama