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 ('
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