![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Почему SHBrowseForFolder жрет так много памяти? [D7, WinXP]
Ricks © (2006-10-19 23:42:00)При первом запуске диалога "улетает" где-то 12МБ, а потом еще при каждом раскрытии подпапок тоже кушает... Но самое интересное в том, что после закрытия оно память не освобождает!
Вот код (простой, - у меня есть более навороченый, но эффект тот же):
function SelectFileEx(Wnd:HWND; SelFiles:Boolean; const Caption: string; out FileName: string): Boolean;
var P : PItemIDList;
B : _browseinfoA;
pt : PChar;
begin
Result:=false;
FillChar(B, sizeof(_browseinfoA), 0);
with B do begin
hwndOwner:=Wnd;
lpszTitle:=PChar(Caption);
ulFlags:=BIF_RETURNONLYFSDIRS or BIF_STATUSTEXT or BIF_EDITBOX or BIF_NEWDIALOGSTYLE or BIF_VALIDATE;
if SelFiles
then ulFlags:=ulFlags or BIF_BROWSEINCLUDEFILES;
end;
P:=SHBrowseForFolder(B);
if Assigned(P) then begin
pt:=AllocMem( MAX_PATH );
try
if SHGetPathFromIDList( P, pt ) then begin
FileName:=string(pt);
Result:=true;
end;
CoTaskMemFree(P);
finally
ReallocMem(pt, 0);
end;
end;
GrayFace (2006-10-29 13:56:00) [1]А я для выбора папки использую OpenDialog. Задаю начальное имя файла "Extract Here" и все.
DVM (2006-10-26 14:56:00) [2]
> Rouse_ © (20.10.06 00:19) [1]
Кстати, насчет компонента. Будучи положенным на фрейм он не работает.
Ricks (2006-10-20 21:06:00) [3]Ну я это и имел ввиду :)
Ketmar (2006-10-20 21:05:00) [4]>[7] Ricks(c) 20-Oct-2006, 21:00
ничего не "теряется". не верь. оно используется, а не "теряется".
Ricks (2006-10-20 21:00:00) [5]Только что проверил "fwopendirectory.zip" - эффект такой же (теряется 10..15МБ), но "что характерно" память расходуется только при первом вызове, так что, наверное, с этим ничего не поделаешь...
PS: спасибо Rouse_ за несколько идей (по крайней мере за то, что научил меня выключать кнопку "OK" :)
Rouse_ (2006-10-20 17:12:00) [6]Ты не код смотри, ты сначала смотри - наблюдается ли эффект с памятью? :)
Sapersky (2006-10-20 11:59:00) [7]http://rouse.drkb.ru/files/fwopendirectory.zip
Навскидку существенных отличий от приведённого примера не видно... тот же самый SHBrowseForFolder.
Диалог без shell (KOLDirDlgEx.pas - сам, правда, ещё не пользовался):
http://www.kolnmck.ru/files/koladd.7z
Lamer@fools.ua (2006-10-20 11:21:00) [8]> Что означает "фирменный знак" FW? :-)
> отголосок прошлых достижений ;)
Framework? :o)
Rouse_ (2006-10-20 09:39:00) [9]
> Токмо вот зудит спросить! Что означает "фирменный знак" FW? :-)
отголосок прошлых достижений ;)
Германн (2006-10-20 00:36:00) [10]
> Rouse_ © (20.10.06 00:19) [1]
>
> Можно я себя попиарю? :)
Дык кто-ж против? :-)
Токмо вот зудит спросить! Что означает "фирменный знак" FW? :-)
Rouse_ (2006-10-20 00:19:00) [11]Можно я себя попиарю? :)
Попробуй вот это: http://rouse.drkb.ru/files/fwopendirectory.zip