Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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.007 c
3-7882
Dmitriy Polskoy
2002-09-13 17:51
2002.10.03
DBGrid с возможностью сортировки


14-8155
vajo
2002-09-09 15:52
2002.10.03
Delphi


14-8141
Oleg_Gashev
2002-09-07 19:24
2002.10.03
Задачка


1-8034
FleX
2002-09-22 15:14
2002.10.03
Как поместить иконки в Popup Menu


14-8177
Сергей Суровцев
2002-09-06 20:14
2002.10.03
Народ, американский флаг никто не брал?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский