Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
ВнизВопрос про отчистку памяти. Найти похожие ветки
← →
vegarulez © (2007-08-15 14:10) [0]Привет всем мастерам! У меня такой вопрос... у меня в приложении несколько форм, каждая форма разворачивается на весь экран, на канву помещается изображение + там 1 или два Image на форме имеются... так вот я заметил в диспетчере задач, что когда от формы к форме переключаюсь, то память приложения увеличивается... и при этом когда форму закрываю... она не уменьшается... при последующем открытии опять увеличивается... я так полагаю потом что мой метод onPaint формы не коректно работает... вернее работает то коректно скорее всего, но при закрытии в памяти видимо висит изображение, а при повторном открытии берётся новое... при том что старое остаётся в памяти... Подскажите как правильно быть в этой ситуации? а то чем больше раз на форму захожу тем больше системной памяти отъедается... хоть и по чуть-чуть... но всё равно...
...
private
Bitmap: TBitmap;
...
procedure TForm2.FormCreate(Sender: TObject);
begin
...
Bitmap := TBitmap.Create;
Bitmap.LoadFromFile("./picture/skin1.png");
...
end;
...
procedure TForm2.FormPaint(Sender: TObject);
begin
Image2.Picture.Bitmap.LoadFromFile("./picture/" + Form1.a + "1.png");
Canvas.StretchDraw(Rect(0,0,Form1.Width,Form1.Height),Bitmap);
Canvas.StretchDraw(Rect(0,140,200,240),Image2.Picture.Bitmap);
end;
...
procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Image2.Picture.Bitmap.FreePixmap;
end;
← →
Сергей М. © (2007-08-15 14:14) [1]
> при этом когда форму закрываю... она не уменьшается
С чего бы ей уменьшиться ?
Где Bitmap.Free ? Нет его, судя по коду.
← →
vegarulez © (2007-08-15 14:22) [2]Так я же Bitmap токо 1 раз создаю... при формкриэте...
при форм шоу, и при паинт - он тока обращается к этому битмапу...
а не подгружает опять...
Или я чото не понимаю?
← →
Сергей М. © (2007-08-15 15:04) [3]
> чото не понимаю?
Да не то что "чото" - "ваще ничиво", видимо, не понимаешь)
← →
Ega23 © (2007-08-15 15:13) [4]
> Так я же Bitmap токо 1 раз создаю... при формкриэте...
> при форм шоу, и при паинт - он тока обращается к этому битмапу.
> ..
> а не подгружает опять...
Да, но в OnClose ты кго не убиваешь. Сам создал - буть любезен сам убить.
← →
DVM © (2007-08-15 15:13) [5]
> Image2.Picture.Bitmap.LoadFromFile("./picture/" + Form1.
> a + "1.png");
почему бы вот это не отправить тоже в OnCreate?
← →
vegarulez © (2007-08-15 16:01) [6]просто если я использую при онклозе - Bitmap.Free,
то при повторном обращении к форме (Form2.Show) у меня тут же выскакивает эксцепшн...
потому как он видимо онпаинтом пытается прорисовать канву... а прорисовывать то нечего... т.к. Bitmap.Free
DVM © (15.08.07 15:13) [5] потому что
program Project1;
...
Application.Initialize;
Application.CreateForm(TForm1, Form1);
Application.CreateForm(TForm2, Form2);
...
Application.Run;
Именно поэтому...
А также, потому, что каждый раз, при обращении к форме имажи должны меняться на другие.
Ega23 © (15.08.07 15:13) [4]
Ну я это понимаю.. но как тогда быть с эксцэпшином?
← →
Ega23 © (2007-08-15 16:06) [7]
> то при повторном обращении к форме (Form2.Show) у меня тут
> же выскакивает эксцепшн...
Естественно. Ты пытаешься вызвать удалённую форму.
Смотри разницу между Close и Hide.
← →
vegarulez © (2007-08-15 18:12) [8]Ничего не понимаю что происходит... поменял где надо close и hide, но теперь другая проблема...
почему то теперь при методе он паинт на второй форме...
Сanvas.StretchDraw(Rect(0,0,Form1.Width,Form1.Height),BMPFORM);
Canvas.StretchDraw(Rect(0,140,200,240),Image2.Picture.Bitmap);
вот в этом случае - прорисовывается всё всего лиш один раз, когда форма2 показывается... и всё... после этого прорисовки нет... если её сделать хайд и снова показать то будет всё белое и рисунок и канва формы...
а в этом случае когда работает один из блоков - он нормально отрабатывает...
Сanvas.StretchDraw(Rect(0,0,Form1.Width,Form1.Height),BMPFORM);
//Canvas.StretchDraw(Rect(0,140,200,240),Image2.Picture.Bitmap);
допустим тока чтобы канва формы была...
//Сanvas.StretchDraw(Rect(0,0,Form1.Width,Form1.Height),BMPFORM);
Canvas.StretchDraw(Rect(0,140,200,240),Image2.Picture.Bitmap);
или обратная ситуация тока рисунок без канфы формы
в чём дело не могу понять, раньше же всё нормально было - оба блока вместе сосуществовали, и оба прорисовывались постоянно при изменениях на форме...
Подскажите что нет так?...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.09.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.042 c