Fórum Blob to QuickReport #380221

28/06/2010

0

Olá, todos.
Caros colegas, estou precisando imprimir no quickreport o conteúdo de um campo blob do Firebird contendo texto formatado e/ou imagens.
Se eu conseguisse copiar para o Clipboard o conteúdo deste campo blob, recuperado através de um Stream, já ajudaria.
 Alguém já fez isto??
Agradeço.
Weliton Oliveira

Weliton Oliveira

Responder

Posts

28/06/2010

Marcos Silva

Primeiro você teria que identificar se é uma imagem ou um texto. Se for um texto, basta usar um DBQRRichText, se for uma imagem, sugiro que baixe o componente QREDBImage, e utilize-o (o QRDBImage nativo não é muito bom).

Mas se quer copiar para um stream, basta usar:
SeuDatasetSeuCampoBlob.SaveToStream( VariavelStream  );
ou 
TBlobField( Dataset.FieldByName('SeuCampoBlob') ).SaveToStream( VariavelStream  );
Responder

Gostei + 0

28/06/2010

Weliton Oliveira

Pois é colega!!

Meu campo blob pode conter tanto texto como imagem ou os dois.
Mas valeu pela dica do componente, vou instalá-lo e fazer uns testes.

Quanto ao stream, eu consigo criar.
O problema é jogar o seu conteúdo para área de transferência.

Mas valeu!!
Responder

Gostei + 0

28/06/2010

Marcos Silva

Para usar o stream, dê uma lida no link http://www.delphi3000.com/articles/article_315.asp?SK=
Responder

Gostei + 0

30/06/2010

Carlos Mazzi

Deu certo amigao?
Responder

Gostei + 0

05/07/2010

Weliton Oliveira

Deu certo amigao?


1)
Não deu, usei a dica do link acima, veja:
Vou copiar para o Clipboard o conteúdo do campo Blob "LAUDO", que pode conter texto formatado e/ou figuras, tabelas....

procedure StreamToClipboard;
var
  hbuf    : THandle;
  bufptr  : Pointer;
  mstream : TMemoryStream;
  strObj : TStream;
begin
  mstream := TMemoryStream.Create;
  try
    {-- Write your data to the stream. --}
    strObj := DModule.QueAnato.CreateBlobStream(DModule.QueAnatoLAUDO, bmReadWrite);

    hbuf := GlobalAlloc(GMEM_MOVEABLE, mstream.size);
    try
      bufptr := GlobalLock(hbuf);
      try
        Move(mstream.Memory^, bufptr^, mstream.size);
        Clipboard.SetAsHandle(CF_MYFORMAT, hbuf);
      finally
        GlobalUnlock(hbuf);
      end;
    except
      GlobalFree(hbuf);
      raise;
    end;
  finally
    mstream.Free;
    strObj.Free;
  end;
end;

Quando mando compilar, parece que há algo errado com o formato do Clipboard, veja o erro:

[DCC Error] Global.pas(72): E2003 Undeclared identifier: 'CF_MYFORMAT'


2)
E depois, tenho que pegar o conteúdo do Clipboard e usar para imprimir um relatório do QuickReport (resultado do exame), alinhado justificado.
Vai ser complicado.
Se alguém quiser me prestar acessoria....

Até mais.
Responder

Gostei + 0

05/07/2010

Marcos Silva


  Bom, quanto a dica, você adicionou a unit Clipbrd a lista de uses??
Outra coisa, dá pra tentar carregar o conteudo do Stream em um TImage usando um bloco TRy... except... end.Se der erro, não era uma imagem, sendo assim, trate como texto e mostre num QRichEdit, e se não der erro, use um TQRImage (eu particularmente usaria um TQREDBImage).
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar