Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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.036 c
2-1186551990
D@Nger
2007-08-08 09:46
2007.09.09
Как однозначно идентифицировать компьютер?


4-1174545538
Сканер
2007-03-22 09:38
2007.09.09
Чтение COM port под XP


15-1186726493
___________11
2007-08-10 10:14
2007.09.09
Комментарии в коде


2-1187525362
Alral
2007-08-19 16:09
2007.09.09
Количество элементов в массиве


15-1186513264
Cyrax
2007-08-07 23:01
2007.09.09
Объявления коммерческого характера на рекламных щитах от частных





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский