Главная страница
    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
6-8087
skeeper
2002-08-02 13:48
2002.10.03
Заполнение формы


14-8157
MJH
2002-09-07 19:45
2002.10.03
NitroAmp 074XPbeta2 - вышла в свет новая версия


4-8227
Игорь
2002-08-09 04:12
2002.10.03
Копиование перемещение файлов не получается :( pls help


7-8203
V.Turecky
2002-07-27 12:16
2002.10.03
Звук системным динамиком...


1-7995
Korona
2002-09-20 20:57
2002.10.03
Вопрос по MDI





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