Доброго времяни суток. В своей программе использую диолог выбора каталога. Нужно сделать чтоб она открывалась на последнем ранее выбраном каталоге. Для этого перед запуском диалога в pidlRoot эту папку(путь) указать.
Как мне в pidlRoot поместить строку String.
Я так понял, что нужно bi.pidlRoot := PIDL; в место PIDL ввести 'C:\Program Files'
Код:
uses ShlObj;
{....}
procedure CallBack(wnd: hWnd; uMsg: UINT; lParam, lpData: LParam) stdcall;
begin
SendMessage(wnd, BFFM_ENABLEOK, 0, 1);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
bi: TBrowseInfo;
s: PChar;
PIDL, ResPIDL: PItemIDList;
begin
SHGetSpecialFolderLocation(Form1.Handle, CSIDL_DESKTOP, PIDL);
s := StrAlloc(128);
bi.hwndOwner := Form1.Handle;
bi.pszDisplayName := s;
bi.lpszTitle := 'Выбор прапки';
bi.pidlRoot := PIDL;
bi.lpfn := addr(CallBack);
{bi.ulFlags флаги, которые задают режим отображения диалога:
BIF_BROWSEFORCOMPUTER - Возвратить только компьютеры. Если пользователь выбрал что-то отличное от компьютеров, то кнопка OK останется серой.
BIF_BROWSEFORPRINTER - Возвратить только принтеры. Если пользователь выбрал что-
то отличное от принтеров, то кнопка OK останется серой.
BIF_RETURNONLYFSDIRS - Возвратить только папки файловой системы. Если пользователь выберет папки, которые не являются частью файловой системы, то кнопка OK останется серой. Это необходимо для того если ваша программа не работает с виртуальными папками вроде "Панель управления".
BIF_BROWSEINCLUDEFILES - Диалог просмотра будет отображать файлы вместе с директориями.
BIF_DONTGOBELOWDOMAIN - Не включать сетевые папки Доменного уровня ниже, чем в TreeView контроле.
BIF_RETURNFSANCESTORS - В качестве выбора допустимы только объекты, представленные в файловой системе.
BIF_STATUSTEXT - Включает область статуса в блок диалога. Функция может установить текст посылая сообщения блоку диалога.
BIF_EDITBOX - В диалоговом окне будет присутствовать строка редактирования, таким образом пользователь может набрать имя элемента.
BIF_VALIDATE - Если пользователь введёт неверное имя в строке редактирования, то диалоговое окно вызовет функцию обратного вызова приложения по сообщению BFFM_VALIDATEFAILED.}
ResPidl := SHBrowseForFolder(BI);
SHGetPathFromIDList(ResPidl, s);
Form1.Caption := s;
end;