Fórum Problema de Memoria #215553
20/02/2004
0
Bom Dia a Todos, e desde já agradeço pela ajuda
Tenho uma rotina de impressão de que utiliza: 3 BitMap ( Utilizado para a impressão de códigos de barra ) e um TJPEGImage (utilizado para imprimir uma imagem ) todos estes objetos estão sendo criados dinamicamente.
O problema é que quando vou imprimir em grande quantidade, na faixa de 150 – 200 impressões, da o seguinte erro no Delphi ‘EOutResouces’ e no executável ‘Parâmetro incorreto’, aparentemente parece problema de memória. Já testei a rotina em Windows 98, 2000, XP e todos com o mesmo erro. Quando eu acabo de ligar a maquina e não tem nada rodando ainda consigo imprimir umas 300 até 350 impressões, mas depois aparece o mesmo erro.Testei a impressão sem as imagens acima citadas, somente com texto e consegui imprimir 1000 impressões sem problema algum.
Não sei se estou usando a forma correta de criar e retirar as imagens da memória, pois acho que o problema esta ai. Parece que apesar do Windows limpar a memória ele não consegue mais realocar este espaço.
Segue abaixo a forma que estou fazendo:
{ Cria as Imagens utilizadas na impressão na memoria }
unitimpmultaNova.CodBarraBanco := TBitMap.Create;
unitimpmultaNova.JPG := TJPEGImage.Create;
unitimpmultaNova.Imagem := TBitmap.Create;
unitimpmultaNova.codbarraBMP := TBitMap.Create;
while not qryImpAits.Eof do // dentro do while chamo
begin
// Dentro do Wlhile Chamo a Procedure de impressão
// Jogo os dados para impressão em variáveis
{ Rotina feita em canvas para impressão }
//Imprime (parametro1, parametro2, parametro3...)
end;
{ Tira da Memoria As Imagens Usadas na Imressão }
unitimpmultaNova.codbarraBMP.Free;
unitimpmultaNova.codbarrabanco.free;
unitimpmultaNova.jpg.Free;
unitimpmultaNova.Imagem.free;
Na Rotina de impressão:
CodBarraBanco.Assign(FrmImpMultaGeral.duckbarcode2.Getbitmap);
CodBarraBMP.Assign(FrmImpMultaGeral.DuckBarcode1.GetBitmap);
Já tentei de outra formas também, criando e tirando da memória a cada vez que chamo a função de imprimir, utlizando o := Nil, destroy, mas todas sem sucesso.
Utilizo Delphi5 e Interbase com a rotina de impressão em Canvas.
Muito Obrigado
Tenho uma rotina de impressão de que utiliza: 3 BitMap ( Utilizado para a impressão de códigos de barra ) e um TJPEGImage (utilizado para imprimir uma imagem ) todos estes objetos estão sendo criados dinamicamente.
O problema é que quando vou imprimir em grande quantidade, na faixa de 150 – 200 impressões, da o seguinte erro no Delphi ‘EOutResouces’ e no executável ‘Parâmetro incorreto’, aparentemente parece problema de memória. Já testei a rotina em Windows 98, 2000, XP e todos com o mesmo erro. Quando eu acabo de ligar a maquina e não tem nada rodando ainda consigo imprimir umas 300 até 350 impressões, mas depois aparece o mesmo erro.Testei a impressão sem as imagens acima citadas, somente com texto e consegui imprimir 1000 impressões sem problema algum.
Não sei se estou usando a forma correta de criar e retirar as imagens da memória, pois acho que o problema esta ai. Parece que apesar do Windows limpar a memória ele não consegue mais realocar este espaço.
Segue abaixo a forma que estou fazendo:
{ Cria as Imagens utilizadas na impressão na memoria }
unitimpmultaNova.CodBarraBanco := TBitMap.Create;
unitimpmultaNova.JPG := TJPEGImage.Create;
unitimpmultaNova.Imagem := TBitmap.Create;
unitimpmultaNova.codbarraBMP := TBitMap.Create;
while not qryImpAits.Eof do // dentro do while chamo
begin
// Dentro do Wlhile Chamo a Procedure de impressão
// Jogo os dados para impressão em variáveis
{ Rotina feita em canvas para impressão }
//Imprime (parametro1, parametro2, parametro3...)
end;
{ Tira da Memoria As Imagens Usadas na Imressão }
unitimpmultaNova.codbarraBMP.Free;
unitimpmultaNova.codbarrabanco.free;
unitimpmultaNova.jpg.Free;
unitimpmultaNova.Imagem.free;
Na Rotina de impressão:
CodBarraBanco.Assign(FrmImpMultaGeral.duckbarcode2.Getbitmap);
CodBarraBMP.Assign(FrmImpMultaGeral.DuckBarcode1.GetBitmap);
Já tentei de outra formas também, criando e tirando da memória a cada vez que chamo a função de imprimir, utlizando o := Nil, destroy, mas todas sem sucesso.
Utilizo Delphi5 e Interbase com a rotina de impressão em Canvas.
Muito Obrigado
Marceloandrease
Curtir tópico
+ 0
Responder
Clique aqui para fazer login e interagir na Comunidade :)