Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция выбора папки SHBrowseForFold задать путь? передать параметры в @BrowseCallbackProc 
:(
    Опции темы
Nicholas
  Дата 20.9.2016, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 436
Регистрация: 30.9.2004

Репутация: нет
Всего: 0



Надо, чтобы при открытии диалога выбора папки открывался изначально заданный путь, есть вот такой код:

Код

function BrowseCallbackProc(DialogHWND: THandle;NINT: Integer; PARAM1: lParam; PARAM2: lParam): integer; stdcall;
var
s: String;
begin
if NInt = BFFM_INITIALIZED then
begin
s:=root;
SendMessage(DialogHWND,BFFM_SETSELECTION,1,integer(PChar(s)));
end;
result:=0;
end;

Function SelFolderDilalog(Caption,root:string):String;
var
  TitleName: string;
  lpItemID: PItemIDList;
  BrowseInfo: TBrowseInfo;
  DisplayName: array[0..MAX_PATH] of char;
  TempPath: array[0..MAX_PATH] of char;
begin
  Result:='0';
  FillChar(BrowseInfo, sizeof(TBrowseInfo), #0);
  BrowseInfo.hwndOwner:=MainPage.handle;
  BrowseInfo.lpfn:=@BrowseCallbackProc;
  BrowseInfo.pszDisplayName:=@DisplayName;
  TitleName:=Caption;
  BrowseInfo.lpszTitle:=PChar(TitleName);
  BrowseInfo.ulFlags:=BIF_RETURNONLYFSDIRS;
  lpItemID:=SHBrowseForFolder(BrowseInfo);
  if lpItemID<>nil then
    begin
      SHGetPathFromIDList(lpItemID, TempPath);
      result:=TempPath; //Записываем результат выбора
      GlobalFreePtr(lpItemID);
    end;
end;


Сейчас root это глобальная переменная в которой и передается первоначальный путь, но глобальные переменный в диалоговом окне это уж слишком.

Вопрос, как передать root в функцию BrowseCallbackProc из функции SelFolderDilalog ????

PM MAIL ICQ   Вверх
RAIN666
Дата 10.6.2019, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 18
Регистрация: 15.2.2019

Репутация: нет
Всего: нет



Код

function BrowseForFileEx(const owner: hwnd; var res:string;
                         const def,path,filter,DefExt:string;
                         const DefIndex: Integer):boolean;
var
  ofn : openfilename;
  buf : array [0..255] of char;
  i : integer;
begin
  ZeroMemory(@ofn, sizeof(ofn));
  fillchar(buf,256,0);
  if def<>'' then
  for i := 0 to length(def)-1 do
    buf[i] := def[i+1];
  ofn.lStructSize := sizeof(ofn);
  ofn.hWndOwner := owner;
  ofn.lpstrFile := buf;
  ofn.nMaxFile := sizeof(buf);
  ofn.lpstrFilter := pchar(filter);
  ofn.nFilterIndex := DefIndex;
  ofn.lpstrDefExt := PChar(defext);
  ofn.lpstrFileTitle := '';
  ofn.nMaxFileTitle := 0;
  ofn.lpstrInitialDir := pchar(path);
  ofn.Flags := OFN_PATHMUSTEXIST or OFN_FILEMUSTEXIST;
  ofn.FlagsEx := 0;
  result := GetOpenFileName(ofn);
  if result then
  res := buf;
end;

function BrowseForFolderEx(Owner : HWND; InitDir, Title : string;
                           var res : string) : Boolean;
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 := Owner;
  BrowseInfo.pszDisplayName := @DisplayName;
  BrowseInfo.lpszTitle := PChar(Title);
  BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS;
  lpItemID := SHBrowseForFolder(BrowseInfo);
  Result := lpItemId <> nil;
  if Result then
  begin
    SHGetPathFromIDList(lpItemID, TempPath);
    res := TempPath;
    GlobalFreePtr(lpItemID);
  end;
end;


Это сообщение отредактировал(а) RAIN666 - 10.6.2019, 14:17
PM MAIL   Вверх
navodri
Дата 1.8.2019, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 173
Регистрация: 26.10.2007

Репутация: нет
Всего: -1



.



Скачайте библиотеку LENIN INC WIN32API Library. Там масса примеров на чистом WinAPI, включая и ответ на Ваш вопрос. Однозначно пригодиться на все случаи жизни! Есть даже браузер на API.



.

Это сообщение отредактировал(а) navodri - 14.5.2020, 12:59
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1068 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.