Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > выбор каталога!!!


Автор: kwotz 6.1.2007, 10:53
Народ. Вот по этой ссылке нашел примеры выбора каталога: http://forum.vingrad.ru/topic-103210.html
У кого на данный момент есть сеть или кто знает будет ли выбираться каталог другой машины через Сетевое окружение сообщите пжлста! (Меня конкретно интересуют коды Romikgy (он самый первый) и Sunvas)!!!
Лучше их сюда перекину:
Первый код:

Код

uses ShlObj; 

{....}

procedure CallBack(wnd: hWnd; uMsg: UINT; lParam, lpData: LParam) stdcall; 
begin 
  SendMessage(wnd, BFFM_ENABLEOK, 0, 1); 
end; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
  bi: TBrowseInfo; 
  s: PChar; 
  PIDL, ResPIDL: PItemIDList; 
begin 
  SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, PIDL); 
  s := StrAlloc(128); 
  bi.hwndOwner := Form1.Handle; 
  bi.pszDisplayName := s; 
  bi.lpszTitle := 'Выбор прапки'; 
  bi.pidlRoot := PIDL; 
  bi.lpfn := addr(CallBack); 
{bi.ulFlags флаги, которые задают режим отображения диалога:
  BIF_BROWSEFORCOMPUTER - Возвратить только компьютеры. Если пользователь выбрал что-то отличное от компьютеров, то кнопка OK останется серой.
  BIF_BROWSEFORPRINTER - Возвратить только принтеры. Если пользователь выбрал что-
то отличное от принтеров, то кнопка OK останется серой.
  BIF_RETURNONLYFSDIRS - Возвратить только папки файловой системы. Если пользователь выберет папки, которые не являются частью файловой системы, то кнопка OK останется серой. Это необходимо для того если ваша программа не работает с виртуальными папками вроде "Панель управления".
  BIF_BROWSEINCLUDEFILES - Диалог просмотра будет отображать файлы вместе с директориями.
  BIF_DONTGOBELOWDOMAIN - Не включать сетевые папки Доменного уровня ниже, чем в TreeView контроле.
  BIF_RETURNFSANCESTORS - В качестве выбора допустимы только объекты, представленные в файловой системе.
  BIF_STATUSTEXT - Включает область статуса в блок диалога. Функция может установить текст посылая сообщения блоку диалога.
  BIF_EDITBOX - В диалоговом окне будет присутствовать строка редактирования, таким образом пользователь может набрать имя элемента.
  BIF_VALIDATE - Если пользователь введёт неверное имя в строке редактирования, то диалоговое окно вызовет функцию обратного вызова приложения по сообщению BFFM_VALIDATEFAILED.}
  ResPidl := SHBrowseForFolder(BI); 
  SHGetPathFromIDList(ResPidl, s); 
  Form1.Caption := s; 
end;


Второй код:

Код

uses ShellAPI, ShlObj; 

procedure TForm1.Button1Click(Sender: TObject); 
var 
 TitleName : string;  
 
 lpItemID : PItemIDList;  
 
 BrowseInfo : TBrowseInfo;  
 
 DisplayName : array[0..MAX_PATH] of char;  
 
 TempPath : array[0..MAX_PATH] of char;  
 
  
begin 
 FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);  
 
 BrowseInfo.hwndOwner := Form1.Handle;  
 
 BrowseInfo.pszDisplayName := @DisplayName;  
 
 TitleName := 'Please specify a directory';  
 
 BrowseInfo.lpszTitle := PChar(TitleName);  
 
 BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;  
 
 lpItemID := SHBrowseForFolder(BrowseInfo);  
 
 if lpItemId <> nil then begin  
 
  
 SHGetPathFromIDList(lpItemID, TempPath);  
 
 ShowMessage(TempPath);  
 
 GlobalFreePtr(lpItemID);  
 
  
 end;  
 
  
end; 

Автор: Sunvas 6.1.2007, 12:17
kwotz, да, будут если правильно установить флаги.

Автор: W1zArD 6.1.2007, 23:18
а разве SelectDirectory из FileCtrl нельзя использовать?  smile 

Автор: Sunvas 6.1.2007, 23:32
Цитата(W1zArD @  6.1.2007,  23:18 Найти цитируемый пост)
а разве SelectDirectory из FileCtrl нельзя использовать? 

Можно, просто если есть готовый код, зачем изобретать что-то?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)