Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Диалог выбора и создания папки [D7]


newones ©   (2007-07-07 21:03:00) 

Подскажите, есть код для выбора папки
function OpenDir():String;
var
 TitleName : string;
 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);
 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);
   Result:=TempPath;
 end;
end;

Как его доработать или вообще вопользоваться другим, для того чтобы появилась еще кнопка для создания папки.


DVM   (2007-07-08 23:31:00) [1]


> Что бы масло было масляным?

угу


Anatoly Podgoretsky   (2007-07-08 23:26:00) [2]

Зачем это BIF_NEWDIALOGSTYLE если
BIF_USENEWUI = BIF_NEWDIALOGSTYLEor BIF_EDITBOX;
Что бы масло было масляным?


DVM   (2007-07-08 23:15:00) [3]

uses Windows, ShellApi, ShlObj;

function BrowseFolderDialog(OwnerWnd: HWND; const Title: string): string;
var
 bi: TBrowseInfo;
 pidlBrowse: PItemIDList;
 Buffer: array[0..MAX_PATH] of Char;
 DispName: array[0..MAX_PATH] of Char;
begin
 bi.hwndOwner := OwnerWnd;
 bi.pidlRoot := nil;
 bi.pszDisplayName := DispName;
 bi.lpszTitle := PChar(Title);
 bi.ulFlags := BIF_RETURNONLYFSDIRS or BIF_USENEWUI or BIF_NEWDIALOGSTYLE;
 bi.lpfn := nil;
 bi.lParam := 0;
 bi.iImage := 0;
 pidlBrowse := SHBrowseForFolder(bi);
 if (pidlBrowse <> nil) then
   if (SHGetPathFromIDList(pidlBrowse, @Buffer)) then
     result := Buffer;
end;


Anatoly Podgoretsky   (2007-07-07 21:34:00) [4]

> newones  (07.07.2007 21:18:02)  [2]

Чем это?
Может ты не умеешь готовить?


Dib@zol   (2007-07-07 21:32:00) [5]

Проставляй в BrowseInfo.lpfn указатель на заданную тобой калбэк-функцию BrowseInfoProc и на мессидж BFFM_INITIALIZED проставляй этому диалогу свою оконную процедуру с помощью SetWindowLong. Потом из этого калбэка надо зашарашить кнопку на данный диалог. Ловить сообщения от этой кнопки должна будет оконная процедура, а в случае иных сообщений отвечать CallWindowProc'ом. Есть вопросы - пиши в ветку.


JanMihail   (2007-07-07 21:27:00) [6]

SelectDirectory выглядит так, как и в коде который указан в сабже.

Ну есть еще один вариант. Сделайте форму. На нее поместите компонент ShellTreeView с вкладки Samples. И три кнопки Ок, Отмена, Создать папку. По нажатии кнопки создать папку просто напишите такой код:
  MkDir(ShellTreeView1.Path + '\' + '<имя папки>')

Ну и там естественно компоненты разместите как в диалоге выбора папки.


Anatoly Podgoretsky   (2007-07-07 21:27:00) [7]

BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS or BIF_USENEWUI


Kolan   (2007-07-07 21:23:00) [8]

> SelectDirectory выглядит старовато

Их там ДВЕ. Одна из них стандартная…


newones   (2007-07-07 21:18:00) [9]

SelectDirectory выглядит старовато


JanMihail   (2007-07-07 21:12:00) [10]

смотрите SelectDirectory из модуля ShellAPI


Наверх

Титульная страница Поиск, карта сайта Написать письмо