Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » вопрос по SHBrowseForFolder

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

ironwit

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Вот такая функция, как бы в ней сабж совершить?
 
function tform1.opendirectory:string;
var
  TitleName : string;
  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 := Form1.Handle;
  BrowseInfo.pszDisplayName := @DisplayName;
  TitleName := 'Select directory';
  BrowseInfo.lpszTitle := PChar(TitleName);
  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then
  begin
    SHGetPathFromIDList(lpItemID, TempPath);
    GlobalFreePtr(lpItemID);
  end else temppath:='';
  result:=temppath;
end;


----------
Don't drink, and drive. Smoke and fly.

Всего записей: 1892 | Зарегистр. 11-10-2002 | Отправлено: 10:25 02-09-2003
redp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
MSDN е ?
в BROWSEINFO есть поле pidlRoot - вот через него
заполни структуру SHITEMID скажем так:
const char *name = "C:\my path";
SHITEMID shmid = { strlen(name), name };
и будет тебе шастье. Полведра примерно

Всего записей: 514 | Зарегистр. 16-06-2003 | Отправлено: 11:06 02-09-2003
ironwit

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
redp
а нельзя ли на Delphi примерчик, а то что-то я или туплю или не доганяю. И как с этими интерфесами работать...
 
Сорри за такой ламерский вопрос.

----------
Don't drink, and drive. Smoke and fly.

Всего записей: 1892 | Зарегистр. 11-10-2002 | Отправлено: 12:20 02-09-2003
redp

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
не
на delphi - нельзя
я на ем писал года 4 тому взад
msdn читай лучше - там все написано

Всего записей: 514 | Зарегистр. 16-06-2003 | Отправлено: 14:25 02-09-2003
ironwit

Advanced Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
решил вот так
 
var
  pidlInitialFolder: PItemIDList;
  rootpath:array [0..MAX_PATH] of WideChar;
 
 
function BrowseCallbackProc( hWnd: HWND; uMsg: UINT; lParam: LPARAM;
  lpData: LPARAM ): Integer; stdcall;
 
begin
  Result := 0;
  case uMsg of
    BFFM_INITIALIZED:
    begin
      PostMessage( hWnd, BFFM_SETSELECTION, 0, Integer(pidlInitialFolder) );
    end;
  end;
end;
 
 
function tform1.opendirectory:string;
var
  TitleName : string;
  lpItemID : PItemIDList;
  BrowseInfo : TBrowseInfo;
  DisplayName : array[0..MAX_PATH] of char;
  ppshf: IShellFolder;
  pchEaten: ULONG;
  dwAttributes: ULONG;
  TempPath: array[0..MAX_PATH]of char;
  s:string;
begin
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  BrowseInfo.hwndOwner := Form1.Handle;
  BrowseInfo.pszDisplayName := @DisplayName;
  TitleName := 'Title';
  BrowseInfo.lpszTitle := PChar(TitleName);
  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
 
  SHGetDesktopFolder(ppshf);
  ppshf.ParseDisplayName(application.handle,Nil,@rootpath,pchEaten,pidlInitialFolder,dwAttributes);
 
  BrowseInfo.lpfn := BrowseCallbackProc;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  if lpItemId <> nil then
  begin
    SHGetPathFromIDList(lpItemID, temppath);
    if length(string(temppath))>0 then
      begin
        s:=temppath;
        StringToWideChar(s, @rootpath,length(s)+1);
      end;
    GlobalFreePtr(lpItemID);
  end else temppath:='';
  result:=temppath;
end;
 
Может и кривовато но работает

----------
Don't drink, and drive. Smoke and fly.

Всего записей: 1892 | Зарегистр. 11-10-2002 | Отправлено: 13:12 03-09-2003
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » вопрос по SHBrowseForFolder


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2025

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru