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

 

      Nome               Tipo        Tamanho           Chave

ID                         +                          * (chave primária)

NOME                    A                 50

BMP                       BINARY

 

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

Active                               TRUE

AutoSessionName           TRUE

 

Tdatabase

Databasename                         DB01

AliasName                               *

LoginPrompt                            FALSE

Connected                                TRUE

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

 

TQUERY

DatabaseName                 DB01

SQL                                select * from imagens.db

ACTIVE                            TRUE

 

TTABLE

DatabaseName                 DB01

TableName                       imagens.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

Default                            TRUE

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