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

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

утечка памяти [D7, WinXP]


Страницы:   1 2

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 - модуль.


Страницы:   1 2

Наверх

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