Главная страница
    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.006 c
1-8052
Metotrone
2002-09-22 18:59
2002.10.03
Работа со Strings


14-8124
Delirium
2002-09-08 14:01
2002.10.03
Новейший QuickReport 3.6.2 Professional + Exports 2


1-8047
Metotrone
2002-09-22 18:03
2002.10.03
Размещение texta


1-8059
123000
2002-09-21 16:34
2002.10.03
Как включить и выключить монитор?


7-8195
dem0n2k
2002-07-25 22:41
2002.10.03
Как программно очистить mbr(master boot record)???





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский