Blob to QuickReport
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.
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
Curtidas 0
Respostas
Marcos Silva
28/06/2010
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 );
Mas se quer copiar para um stream, basta usar:
SeuDatasetSeuCampoBlob.SaveToStream( VariavelStream );
ou
TBlobField( Dataset.FieldByName('SeuCampoBlob') ).SaveToStream( VariavelStream );
GOSTEI 0
Weliton Oliveira
28/06/2010
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!!
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!!
GOSTEI 0
Marcos Silva
28/06/2010
Para usar o stream, dê uma lida no link http://www.delphi3000.com/articles/article_315.asp?SK=
GOSTEI 0
Carlos Mazzi
28/06/2010
Deu certo amigao?
GOSTEI 0
Weliton Oliveira
28/06/2010
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.
GOSTEI 0
Marcos Silva
28/06/2010
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).
GOSTEI 0