Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.09.09;
Скачать: CL | DM;

Вниз

Вопрос про отчистку памяти.   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.024 c
2-1187001601
Quart
2007-08-13 14:40
2007.09.09
Blob


2-1186412147
Melior
2007-08-06 18:55
2007.09.09
Работа с TCP/UDP и БД


15-1187006902
Сатир
2007-08-13 16:08
2007.09.09
Вольные хлеба


15-1186596042
PEdee
2007-08-08 22:00
2007.09.09
Особенность компиляции в visual studio 2005


11-1169202581
mixail_shar
2007-01-19 13:29
2007.09.09
Ошибка в KOL к Кладову