Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.07.30;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.013 c
2-1152284856
Юсуф
2006-07-07 19:07
2006.07.30
Вопросики вместо текста


2-1152370477
AlexanderMS
2006-07-08 18:54
2006.07.30
Странная проблема.


2-1152621860
Вован Сем
2006-07-11 16:44
2006.07.30
Провертьте мое задание


2-1152204596
SergP.
2006-07-06 20:49
2006.07.30
О порядке деструкции объектов которые создаются автоматически


2-1152625504
Grotesque
2006-07-11 17:45
2006.07.30
Небольшой вопрос





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский