![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос про память. [D6, XP]
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;