Imagem no QuickReport fica preta
Olá galera!
Estou tendo uns probleminhas no QuickReport... Eu desenho no canvas de um TQrImage, que está dentro do meu relatório. Eu chamo este relatório, criando o form dele (de preview) em tempo de execução. Até aí tudo bem, mas depois de umas 3 ou 4 vezes que eu chamo este relatório, este TQrImage fica Todo preto.
Alguém saberia me dizer porque?
obrigado!
Estou tendo uns probleminhas no QuickReport... Eu desenho no canvas de um TQrImage, que está dentro do meu relatório. Eu chamo este relatório, criando o form dele (de preview) em tempo de execução. Até aí tudo bem, mas depois de umas 3 ou 4 vezes que eu chamo este relatório, este TQrImage fica Todo preto.
Alguém saberia me dizer porque?
obrigado!
Nildo
Curtidas 0
Respostas
Cabelo
21/05/2004
Vc dá um free no Canvas quando sai do preview??
GOSTEI 0
Nildo
21/05/2004
Não, pois o próprio QrImage faz isso. Eu acho que faz porque quando eu tento dar um Free no canvas dele, ele dá ´Acces Violation´
Alguma outra idéia?
Alguma outra idéia?
GOSTEI 0
Cabelo
21/05/2004
Tenta desenhar em uma variável tipo canvas, jogue ela no rel em RUN TIME, e na hora de fechar o Report dá um Free na variável, sem usar o Canvas do preview, acho que assim dá certo..
Cabelo
Cabelo
GOSTEI 0
Nildo
21/05/2004
Acabei de tentar... Naum funcionou...
GOSTEI 0
Cabelo
21/05/2004
continua a dar o mesmo erro??
ou vc não conseguiu visualizar o canvas no rel??
ou vc não conseguiu visualizar o canvas no rel??
GOSTEI 0
Nildo
21/05/2004
Tipo, depois de uns 2 ou 3 previews, a imagem fica toda Preta. Eu posso fazer o que quiser no Canvas que aparece e imprime tudo preto (onde está o QrImage)
GOSTEI 0
Cabelo
21/05/2004
Cara é o seguinte :
Eu não sei como vc faz para dar um preview, mas normalmente eu crio ele sobre um form :
assim :
application.CreateForm(TformBase, FormBase);
FormBase.QRReport.preview;
FormBase.Release;
isto no evento click do botão que chama o rel, assim eu deveria funcionar, pq vc dá um release do form todo, com certeza ocorre o free do canvas, pq o quê parece é que ele está escrevendo toda vez sobre o componente Image, parece que o canvas não está sendo liberado..
Espero ter ajudado..
Sem mais
Cabelo
Eu não sei como vc faz para dar um preview, mas normalmente eu crio ele sobre um form :
assim :
application.CreateForm(TformBase, FormBase);
FormBase.QRReport.preview;
FormBase.Release;
isto no evento click do botão que chama o rel, assim eu deveria funcionar, pq vc dá um release do form todo, com certeza ocorre o free do canvas, pq o quê parece é que ele está escrevendo toda vez sobre o componente Image, parece que o canvas não está sendo liberado..
Espero ter ajudado..
Sem mais
Cabelo
GOSTEI 0
Nildo
21/05/2004
Na verdade eu coloco o Action := caFree no FormClose do Formulário Base.
Se eu não fizer isso, o formulário que chama este outro nunca mais fecha... Mas eu posso até liberar o QrImage da memória que dá esse erro
Se eu não fizer isso, o formulário que chama este outro nunca mais fecha... Mas eu posso até liberar o QrImage da memória que dá esse erro
GOSTEI 0
Cabelo
21/05/2004
Vc então usa um MDI né??
tenta fazer um teste em outro projeto, que não seja MDI, veja como dá certo..
eu uso assim aqui e não tenho problemas..
tenta fazer um teste em outro projeto, que não seja MDI, veja como dá certo..
eu uso assim aqui e não tenho problemas..
GOSTEI 0
Nildo
21/05/2004
Num uso MDI naum.. Jah tentei pintar em um TBitmap e dar um Draw dele, jah tentei de tudo :cry:
GOSTEI 0
Cabelo
21/05/2004
Car então é o seguinte, vc não precisa dar um action := CAFree, vc pode usar como te passei que o form que chama ele fecha tb, mas da mesma maneira que eu te passei entendeu??
e aí eu tenho certeza que funciona, pq ele libera o form e seus componentes todos da memória, e cria todas as vezes que este form é chamado..
sem mais
Cabelo
e aí eu tenho certeza que funciona, pq ele libera o form e seus componentes todos da memória, e cria todas as vezes que este form é chamado..
sem mais
Cabelo
GOSTEI 0
Nildo
21/05/2004
Cabelo_uni,
Jah tinha tentado isso, mas acontecia que quando eu fechava o formulário do Preview (que é um frmRptBase, base dos meus relatorios, que é um preview personalizado), o formulário de parametrização não fechava mais (nem clicando no botaozinho ´fechar´ do formulário). Eu tinha feito assim:
Formulário de parametrização, Botão ´VISUALIZAR´
Formulário TMeuRelatorio
Mas quando eu fecho esse formulário (da visualizacao), o formulário de parametrizacao não fecha mais (nem pelo Close, nem pelo ModalResult). Você sabe o que pode estar ocorrendo?
Jah tinha tentado isso, mas acontecia que quando eu fechava o formulário do Preview (que é um frmRptBase, base dos meus relatorios, que é um preview personalizado), o formulário de parametrização não fechava mais (nem clicando no botaozinho ´fechar´ do formulário). Eu tinha feito assim:
Formulário de parametrização, Botão ´VISUALIZAR´
MeuRelatorio := TMeuRelatorio.Create( Self ); // ... Algumas atribuicoes a valores em captions ... MeuRelatorio.VisualizarRelatorio; MeuRelatorio.Free;
Formulário TMeuRelatorio
procedure TMeuRelatorio.VisualizarRelatorio; begin if fUsarQuery then begin qryBase.Active := True; qrVisualizar.Align := alClient; end; qrVisualizar.BringToFront; qrpBase.Preview; end;
Mas quando eu fecho esse formulário (da visualizacao), o formulário de parametrizacao não fecha mais (nem pelo Close, nem pelo ModalResult). Você sabe o que pode estar ocorrendo?
GOSTEI 0
Cabelo
21/05/2004
tenta assim :
procedure TMeuRelatorio.VisualizarRelatorio;
begin
if fUsarQuery then
begin
qryBase.Active := True;
qrVisualizar.Align := alClient;
end;
qrVisualizar.BringToFront;
qrpBase.Preview;
//dar um close ou free neste momento em qrpbase
end;
Só uma idéia..
Cabelo
procedure TMeuRelatorio.VisualizarRelatorio;
begin
if fUsarQuery then
begin
qryBase.Active := True;
qrVisualizar.Align := alClient;
end;
qrVisualizar.BringToFront;
qrpBase.Preview;
//dar um close ou free neste momento em qrpbase
end;
Só uma idéia..
Cabelo
GOSTEI 0
Nildo
21/05/2004
Num funcionou. Só pelo fato de eu tirar o
Action := caFree;
o formulário de parametrizacao não fecha mais.
Você quer que eu envie um projetinho bestinha simulando esta situação? Se sim, me passa o e-mail.
Muito obrigado por estar me ajudando, serei eternamente grato. Tenho que entregar isto na segunda feira até o fim da tarde e não tenho nem idéia do que seja isso.
Action := caFree;
o formulário de parametrizacao não fecha mais.
Você quer que eu envie um projetinho bestinha simulando esta situação? Se sim, me passa o e-mail.
Muito obrigado por estar me ajudando, serei eternamente grato. Tenho que entregar isto na segunda feira até o fim da tarde e não tenho nem idéia do que seja isso.
GOSTEI 0
Cabelo
21/05/2004
manda sim :
cabelo.uni@uol.com.br
cabelo.uni@uol.com.br
GOSTEI 0
Nildo
21/05/2004
Eu to de saida agora, eu posso te mandar segunda feira? Tenho algumas coias pra acertar que nao posso me atrazar.
Muito obrigado mesmo pela atenção!
Muito obrigado mesmo pela atenção!
GOSTEI 0
Cabelo
21/05/2004
Firmeza..
Que isso cara..
Que isso cara..
GOSTEI 0
Copan Informática
21/05/2004
Crie uma procedure carregafoto.
procedure TForm1.carregafoto;
var
b : TStream;
Jpg : TJpegImage;
begin
b:= TStream.Create;
Jpg := TJpegImage.Create;
b:= IBQuery1.CreateBlobStream(IBQuery1.FieldByName('foto'),bmRead);
if b.Size > 0 then
begin
Jpg.LoadFromStream(b);
QRImage2.Picture.Assign(Jpg);
jpg.Free;
end
else
QRImage2.Picture.Assign(nil);
b.Free;
end;
procedure TForm1.QRBand4BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
carregafoto;
end;
procedure TForm1.qr1StartPage(Sender: TCustomQuickRep);
begin
FrmPreview.Canvas.Draw(1, 1, QRImage2.Picture.Graphic);
end;
procedure TForm1.carregafoto;
var
b : TStream;
Jpg : TJpegImage;
begin
b:= TStream.Create;
Jpg := TJpegImage.Create;
b:= IBQuery1.CreateBlobStream(IBQuery1.FieldByName('foto'),bmRead);
if b.Size > 0 then
begin
Jpg.LoadFromStream(b);
QRImage2.Picture.Assign(Jpg);
jpg.Free;
end
else
QRImage2.Picture.Assign(nil);
b.Free;
end;
procedure TForm1.QRBand4BeforePrint(Sender: TQRCustomBand;
var PrintBand: Boolean);
begin
carregafoto;
end;
procedure TForm1.qr1StartPage(Sender: TCustomQuickRep);
begin
FrmPreview.Canvas.Draw(1, 1, QRImage2.Picture.Graphic);
end;
GOSTEI 0