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

Вниз

Выбор директории с указанием текущей   Найти похожие ветки 

 
oleg_   (2006-04-13 13:31) [0]

Вот потребовалось сделать сабж
Через SelectDirectory все просто но не доступна сеть
А через SHBrowseForFolder сеть видна но не удается задать текущую директорию (нашел только как задать корень выбора).


 
vovnuke ©   (2006-04-13 16:28) [1]

Не помню откуда:

Как использовать Shell API SHBrowseForFolder 2

threadvar
 myDir: string;

function BrowseCallbackProc(hwnd: HWND; uMsg: UINT; lParam: LPARAM; lpData:
 LPARAM): integer; stdcall;
begin
 Result := 0;
 if uMsg = BFFM_INITIALIZED then
   SendMessage(hwnd, BFFM_SETSELECTION, 1, LongInt(PChar(myDir)))
end;

function SelectDirectory(const Caption: string; const Root: WideString;
 var Directory: string): Boolean;
var
 WindowList: Pointer;
 BrowseInf!
 o: TBrowseInfo;
 Buffer: PChar;
 RootItemIDList, ItemIDList: PItemIDList;
 ShellMalloc: IMalloc;
 IDesktopFolder: IShellFolder;
 Eaten, Flags: LongWord;
begin
 myDir := Directory;
 Result := False;
 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;
       lpfn := @BrowseCallbackProc;
       lParam := Integer(PChar(Directory));
       lpszTitle := PChar(Caption);
       ulFlags := BIF_RETURNONLYFSDIRS or BIF_USENEWUI or BIF_STATUSTEXT;
     end;
     WindowList := DisableTaskWindows(0);
     try
       ItemIDList := ShBrowseForFolder(BrowseInfo);
     finally
       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;

сам разберешься что к чему.



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

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

Наверх




Память: 0.47 MB
Время: 0.055 c
1-1150808895
georgius
2006-06-20 17:08
2006.07.30
Отчего Exception?


15-1151669678
MsGuns
2006-06-30 16:14
2006.07.30
Сожмем кулаки за Украину ?


2-1152172117
Gerasym
2006-07-06 11:48
2006.07.30
Неактивность главной формы во время выполнения процедуры


1-1150347714
Mva
2006-06-15 09:01
2006.07.30
Печать PCL


1-1150445348
Уля
2006-06-16 12:09
2006.07.30
создание Excel-документа с помощью Delphi