Текущий архив: 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.54 MB
Время: 0.012 c