![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Доброй ночи Ув. Дэлфисты!
Помогите разобраться почему забивается память, когда запускаю программку и кликаю по элементам в 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
|
|||
|
|||
|
Вопрос решон, темку можно закрыть.
|