Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.07.30;
Скачать: CL | DM;

Вниз

Диалог выбора папки.   Найти похожие ветки 

 
AlexanderMS ©   (2006-07-09 17:39) [0]

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


 
Джо ©   (2006-07-09 17:42) [1]

Функция SelectDirectory. Их даже две, перегруженных.


 
AlexanderMS ©   (2006-07-09 17:46) [2]

Спасибо, попробую.


 
AlexanderMS ©   (2006-07-09 18:04) [3]

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


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


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

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


 
Джо ©   (2006-07-09 18:29) [5]

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

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


 
easy ©   (2006-07-09 19:41) [6]

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


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


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

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


 
PSPF2003 ©   (2006-07-09 21:03) [8]

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


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

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


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

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


 
Пусик ©   (2006-07-09 22:07) [11]


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


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


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

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


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

> Пусик ©   (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:21) [14]


> Юрий Зотов ©   (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:24) [15]

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

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


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


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

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

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


 
Leonid Troyanovsky ©   (2006-07-09 23:14) [17]

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


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

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


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

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


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

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


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

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


 
Leonid Troyanovsky ©   (2006-07-09 23:30) [22]

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


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

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


 
Шпиён   (2006-07-09 23:37) [24]

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


 
Пусик ©   (2006-07-09 23:58) [25]

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


 
Ketmar ©   (2006-07-10 00:42) [26]

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


 
Leonid Troyanovsky ©   (2006-07-10 01:07) [27]

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


 
Ketmar ©   (2006-07-10 01:23) [28]

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


 
Leonid Troyanovsky ©   (2006-07-10 01:39) [29]

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


 
Пусик ©   (2006-07-10 01:45) [30]

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


 
Ketmar ©   (2006-07-10 02:01) [31]

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


 
Шпиён   (2006-07-10 02:03) [32]

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


 
Пусик ©   (2006-07-10 02:12) [33]

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


 
Ketmar ©   (2006-07-10 02:15) [34]

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


 
Пусик ©   (2006-07-10 02:20) [35]

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


 
Пусик ©   (2006-07-10 02:24) [36]

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


 
Ketmar ©   (2006-07-10 02:47) [37]

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


 
Пусик ©   (2006-07-10 02:50) [38]

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


 
Ketmar ©   (2006-07-10 03:16) [39]

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


 
KilkennyCat ©   (2006-07-10 04:43) [40]

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



Страницы: 1 2 вся ветка

Текущий архив: 2006.07.30;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.035 c
15-1151669678
MsGuns
2006-06-30 16:14
2006.07.30
Сожмем кулаки за Украину ?


6-1138309400
serko
2006-01-27 00:03
2006.07.30
ClienSocket и ServerSocket


15-1151995455
mefisto
2006-07-04 10:44
2006.07.30
Подскажите где найти КОМПАКТНУЮ СУБД


15-1151518671
Somename
2006-06-28 22:17
2006.07.30
Как заставить контору заплатить


15-1151518964
Rial
2006-06-28 22:22
2006.07.30
Пересечение треугольников.