Главная страница
    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.042 c
2-1187255588
vitv
2007-08-16 13:13
2007.09.09
RxSysTray-проблема


2-1186428231
loeg
2007-08-06 23:23
2007.09.09
Нужно, чтобы Делфи нажала кнопочку :)


3-1178637615
Надежда
2007-05-08 19:20
2007.09.09
select из select-а


15-1186642187
Проходящий
2007-08-09 10:49
2007.09.09
Opensource на Delphi


15-1186524843
Суслик
2007-08-08 02:14
2007.09.09
Кто понимает как делаются современные online игры?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский