Главная страница
    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.044 c
1-1182844443
Makhanev Alexander
2007-06-26 11:54
2007.09.09
Пример батника для билдинга проектов...


15-1186552961
простой
2007-08-08 10:02
2007.09.09
Что с компьютером? Подскажите


1-1183391824
JanMihail
2007-07-02 19:57
2007.09.09
Как сэмулировать нажатие Enter в Edit е чужого окна?


15-1186590146
Mozart
2007-08-08 20:22
2007.09.09
Я в шоке от таких запросов!!!!


6-1166818956
DriveR_F
2006-12-22 23:22
2007.09.09
Как с помощью IdHTTP загрузить картинку





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