Imagem no QuickReport fica preta

Delphi

21/05/2004

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!


Nildo

Nildo

Curtidas 0

Respostas

Cabelo

Cabelo

21/05/2004

Vc dá um free no Canvas quando sai do preview??


GOSTEI 0
Nildo

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?


GOSTEI 0
Cabelo

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


GOSTEI 0
Nildo

Nildo

21/05/2004

Acabei de tentar... Naum funcionou...


GOSTEI 0
Cabelo

Cabelo

21/05/2004

continua a dar o mesmo erro??

ou vc não conseguiu visualizar o canvas no rel??


GOSTEI 0
Nildo

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

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


GOSTEI 0
Nildo

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


GOSTEI 0
Cabelo

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..


GOSTEI 0
Nildo

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

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


GOSTEI 0
Nildo

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´
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

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


GOSTEI 0
Nildo

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.


GOSTEI 0
Cabelo

Cabelo

21/05/2004

manda sim :

cabelo.uni@uol.com.br


GOSTEI 0
Nildo

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!


GOSTEI 0
Cabelo

Cabelo

21/05/2004

Firmeza..

Que isso cara..


GOSTEI 0
Copan Informática

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;
GOSTEI 0
POSTAR