ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Delphi 7 + Rave com imagem

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
Marcelo_Ribeiro
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 17 de Fevereiro de 2010
Mensagens: 127

MensagemEnviada: Sex Set 30, 2016 9:50 am    Assunto: Delphi 7 + Rave com imagem Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Sex Set 30, 2016 12:42 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Marcelo_Ribeiro
Aprendiz
Aprendiz


Registrado: Quarta-Feira, 17 de Fevereiro de 2010
Mensagens: 127

MensagemEnviada: Sex Set 30, 2016 1:17 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
johnny-walker
Moderador
Moderador


Registrado: Sábado, 4 de Outubro de 2003
Mensagens: 10653
Localização: Contagem/MG - BRAZIL

MensagemEnviada: Seg Out 03, 2016 12:07 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular MSN Messenger
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB