|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
ListView и Image, забивается память.. help
Доброй ночи Ув. Дэлфисты!
Помогите разобраться почему забивается память, когда запускаю программку и кликаю по элементам в ListView то память нарастает по 300-350кб. Прилагаю исходник с примером. Помогите пожалуйста. Исходник (narod) ps; Cкорее всего это из за Image т.к он вроде накладывается один на другой.. Последний раз редактировалось mishqa35, 25.01.2010 в 03:13. |
#2
|
|||
|
|||
Скорее всего, где-то не освобождаешь память. Ну или накапливаешь какие-то ресурсы. Т.е. класичесский вариант утечек памяти.
|
#3
|
|||
|
|||
Проблема в этом коде:
Код:
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
|
||||
|
||||
Я думаю происходит следующее:
Вы создаете pic := TJPEGImage.Create; Потом передаете его как ссылку в Image1.Canvas.Draw(0, 0, pic); Компилятор считает, что вы будете использовать далее это объект т.к. вы его не уничтожаете, а раз вы этого не делаете, значит и ему по выходу из процедуры делать этого не стоит. Попробуйте добавить Image1.Free; перед выходом из процедуры. Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#5
|
|||
|
|||
Страдалецъ, пробывал не помогало.
Переписал весь код и все стало работать как надо, память не засоряется. вот код: Код:
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
|
|||
|
|||
Вопрос решон, темку можно закрыть.
|