![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Что за фишка, просто глюк какой-то. [D5, Win95/98, Win2k]
Weare © (2003-01-30 11:16:00)Добрый день, мастера. В Делфях есть такой примерчик:
procedure TForm1.Button1Click(Sender: TObject);
var
BitMap1,BitMap2 : TBitMap;
MyFormat : Word;
begin
BitMap2 := TBitMap.Create;
BitMap1 := TBitMap.Create;
try
BitMap1.LoadFromFile("c:\Program Files\common Files\Borland Shared\Images\Splash\256color\factory.bmp");
BitMap2.Assign(BitMap1); // Copy BitMap1 into BitMap2
BitMap2.Dormant; // Free up GDI resources
BitMap2.FreeImage; // Free up Memory.
Canvas.Draw(20,20,BitMap2); // Note that previous calls don"t lose the image
BitMap2.Monochrome := true;
Canvas.Draw(80,80,BitMap2);
BitMap2.ReleaseHandle; // This will actually lose the bitmap;
finally
BitMap1.Free;
BitMap2.Free;
end;
end;
Так вот, если на кнопку нажимать много (где-то 7-20 раз), то в конце концов Вы увидите сообщение (в Win98) "Bitmap is not valid" или "Параметр задан неверно", правда бмпешку я брал размера эдак 15Mb(если размер больше, то через меньшее кол-во раз будет это сообщение).После выхода из проги и ее очередного запуска это будет повторяться уже через пару раз нажатия, а то и сразу. Избавиться от этого можно только после перегрузки машины, т.е. Вы сможете опять некоторое кол-во раз нажимать на кнопку. Получается, что Делфи не может корректно очистить какую-то там память или освободить ресурс. В Win2К я этого не заметил.
Как с этим бороться, может кто подскажет? Очень надо. У меня программа печатает текст на готовый *.bmp шаблон. Так вот такие казусы и происходят после нескольких отправок на печать. Тогда я переделал прогу: создавал Bmp при криейте формы, а убивал при дестрое. Результат очевиден - после нескольких запусков приложения приходилось перезагружать машину, т.к. опять выдавалось это сообщение.
Помогите, плиз!!!
DVM (2003-01-30 12:40:00) [21]Так по-моему правильнее:
begin
BitMap2 := TBitMap.Create;
try
BitMap1 := TBitMap.Create;
try
...
finally
BitMap1.Free;
end;
finally
BitMap2.Free;
end;
end;