Как сделать диалог выбора папки

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

нужен диалог выбора папки
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

ShellTreeView в закладке Samples
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

а не визуальный есть? как opendialog.
Лелик_1044
Сообщения: 340
Зарегистрирован: 22 ноя 2004, 19:15
Откуда: Минск
Контактная информация:

namomelkor писал(а):а не визуальный есть? как opendialog.
А из jvcl не походит?
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

есть то что ты хочешь:uses ShlObj;функцияSHBrowseForFolder
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

Blood_Magic писал(а):есть то что ты хочешь:uses ShlObj;функцияSHBrowseForFolder
что-то не пойму как ее юзать
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

так справку читать надо если не понятно как юзать

вот так можешь функцию написать

Код: Выделить всё

uses ShlObj;
//Handle - Ссылка на родительское окно
function BrowseDialog(const Handle:Cardinal):string;
var
  lpItemID:PItemIDList;
  BrowseInfo:TBrowseInfo;
  DisplayName:array[0..MAX_PATH] of char;
  TempPath:array[0..MAX_PATH] of char;
begin
  Result:='';
  FillChar(BrowseInfo,sizeof(TBrowseInfo),#0);
  with BrowseInfo do
    begin
      hwndOwner:=Handle;
      pszDisplayName:=@DisplayName;
      lpszTitle:='Выбор папки БД';
      ulFlags:=BIF_RETURNONLYFSDIRS;
    end;
  lpItemID:=SHBrowseForFolder(BrowseInfo);
  If lpItemId<>nil then
    begin
      SHGetPathFromIDList(lpItemID,TempPath);
      Result:=TempPath;
      GlobalFreePtr(lpItemID);
    end;
end;
а так юзай

Код: Выделить всё

........
  NewBaseDir:=BrowseDialog(Handle);
  If NewBaseDir<>'' then
........
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Аватара пользователя
SergeyS
Сообщения: 196
Зарегистрирован: 21 ноя 2006, 17:12
Откуда: Хакасия, Абакан
Контактная информация:

uses FileCtrl;

там есть функция

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

которая как раз и является делфовой обёрткой функции SHBrowseForFolder
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

SergeyS писал(а):uses FileCtrl;

там есть функция

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

которая как раз и является делфовой обёрткой функции SHBrowseForFolder
Вид у него очень совковый )))
на VBA есть такая штука

Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "Choose a folder:", &H4000, "")
Set objFolderItem = objFolder.Self
ipath$ = objFolderItem.Path

А на делфях есть такое? Или подскажите как под под делфи переделать.
namomelkor
Сообщения: 230
Зарегистрирован: 31 авг 2006, 13:11

Blood_Magic извиняюсь это все из-за лени. Предложеный код это то что нужно. спасибо.
Ответить