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

Вниз

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

 
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 вся ветка

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

Наверх




Память: 0.47 MB
Время: 0.017 c
1-7984
Yr2
2002-09-13 19:02
2002.10.03
Как преобразовать простой шрифт в BitMap со спец. эффектами?


1-8058
xerox
2002-09-22 20:37
2002.10.03
Как сделать в listview сортировку по колонкам как в аутлуке?


4-8226
Bond
2002-08-16 13:04
2002.10.03
Изменить реестр Windows, используя WinAPI


1-7959
kat
2002-09-24 10:58
2002.10.03
Как побороть Windows98?


14-8165
AL2002
2002-09-06 17:08
2002.10.03
Как пронумеровать кучу файлов?