Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос про память. [D6, XP]


Страницы:   1 2 3

vegarulez ©   (2008-01-06 09:45:00) 

Привет всем мастерам.
Подскажите пожалуйста ответ на такой вопрос...
у меня в программе я должен обновлять рисунок кнопочек и обновляю я его вот таким кодом:


var
i,z:Integer;
begin
randomize;
z:=random(rnd_btn);
Bmp := TBitmap.Create;
        for i:=0 to FormMain.ComponentCount-1 do
         if FormMain.Components[i] is TButton then
        with (FormMain.Components[i] as TButton) do
        if pos('BT_',FormMain.Components[i].Name)=0 then
         Begin
          Bmp.LoadFromFile('./picture/key'+inttostr(z)+'.bmp');
          Bitmap.FreeImage;
          Bitmap.FreePixmap;

          Bitmap.Width:=Width;
          Bitmap.Height:=Height;
          Bitmap.Canvas.StretchDraw(ClientRect,Bmp);
        End;

Bmp.Free;
end;


Так  вот... перехожу собственно к вопросу... при таком подходе я заметил, что после каждого обновления рисунка кнопочек память выделяемая под программу увеличивается.
Я  добавил в код FreeImage, FreePixmap (выделлые жирным цветом :) ) ну типа думал очистить, чтоб память не занималась... но это не помогло...

Вопрос: Подскажите как сделать правильно? Чтобы после каждого обновления память не подъедалась. Хоть она увеличивается и не на много там килобайты... но тем не менее...


DVM   (2008-01-20 22:17:00) [41]


> vegarulez ©  


> Да но всё равно каждый раз память подъедается... и назад
> возращаться не хотит...

Как узнал?


vegarulez   (2008-01-20 22:13:00) [42]

Прихватил... только, что это дало для понимания вопроса?

procedure TFormMain.BT_Picture();
var
i,z:Integer;
begin
randomize;
z:=random(rnd_btn);
Bmp := TBitmap.Create;
try
  for i:=0 to FormMain.ComponentCount-1 do
    if FormMain.Components[i] is TButton then
      with (FormMain.Components[i] as TButton) do
       BEGIN

        if pos('BT_',FormMain.Components[i].Name)=0 then
        Begin
          Bmp.LoadFromFile('./picture/key'+inttostr(z)+'.bmp');
          Bitmap.Width:=Width;
          Bitmap.Height:=Height;
          Bitmap.Canvas.StretchDraw(ClientRect,Bmp);
        End;
       END;
finally
  Bmp.Free;
end;
end;


homm   (2008-01-20 22:06:00) [43]

Еще одну строчку заголоска функии прихвати в цитировании. А что есть Bitmap ?


vegarulez   (2008-01-20 22:01:00) [44]


var
i,z:Integer;
begin
randomize;
z:=random(rnd_btn);
Bmp := TBitmap.Create;
try
  for i:=0 to FormMain.ComponentCount-1 do
    if FormMain.Components[i] is TButton then
      with (FormMain.Components[i] as TButton) do
       BEGIN
        if pos('BT_',FormMain.Components[i].Name)=0 then
        Begin
          Bmp.LoadFromFile('./picture/key'+inttostr(z)+'.bmp');
          Bitmap.Width:=Width;
          Bitmap.Height:=Height;
          Bitmap.Canvas.StretchDraw(ClientRect,Bmp);
        End;
       END;
finally
  Bmp.Free;
end;
end;


Да но всё равно каждый раз память подъедается... и назад возращаться не хотит... т.е. я так понимаю... что типа на холст наверно наносится изображение и занимает память не выгружая из памяти старый холст....
вопрос остаётся в силе...
нид Хелп...


@!!ex   (2008-01-06 10:55:00) [45]

var
 i,z:Integer;
begin
 randomize;
 z:=random(rnd_btn);
 Bmp := TBitmap.Create;
 try
   for i:=0 to FormMain.ComponentCount-1 do
     if FormMain.Components[i] is TButton then
       with (FormMain.Components[i] as TButton) do
         if pos('BT_',FormMain.Components[i].Name)=0 then
         Begin
           Bmp.LoadFromFile('./picture/key'+inttostr(z)+'.bmp');
           Bitmap.Width:=Width;
           Bitmap.Height:=Height;
           Bitmap.Canvas.StretchDraw(ClientRect,Bmp);
         End;
 finally
   Bmp.Free;
 end;
end;


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо