DELPHI - Как использовать opendialog1 для выбора папки?

Возможный дубликат:
Delphi: выбор каталога с помощью TOpenDialog

Мне нужно открыть определенную папку в моем проекте. Когда я использую opendialog1, я могу только открыть файл. Как насчет открытия папки?

хотел - открыть папку в Delphi

PS: я использую Delphi 2010

3 ответа

Решение

Вы также можете использовать 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;

В Vista и выше вы можете показать более современный вид диалога, используя TFileOpenDialog,

var
  OpenDialog: TFileOpenDialog;
  SelectedFolder: string;
.....
OpenDialog := TFileOpenDialog.Create(MainForm);
try
  OpenDialog.Options := OpenDialog.Options + [fdoPickFolders];
  if not OpenDialog.Execute then
    Abort;
  SelectedFolder := OpenDialog.FileName;
finally
  OpenDialog.Free;
end;

который выглядит так:

Ты ищешь SelectDirectory в FileCtrl Блок. Имеет две перегруженные версии:

function SelectDirectory(var Directory: string; 
   Options: TSelectDirOpts; HelpCtx: Longint): Boolean;
function SelectDirectory(const Caption: string; const Root: WideString; 
var Directory: string; Options: TSelectDirExtOpts; Parent: TWinControl): Boolean;

То, что вы хотите использовать, зависит от версии Delphi, которую вы используете, и от конкретного внешнего вида и функциональности, которые вы ищете; Я обычно нахожу, что вторая версия отлично работает для современных версий Delphi и Windows, и пользователи кажутся довольными "обычно ожидаемым внешним видом и функциональностью".

Другие вопросы по тегам