Erro de memória

06/03/2003

0

Tenho uma rotina que imprime multas com fotos de radar e usa 3 cód. de barras do DuckBarcode.Quando o canvas está enviando a 180ª ou 200ª multa, aparece uma mensagem:
´Parametro Incorreto´. Quando eu rodo pelo fonte do delphi, logo depois dessa mensagem aparece: ´EOutOfResources´ e pára a execução nessa linha:
´DrawImage(Printer.Canvas,C*04+Esquerda,L*149+Superior,1300*Res,180*Res,CodBarraBanco);´
Os comandos e funções que uso são:
procedure DrawImage( Canvas : TCanvas; X, Y, Width, Height : Integer; ABitmap : TBitmap);
var
Header, Bits : Pointer; HeaderSize : DWORD; BitsSize : DWORD;
begin
GetDibSizes( ABitmap.Handle, HeaderSize, BitsSize );
Header := AllocMem( HeaderSize );
Bits := AllocMem( BitsSize);
try
GetDib( ABitmap.Handle, ABitmap.Palette, Header^, Bits^);
StretchDIBits(Canvas.Handle,X,Y,Width,Height,0,0,ABitmap.Width,ABitmap.Height,Bits,
TBitmapInfo(Header^),DIB_RGB_COLORS,SRCCOPY);
finally
FreeMem( Header, HeaderSize);
FreeMem( Bits, BitsSize );
end; end;
e para enviar à impressora:
jpg := TJPEGImage.Create; Imagem := TBitmap.Create;
Jpg.LoadFromFile(foto);
Imagem.Assign(JPG);
DrawImage(Printer.Canvas,C*04+Esquerda,L*80+Superior,2200*Res,690*Res,Imagem);
end;
jpg.Free; Imagem.Free; jpg := Nil; Imagem := Nil;

Para a foto que é JPG é
CodBarraBanco := TBitMap.Create;
CodBarraBanco.Assign(FrmImpMultaGeral.duckbarcode2.Getbitmap);
DrawImage(Printer.Canvas,C*04+Esquerda,L*149+Superior,1300*Res,180*Res,CodBarraBanco);
CodBarraBanco.Free;
codbarrabanco := Nil;
Eu vi na ajuda do Delphi que EOutOfResources é quando o sistema tenta alocar na memória do windows e esta está cheia. Teria algum jeito de limpar a memória do Windows a cada impressão dessa? OBS. Esses códigos são executados a cada multa impressa.


Anonymous

Anonymous

Responder

Posts

06/03/2003

Aroldo Zanela

Lucimar,

Não encontrei nenhuma solução específica e olhando seu código parece estar tudo certo. A única ´coisa´ parecida que escontrei ao pesquisar na base de conhecimento da Borland foi o seguinte:
[list:a6b7e80465]
Article #25294: Insufficient memory to complete operation

Problem:
Why am I getting the message insufficient memory to complete operation?

Solution:
You may have hit one of the BDE fixed, but configurable, memory limitations.
Use the BDE Administrator (BDEADMIN.EXE) to increase MEMSIZE and
SHAREDMEMSIZE settings.

You may also wish to re-evaluate the application hitting this limitation because
it is likely that the application is a major resource hit on the machine.

Not using auto-create forms and opening tables and queries as needed can
free up some of these resources.

Last Modified: 12-OCT-00
[/list:u:a6b7e80465]


Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar