Crie seus próprios plug-ins para o IDE do Delphi



Documentos relacionados
Google Drive: Acesse e organize seus arquivos

1. Introdução pág.3 2. Apresentação do sistema Joomla! pág.4 3. Acessando a administração do site pág.4 4. Artigos 4.1. Criando um Artigo 4.2.

Instalando o Internet Information Services no Windows XP

Desenvolvendo Websites com PHP

02 - Usando o SiteMaster - Informações importantes

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

MANUAL DO ANIMAIL Terti Software

CONSTRUÇÃO DE BLOG COM O BLOGGER

Trecho retirando do Manual do esocial Versão 1.1

Manual Captura S_Line

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

CONFIGURAÇÃO MINIMA EXIGIDA:

Manual de Atualização Versão

Manual SAGe Versão 1.2 (a partir da versão )

Despachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1

Web Design Aula 11: Site na Web

MANUAL DE INSTALAÇÃO DO ODONTO TECHNOLOGY

Sistema de Digitalização e Gerenciamento de Arquivos On-Line

GUIA INTEGRA SERVICES E STATUS MONITOR

Dicas para usar melhor o Word 2007

SUMÁRIO 1. AULA 6 ENDEREÇAMENTO IP:... 2

Procedimentos para Reinstalação do Sisloc

Daruma NFCe Conheça todos os passos para testar a NFCe Daruma

Manual das funcionalidades Webmail AASP

MANUAL DE FTP. Instalando, Configurando e Utilizando FTP

Manual do Painel Administrativo

AJAX no GASweb. Mas e afinal, para que usamos o AJAX?

Índice. Tenho uma conta pessoal e uma conta da instituição em que dou aula, porém não consigo acessar a conta da escola. O que fazer?

Sumário. 1 Tutorial: Blogs no Clickideia

Manual de configuração do sistema

Gerenciamento de Contatos

AP_ Conta Aplicativo para digitação e envio de contas médicas no padrão TISS

Follow-Up Acompanhamento Eletrônico de Processos (versão 3.0) Manual do Sistema. 1. Como acessar o sistema Requisitos mínimos e compatibilidade

Manual de utilização do sistema de envio de sms marketing e corporativo da AGENCIA GLOBO. V

Manual de Publicaça o no Blog da Aça o TRIBOS nas Trilhas da Cidadania

Google Drive. Passos. Configurando o Google Drive

MANUAL COTAÇAO WEB MANUAL MANUAL AVANÇO INFORMÁTICA AVANÇO INFORMÁTICA. [Digite seu endereço] [Digite seu telefone] [Digite seu endereço de ]

Manual de Utilização do Sistema GRServer Cam on-line (Gerenciamento de Câmeras On-line)

UNIVERSIDADE FEDERAL DO AMAPÁ NÚCLEO DE TECNOLOGIA DA INFORMAÇÃO. Manual de Avaliação de Desempenho Cadastro

Sumário. Tutorial: Editor de Exercícios Online para o professor

TUTORIAL: MANTENDO O BANCO DE DADOS DE SEU SITE DENTRO DO DOMÍNIO DA USP USANDO O SSH!

Microsoft Access: Criar relações para um novo banco de dados. Vitor Valerio de Souza Campos

O Primeiro Programa em Visual Studio.net

Acessando um Banco de Dados

Construtor de sites SoftPixel GUIA RÁPIDO - 1 -

Sumário: Fluxo Operacional... 3 Contatos Agenda Online Reservas de Salas Tarefas... 42

Tutorial do módulo Carteira Nacional de Militante

Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo.

DOCUMENTAÇÃO DO FRAMEWORK - versão 2.0

NeXT Help Desk Manual do usuário. Abril/2011. NeXT Software

Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza

FERRAMENTAS DE COLABORAÇÃO CORPORATIVA

MDaemon GroupWare. Versão 1 Manual do Usuário. plugin para o Microsoft Outlook. Trabalhe em Equipe Usando o Outlook e o MDaemon

Manual do Google agenda. criação e compartilhamento de agendas

A barra de menu a direita possibilita efetuar login/logout do sistema e também voltar para a página principal.

CRIANDO BANCOS DE DADOS NO SQL SERVER 2008 R2 COM O SQL SERVER MANAGEMENT STUDIO

Fox Gerenciador de Sistemas

SISTEMA DE GERENCIAMENTO DE PROJETOS - REDMINE MANUAL DE USO

Como atualizar os preços da ABCFarma.

Na tela dele, clique no sinal de + ao lado do nome do seu computador, para expandi-lo. A seguir, expanda também o item "Sites da web".

ROTEIRO DE INSTALAÇÃO

INTRODUÇÃO À TECNOLOGIA SERVLETS

INSTALAÇÃO DO SISTEMA CONTROLGÁS

Curso de atualização Educação Integral e Integrada. Tutorial Moodle. Belo Horizonte, 2013.

Tutorial MSN Messenger

SCPIWeb. SCPIWebDespRec Aplicação Web para Consulta de Despesas e Receitas ( Lei Complementar nº 131 de 27 Maio de 2009 )

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Manual do sistema SMARsa Web

UM NOVO CONCEITO EM HOSPEDAGEM DE DOMÍNIO

Criando & Consumindo um WebService com ASP.NET 2.0 Publicado em: 25 de Agosto de 2007 Por Herman Ferdinando Arais

Sistema de Chamados Protega

MULTIACERVO - VERSÃO 17.*

Revisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL

Escritório Virtual Administrativo

Manual Administrador - Mídia System

Manual de Utilização do Zimbra

Configurando o IIS no Server 2003

3. No painel da direita, dê um clique com o botão direito do mouse em qualquer espaço livre (área em branco).

Data Transformation Services (DTS) por Anderson Ferreira Souza

Lição 1 - Criação de campos calculados em consultas

Config. do módulo MSA com dispositivos REP.

Manual do Visualizador NF e KEY BEST

e-nota C Consulta de Nota Fiscal eletrônica

ArpPrintServer. Sistema de Gerenciamento de Impressão By Netsource Rev: 02

ÍNDICE. 1. Introdução O que é o Sistema Mo Porã Como acessar o Site Mo Porã Cadastro do Sistema Mo Porã...

MANUAL DE CONFIGURAÇÃO DO BACKUP

USANDO O ROUNDCUBE WEBMAIL

Parte 2: Micro com Windows XP Pro e Servidor IIS

TRANSMISSOR ECF. Sistema de transmissão de arquivos Nota Fiscal Paulista. Manual de Utilização

NetEye Guia de Instalação

O sistema está pedindo que eu faça meu login novamente e diz que minha sessão expirou. O que isso significa?

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Manual de Instalação

Tutorial para envio de comunicados e SMS

Sistemas Distribuídos

Noções de. Microsoft SQL Server. Microsoft SQL Server

Operador de Computador. Informática Básica

Tabela e Gráficos Dinâmicos Como estruturar dinamicamente dados no Excel

Transcrição:

Open Tools API Crie seus próprios plug-ins para o IDE do Delphi Gustavo Chaurais Se você já pensou: o Delphi é tão bom, mas por que o IDE não tem mais essa funcionalidade para facilitar meu trabalho?, certamente irá se identificar com o que a Open Tools API (OTA) permite fazer. De maneira rápida e fácil, podemos implementar desde simples itens no menu a poderosos assistentes com a função de automatizar a criação de formulários. Só dependemos de nossa criatividade e/ou necessidade para criar excelentes plug-ins e melhorar ainda mais a ferramenta de trabalho. Hoje existem diversos plugins, pagos e gratuitos, disponíveis na internet para download. Por exemplo, podemos citar o GExperts e o CnPack, que oferecem conjuntos de funcionalidades para aumentar ainda mais a produtividade do desenvolvedor. Neste artigo, você aprenderá a criar seus próprios plug-ins e wizards para o IDE do Delphi, usando OTA. Um primeiro exemplo Hacking Antes de começarmos a utilizar a API do OTA, vamos ver como podemos acessar os objetos do IDE através de pacotes. Note que essa é uma maneira totalmente desaconselhada para a construção de plug-ins, pois existem meios que nos garantem uma maior confiabilidade em tal tarefa, principalmente no tocante a compatibilidade entre versões da ferramenta. No Delphi, crie um pacote (File>New>Other>Package), adicione nele uma nova unit (File>New>Unit) e salve os arquivos como HackingPackage.dpk e Hacking.pas, respectivamente. Substitua o conteúdo de Hacking.pas pelo código da Listagem 1 e lembre-se que a declaração do método Register é case-sensitive. Compile e instale seu pacote. Quando lhe for perguntado sobre a adição de uma referência à VCL, responda OK. Veja que conseguimos acessar facilmente os objetos internos do IDE e alterar algumas propriedades, como o título e a cor do formulário principal. A seção finalization da unit, que só pode ser declarada se existir initialization, servirá para restaurarmos os valores antigos e liberarmos regiões alocadas da memória. Agora, a menos que você queira continuar com o IDE do Delphi na cor vermelha, desinstale o pacote através de Component>Install Packages. Mais uma vez, devemos salientar que essa técnica deve ser usada somente em situações extremas, e foi apresentada aqui apenas para fins didáticos. Como veremos, existem soluções muito mais elegantes para a construção de plug-ins. Listagem 1. Código de Hacking.pas do projeto HackingPackage unit Hacking; interface uses Forms, Graphics; procedure Register; implementation var TituloAntigo: string; CorAntiga: TColor; procedure Register; begin TituloAntigo := Application.Title; // Muda o Caption do próprio Delphi Application.Title := Revista ClubeDelphi ; CorAntiga := Application.MainForm.Color; // Muda a cor do main form do IDE Application.MainForm.Color := clred; end; initialization finalization Application.Title := TituloAntigo; Application.MainForm.Color := CorAntiga; end. Open Tools API e IOTAWizard A Open Tools API, comumente chamada apenas de OTA, pode ser compreendida como um conjunto de ferramentas para a extensão do IDE. Sua infra-estrutura é baseada em interfaces e pacotes, ou seja, para registrar um plug-in que exerça determinada tarefa, é preciso apenas implementar a interface correspondente e compilar tudo em um pacote. Além disso, os plug-ins construídos poderão rodar tanto no Delphi quanto no C++ Builder, sem grandes problemas. Dica: Para o bom entendimento deste artigo, é ideal que o leitor tenha conhecimento básico sobre o uso de interfaces. Para aprender mais sobre interfaces, consulte a minha coluna no portal ClubeDelphi (www.clubedelphi.net). 6 Edição 70- ClubeDelphi www.clubedelphi.net

API Hooking Michael Benford Parte III Monitorando cópia, execução e exclusão de arquivos No primeiro artigo desta série (edição 68), fomos apresentados à técnica de API Hooking. Vimos do que se trata, tivemos noções de como ela funciona etc. Na segunda parte (edição 69), aprendemos sobre o conceito de IPC (Inter Process Communication), que nos permite fazer uma DLL conversar com um aplicativo executável. Agora, na terceira e última parte desta série, iremos desenvolver uma aplicação completa usando o que aprendemos, para sabermos bem do que ela é capaz de fazer. Resolvi dar esse desfecho à trilogia porque a maioria dos programadores desconhece a técnica de API Hooking. E, quando ficam sabendo do que se trata, inicialmente não percebem o quanto ela é avançada. Eis o que faremos: um aplicativo que monitore as ações do sistema operacional sobre arquivos, mais especificamente em programas executáveis. O usuário irá criar uma lista de aplicativos protegidos e, com base nela, nosso software irá vigiar o sistema e bloquear alterações no arquivo. Uma tarefa cansativa O leitor que acompanhou esta série deve ter notado que a codificação das DLL s usadas no processo de hooking, dependendo de quais API s serão hookadas, pode tornar-se bastante trabalhosa. Para cada API, devemos ter uma variável de função e um callback, que são clones da declaração da API original. Para a função CreateProcess, por exemplo, precisaríamos escrever duas vezes seus 10 parâmetros. Pior, se fosse necessário usar a variável Next dentro do callback, o que é comum em praticamente 100% dos casos, mais uma codificação da API deveria ser escrita. E isso é apenas para a versão Ansi da API. Resta ainda a versão Wide, que acarretaria a digitação de mais três declarações muito parecidas com a primeira (seriam mudados apenas os tipos Ansi para Wide em parâmetros string). No final, isso demandaria a codificação de 60 parâmetros. Implementar tanto código igual em lugares diferentes, além de ser uma tarefa trabalhosa e totalmente manual, é um processo altamente propenso a erros. E se tratando de API Hooking, a omissão de um parâmetro em callbacks e/ou variáveis Next pode levar o sistema operacional à instabilidade, forçando um reboot no PC para que as coisas voltem ao normal (veja Regras de hooking, na edição 68). Um grande aliado Observando esse problema, percebi que a automatização do processo reduziria o tempo gasto na digitação do código extenso e eliminaria as chances de erro por parte do programador. Então, criei um expert para o IDE do Delphi, que gera todo o código da DLL automaticamente, facilitando nossa vida. Usaremos essa ferramenta para o desenvolvimento da aplicação proposta para este artigo. Este plug-in que desenvolvi é distribuído como um software freeware e está disponível para as versões 6, 7 e 2005 do Delphi (com código-fonte, que pode servir de base para quem quiser criar seus próprios plug-ins). Para baixar, acesse os sites www.projetobms.net ou www.otamasters.net, clicando no link Downloads. Em seguida, feche o Delphi, caso ele esteja aberto, execute o arquivo baixado e siga as instruções apresentadas pelo assistente de instalação. Nota: Por ser uma versão beta, algumas funcionalidades apresentadas aqui podem mudar ou desaparecer (pouco provável) na versão final. Mãos à obra! Vamos começar pela criação da DLL que será utilizada pelo nosso aplicativo. Como dito anteriormente, ele vai monitorar operações sobre programas. Então, devemos saber quais API s hookar em cada situação. Essas situações, com suas respectivas API s, são: Cópia: CopyFileA/W, CopyFileExA/W; Mudança de pasta/unidade e renomeação: MoveFileA/W, MoveFileExA/W; Exclusão: DeleteFileA/W; Execução: CreateProcessA/W; Edição de atributos: SetFileAttributesA/W. Precisamos, portanto, criar uma DLL que contenha as variáveis Next e os callbacks dessas API s. Para isso, faremos uso de nosso wizard. Muito bem. Clique no menu File, selecione New e Other. Clique sobre o nó (ou aba, se seu Delphi é anterior ao 2005) API Hooking. Marque então API Hook DLL Wizard e clique em OK. A primeira tela do assistente será mostrada. Como primeiro passo, devemos escolher uma biblioteca de funções de hooking para utilizar. Por padrão, o assistente já vem com duas pré-configuradas. Ambas são as comentadas na primeira parte desta série de artigos, sendo uma delas a nossa já conhecida BmsApiHook, do colega Bruno Martins Stuani. Selecione-a e clique em Avançar. A próxima etapa é selecionar quais API s queremos hookar (Figura 1). www.clubedelphi.net Edição 70 - ClubeDelphi 15

Cadastros com Firebird Everson Volaco Criando cadastros básicos em Delphi utilizando Stored Procedures dinâmicas Neste artigo veremos como criar Stored Procedures dinâmicas no Firebird 1.5.x para uso, de forma genérica, em telas de cadastro desenvolvidas em Delphi 7 ou 2005/2006. O objetivo principal é demonstrar como reutilizar Stored Procedures do banco de dados em diferentes telas de cadastro de nossa aplicação, como também reutilizar código através do suporte a herança de formulários. Nossa aplicação Delphi conterá um formulário de cadastro genérico que será utilizado como base para a criação de todas as telas de cadastro do sistema, onde utilizaremos em todas elas apenas duas Stored Procedures do banco de dados: uma para inclusão, alteração e exclusão dos dados, e outra para consulta dos dados. Nota: Para o exemplo deste artigo utilizei o Delphi 7 com o driver DBX InterXpress for Firebird (Upscene Productions), que pode ser baixado a partir do site www.upscene.com. O mesmo exemplo podem ser desenvolvido em Delphi 6, 2005 ou 2006. Criando o banco de dados Para a criação do banco de dados e de seus objetos utilizei a ferramenta IBExpert Personal Edition que pode ser baixada gratuitamente a partir do site www.ibexpert.com. Para criar o banco de dados que será utilizado em nosso exemplo, abra o IBExpert e selecione a opção Database>Create Database a partir do menu principal da ferramenta. Na janela Create Database preencha as informações necessárias para a criação do banco de dados Firebird (veja a Figura 1). Por padrão, o campo Client Library File vem configurado para a biblioteca do InterBase (gds32.dll). Como estamos utilizando Firebird, altere esse campo apontando o mesmo para a biblioteca fbclient.dll que está disponível dentro do diretório Bin da instalação do Firebird. Ao clicar no botão OK será aberta a janela Database Registration para que possamos registrar nosso banco de dados dentro do IB Expert. Para o campo Server Version selecione o banco e versão que está utilizando, no nosso caso Firebird 1.5. Para o campo Database Alias, digite uma alias para o banco de dados, por exemplo: Cadastro. Através do botão Test Connect é possível testar a conexão com o banco de dados recém criado. Pronto, basta clicar no botão Register para registrar o novo banco dentro do IBExpert. Para conectar no banco basta dar um clique duplo em cima do alias Cadastro criado na janela Database Explorer ou ainda a partir da opção Connect to Database disponível no menu de contexto. Criando as Tables, Generators e Triggers Antes de implementarmos as Stored Procedures com SQL dinâmico, principal assunto deste artigo, devemos criar os outros objetos que farão parte do nosso banco de dados, como por exemplo, as tabelas de cadastros que serão utilizadas por nossa aplicação Delphi para armazenar os dados informados pelo usuário. Após conectar no banco de dados, acesse a opção Tools>SQL Editor disponível no menu principal para acessar o editor de SQL do IBExpert. Será dentro dessa janela que executaremos todas as instruções DDL (Linguagem de Definição de Dados) para criar nossos objetos, inclusive as SP s. Nota: A ferramenta IBExpert traz consigo opções para facilitar a criação e gerenciamento dos objetos dentro do banco de dados. Para acessar essas opções, basta selecionar o tipo do objeto que deseja trabalhar dentro da janela Database Explorer e selecionar as opções de Create, Alter ou Drop desse tipo de objeto a partir do menu de contexto. Figura 1. Criando o banco de dados Firebird através do IBExpert Personal Edition Começaremos criando as tabelas que farão parte do banco de dados. Nesse exemplo criaremos duas tabelas: Clientes e Fornecedores. Dentro do SQL Editor entre com as instruções SQL, uma por vez, como mostrado na Listagem 1. Para fazer o auto-incremento do campo-chave de cada uma das tabelas criadas, utilizaremos Generators, Triggers e a função GEN_ID. Como visto em artigos anteriores sobre IB/FB, Generators são www.clubedelphi.net Edição 70 - ClubeDelphi 19

Delphi + Ajax.NET Rodolfo de Faria Otimizando o tráfego HTTP com chamadas assíncronas e Callbacks em aplicações ASP.NET Conforme já foi dito em outros artigos da ClubeDelphi, para desenvolver para Web é necessário quebrar paradigmas. Um deles é que um Web Form (ASP.NET) é limitado e não possui tantos recursos quanto um formulário tradicional (TForm da VCL). Ajax surge como uma opção para enriquecer as interfaces via Web e melhorar a usabilidade das páginas, deixando-as mais responsivas. O funcionamento do protocolo HTTP é chamado de request/ response, isto é, a cada ação do usuário (clique por ex.), uma requisição é enviada ao servidor e após uma espera, outra página HTML é devolvida ao browser (ou seja, há refresh total da página). Esse ciclo clique, espera, atualiza página é demorado, consome banda e é pouco eficiente. E se pudéssemos atualizar apenas as partes da página onde de fato houve modificações? Ajax faz isso e também permite que o usuário continue interagindo com a página enquanto uma requisição paralela está em andamento. Neste artigo veremos como são implementadas requisições síncronas e assíncronas usando a biblioteca Ajax.NET e como as páginas podem ser atualizadas sem efetuar postback (execução do método Submit do formulário da página). Uma roupagem nova para tecnologias já conhecidas O acrônimo Ajax significa Asynchronous Javascript + XML e consiste na combinação do objeto XmlHttpRequest com JavaScript e XML para envio e recebimento de informações sem a necessidade de se efetuar postback. Com ele é possível fazer requisições em background e atualizar a tela de modo transparente para o usuário, assemelhando-se a uma aplicação desktop. O termo Ajax foi cunhado por Jesse James Garrett da empresa Adaptive Path (www.adaptivepath.com), mas o objeto XmlHttp Request já existia no Internet Explorer desde sua versão 5 como um componente ActiveX. Outros browsers já possuem uma implementação nativa desse objeto. Ajax.NET Ajax.NET é uma biblioteca open source para.net Framework que visa simplificar a programação com Ajax. Baixe-a no endereço: ajax. schwarz-interactive.de. No site existem duas versões: Ajax.NET e Ajax. NET Professional. Usaremos a primeira versão. Veja na Figura 1 a ilustração de uma solução Ajax. No lado cliente uma função JavaScript cria um objeto XMLHTTP Request e faz uma requisição de dados ao servidor. No lado servidor um HttpHandler recebe a requisição, chama um dos métodos marcados com o atributo [AjaxMethodAttribute] e serializa o objeto de retorno usando JSON (JavaScript Object Notation). No cliente, a string JSON é transformada novamente em objeto, a função de callback é chamada e alguma parte da página é atualizada. Isso acontece de maneira transparente para o usuário. Neste artigo, para ver como o Ajax funciona na prática, vamos criar uma aplicação simples com dois controles HtmlTextBox, onde iremos digitar no primeiro controle e uma descrição aparecerá no segundo. Adicionando Ajax.dll ao projeto No Delphi 2005 ou 2006 crie uma nova ASP.NET Web Application e salve-a como DemoAjax. No Project Manager dê um clique de direita e escolha Add Reference (Figura 2). No editor, clique em Browse, localize o arquivo Ajax.dll e clique em OK. Adicione Ajax na cláusula uses da unit. Editando o Web.Config No Project Manager dê um duplo clique no arquivo Web.Config e insira o código a seguir dentro da tag system.web: <httphandlers> <add verb= POST,GET path= ajax/*.ashx type= Ajax.PageHandlerFactory, Ajax /> </httphandlers> Figura 1. Ilustração de uma solução Ajax baseada na imagem obtida de www.adaptivepath.com www.clubedelphi.net Edição 70 - ClubeDelphi 25

Debugando com Codesite Bruno Sonnino Conheça uma excelente ferramenta para debugar seu código Você está desenvolvendo um aplicativo e as coisas não estão correndo como deveriam: o programa não faz o que deveria fazer, você tem muita dificuldade para seguir o código usando o debugger integrado do Delphi, pois os métodos se entrelaçam e eventos são ativados durante a execução, ou mesmo o erro está no meio de uma rotina de reescrita da tela (nesse caso, quando o debugger é ativado a tela é coberta e a rotina é chamada novamente), ou mesmo sua aplicação é multithreaded, onde diversas tarefas são executadas simultaneamente (por exemplo aplicações Web ou servidores de aplicação DataSnap). Normalmente, minha primeira opção quando isso acontece é colocar uma chamada para ShowMessage para que a caixa de diálogo mostre o valor da variável. Quando a rotina com erro é chamada diversas vezes, isso é impraticável, pois temos que clicar no botão OK cada vez, além de interromper a execução, escondendo bugs e introduzindo outros. Passo então para a segunda opção: criar um arquivo de log, usando WriteLn. Essa opção é mais interessante, pois não interrompe a aplicação e permite mostrar todas as informações que desejo. Esse enfoque funciona até o momento em que as funções começam a se entrelaçar ou quando tenho que enviar informações mais complexas, como uma imagem. Uma solução para esses problemas pode ser o CodeSite, da Raize Software, já premiado como melhor ferramenta de debugging pela revista Delphi Informant. Introdução ao CodeSite O CodeSite, que pode ser obtido em www.raize.com, é como um super gerador de arquivos de log, pois permite enviar dados de diversos tipos para o log, inclusive tipos personalizados. O log pode então ser visualizado localmente, no Viewer, gravado num arquivo, para ser visto em outro computador ou mesmo enviado para outra máquina. As mensagens podem ser de diversos tipos, sendo mostradas com ícones diferentes, podendo ser filtradas, para esconder mensagens desnecessárias. Após instalar o CodeSite, basta incluir a unit CodesiteLogging na cláusula uses e usar o método Send, do objeto CodeSite, como: Dispatcher e a mensagem enviada é mostrada no CodeSite Viewer, como na Figura 1. O Send é um método sobrecarregado e pode receber diversos tipos como parâmetro. Você pode enviar para o log de mensagens dados de diversos tipos: strings, inteiros, imagens, listas e até dados personalizados (como veremos mais adiante). Você pode incluir na mensagem uma string explicativa e também um tipo de mensagem. Conforme o tipo, a mensagem é mostrada com um ícone diferente no log. O código a seguir envia as mensagens disponíveis no CodeSite. Note que não enviamos a mensagem csmclear, que limpa o Viewer. var i: Integer; begin for i := csmfirst to csmlast do if i <> csmclear then Codesite.Send(i, Mensagem número, i); A Figura 2 mostra o log de mensagens após a execução do código. Muitas dessas mensagens não serão enviadas dessa maneira. Por exemplo, para enviar um separador ao Viewer, usamos o método Add- Separator ou para limpar as mensagens usamos o método Clear. Usando o CodeSite O método Send, embora seja muito importante, é apenas parte do que o CodeSite pode fazer. Um recurso muito interessante é o tracing CodeSite.Send( Teste de mensagem ); Ao executar o programa, duas coisas acontecem: aparece um novo ícone na barra de tarefas, ao lado do relógio: é o CodeSite Figura 1. CodeSite Viewer 32 Edição 70 - ClubeDelphi www.clubedelphi.net

DataSnap e SOAP Guinther Pauli Aplicações distribuídas usando ClientDataSet, XML e Web Services Quando pensamos na criação de aplicações para Internet, a primeira coisa que vem à mente é o desenvolvimento Web. Usando um browser, podemos acessar nossa aplicação a partir de qualquer local do planeta, consultar informações dinâmicas vindas de um banco de dados, fazer compras on-line, efetuar cadastros e muito mais. Usando tecnologias como ASP.NET Web Forms com o Delphi, podemos criar aplicações Web de forma muito semelhante ao que já estamos acostumados a fazer no Desktop. Os problemas começam a surgir quando tentamos fazer na Web as mesmas coisas que estamos acostumados a fazer com a VCL Win32. Em várias oportunidades aqui na Revista, e também nas palestras que tenho ministrado sobre desenvolvimento Web, a primeira coisa que gosto de deixar claro é: um browser não é um formulário Delphi. Considero os protocolos HTTP e HTML arcaicos para serem usados como base na construção de aplicações; esses protocolos nasceram há anos, quando a Internet se limitava a consulta de informações estáticas, como imagens e textos (do tempo onde as primeiras aplicações dinâmicas sugiram com o CGI - Writeln). De lá pra cá, tudo o que se fez, foi meramente criar tecnologias que facilitam o desenvolvimento sobre eles, mas as limitações continuam a existir. Claro, temos alguns facilitadores, mas nada como o velho e bom TForm. Por exemplo, ao desenvolver para Web, você precisa aprender algumas coisas que até então pareciam esotéricas para quem sempre desenvolveu para Desktop: manter estado, fazer gerenciamento de sessão, processar requisições HTTP, ter uma preocupação triplicada com escalabilidade e por aí vai. Como se já não bastasse, o HTML oferece um conjunto pobre de elementos (tags) para a construção de formulários, se comparamos com a VCL. É muito mais fácil construir uma interface rica de elementos visuais usando VCL. Porém, a necessidade de acessar informações On-Line e centralizar o banco de dados em um local que possa ser acessado pela Internet, não nos deixa outra saída: mais cedo ou mais tarde vamos precisar construir aplicações para Web! O que proponho neste artigo é unificar o melhor dos dois mundos: a facilidade do desenvolvimento Desktop com VCL Win32 com os benefícios que só a Internet oferece. Você aprenderá hoje, neste artigo, a criar aplicações distribuídas para Internet usando VCL ( TFormbased, ao invés de um browser), DataSnap, SOAP e Web Services. E o melhor de tudo, você verá que graças ao Delphi, esse trabalho se torna muito simples, rápido, prático e RAD. Vantagens ao utilizar DataSnap com SOAP Antes de começar nosso exemplo, na já tradicional metodologia passo a passo, gostaria de justificar o porquê da abordagem que estou propondo e quais as suas vantagens: Ao usar VCL para desenvolver para Internet, você não precisa aprender outro framework. Podemos continuar usando os mesmos controles que já usamos há anos; É muito simples migrar uma solução client/server para a abordagem proposta, você vai economizar tempo e código; Não sofreremos com as limitações impostas pelo HTTP e HTML: esqueça gerenciamento de estado, sessão, processamento de requisições e afins; Diferente do HTML, que a cada requisição trafega formulários completos (resfresh total da página no postback), mesmo que você tenha solicitado a simples mudança em um controle, em nossa solução tudo o que vai tr afegar por HTTP são os dados dinâmicos, em formato XML; Aplicações client e usando essa arquitetura são chamadas rich-client, elas contém basicamente código de tratamento de interface. O acesso a dados, regras de negócio, SQL, tudo fica no servidor. Isso garante uma centralização e compartilhamento de acesso. Usando as tecnologias abordadas neste artigo, você poderá ao final: Acessar seu banco de dados a partir de qualquer lugar da Internet; Criar aplicações distribuídas para a Internet. Você pode, por exemplo, centralizar o banco de dados e servidor de aplicação na matriz da empresa e distribuir as aplicações clientes para as filiais, que terão acesso a dados em tempo real e que se mantêm sempre atualizados, sem a necessidade de sincronização; Poderá ter sua aplicação oferecida como um serviço: seus clientes podem pagar um taxa, por exemplo, e acessar a aplicação através da Internet, sem a necessidade de nenhuma configuração local na empresa, tudo fica configurado e armazenado no servidor. Arquitetura da solução Para ter uma visão geral da arquitetura da aplicação que será criada, veja o esquema da Figura 1. Durante todo este tutorial, sempre que tiver uma dúvida de como a solução está sendo implementada e em que camada está sendo empregada determinada tecnologia, consulte essa figura. Ela será nosso mapa. Temos três camadas envolvidas na solução: C amada de Dados: o banco de dados (SGBD), nesse caso usaremos o Firebird 1.5; 38 Edição 70- ClubeDelphi www.clubedelphi.net