![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
утечка памяти [D7, WinXP]
misha123 © (2004-09-24 16:56:00)Доброго дня.
Вот написал маленькую программку для просмотра каталога картинок. В папке лежат файлы, разложенные по другим папкам-группам, при хождении по дереву shelltreeview в листбоксе отображаются картинки. Все хорошо, только при каждом щелчке по узлу группы дерева память, отведенная для программки разрастается. Код привожу:
Отрисовщик-обработчик листбокса:
procedure TForm1.ListBoxDrawItem;
var Offset: Integer;
tb: boolean;
s: string;
begin
with (Control as TListBox).Canvas do begin
FillRect(Rect);
if odSelected in State then begin
Font.Color := clWhite;
Font.Style := [fsBold];
end;
image:=TImage((Control as TListBox).Items.Objects[Index]);
if imagenil then begin
Draw(Rect.Left + 2, Rect.Top, image.Picture.Graphic);
Offset := image.width + 6;
TextOut(Rect.Left + Offset, Rect.Top + image.Height div 2, (Control as TListBox).Items[Index] + ' ¹' + inttostr(Index + 1));
end;
end;
end;
Обработчик shelllistview:
procedure TForm1.stv_catalogClick(Sender: TObject);
var NodeName: string;
begin
NodeName:=stv_catalog.Selected.Text;
lb_listarticul.Clear;
cb_articuls.Clear;
image.Free;
NodeName:=path_catalog + NodeName + '\';
ShowItems(NodeName);
Формирование списка для отображения:
procedure TForm1.ShowItems;
var gifList: trGifList;
i: integer;
cursor: Tcursor;
begin
lb_listarticul.Cursor:=-11;
cb_articuls.Items.Clear;
gifList:=cProduct.FormFileListGif(NodeName);
for i:=0 to length(giflist)-1 do begin
image:=TImage.Create(form1);
image.Picture.LoadFromFile(NodeName + giflist[i].namefile);
delete(giflist[i].namefile, length(giflist[i].namefile)-3, 4);
cb_articuls.Items.Add(giflist[i].namefile);
lb_listarticul.Items.AddObject(giflist[i].namefile, image);
end;
gifList:=nil;
lb_listarticul.Cursor:=0;
end;
image: TImage - объявлен глобально, при закрытии формы делается free.
gifList:=cProduct.FormFileListGif(NodeName); - формирует (в массиве; динамическом, но он в конце - nil) список файлов, лежащих в указанной папке.
Спасибо за возможные ответы :)
Iconka (2004-09-24 17:03:00) [21]Используй MemCheck. Узнаешь есть ли утечка или нет.
Что это - ищи в google - модуль.