Форум: "WinAPI";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
ВнизВыбор папки с подпапками Найти похожие ветки
← →
Yuri Btr (2002-08-15 15:17) [0]Ув. мастера, кто нибудь может мне разъяснить на пальцах, как можно сделать SHBrowseForFolder - т.е. как вызвать диалог выбора папки с checkbox-ом наверху окошка, где выводится lpszTitle, и естественно получить статус этого checkbox-а после выбора папки ?
Например так сделано в Winamp при добавлении папки в плейлист через ADD/DIR. Там в плейлист добавляются все дочерние папки.
← →
Viktor Kushnir (2002-08-16 09:28) [1]
Попробуй так:
Var
BI :TBrowseInfo;
StartPIDL, ResPIDL :PItemIDList;
S, Path :Array[0..max_path-1] of widechar;
begin
OleCheck(SHGetSpecialFolderLocation(handle,CSIDL_DRIVES, StartPIDL));
With BI do
Begin
hwndOwner := Application.Handle;
pszDisplayName := @S;
lpszTitle := "Выберете папку";
ulFlags := BIF_RETURNONLYFSDIRS;
pidlROOT := StartPIDL;
lpfn := nil;
iImage := 1;
End;
ResPIDL := SHBrowseForFolder(BI);
If SHGETPATHFROMIDLIST(ResPIDL,@Path[0]) then PathList.Items.Add(StrPas(@Path[0])); // - результат в список.
end;
← →
Yuri Btr (2002-08-16 10:30) [2]to Viktor Kushnir ©
Проостите, а чем ваш пример отличается от вот этого кода?
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 := Form1.Handle;
BrowseInfo.pszDisplayName := @DisplayName;
BrowseInfo.lpszTitle := PChar("Specify directory with target files");
BrowseInfo.ulFlags := BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT;
lpItemID := SHBrowseForFolder(BrowseInfo);
if lpItemId <> nil then
begin
SHGetPathFromIDList(lpItemID, TempPath);
Edit1.Text:=TempPath;
GlobalFreePtr(lpItemID);
end;
end;
Суть вопроса не в том, чтобы получить имена подпапок, а в отображении checkbox-а на диалоге выбора папки.
← →
Raptor (2002-08-16 12:48) [3]Это не так просто сделать. Могу объяснить идею. Кода не проси так как его у меня теперь нет - умер вместе со старым винтом. :-((
Вобщем идея такая:
Вызываешь этот диалог, а потом, во время инициализации (когда в callback- процедуру приходит сообщение BFFM_INITIALIZED) вставляешь (CreateWindowEx) в окно диалога чекбокс и заменяешь (SetWindowLong) процедуру окна диалога своей. Эта новая процедура окна должна транслировать все сообщения старой процедуре. Только когда чекбокс срабатывает твоя новая процедура окна должна записать состояние чекбокса. Вот и все.
Только предупреждаю, если ты не очень силен в API реализовать эту идею тебе будет нелегко.
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.006 c