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

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

Диалог выбора папки. [D7, XP]


Страницы:   1 2 3

AlexanderMS ©   (2006-07-09 17:39:00) 

Очень нужен, а в Delphi нет такого компонента. Вроде бы диалог стандартный, но на палитре "Dialogs" отсутствует.


Leonid Troyanovsky   (2006-07-09 23:30:00) [21]

Удалено модератором


Шпиён   (2006-07-09 23:27:00) [22]

Удалено модератором


Leonid Troyanovsky   (2006-07-09 23:23:00) [23]

Удалено модератором


Пусик   (2006-07-09 23:20:00) [24]

Удалено модератором


Шпиён   (2006-07-09 23:17:00) [25]

Удалено модератором


Leonid Troyanovsky   (2006-07-09 23:14:00) [26]

Удалено модератором


Шпиён   (2006-07-09 22:32:00) [27]


> Юрий Зотов ©   (09.07.06 22:24) [15]

Я этот "велосипед" тоже как-то изобретал... сейчас ленивый стал, сначала готовый ищу  -)

Ps
Правда, до сих пор на нем и "езжу". По причине Пусик ©   (09.07.06 22:08) [12]


Юрий Зотов   (2006-07-09 22:24:00) [28]

> Шпиён   (09.07.06 22:21) [14]

Извините, я просто подумал, что смайлик будет излишним.
:о)


Шпиён   (2006-07-09 22:21:00) [29]


> Юрий Зотов ©   (09.07.06 22:17) [13]


> Есть подозрение, что через SHBrowseForFolder работают ОБЕ
> функции-оболочки

А чего тут подозревать, так и есть -)))

Взято из FileCtrl.pas:

function SelectDirectory(const Caption: string; const Root: WideString;
 var Directory: string): Boolean;
var
 WindowList: Pointer;
 BrowseInfo: TBrowseInfo;
 Buffer: PChar;
 OldErrorMode: Cardinal;
 RootItemIDList, ItemIDList: PItemIDList;
 ShellMalloc: IMalloc;
 IDesktopFolder: IShellFolder;
 Eaten, Flags: LongWord;
begin
 Result := False;
 if not DirectoryExists(Directory) then
   Directory := '';
 FillChar(BrowseInfo, SizeOf(BrowseInfo), 0);
 if (ShGetMalloc(ShellMalloc) = S_OK) and (ShellMalloc <> nil) then
 begin
   Buffer := ShellMalloc.Alloc(MAX_PATH);
   try
     RootItemIDList := nil;
     if Root <> '' then
     begin
       SHGetDesktopFolder(IDesktopFolder);
       IDesktopFolder.ParseDisplayName(Application.Handle, nil,
         POleStr(Root), Eaten, RootItemIDList, Flags);
     end;
     with BrowseInfo do
     begin
       hwndOwner := Application.Handle;
       pidlRoot := RootItemIDList;
       pszDisplayName := Buffer;
       lpszTitle := PChar(Caption);
       ulFlags := BIF_RETURNONLYFSDIRS;
       if Directory <> '' then
       begin
         lpfn := SelectDirCB;
         lParam := Integer(PChar(Directory));
       end;
     end;
     WindowList := DisableTaskWindows(0);
     OldErrorMode := SetErrorMode(SEM_FAILCRITICALERRORS);
     try
       ItemIDList := ShBrowseForFolder(BrowseInfo);
     finally
       SetErrorMode(OldErrorMode);
       EnableTaskWindows(WindowList);
     end;
     Result :=  ItemIDList <> nil;
     if Result then
     begin
       ShGetPathFromIDList(ItemIDList, Buffer);
       ShellMalloc.Free(ItemIDList);
       Directory := Buffer;
     end;
   finally
     ShellMalloc.Free(Buffer);
   end;
 end;
end;


Юрий Зотов   (2006-07-09 22:17:00) [30]

> Пусик ©   (09.07.06 22:07) [11]

Есть подозрение, что через SHBrowseForFolder работают ОБЕ функции-оболочки: и из vingrad, и из справки. Еще есть подозрение, что входные параметры у них совершенно одинаковые.

Это, естественно, камешек не в Ваш огород, а в огород любителей изобретать велосипеды. Недавно на работе, разбираясь в незнакомом проекте, встречаю в нем вызов некоей самописной функции Up. По контексту кода понятно, что она должна преобразовать строку в верхний регистр - но почему же, думаю, не использована стандартная AnsiUpperCase? Может, эта самая Up еще что-то делает? Надо разобраться.

Лезу в код - и вижу:

function Up(S: string): string; // причем именно так, даже без const
begin
 Result := AnsiUpperCase(S)
end;

Не слабый маразм, да?


Пусик   (2006-07-09 22:08:00) [31]

Ну и флагами самой можно управлять.


Пусик   (2006-07-09 22:07:00) [32]


> Юрий Зотов ©   (09.07.06 21:59) [10]


Ну хочется человеку SHBrowseForFolder... Тем более, что в ней вро бы опций несколько побольше...


Юрий Зотов   (2006-07-09 21:59:00) [33]

> Пусик ©   (09.07.06 21:51) [9]
function SelectDirectory(const Caption: string; const Root: WideString; out Directory: string): Boolean;
-----------------
Взято из справки.
:о)


Пусик   (2006-07-09 21:51:00) [34]

function SelectDirectory(Title: String; Root: WideString): String;
 Function PathToID(Path: String): PItemIDList;
 var
   IDesktopFolder: IShellFolder;
   Eaten, Flags: LongWord;
 begin
   SHGetDesktopFolder(IDesktopFolder);
   IDesktopFolder.ParseDisplayName(0, nil, StringToOleStr(Path), Eaten, Result, Flags);
 end;
var
 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 := Application.Handle;
 BrowseInfo.pszDisplayName := @DisplayName;
 BrowseInfo.lpszTitle := PChar(Title);
 BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
 BrowseInfo.pidlRoot:= PathToID(Root);
 lpItemID := SHBrowseForFolder(BrowseInfo);
 if lpItemId <> nil then
 begin
   SHGetPathFromIDList(lpItemID, TempPath);
   Result:= TempPath;
   GlobalFreePtr(lpItemID);
 end;
end;

-----------------
Взято с vingrad.ru


PSPF2003   (2006-07-09 21:03:00) [35]

Могу компонент дать


Шпиён   (2006-07-09 20:58:00) [36]


> easy ©   (09.07.06 19:41) [6]

Delphi FAQ collectorХорошо сделано, respect -)


easy   (2006-07-09 19:41:00) [37]

http://dfc.com.ru/?sid=2&id=8&itemid=13


Джо   (2006-07-09 18:29:00) [38]

> [3] AlexanderMS ©   (09.07.06 18:04)
> Sorry, я хотел другой: где в виде дерева и без файлов

Функций SelectDirectory — две.


Шпиён   (2006-07-09 18:15:00) [39]


> где в виде дерева и без файлов.

Это не тот, который на палитре Win3.1 ?


AlexanderMS   (2006-07-09 18:04:00) [40]

Sorry, я хотел другой: где в виде дерева и без файлов. Да такой и самому можно сделать.


Страницы:   1 2 3

Наверх

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