 |
ActiveDelphi .: O site do programador Delphi! :.
|
Exibir mensagem anterior :: Exibir próxima mensagem |
Autor |
Mensagem |
Marcelo_Ribeiro Aprendiz

Registrado: Quarta-Feira, 17 de Fevereiro de 2010 Mensagens: 127
|
Enviada: Sex Set 30, 2016 9:50 am Assunto: Delphi 7 + Rave com imagem |
|
|
E aí, td tranquilo? Poderiam me dar uma ajuda?
Tenho um rave que possui uma imagem. Eu busco a imagem do banco, salvo em bmp em uma pasta e coloco no link da imagem no rave. Essa imagem fica com 20,7kb.
Qdo tem muita informação (por ex, gerei um relatório de um mês que deu mais de 4000 páginas - é uma ficha de trabalho que é impresso pra cada funcionário). Mas muitas vezes dá um erro ou durante a impressão ("Out of memory while expanding memory stream", e nesse caso para o processo e nem abre o Rave), ou qdo fecha o rave (dá um erro de ntdl.dll). Mas quando gero um relatório menor (com 500 páginas, ou até umas 1500, 2000 páginas, não dá erro).
Devo levar em conta que como esse relatório é usado em vários clientes, cada um pode salvar a imagem que quiser. Será que esse erro seria alguma limitação da ferramenta? O que eu poderia fazer pra tentar suprimir esses erros?
Grato pela ajuda. |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Sex Set 30, 2016 12:42 pm Assunto: |
|
|
O rave é muito bugado, eu também utilizo ele, mas é difícil conviver com seus bugs e a nevrona nunca se preocupou em deixá-lo menos bugado do que é.
Qual delphi você utiliza?
Como você manda a imagem para o rave?
outra coisa, somente utilizo imagens png e jpeg, bmp não, pois bmp não tem compactação, faço a compactação na hora e deixo a imagem em memória para ser utilizada todo o tempo da aplicação, como é um logo, não ocupará tanta memória assim em computadores modernos, mas deve-se limitar ao máximo o tamanho da imagem e também do arquivo.
Verifique o consumo de memória do seu aplicativo quando ele gera os relatórios.
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
Marcelo_Ribeiro Aprendiz

Registrado: Quarta-Feira, 17 de Fevereiro de 2010 Mensagens: 127
|
Enviada: Sex Set 30, 2016 1:17 pm Assunto: |
|
|
Eu uso D7 Enterprise. Pra usar a imagem, eu salvo ela numa pasta temporária (tipo C:\Tempo\img.bmp), e lá no rave, coloco o caminho lá no filelink da imagem. E como usar png ou jpg no rave?
E como tb faço pra ver o consumo de memória do aplicativo? |
|
Voltar ao Topo |
|
 |
johnny-walker Moderador


Registrado: Sábado, 4 de Outubro de 2003 Mensagens: 10653 Localização: Contagem/MG - BRAZIL
|
Enviada: Seg Out 03, 2016 12:07 am Assunto: |
|
|
O consumo você observar pelo gerenciador de tarefas do Windows mesmo, mas para fazer uso de png e JPEG é um pouco mais complicado, mas eis a maior parte do código da minha função, mas com isto você consegue implementar no rave o que você quer.
Código: | type
TEscola = record
Nome,
Logradouro,
Numero,
Bairro,
Municipio: string;
UF: string[2];
CEP: string[10];
Telefone: string[20];
Cod_Escola: string[10];
Email: string[80];
webSite: string[80];
Logo: TBitmap;
end;
function IsJpegStream(var Stream: TMemoryStream): Boolean;
var
Bmfh: TBitmapFileHeader;
begin
Stream.Seek(soFromBeginning, 0);
Stream.ReadBuffer(Bmfh, sizeof(Bmfh));
Stream.Position := 0;
Result := (Bmfh.bfType = $D8FF);
end;
function IsPngStream(var Stream: TMemoryStream): Boolean;
var
Bmfh: TBitmapFileHeader;
begin
Stream.Seek(soFromBeginning, 0);
Stream.ReadBuffer(Bmfh, sizeof(Bmfh));
Stream.Position := 0;
Result := (Bmfh.bfType = $5089);
end;
var
Qry: TSQLQuery;
ImgStream: TMemoryStream;
Graphic: TGraphic;
begin
// Escolas
try
ImgStream := TMemoryStream.Create;
Qry := TSQLQuery.Create(nil);
Qry.SQLConnection := Connection;
// Carrega o Logo da Escola
Qry.Add('AQUI MEU SQL PARA ACESSAR MINHAS CONFIGURAÇÕES');
TBlobField(Qry.FieldByName('ESC_LOGO')).SaveToStream(ImgStream);
if imgStream.Size > 0 then
begin
imgStream.Position := 0;
if IsJpegStream(imgStream) then
begin
Graphic := TJPEGImage.Create;
Graphic.LoadFromStream(imgStream);
end
else
begin
if IsPngStream(imgStream) then
begin
Graphic := TPNGImage.Create;
Graphic.LoadFromStream(imgStream);
end;
end;
end;
if not Assigned(Escola.Logo) then
Escola.Logo := TBitmap.Create;
Escola.Logo.Assign(Graphic);
finally
FreeAndNil(Qry);
FreeAndNil(ImgStream);
FreeAndNil(Graphic);
end;
Para utilizar isto, você precisa utilizar parametros no rave, caso o componente do rave tenha tal, no caso somente os que são dataware
podem ter parâmetros e labels não são o caso, neste caso temos de
acessar por outros meios.
procedure PrintMainReport(rvpRel: TRvProject; Relatorio, RelPage: string);
var
Page: TRavePage;
txtEmpresa, txtEndereco, txtOutrosDados: TRaveText;
Bmp: TRaveBitmap;
begin
try
rvpRel.ClearParams;
rvpRel.Open;
Page := rvpRel.ProjMan.FindRaveComponent(RelPage, nil) as TRavePage;
txtEmpresa := rvpRel.ProjMan.FindRaveComponent('tcEmpresa', Page) as TRaveText;
txtEmpresa.Text := AnsiUpperCase(Escola.Nome);
txtEndereco := rvpRel.ProjMan.FindRaveComponent('tcEndereco', Page) as TRaveText;
txtEndereco.Text := Escola.Logradouro+', '+Escola.Numero+'. Bairro '+
Escola.Bairro+'. '+Escola.Municipio+'/'+Escola.UF+' - CEP.: '+Escola.CEP+
'. TEL.: '+Escola.Telefone;
txtOutrosDados := rvpRel.ProjMan.FindRaveComponent('tcOutrosDados', Page) as TRaveText;
txtOutrosDados.Text := 'Email: '+Escola.Email+' - Código da Escola: '+ Escola.Cod_Escola;
//LoadLogo(DMCon.BDConexao, rvpRel, Page);
Bmp := rvpRel.ProjMan.FindRaveComponent('Bitmap1', Page) as TRaveBitmap;
Bmp.Image.Assign(Escola.Logo);
rvpRel.ExecuteReport(Relatorio);
finally
rvpRel.Close;
end;
end;
initialization
// Nothing, just to use finalization clause
finalization
if Escola.Logo <> nil then
FreeAndNil(Escola.Logo);
end. |
Estas funções foram desenvolvidas por mim, o rave tem uma péssima documentação, mas com alguns detalhes eu consegui fazer o que queria, como vê não é tão simples, pois no meu caso não queria guardar extensões de arquivo no banco, acho inútil tal, então utilizei estas funções que desenvolvi para descobrir a qual formato pertence a imagem.
Em finalization eu chamo a função para liberar da memória o logo, isto para não ocasionar perda de memória, já que deixo ligado a propriedade para reportar vazamentos de memória.
Também é possível carregar com Params (Parâmetros) do rave, criei o Param.Logo, mas somente funciona com bmp, aí desisti.
Eis o código:
Código: | RvProject1.SetParam('Logo', 'Bolhas.bmp'); |
bye _________________ P.O.W.E.R B.Y D.E.L.P.H.I |
|
Voltar ao Topo |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|