Artigo Clube Delphi Edição 11 - Propriedade ContentStream

Artigo da Revista Clube Delphi Edição 11.

Esse artigo faz parte da revista Clube Delphi edição 11. Clique aqui para ler todos os artigos desta edição



Atenção: por essa edição ser muito antiga não há arquivo PDF para download. Os artigos dessa edição estão disponíveis somente através do formato HTML.

 

Propriedade ContentStream

Criando páginas dinâmicas com imagens

 

Disponibilizar uma página dinâmica na Internet através do Delphi, é uma tarefa muito simples. As palhetas Internet e InternetExpress fornecem uma das interfaces mais práticas para a construção de um site que "puxa"  dados de uma tabela. Há, porém, algumas situações onde é necessário um pouco mais de codificação, como disponibilizar em uma página imagens salvas em um banco de dados. Para isso, temos que trabalhar com a propriedade ContentStream do objeto TwebResponse que permite a exibição de dados não-texto.

 

Vejamos um exemplo prático desta situação:

 

Crie uma tabela no formato Paradox de acordo com a estrutura abaixo:

 

IMAGENS.DB

 

NomeTipoTamanhoChave

ID+* (chave primária)

NOMEA 50

BMPBINARY

 

Preencha a tabela com alguns registros e imagens.

 

Crie um TwebApplication através do Object Inspector. No WebDatamodule, insira um objeto Tdatabase, um Tsession, um Tquery e um Ttable. Configure suas propriedades de acordo com a lista abaixo:

 

Tsession

ActiveTRUE

AutoSessionNameTRUE

 

Tdatabase

DatabasenameDB01

AliasName*

LoginPromptFALSE

ConnectedTRUE

* Esta propriedade será configurada de acordo com o alias criado para a tabela imagens.db

 

TQUERY

DatabaseNameDB01

SQLselect * from imagens.db

ACTIVETRUE

 

TTABLE

DatabaseNameDB01

TableNameimagens.db

 

Nosso WebDatamodule será parecido com a figura abaixo:

 

 

Dê um duplo clique sobre o objeto Tquery, selecione todos os campos e pressione OK para criar objetos TFIELD. Repita o procedimento para o objeto Ttable.

Em seguida, devemos criar duas ações. A primeira irá listar o conteúdo do campo nome na página com um link para o segundo action. Quando o usuário clicar em algum nome, a segunda ação será executada, exibindo o conteúdo do campo BMP. Veja abaixo o código das duas ações:

 

procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;

  Request: TWebRequest; Response: TWebResponse; var Handled:

Boolean);

var

 s:String;

 

begin

  s:='<HTML><BODY>';

  Query1.First;

  While not Query1.Eof do begin

s:=s+'<A HREF="http://www.teste.com.br/project2.exe/Figura? id='+Query1.Fieldbyname('ID').asString+'">'+Query1.fieldbyname ('Nome').asString+'</a><BR>';

query1.Next;

  End;

 

  Response.Content:=s;

end;

 

 

procedure TWebModule1.WebModule1WebActionItem2Action(Sender: TObject;

  Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);

var

  Jpg: TJpegImage;

  Pic: Tpicture;

  strm2:TmemoryStream;

  cod:String;

 

begin

 

  strm2:=TMemoryStream.Create;

  Jpg := TJpegImage.Create;

  pic:= Tpicture.Create;

 

  cod:=Request.QueryFields.Values['id'];

  Table1.findKey([cod]);

 

  pic.Assign(table1BMP);

  jpg.Assign(pic.Graphic);

  jpg.SavetoStream(strm2);

 

  strm2.position:=0;

  Response.ContentStream := strm2;

  Response.ContentType := 'image/jpeg';

  Response.SendResponse;

 

  strm2.Free;

  pic.free;

  jpg.free;

end;

 

 As ações devem ser configuradas de acordo com a tabela abaixo:

 

WebActionItem1

DefaultTRUE

PathInfo/lista

 

 

WebActionItem2

PathInfo/grafico

 

O resultado produzido por este CGI pode ser conferido nas imagens abaixo:

 

 

Nesta figura podemos visualizar o conteúdo da tabela imagens.db, gerado pelo WebActionItem1.

 

 

 Aqui a figura correspondente ao registro clicado. Repare que o código do registro é passado como parâmetro para o WebActionItem2, através do método GET.

Para baixar este exemplo, acesse o site do Clube e clique no link Funções/Exemplos. Selecione a categoria Internet e baixe o arquivo figuras.zip

Artigos relacionados