Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Компоненты и классы
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Закрытая тема
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 25.01.2010, 02:49
mishqa35 mishqa35 вне форума
Прохожий
 
Регистрация: 20.01.2010
Сообщения: 16
Репутация: 10
По умолчанию ListView и Image, забивается память.. help

Доброй ночи Ув. Дэлфисты!
Помогите разобраться почему забивается память, когда запускаю программку и кликаю по элементам в ListView то память нарастает по 300-350кб.
Прилагаю исходник с примером.
Помогите пожалуйста.

Исходник (narod)

ps; Cкорее всего это из за Image т.к он вроде накладывается один на другой..

Последний раз редактировалось mishqa35, 25.01.2010 в 03:13.
  #2  
Старый 25.01.2010, 14:25
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,031
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Скорее всего, где-то не освобождаешь память. Ну или накапливаешь какие-то ресурсы. Т.е. класичесский вариант утечек памяти.
  #3  
Старый 25.01.2010, 17:55
mishqa35 mishqa35 вне форума
Прохожий
 
Регистрация: 20.01.2010
Сообщения: 16
Репутация: 10
По умолчанию

Проблема в этом коде:
Код:
procedure TForm1.ListView1Click(Sender: TObject);
var
  i: integer;
  pic: TJPEGImage;
  name, picname, Root: string;
begin
  i := ListView1.ItemIndex;
  if i < 0 then exit;
  name := ListView1.Items[i].Caption;
  Image1.Visible := false;
  Image1.Visible := true;
  //Image1.Canvas.FillRect(Image1.Canvas.ClipRect);
  //Image1.Picture := nil;
  //Image1.Canvas.Free;
  picname := Copy(name, 1, Pos(' ', name)-1);
  GetDir(0, Root);
  pic := TJPEGImage.Create;
  pic.LoadFromFile(Root+'\Img\'+picname+'.jpg');
  Image1.Proportional := true;
  Image1.Stretch := true;
  Image1.Canvas.Draw(0, 0, pic);
end;
а именно
Код:
Image1.Canvas.Draw(0, 0, pic);
если за комментировать строку то все норм, память не растет.
Помогите решить проблему..
  #4  
Старый 25.01.2010, 18:01
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Я думаю происходит следующее:
Вы создаете pic := TJPEGImage.Create;
Потом передаете его как ссылку в Image1.Canvas.Draw(0, 0, pic);
Компилятор считает, что вы будете использовать далее это объект т.к. вы его не уничтожаете, а раз вы этого не делаете, значит и ему по выходу из процедуры делать этого не стоит.
Попробуйте добавить Image1.Free; перед выходом из процедуры.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
  #5  
Старый 25.01.2010, 18:05
mishqa35 mishqa35 вне форума
Прохожий
 
Регистрация: 20.01.2010
Сообщения: 16
Репутация: 10
По умолчанию

Страдалецъ, пробывал не помогало.
Переписал весь код и все стало работать как надо, память не засоряется.
вот код:
Код:
procedure TForm1.ListView1Click(Sender: TObject);
var
  i: integer;
  pic: TJPEGImage;
  name, picname, Root: string;
begin
  i := ListView1.ItemIndex;
  if i < 0 then exit;
  name := ListView1.Items[i].Caption;
  picname := Copy(name, 1, Pos(' ', name)-1);
  GetDir(0, Root);
  pic := TJPEGImage.Create;
  try
    pic.LoadFromFile(Root+'\Img\'+picname+'.jpg');
    Image1.Picture.Graphic := pic
  finally
    pic.Free
  end
end;

И еще вопросец, не знаю как бы правильно сформулировать, но опишу как смогу)
Есть форма на ней ListView1 и там список
1 - Документ.txt
2 - Документ.txt
...
Вот когда я перелистываю их с помощью клавы, стрелками вверх\вниз то мне надо каждый раз это обработать, то есть если мы спустились с 1 на 2 то я получаю в сплывающем окне имя "2 - Документ.txt"

Последний раз редактировалось mishqa35, 25.01.2010 в 18:37.
  #6  
Старый 05.02.2010, 22:35
mishqa35 mishqa35 вне форума
Прохожий
 
Регистрация: 20.01.2010
Сообщения: 16
Репутация: 10
По умолчанию

Вопрос решон, темку можно закрыть.
Закрытая тема


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 16:38.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter