Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Почему 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


Наверх

Титульная страница Поиск, карта сайта Написать письмо