Blob para ClipBoard.

Delphi

30/07/2007

Olá galera,
como faço para mandar para a área de transferência um texto que está em um campo blob?
Se alguém souber agradeço desde já.


Weliton Oliveira

Weliton Oliveira

Curtidas 0

Respostas

Adriano Santos

Adriano Santos

30/07/2007

Isso deve resolver:
[quote:203236b7ac=´Copia para a memória´]
procedure TForm1.Button2Click(Sender: TObject);
begin
  DBMemo1.SelectAll;
  DBMemo1.CopyToClipboard;
end;

[/quote:203236b7ac]

[quote:203236b7ac=´Cola da memória´]
procedure TForm1.Button3Click(Sender: TObject);
begin
  Memo1.PasteFromClipboard;
end;

[/quote:203236b7ac]


GOSTEI 0
Weliton Oliveira

Weliton Oliveira

30/07/2007

Caro Adriano,
obrigado pela sua atenção ao responder minha dúvida.

Porém, este código não me serviria, visto que o texto salvo no campo Blob é um documento do Word, com formatações, tabelas, fotos, etc...
coisas que o TDBMemo e o TDBRichEdit não exibem.

O que eu preciso fazer é copiar direto do campo Blob, por exemplo:

TabelaCampoBlob.Value ---> Clipboard, sem usar ´intermediários´ como TDBMemo ou TDBRichEdit.

Entendeu?

De qualquer forma, mais uma vez obrigado pela sua atenção.

[quote=´Adriano Santos´]Isso deve resolver:
[quote=´Copia para a memória´]
procedure TForm1.Button2Click(Sender: TObject);
begin
  DBMemo1.SelectAll;
  DBMemo1.CopyToClipboard;
end;



[quote=´Cola da memória´]
procedure TForm1.Button3Click(Sender: TObject);
begin
  Memo1.PasteFromClipboard;
end;




GOSTEI 0
Bruno Belchior

Bruno Belchior

30/07/2007

Você pode usar diretamente a área de transferência, utilizando um objeto do tipo [b:1616c81e83]TClipboard[/b:1616c81e83] (unit Clipbrd). Mas vale lembrar, que se a área de transferência for alterada, seu trabalho será em vão...
procedure SetClipboard(pText: string);
var
  cb: TClipBoard;
begin
  cb := Clipboard;
  cb.AsText := pText;
end;

function GetClipboard: string;
var
  cb: TClipBoard;
begin
  cb := Clipboard;
  Result := cb.AsText;
end;



GOSTEI 0
Weliton Oliveira

Weliton Oliveira

30/07/2007

Bruno,
o campo da minha tabela Interbase é um Blob, não é um string (varchar).
Eu uso Stream para salvar e recuperar os dados.

Entendeu?


GOSTEI 0
Bruno Belchior

Bruno Belchior

30/07/2007

mas se é o texto que está no campo blob, como descreveu acima, então a funcionalidade é a mesma...


GOSTEI 0
Weliton Oliveira

Weliton Oliveira

30/07/2007

Ok, Bruno.
Apenas um quadrado vai para o clipboard quando uso os códigos (isso mesmo, a forma geométrica quadrado).

Veja como eu faço para salvar e recuperar o Blob:

Tenho em uma tabela Interbase um campo:
´LAUDO´ BLOB SUB_TYPE TEXT SEGMENT SIZE 80,
onde guardo um texto do MS Word contendo textos, tabelas, fotos, etc.. arquivo do Word, aberto em um Ole Container.

Salvo o conteúdo do Ole Container usando Stream:
procedure TFormResultado.SalvarBlob;
var
strObj : TStream;
begin
strObj := DModule.QueAnato.CreateBlobStream(DModule.QueAnatoLAUDO, bmWrite);
try
with OLEContainer do
if State <> osEmpty then
SaveToStream(strObj);
finally
strObj.Free;
end;
end;

E abro o conteúdo do campo ´LAUDO´ acima usando Stream:
procedure TFormResultado.LerBlob;
var
strObj : TStream;
begin
strObj := DModule.QueAnato.CreateBlobStream(DModule.QueAnatoLAUDO, bmReadWrite);
try
if strObj.Size <> 0 then
OLEContainer.LoadFromStream(strObj);
finally
strObj.Free;
end;
end;

O QUE EU PRECISO:
É jogar para o ClipBoard o conteúdo do Stream aberto com ´LerBlob´ para fazer a impressão.

Talvez possa ser feito de outra forma..... não sei, mas eu preciso jogar direto para área de transferência, sem usar ´intermediários´ (TDBMemo ou TDBRichEdit).
Como o texto pode conter textos, tabelas, fotos, etc... não posso usar um TDBMemo ou TDBRichEdit (visto que eles só exibem texto), para selecionar tudo (SelectAll) e depois copiar para a área de transferência.

É isso aí.
Grande abraço.


GOSTEI 0
Bruno Belchior

Bruno Belchior

30/07/2007

Hum coisa que poderia fazer, é ao ler, guardar a informação em um TMemoyStream, e posteriormente, se precisar da informação, ela está no mesmo...


GOSTEI 0
POSTAR