Вы находитесь на странице: 1из 75

E-Commerce

com Delphi e ASP.NET

Sobre o Autor
Guinther Pauli autor de mais de 100 artigos publicados e do livro Delphi
Programao para Banco de Dados e Web. Bacharel em Sistemas de
Informao pelo Centro Universitrio Franciscano (Unifra, Santa Maria RS).
desenvolvedor 5 estrelas Microsoft e certificado oficial MCP (Microsoft
Certified Profissional) e MCAD (Microsoft Certified Application Developer), em
C#, ASP.NET e Visual Studio .NET. Detm quatro certificaes oficiais Borland:
Delphi Advanced pela Borland dos Estados Unidos, Delphi Web Development
Certified, Kylix Product Certified e Delphi Product Certified. J ministrou
palestras para mais de 5 mil pessoas em todo o pas. Editor Geral da revista
ClubeDelphi (www.clubedelphi.net) e Editor Tcnico da Revista WebMobile
Magazine (www.portalwebmobile.com.br). Pode ser contatado pelos endereos
guinther_pauli@hotmail.com ou guinther@clubedelphi.net. Possui um blog
no TheSpoke no endereo br.thespoke.net/MyBlog/Guinther/MyBlog.aspx
Participao especial: Rudolfo Pauli, ASP.NET Specialist e Borland Delphi
Certified, desenvolvedor do Centro de Processamento de dados (CPD) da
Universidade Federal de Santa Maria (UFSM), atuando na rea de projetos Web
e Multicamadas.

Importante
Nenhuma parte deste curso, sem autorizao prvia por escrito da editora,
poder ser reproduzida, copiada ou transmitida, sejam quais forem os meios
empregados: eletrnicos, fotogrficos, gravao ou quaisquer outros. Todos os
direitos reservados e protegidos pela lei 5.988 de 14/12/73.

E-Commerce
com Delphi e ASP.NET

Introduo

objetivo deste curso ensinar voc a utilizar os poderosos recursos


do ASP.NET para desenvolver aplicaes para Web, com o Delphi 2005.
Durante todo o curso, voc vai conhecer cada uma das funcionalidades
disponveis, aplicando na prtica os conhecimentos adquiridos, atravs de
exemplos passo a passo.
Comearemos conhecendo a IDE, suas opes e janelas, para que voc possa
comear a se familiarizar com o ambiente de desenvolvimento. A seguir, voc
conhecer um pouco sobre o .NET Framework da Microsoft, como e porque
surgiu, objetivos e arquitetura. No captulo sobre Fundamentos do
ASP.NET, voc aprender a criar suas primeiras aplicaes ASP.NET, conhecendo
os recursos bsicos do framework. O captulo seguinte, sobre WebForms e
WebControls, introduz a utilizao de controles no lado servidor para criao
de formulrios Web. Voc conhecer em detalhes cada um dos controles
disponveis, principais propriedades, mtodos e eventos.
O acesso a dados com ADO.NET discutido em um captulo a parte. Aqui
voc vai aprender a acessar banco de dados e facilmente exibir informaes
do Interbase em formulrios Web, para que possam ser manipulados pelo
usurio no browser. Depois voc conhcer o DataSet, uma pea-chave da nova
arquitetura. No captulo sobre DataBind, veremos como utilizar esse poderoso
recurso do ASP.NET, para vinculao de dados. Os principais controles para
exibio e manipulao de dados so vistos a seguir: Repeater, DataList e
DataGrid.
Validaes so extremamente simples de serem feitas com ASP.NET, usando
os novos Validation Controls. Voc far na prtica um exemplo que demonstra
a utilizao desses controles. No prximo captulo, sobre Cache e Estado, voc
aprender a manipular sesses, objetos em cache e alguns segredos sobre
como otimizar a performance de sua aplicao Web.
Segurana, um importante fundamento de qualquer aplicativo, discutido
em detalhes neste curso. Voc aprender a tornar seguras suas aplicaes
ASP.NET, configurando permisses, regras de acesso e autenticao. O captulo
sobre configurao uma referncia sobre as principais opes disponveis
nos arquivos de configurao do ASP.NET, que permitem ajustar vrias
caractersticas e o comportamento de suas aplicaes Web.
Voc tambm apredender a criar User Controls e Custom Controls, para
facilmente compartilhar e reutilizar cdigo entre diferentes aplicaes. E
finalmente, voc conhecer e aprender como criar e consumir Web Services,
essa tecnologia que um dos mais importantes fundamentos do .NET
Framework.
Ao final de cada captulo (exceto os introdutrios), voc ser desafiado a
resolver um determinado problema. Usando os conhecimentos e tcnicas
vistas em cada captulo, o aluno dever desenvolver uma soluo e uma
aplicao ASP.NET, ajudando a consolidar o contedo. As solues para todos

E-Commerce
com Delphi e ASP.NET

os exerccios podem ser encontradas no final do curso.


Caso esteja dando seus primeiros passos com o ASP.NET, no se preocupe,
todos os exerccios esto expostos de forma simples e usando mtodo passo
a passo. Conhecer o bsico sobre programao e acesso a banco de dados
ajudar. Para facilitar, cada captulo acompanhado de vdeo-aulas, para que
voc possa assistir e conhecer os recursos apresentados.
No final do curso, voc criar uma aplicao ASP.NET completa, onde a maioria
dos recursos vistos nos captulos anteriores pode ser aplicado em um nico
exemplo. Em caso de dvida, sinta-se a vontade para entrar em contato com
os instrutores, atravs do frum do aluno.
Tenha um bom curso, sucesso com os projetos ASP.NET!

E-Commerce
com Delphi e ASP.NET

A IDE do Delphi 2005

este captulo veremos uma introduo a IDE do Delphi 2005,


conhecendo suas principais funcionalidades. Darei prioridade aos
novos recursos, includos a partir do Delphi 7. No entanto, tambm
mostrarei alguns recursos mais avanados e teis, mesmo tendo sido
introduzidos em verses anteriores do produto.

Histrico
O ambiente integrado de desenvolvimento do Delphi (IDE Integrated
Development Environment) permite o desenvolvimento RAD (Rapid Application
Development) de aplicaes para Windows (incluindo Win 32 e .NET) e Web,
utilizando a linguagem Delphi ou C#. A nova IDE se chama Borland Developer
Studio e est na verso 3.0.
A IDE do Delphi 2005 comeou a ser projeta h cerca de quatro anos. O
projeto Galileo (codinome usado na poca) definia uma IDE destinada ao
desenvolvimento de aplicaes para a nova plataforma da Microsoft. Essa IDE
surgiu com a primeira verso do C#Builder, chamada Borland Developer Studio,
e foi uma estratgia da Borland para concorrer com o MS Visual Studio.NET.
Como sabemos, o Delphi 7 j trazia uma verso do compilador Delphi para o
.NET. O que poucos esperavam que o Delphi for .NET (codinome Octane) se
tornaria o Delphi 8 e no um produto parte selando o compromisso da
Borland com o .NET Framework.
O Delphi 2005, codinome Diamondback, unifica todas as verses do Delphi e
representa um marco na histria do produto.

Instalao
Para instalar o Delphi 2005, voc precisa estar utilizando necessariamente
uma das seguintes verses do Windows: 2000 (SP2 recomendado), 2003
Server ou XP Professional veja mais detalhes sobre os requisitos mnimos
no documento borland.com/delphi_net/pdf/delphi_net8_sysreqs.pdf. O Delphi
2005 no roda em Windows 95, 98 ou Me (porm, as aplicaes finais ainda
podero ser executadas em todos esses sistemas, exceto no Windows 95).
Alm disso, voc deve ter instalado na sua mquina os tens a seguir:
.NET Framework 1.1;
.NET Framework 1.1 SDK;
Microsoft Internet Explorer 6 SP1 ou superior;
Microsoft Visual J# .NET 1.1 Redistributable
Microsoft XML Core Services (MSXML) 4.0 SP2 (Delphi 2005)
Todos esses tens so distribudos juntamente com o produto. Voc pode
tambm fazer o download e obter mais informaes sobre a instalao, a partir
do endereo msdn.microsoft.com/netframework/technologyinfo/howtoget.
Recomendo a leitura do arquivo install.txt para mais informaes.

E-Commerce
com Delphi e ASP.NET

A nova IDE do Delphi 2005


Com certeza a principal novidade do Delphi 2005 o suporte ao
desenvolvimento com mltiplas linguagens. O Delphi 2005 basicamente a
unio do Delphi 7, Delphi 8 for .NET e C#Builder, com vrios novos recursos
na IDE. Sim, isso mesmo, utilizaremos a partir de agora a mesma IDE para
desenvolver tanto aplicaes Win32 quanto .NET! Para no haver confuso, um
pequeno cone na toolbar principal indica qual a linguagem est atualmente
ativa na IDE (Delphi Win 32 , Delphi for .NET
ou C# ). Isso se chama
personalidade.Voc pode ter, inclusive, um grupo de projetos com aplicaes de
diferentes tipos: a IDE se ajusta conforme a linguagem do projeto selecionado.
A Figura 1 mostra a IDE do Delphi 2005.
Dica:
Durante a instalao do produto, clicando na opo custom, voc pode escolher
o que deseja instalar: Delphi Win32, Delphi for .NET ou C#. Por padro, as trs
opes so instaladas.

Figura 1. A IDE do Delphi 2005

Menu e Barra de Ferramentas


A Figura 2 mostra as barras de ferramentas do Delphi 2005. Clicando sobre
ela, voc pode ocultar/mostrar barras, inserir/remover botes etc.

Figura 2. Menus e ToolBars do Delphi 2005

Dica:
Clique em File|New>Customize para personalizar o menu File|New

E-Commerce
com Delphi e ASP.NET

Object Repository
A Figura 3 mostra o Object Repository do Delphi 2005. Observe que agora as
sees so dispostas em formato de TreeView. Essa uma caracterstica forte
da nova IDE. Ele um repositrio de objetos, wizards, templates, formulrios,
DataModules etc., que constantemente voc usar para criar boas aplicaes
ou inserir novos itens a um projeto existente.
Temos as seguintes opes para criao de aplicaes:
C# Projects para construo de aplicaes .NET usando o C#. Os itens nessa
opo so basicamente os que estavam disponveis na IDE do C#Builder.
Inclui suporte para desenvolvimento ASP.NET Web Forms e Web Services,
Windows Forms, ECO etc.
Crystal Reports para a criao de relatrios usando o Crystal;
Delphi for .NET Projects aqui esto basicamente as opes que estavam
disponveis na IDE do Delphi 8, incluindo ASP.NET Web Forms e Web
Services, Windows Forms, ECO, VCL Forms (a verso adaptada da VCL para o
.NET) etc.
Delphi Projects basicamente tudo o que tnhamos no Delphi 7, incluindo
aplicaes VCL Win32, Active X, Web Services, Web Snap, Intraweb etc.
Other Files itens que no se enquadram em nenhuma das categorias
anteriores. Permite a criao de grupos de projetos, aplicaes VB.NET (com
suporte limitado) etc.
Unit Test para a criao de testes unitrios com o Delphi usando o DUnit;
Web Documents permite a criao de pginas HTML, documentos XML,
arquivos Java Script etc.

Figura 3. Delphi 2005 suporta desenvolvimento com Delphi for .NET, Delphi for Win32 e C#

Voc pode adicionar um formulrio ao Object Repository para que possa ser
usado/compartilhado por outras aplicaes ou outros desenvolvedores.

E-Commerce
com Delphi e ASP.NET

Figura 4. Menus e ToolBars do Delphi 2005

Agora possvel personalizar os tens que aparecem no menu File>New. Para


isso, acesse File>New>Customize e arraste para a caixa Menu Items as opes
que voc acessa com mais freqncia (Figura 5).

Figura 5. Customizando o menu File>New

Tela Inicial
Ao invs de iniciar com o tradicional formulrio em branco, temos agora um
mini-browser exibindo a Welcome Page, que possui links para acesso direto a
sites de recursos, tutoriais e exemplos relacionados aos produtos da Borland.
Alm disso, so listados os ltimos projetos abertos e links para os comandos
New, Open Project, Open File e Help.
Dica:
Voc pode personalizar a pgina de boas-vindas da IDE do Delphi, editando
diretamente o arquivo default.htm no diretrio WelcomePage da instalao do
BDS.

E-Commerce
com Delphi e ASP.NET

Desktop
As janelas utilizadas pela IDE (como Object Inspector, Form Designer e Code
Editor) no ficam mais soltas. Tudo fica dentro da janela principal da IDE. Voc
pode alterar esse comportamento escolhendo a opo Classic Unlocked na
barra Desktop, localizada por padro ao lado direito do menu principal. Para
ativar o estilo solto para aplicaes VCL, recurso que foi bastante solicitado
pelos desenvolvedores, desmarque a opo Tools|Options>Environment
Options>Delphi Options>VCL Designer>Embedded Designer.
A barra Desktops
permite que seja salva a atual
configurao de layout da IDE, com posicionamento e tamanho de janelas e
inspectors. Por exemplo, voc pode querer ter um layout para desenvolvimento
Web e outro para Win32.

Tool Palette
A paleta de componentes mudou radicalmente (Figura 6). Agora mostrada
em uma nova janela chamada Tool Palette no se chama mais Component
Palette e seu aspecto semelhante ao da Component List das verses anteriores
da IDE. Ao selecionar a paleta, digite as iniciais do tem que est procurando e
ser feita uma pesquisa incremental. Os componentes so filtrados e o texto da
busca realado em negrito no nome do componente e no ttulo da janela.
Aqui utilizado o termo tem no lugar de componente, pois a Tool Palette
tem diferentes finalidades: se voc estiver construindo uma aplicao VCL.
NET, Windows Forms ou Web Forms, os tens exibidos sero componentes
apropriados ao tipo de aplicao em desenvolvimento; se estiver trabalhando
com o editor, exibe Code Snippets templates de cdigo comumente utilizados
(como except, for..to..do etc.) que ao serem clicados so adicionados ao editor na
posio do cursor. J se estiver utilizando o Visual Model Designer, a Tool Palette
exibe opes para a manipulao de diagramas UML, e assim por diante.
A Tool Palette tambm pode mostrar agora os tens do Object Repository para
criao rpida de projetos (esse recurso j existia no Delphi 8, porm estava
oculto).
Dica:
Voc pode personalizar a Tool Palette de vrias formas: customizar cores e
efeitos gradiente, transferir tens entre categorias, criar categorias, ajustar o
tamanho dos cones etc.

Figura 6. Tool Palette exibe componentes, opes para criao de diagramas UML,tens do Object Repository,
Code Snipetts e muito mais

E-Commerce
com Delphi e ASP.NET

Project Upgrade
Quando voc abrir no Diamondback um projeto VCL construdo em verses
anteriores do Delphi, a IDE abrir a caixa de dilogo Project Upgrade (Figura 7)
perguntando se voc deseja migrar os fontes do projeto para Delphi for .NET
(usando a VCL.NET) ou manter em Delphi Win32.
A IDE basicamente procura pelo arquivo bdsproj para verificar se o projeto j
foi salvo/migrado na nova IDE.

Figura 7. Project Upgrade: converso de aplicaes VCL para VCL.NET

Project Manager
O Project Manager j aparece aberto por padro (Figura 8). Atravs dele voc
pode gerenciar os arquivos presentes no projeto (adicionar, excluir, remover
etc.). Um novo tem apresentado, listando todos os assemblies .NET usados
pela aplicao. O menu de contexto Add Reference permite adicionar uma
referncia a um novo assembly, a uma Type Library COM ou a outro projeto.
A mesma opo est disponvel no menu Project. A opo Add Web Reference
permite adicionar uma referncia a um Web Service, dando suporte inclusive
busca usando UDDI.

Figura 8. Project Manager: muitas novas opes e melhorias

Dica:
Voc pode clicar no boto para que as janelas fiquem reduzidas a uma barra ao
lado da IDE. Ao passar o mouse sobre essa barra, a janela surgir novamente.

E-Commerce
com Delphi e ASP.NET

Data Explorer
O Data Explorer (Figura 9) uma ferramenta que lembra muito o antigo SQL
Explorer, porm ele completamente integrado IDE do Delphi 2005 (alm
de poder ser executado como uma aplicao independente). Vejamos alguns
recursos do Data Explorer:

Visualizao do contedo das tabelas e views: basta dar um duplo


clique sobre uma tabela no Data Explorer para que seja mostrado um
DataGrid junto ao editor, mostrando o contedo da tabela ou view;
Execuo de comandos SQL de forma direta: d um clique de direita
sobre uma conexo e escolha SQL Window. Digite os comandos SQL
desejados e clique no boto ;
Execuo de stored procedures: d um duplo clique em um stored
procedure no Data Explorer para que seja exibido um editor, nele voc
pode preencher os parmetros indicados e executar o procedure;
Criao de tabelas: basta dar um clique de direita sobre o item Tables
de uma conexo e escolher a opo New Table.
Alterao da estrutura de tabelas: d um clique de direita sobre uma
tabela e escolha a opo Alter Table;
Migrao de tabelas entre diferentes bancos de dados usando Copy
e paste (isso mesmo!): clique de direita sobre uma tabela e escolha a
opo Copy Table. Em outra conexo, clique de direita e escolha Paste
Table;
Tambm possvel copiar estruturas inteiras de bancos de dados:
Para isso, basta utilizar o recurso Migrate Data, dando um clique de
direita sobre um driver no Data Explorer.

Figura 9. Data Explorer: manipulao de BD a partir da IDE

10

E-Commerce
com Delphi e ASP.NET

History Manager
Clicando na aba History na parte inferior do editor de cdigo temos acesso a
uma lista de verses para cada arquivo do projeto (Figura 10). Isso funciona
da seguinte forma: toda vez que voc salva um arquivo na IDE, o Delphi 2005
armazena uma verso para ele, que voc pode mais tarde consultar, verificar
alteraes ou restaurar.

Figura 10. History Manager permite controlar verses do cdigo-fonte

um controle de verso simples, claro (se comparado ao que faz o Borland


StarTeam), mas que pode ser bastante til. Na lista voc pode ver a data da
reviso, autor etc. Para voltar a uma reviso anterior de um arquivo, basta clicar
de direita sobre a verso desejada e escolher a opo Revert. Clicando na opo
Diff, voc pode comparar verses de arquivos. Para definir a quantidade de
revises a serem armazenadas, selecione Tools|Options>Editor Options e altere
o valor da opo File backup limit.

Options
As janelas Environment Options, Debugger Options e Editor Options foram
finalmente unificadas e agora esto acessveis a partir do menu Tools|Options.
H ainda novas opes, para configurao do HTML Designer, Windows Forms
Designer, do ECO, do OptimizeIt e de aplicaes ASP.NET.

Structure Panel
Se voc observar a nova IDE, ver que no existem mais as janelas Object
TreeView e Code Explorer. No foi para menos, a nova janela Structure (localizada
por padro em cima do Object Inspector) pode tomar vrias formas: exibir o
Object TreeView caso voc esteja ajustando componentes em um formulrio,
exibir a estrutura de uma unit caso esteja no editor, mostrar a estrutura de tags
de um arquivo aspx caso esteja criando uma aplicao ASP.NET etc. Se estiver
visualizando o StarTeam Client embutido, a janela Structure toma a forma do
painel esquerdo da interface cliente, que exibe a estrutura de diretrios do
servidor.

11

E-Commerce
com Delphi e ASP.NET

Object Inspector
O Object Inspector (Figura 11) amplamente utilizado em qualquer tipo
de aplicao na IDE. Voc normalmente o usar para definir propriedades e
eventos para controles e componentes. O Object Inspector foi incrementado
no Delphi 2005. Se voc estiver construindo uma aplicao Windows Forms,
por exemplo, a descrio de uma propriedade automaticamente exibida na
parte inferior da janela, que tambm pode conter links para editores. O Object
Inspector no utilizado somente para configurar componentes: voc tambm
o utilizar para construir diagramas UML, pginas HTML e Web Forms.
Dica:
Se voc no se acostumar com o novo layout do Object Inspector, que divide as
propriedades por categorias, poder alternar para o estilo tradicional. Clique
sobre a janela com o boto direito e escolha Arrange>By Name.

Figura 11. Object Inspector com vrias melhorias

Code Editor
O code editor , obviamente, usado para a edio de cdigos na IDE. Ao lado
esquerdo do editor mostrado o nmero da linha. Outro interessante recurso
o suporte a code-folding: voc pode mostrar/ocultar a implementao de um
mtodo, de membros de classe, ou de toda uma seo da unit, como interface
ou implementation, entre outros elementos; basta clicar nos sinais + ou -.
O menu de contexto do editor possui duas novas opes: Fold e Unfold para
manipulao do code-folding. Voc pode, por exemplo, clicar em Fold|Types
para esconder toda a seo type da unit.
O editor tem ainda opes para manipulao de macros, localizadas na barra
de status (isso j estava disponvel em verses anteriores do Delphi, mas apenas
usando-se teclas de atalho). Alm disso, duas abas Code e Design permitem
alternar entre o designer e o editor de cdigo.

12

E-Commerce
com Delphi e ASP.NET

Figura 12. Editor de cdigo: novos recursos

Code Insight
Temos vrios recursos para utilizao no editor, que podem ser configuradas
a partir da janela Options:
Code Completion: completa cdigo automaticamente;
Code Parameters: mostra os parmetros requeridos por um mtodo;
Tooltip Expression Evaluation: em modo de depurao, mostra o
contedo de uma varivel quando o mouse repousado sobre o
identificador;
Tooltip symbol Insight: mostra informaes sobre um identificador
quando o mouse repousado sobre ele;
Tooltip Help Insight: mostra no code editor uma declarao/
documentao de um identificador;
Error Insight: mostra erros do compilador.
Teclas de atalho:
Ctrl + Space - Code Completation
Ctrl + J Code Template (veremos a seguir como configurar essa opo)
Ctrl + Shift + Space Code Parameters

Sem depurao
O novo comando Run|Run Without Debugging permite rodar uma aplicao
sem acionar o depurador integrado (que por padro ativado quando voc
aperta F9). Na verdade essa opo j existia na verso anterior do Delphi, mas
estava oculta por padro.
O uso desse comando pode aumentar a velocidade de inicializao das
aplicaes executadas dentro da IDE e reduzir o uso de memria (isso til
porque muitas vezes rodamos a aplicao sem acabar realmente usando o
depurador).

13

E-Commerce
com Delphi e ASP.NET

Form Designer
Como o Delphi 2005 no mais apenas destinado ao desenvolvimento de
aplicaes VCL/CLX, temos novos designers. O VCL Designer basicamente
o tradicional Form Designer do Delphi. Uma diferena que agora voc no
poder visualizar mais de um formulrio ou Data Module ao mesmo tempo
(pois no ficam mais flutuantes, e sim vinculados ao designer). Outra mudana
que novos formulrios no Delphi 2005 possuem a extenso .nfm em vez de
.dfm (para VCL.NET). Ainda assim, possvel usar arquivos .dfm de aplicaes
VCL feitas no Delphi 7, ou anterior, para efeitos de compatibilidade.
A principais mudanas nos designers so notadas ao se desenvolver
aplicaes com o Windows Forms Designer. Componentes no-visuais, por
exemplo, ficam separados na parte inferior do formulrio. Na parte superior
desse designer temos barras de ferramentas destinadas a ajustes nos controles
visuais, como posicionamento e espaamento. H ainda o suporte a undo (e
no apenas undelete). Uma grande diferena em relao ao trabalho com a
VCL que objetos no so representados em modo texto (assim como IDEs de
outras linguagens, como C# e Java, que fazem a representao de componentes
centrada em cdigo, ao invs de em recursos, como faz a VCL). Ou seja, no
existe arquivo .dfm ou .nfm em Windows Forms ou Web Forms: valores de
propriedades de qualquer componente sero inicializados no mtodo privado
InitializeComponent, chamado no construtor do formulrio.

Instalando componentes
Continuando o tour pela IDE, veja na Figura 13 a janela aberta acessandose o menu Component|Installed .NET Components. Voc poder agora utilizar
facilmente, em sua aplicao Delphi, componentes desenvolvidos em outras
linguagens, como VB.NET ou C# (um grande avano comparado aos antigos
controles e bibliotecas ActiveX e objetos COM). Como voc ver, ainda
possvel usar controles ActiveX e COM a partir de uma aplicao .NET.

Figura 13. Instalando componentes .NET

14

E-Commerce
com Delphi e ASP.NET

Reflection
O menu Tools|Reflection um atalho para o utilitrio Reflection.exe (Figura 14),
que permite examinar os metadados e o cdigo IL gerado para um assembly
(sua aplicao feita no Delphi 8, por exemplo). Se voc clicar em um assembly
a partir do Project Manager|References poder ento visualizar o seu IL dentro
da prpria IDE (junto ao designer).

Figura 14. Reflection: examinado os metadados de Assemblies .NET

Help
Outra mudana est no Help, que est com novo formato. Alm da
documentao do Delphi 8, voc poder consultar a documentao completa
do SDK do .NET Framework, alm de tutoriais passo a passo para criao de
aplicaes Windows Forms, VCL.NET e Web Services, e dicas de migrao.
Curiosidade:
O ovo de pscoa do Delphi 2005 bastante original. Para visualiz-lo v at
a janela About e pressione T+E+A+M enquanto segura a tecla Alt. Surgir a
mensagem Borland Rules!. Aperte mais algumas vezes essas teclas e voc
ver um boto Team ao lado esquerdo. Clicando neste boto voc entrar
em um pequeno jogo. Pressione a barra de espaos para atirar nos nomes dos
membros da equipe do Delphi, que descero. Ao acertar nomes-chave (como
Delphi Team, Subby, Delphi MDA Team, Corbin Dunn etc.), voc ver algumas
figuras que mostram, desde a equipe de desenvolvedores do Delphi 8 e do
C#Builder, at a fila dos carros deles estacionados na sede da Borland.

15

E-Commerce
com Delphi e ASP.NET

Error Insight
A IDE monitora constantemente seu cdigo-fonte procurando erros, indicando
na janela Structure possveis problemas com o seu cdigo. Alm disso, o
cdigo com problema fica agora sublinhado (semelhante ao que faz o Word).
Repousando o mouse sobre o cdigo voc ver em um hint a mensagem de
erro gerada pelo compilador. A Figura 15 mostra um lao for sem o do e sem
a declarao da varivel i. Observe o comportamento da IDE em resposta ao
problema.

Figura 15. Error insight: mensagens de erro do compilador em forma de Hint e listadas na janela Structure

Help Insight
Um novo recurso da IDE permite que a documentao associada a um
determinado tem seja agora mostrada em uma janela semelhante a um hint,
dentro do prprio editor (Figura 16). So exibidos tambm links para a unit
onde est declarado um determinado tipo, componente etc. Clicando no link
o cdigo-fonte associado ser aberto.

Figura 16. Instalando componentes .NET

16

E-Commerce
com Delphi e ASP.NET

Code Snippets
Permitem incluir cdigo rapidamente no editor, a partir de templates.

Figura 17. Code Snippets: templates de cdigos

Para inserir um template, selecione um bloco de cdigo no editor e arraste


para a janela anterior enquanto segura a tecla ALT.

To-Do List
A partir de agora vou apresentar alguns recursos j antigos da IDE, mas
bastante teis.
O To-Do List (Figura 18) especificar uma lista de tarefas a serem feitas em
uma unit ou formulrio. Ao clicar no tem do To-Do list, o Delphi abre a unit e
posiciona o cursor onde o cdigo dever ser colocado. Pode ser exportado para
HTML (Figura 19). No code editor, use Shift+Ctrl+T para gerar um To-Do.

Figura 18. To-Do List: organize seu trabalho adicionando tarefas associadas ao cdigo-fonte

Figura 19. Exportando a lista de tarefas para HTML

17

E-Commerce
com Delphi e ASP.NET

Refactoring
Refactoring a tcnica disciplinada de reestruturar um bloco de cdigo
existente, alterando sua estrutura interna sem afetar o comportamento
externo (Martin Fowler). Cada refactoring uma pequena transformao
aplicada ao cdigo-fonte, visando melhorar sua legibilidade, performance,
organizao, adequao a um padro etc. Porm, uma seqncia muito
grande de refactorings pode produzir uma reestruturao significativa.
Refactorings devem garantir que a aplicao funcione da mesma forma aps
a reestruturao, reduzindo chances do sistema ter graves falhas aps as
modificaes e minimizando a chance de introduo de bugs. Refactoring est
intimamente ligado a testes unitrios. Os testes unitrios que garantiro se o
cdigo continua eficiente e funcional aps os refactorings.
Dica:
Para mais informaes sobre Refactoring visite www.refactoring.com

Suporte a Refactoring na IDE do Delphi 2005


Provavelmente um dos recursos mais interessantes da IDE do Delphi 2005
seja o suporte a Refactoring (menu Refactor). Com isso podemos, a partir da
prpria IDE, fazer a reestruturao do cdigo de aplicaes, como trocar nomes
de variveis, mtodos, classes, desmembrar cdigos em rotinas menores etc.
A Figura 20 mostra o novo menu Refactor do Delphi 2005:

Figura 20. Novas opes para Refactoring na IDE

As opes esto disponveis para desenvolvimento com Delphi for .NET,


Delphi Win32 e C# (algumas no esto disponveis para algumas linguagens).
A seguir vamos estudar em detalhes cada uma das opes disponveis. Para
fazer os testes, voc pode criar uma aplicao Windows Forms no Delphi
2005.

18

E-Commerce
com Delphi e ASP.NET

Rename: mtodos
Quando alteramos o nome de um identificador em sua declarao, bastante
provvel que essa alterao tenha que ser feita em vrias partes do cdigo,
onde o identificador referenciado (mtodos e variveis).
Em nossa aplicao Windows Forms, adicione o seguinte cdigo na seo
public da classe do formulrio (a seguir aperte Shit+Ctrl+C):
procedure Foo; overload;
procedure Foo(A:Integer); overload;

No Form_Load do formulrio digite o seguinte (d um duplo clique no


designer):
Foo();
Foo;
Foo(5);

Agora suponha que precisamos alterar o nome do primeiro mtodo,


Foo, que no recebe parmetros. Selecione-o na declarao e ative o menu
Refactor>Rename, ou aparte Shift+Ctrl+E, e indique o novo nome do mtodo
conforme mostrado na Figura 21.

Figura 21. Renomeando mtodos

Ser exibida a caixa de dilogo mostrada na Figura 22, que indica todos os
trechos do cdigo que sofrero alteraes, funcionando como um preview.

Figura 22. Refactoring: Preview

19

E-Commerce
com Delphi e ASP.NET

A seguir, possvel realizar uma das seguintes aes:


Refactor
(Ctrl+R) para aplicar as alteraes;
Undo Refactoring
(Ctrl + Z) - desfaz as modificaes feitas pela
opo anterior;
Remove Refactoring
(Del) limpa um Refactoring da lista da janela
Refactorings;
Remove All Refactorings
- limpa todas os refactorings da lista.
Aperte o boto Refactor. Aps o Refactoring, observe que o Delphi ajustou o
seguinte:
A declarao do mtodo na seo interface;
O cabealho da implementao;
As chamadas feitas ao mtodo no Form_Load, primeira e segunda.

Rename: variveis
Tambm podemos usar o recurso de Refactoring para renomear variveis. Por
exemplo, digite o seguinte cdigo no Form_Load:
procedure TWinForm1.TWinForm1_Load(sender: System.Object;
e: System.EventArgs);
var
i: integer;
begin
for i := 0 to Controls.Count - 1 do
MessageBox.Show(i.ToString());
end;

Selecione a varivel i, clique de direita e escolha a opo Refactoring>Rename


(ou use o menu principal), ser mostrada a Figura 23.

Figura 23. Renomeando variveis

Note que alterei o nome da varivel para Num. Se voc desmarcar a opo
View References before refactoring, o Delphi aplica a alterao imediatamente,
sem exibir o cdigo afetado na janela Refactoring.

20

E-Commerce
com Delphi e ASP.NET

Declare Variable: declarando variveis


automaticamente
Ainda usando o cdigo anterior, retire a declarao da varivel Num. Com isso,
o Delphi indicar que a varivel no est declarada (note o Error Insight em
ao na Figura 24).

Figura 24. Error Insight do Delphi indicando variveis no declaradas

Selecione a varivel no declarada, clique de direita sobre ela e escolha a


opo Declare Variable (Shift+Ctrl+V). Voc tambm pode usar o tem disponvel
no menu Refactor, ser exibida a seguinte caixa de dilogo da Figura 25. Nela
voc pode informar o tipo na varivel a ser declarada, se um array (com
dimenses) e se voc quer que o Delphi inicialize a varivel.

Figura 25. Declarando variveis automaticamente

O resultado obtido com base nas opes da figura pode ser visto a seguir (em
negrito):
procedure TWinForm1.TWinForm1_Load(sender: System.Object;
e: System.EventArgs);
var
Num: Integer;
begin
Num := 10;
for Num := 0 to Controls.Count - 1 do
MessageBox.Show(Num.ToString());
end;

claro, a inicializao da varivel no bloco anterior no faz sentido, mantive


aqui apenas para fins didticos.

21

E-Commerce
com Delphi e ASP.NET

Declare Field: adicionando campos a uma classe


Um campo (Field) semelhante a uma varivel, porm pertence a uma classe.
Considere o seguinte bloco de cdigo, declarado no Form_Load da classe:
procedure TWinForm1.TWinForm1_Load(sender: System.Object; e: System.
EventArgs);begin
Mensagem := Ola Mundo;
end;

Mensagem indicado como no declarado. Selecione o identificador e escolha


a opo Declare Field (Shift+Ctrl+D) no menu de contexto. Ser mostrada a
caixa de dilogo da Figura 26.

Figura 26. Declarando campos automaticamente

Aqui podemos especificar o tipo do campo (o Delphi j detecta por padro


com base no contexto da mesma), se um array e o especificador de visibilidade
da classe (private, strict private, protected, strict protected, public e published). O
resultado pode ser visto no cdigo a seguir:
TWinForm1 = class(System.Windows.Forms.Form)
...
private
Mensagem: string;

Sync Edit
Esse recurso permite que voc altere de uma s vez o nome de classes,
mtodos, variveis etc. referenciados em vrios pontos do cdigo-fonte. Por
exemplo, selecione um determinado bloco de cdigo e repare que aparecer
um pequeno cone
ao lado esquerdo do editor. Clique sobre o cone,
escolha o que deseja renomear (clique Tab para alternar) e digite o novo valor.
A alterao ser refletida instantaneamente em todos os locais do cdigo
selecionado (veja a Figura 27).

22

E-Commerce
com Delphi e ASP.NET

Figura 27. Sync Edit altera todas as referncias ao identificador enquanto voc digita

Extract Method
medida que vamos adicionando cdigo aos nossos mtodos, eles vo se
tornando mais complexos e sua lgica mais difcil de ser compreendida. Um
procedimento comum desmembrar o mtodo em rotinas menores, e
incluir a chamada ao mtodo criado no local original onde estava o cdigo.
Imagine o seguinte cdigo no Form_Load:
procedure TWinForm1.TWinForm1_Load(sender: System.Object;
e: System.EventArgs);
begin
MessageBox.Show(Ola Mundo);
MessageBox.Show(Delphi 2005);
MessageBox.Show(Refactoring);
end;

Selecione todas as linhas que contm o MessageBox, que clique em


Refactor>Extract Method (Ctrl+Shift+M). O Delphi mostar a caixa de dilog da
Figura 28, onde voc pode informar o nome do novo mtodo a ser criado.

Figura 28. Extract Method: extraindo mtodos de um bloco de cdigo

Clicando em Ok, o cdigo deve agora estar semelhante ao mostrado a


seguir:
procedure TWinForm1.MostraMensagens;
begin
MessageBox.Show(Ola Mundo);
MessageBox.Show(Delphi 2005);
MessageBox.Show(Refactoring);
end;

23

E-Commerce
com Delphi e ASP.NET

procedure TWinForm1.TWinForm1_Load(sender: System.Object;


e: System.EventArgs);
begin
MostraMensagens;
end;

O Delphi retira todo o cdigo selecionado do local original, move para o novo
mtodo (que j declarado na seo private) e inclui a chamada.
Agora imagine a seguinte situao, um tanto mais complexa:
procedure TWinForm1.TWinForm1_Load(sender: System.Object;
e: System.EventArgs);
var

n1,n2,n3: integer;

begin

n1 := 10;
n2 := 20;
n3 := n1 + n2;
MessageBox.Show(O resultado da soma + n3.ToString());

end;

Imagine que fssemos extrair somente o cdigo que mostra o resultado da


soma em n3. Nesse caso, se o cdigo fosse extrado, a varivel n3 no estaria
mais disponvel no novo mtodo, pois obviamente saiu do escopo. O Delphi
capaz de detectar esse comportamento e automaticamente incluir a varivel
na passagem de parmetros para o novo mtodo, como mostrado a seguir:
procedure TWinForm1.MostraSoma(n3: Integer);
begin
MessageBox.Show(O resultado da soma + n3.ToString);
end;
procedure TWinForm1.TWinForm1_Load(sender: System.Object;
e: System.EventArgs);
var
n1,n2,n3: integer;
begin
n1 := 10;
n2 := 20;
n3 := n1 + n2;
MostraSoma(n3);
end;

Extract Resource String

Resource Strings (strings de recurso) so declaradas de forma especial quando


seu executvel/DLL compilado. Dessa forma, usando um editor de recursos,
voc pode facilmente abrir a aplicao compilada e alterar as strings, sem
a necessidade de fazer sua recompilao. Isso ideal para aplicaes que
precisam ser traduzidas para mltiplos idiomas, por exemplo. A palavra
reservada resourcestring do Delphi Language permite a declarao de strings
de recurso.
Imagine o seguinte bloco de cdigo, que levanta uma exceo com uma
mensagem especfica:
procedure TWinForm1.TWinForm1_Load(sender: System.Object;
e: System.EventArgs);
begin
raise Exception.Create(Voc efetou uma operao ilegal);
end;

24

E-Commerce
com Delphi e ASP.NET

Clique de direita sobre a string e escolha Extract Resource String (Shift+Ctrl+L).


O Delphi mostrar a caixa de dilogo da Figura 29, onde voc pode informar
o nome da nova string:

Figura 29. Extraindo string de recursos

Seu cdigo agora deve ficar semelhante ao mostrado a seguir:


resourcestring
StrVocEfetouUmaOper = Voc efetou uma operao ilegal;
...
procedure TWinForm1.TWinForm1_Load(sender: System.Object;
e: System.EventArgs);
begin
raise Exception.Create(StrVocEfetouUmaOper);
end;

Find Unit
Uma ltima dica sobre Refactoring. Considere o seguinte bloco de cdigo,
colocado em uma aplicao VCL:
procedure TForm1.FormCreate(Sender: TObject);
begin
Color := clBlue;
end;

Supondo que a unit Graphics, que declara o identificador clBlue, no


esteja na seo uses. Selecionando clBlue e acessando o menu de contexto
Refactoring>Find Unit (Ctrl+Shift+A) far ser aberta a caixa de dilogo mostrada
na Figura 30. Nela podemos procurar por identificador (nesse caso j detectado)
e escolher se a referncia unit ser colocada na seo implementation ou
interface.

Figura 30. Adicionando uma unit automaticamente clusula uses

25

E-Commerce
com Delphi e ASP.NET

O resultado pode ser visto no cdigo a seguir, em negrito:


uses
Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,
Dialogs, Graphics;

Configurando os pacotes do Delphi 2005

Existe um utilitrio chamado Delphi Configuration Manager que


permite criar verses da IDE do Delphi de acordo com o tipo de aplicao
que voc est desenvolvendo. Por exemplo, voc pode configurar a IDE para
carregar somente os pacotes necessrios para o desenvolvimento com ASP.
NET e Delphi, tirando a VCL, C#, Windows Forms, DataSnap, IntraWeb etc. Isso
permite deixar a IDE muito mais rpida. Para cada verso da IDE, o utilitrio
cria um cone na rea de trabalho (ex.Delphi 2005 ASP.NET,Delphi 2005 VCL)
etc. Para fazer o download, acesse www.alphalink.com.au/~jed/dcm.htm. Outro
utilitrio semelhante pode ser encontrado em www.codeline.net

26

E-Commerce
com Delphi e ASP.NET

Introduo ao .NET
Framework

.NET Framework uma plataforma que simplifica o desenvolvimento


da aplicaes, focada na Internet e baseada em padres consolidados
do mercado. A iniciativa foi anunciada em julho de 2000 e oferece um
rico conjunto de classes e objetos destinados a criao de aplicaes.

Objetivos do .NET

27

Oferecer um ambiente integrado para desenvolvimento baseado


na orientao a objetos, que podem ser executados localmente ou
remotamente;
Oferecer um ambiente seguro para execuo de cdigo, eliminando
problemas de performance, causados por linguagens baseadas em
script ou cdigo interpretado;
Manter a experincia do desenvolvedor atravs de uma variedade de
tipos de aplicaes, como Windows e Web;
Ser baseado em padres da indstria, como XML e Web Services,
garantindo que todo cdigo baseado no .NET possa ser facilmente
integrado com outros cdigos;
Oferecer software como um servio;
Definir um novo modelo de desenvolvimento baseado em
componentes, dando fim a era COM (embora ainda seja possvel usar
objetos COM no .NET);
Permitir a integrao entre linguagens, baseando-se em um
modelo nico de desenvolvimento e oferecendo uma biblioteca
de classes comum (a mesma utilizada no C#, VB.NET, Delphi etc.)
Acredite, programar em uma linguagem especfica no ser mais to
importante: com .NET voc passar a programar para uma plataforma;
conhecendo as classes do .NET Framework, poder utilizar com
facilidade qualquer linguagem .NET;
Permitir a distribuio simplificada de aplicaes (tambm conhecida
como distribuio por XCOPY), sem a necessidade de registros ou
configuraes adicionais;
Desenvolvimento focado na Web, utilizando padres abertos como o
HTTP, SOAP e XML;
Utilizao de um ambiente seguro, gerenciado e robusto para a
execuo de aplicaes (uma mquina virtual); compiladores para
o .NET no geram mais instrues nativas da CPU, mas cdigo
intermedirio;
Abolir a necessidade de registro de bibliotecas e objetos, ou o uso de
GUIDs; acabam os problemas de versionamento de DLLs (a chamada
DLL Hell). O GAC (Global Assembly Cache) faz o controle automtico
de verses de assembly.
Ser o sucessor do modelo atual de programao Win32, fazendo com

E-Commerce
com Delphi e ASP.NET

que o programador use um conjunto robusto de classes ao invs de


chamar APIs diretamente (DLLs como user32.dll, gdi32.dll, etc.);
Ser um competidor para o Java, introduzindo a independncia de
sistema operacional, utilizao de uma mquina virtual e cdigo
gerenciado.
Veja na Figura 1 um diagrama que resume a arquitetura de aplicaes
.NET.

Figura 1. A plataforma .NET define uma infra-estrutura bsica para o desenvolvimento de aplicaes

A seguir, vamos examinar detalhadamente cada um dos elementos presentes


no .NET Framework, suas caractersticas, fundamentos e utilizao.

Common Language RunTime (CLR)


A CLR a mquina virtual do .NET e uma das peas-chave da plataforma. Sem
dvida o kernel de todo o framework e reponsvel por toda a funcionalidade
de qualquer aplicao escrita para a plataforma.
Entre as atribuies da CLR esto:
Gerenciar a memria - a CLR efetua constantes verificaes na
memria da aplicao, garantindo a sua performance e integridade;
Gerenciar o Garbage Collection o coletor de lixo da CLR se encarrega
de liberar objetos alocados e no liberados pelo desenvolvedor;
Efetuar a compilao de cdigo intermedirio (discutido a seguir);
Execuo de threads e execuo de cdigo gerenciado;
Realizar constantes verificaes no cdigo para garantir a segurana;
Verificao de tipos no possvel a utilizao de ponteiros sem
tipos, o .NET um ambiente de execuo fortemente tipado;
Vrios outros aspectos esto diretamente relacionados mquina virtual,
como veremos a seguir.

28

E-Commerce
com Delphi e ASP.NET

MSIL - Microsoft Intermediate Language


Compiladores de linguagens (como C#, VB, Delphi etc.) no geram mais cdigo
nativo da CPU e do sistema operacional, como acontecia at agora. Ao invs
disso, compiladores geram cdigo gerenciado, em linguagem intermediria,
ou seja, cdigo para rodar na plataforma. Imagine isso como sendo algo
entre linguagem de mquina e cdigo-fonte. Assim, se for fornecida uma CLR
para outro sistema operacional, seu cdigo compilado continua o mesmo. O
resultado da compilao um Assembly .NET.
O trecho a seguir mostra um exemplo de cdigo intermedirio, extrado a
partir da descompilao de uma aplicao de console:
.method private hidebysig static void Main(string[] args) cil managed
{
.entrypoint
.custom instance void [mscorlib]System.STAThreadAttribute::.ctor() = (
01 00 00 00 )
// Code size
2 (0x2)
.maxstack 0
IL_0000: nop
IL_0001: ret
} // end of method Class1::Main

Fique tranqilo, no preciso (apesar de ser possvel) escrever diretamente


em IL.
Voc pode examinar o cdigo intermedirio de assemblies .NET usando a
ferramenta Ildasm.exe(Figura 2), distribudo com o SDK do .NET Framework
(C:\Arquivos de programas\Microsoft.NET\SDK\v1.1\Bin).

Figura 2. Descompilando cdigo .NET com o ILDASM.exe

O compilador JIT
Aplicaes .NET so compiladas duas vezes. A primeira, ocorre quando
compilamos nosso cdigo-fonte usando o compilador da linguagem (C#, VB,
Delphi etc.), como falamos anteriormente. Quando a aplicao executada
pela primeira vez, a mquina virtual do .NET Framework (CLR) identifica qual

29

E-Commerce
com Delphi e ASP.NET

sistema operacional est sendo utilizado (Windows 98, NT, 2000, XP etc.) e se
encarrega de acionar o JIT (compilador Just in Time), que gera o executvel
nativo da plataforma. Quando a aplicao for executada novamente, a CLR
considera a verso compilada. Ou seja, o produto final (o executvel) tem a
mesma performance de uma aplicao nativa, para Win32 por exemplo.

Managed Code
Todo cdigo compilado para .NET chamado de cdigo gerenciado (Managed
Code). A mquina virtual pode ento fazer constantes verificaes de tipo para
garantir a segurana na execuo do cdigo. No h brechas para execuo
de cdigos maliciosos que possam prejudicar o funcionamento da aplicao
e do sistema operacional como um todo. A CLR um ambiente totalmente
seguro. O cdigo compilado nativo para o sistema operacional chamado de
Unmanaged Code.

Assemblies
Um Assembly um importante conceito no .NET Framework. Ele
essencialmente uma unidade bsica de distribuio, podendo ser um aplicao
(.EXE) ou uma biblioteca (.DLL) ou ainda ser formado por um conjunto delas.

GAC, Side By Side Execution e Manifest


O GAC Global Assembly Cache o local onde o .NET armazena todos os
Assemblies (bibliotecas DLLs) compartilhadas por vrias aplicaes. Se voc j
desenvolveu aplicaes para Windows que utilizam DLL, j deve ter passado
por um problema bastante comum: uma nova verso da DLL utilizada na
mquina e a aplicao que a usava deixa de funcionar, problema conhecido
como DLL Hell.
No .NET, cada Assembly versionado (ex. 1.0.0.0) internamente. Ou seja,
podemos ter, na mesma mquina, duas verses da mesma DLL sendo
executadas ao mesmo tempo. A aplicao usar a DLL que foi utilizada no
momento da sua compilao, graas s informaes armazenadas no manifest
da aplicao. A possibilidade de existirem vrias verses da mesma DLL fsica
rodando na mesma mquina, cada uma sendo utilizada por uma aplicao,
chamado de Side By Side Execution (execuo lado a lado). Costumo dizer, a
grosso modo, que o GAC seria como um System32 versionado.
Voc pode utilizar o gacutil.exe do SDK para instalar e remover Assemblies do
GAC, ou ainda usar um extenso do explorer do Windows, bastando abrir o
diretrio C:\Windows\assembly a partir do Shell (Figura 3).

30

E-Commerce
com Delphi e ASP.NET

Figura 3. GAC faz controle de verso de assemblies automaticamente: o fim do DLL Hell

CLS - Common Language Specication e CTS Common Type System


Um dos principais objetivos do .NET Framework permitir a integrao
entre linguagens, baseando-se em um modelo nico de desenvolvimento e
oferecendo uma biblioteca de classes comum, a mesma utilizada no C#, VB.NET,
Delphi etc.
Antes do .NET, cada linguagem definia um conjunto prprio de tipos, classes
e APIs (por exemplo a MFC da Microsoft, a VCL do Borland Delphi, etc.), o que
poderia aumentar a curva de aprendizado caso um desenvolvedor precisasse
utilizar outra ferramenta de desenvolvimento ou linguagem.
Alm disso, a integrao entre linguagens, componentes ou aplicaes
nunca foi algo simples. Vrias tecnologias surgiram com esse objetivo: o
COM (Component Object Model), DDE (Dynamic Data Exchange), OLE (Object
Linking and Embedding), ActiveX etc. Quem nunca precisou acessar a partir
de sua aplicao uma DLL escrita em outra linguagem? As Type Libraries at
que facilitavam um pouco esse processo. Outras vezes, era preciso declarar
uma rotina externa e utilizar tipos bsicos da API do Windows, como pchar e
cardinal. Em todos os casos a integrao praticamente rudimentar. Voc no
podia, por exemplo, estender um objeto COM escrito em VB declarando uma
classe descendente em Delphi, somente interfaces.
Com o .NET isso muda drasticamente. Todas as linguagens feitas para o .NET
utilizam os mesmos tipos bsicos, atravs de uma especificao chamada
CTS (Common Type System). Por exemplo, os tipos System.String, System.
Object, System.IO.File, System.Data.Dataset podem ser utilizados em qualquer
linguagem que possua um compilador para .NET. Alm disso, a CLS (Common
Language Specification) define convenes e regras destinadas a garantir a
interoperabilidade entre diferentes linguagens (C#, VB, Delphi etc.). Dessa
forma, voc pode tirar proveito de todos os recursos oferecidos pela POO entre
diferentes linguagens, como herana, tratamento de exceo e polimorfismo,
usando somente o cdigo binrio (em formato MSIL Microsoft Intermediate
Language) gerado pelo compilador da outra linguagem! No necessrio
possuir o cdigo-fonte.

31

E-Commerce
com Delphi e ASP.NET

.NET Framework Class Library e Namespaces


Provavelmente um dos melhores recursos do .NET Framework sua extensa
biblioteca de classes e objetos. No .NET, temos classes para realizar praticamente
qualquer tarefa de programao: trabalhar com arquivos, conectar a um banco
de dados, construir/consumir Web Services, criar aplicaes GUI ou para Web
etc.
Para facilitar, as classes foram organizadas em namespaces, que so estruturas
lgicas destinadas a agrupar classes e tipos com funcionalidades semelhantes.
Por exemplo, todas as classes bsicas do framework esto localizadas no
namespace System. As classes destinadas ao desenvolvimento para banco
de dados esto sob o namespace System.Data. Para o desenvolvimento de
aplicaes visuais para Windows, o namespace System.Windows.Forms.
E assim por diante. Com isso, fica muito fcil (e intuitivo) a localizao de e
organizao de classes no framework.
A Figura 4 mostra os principais namespaces do Framework.

Figura 4. No .NET Framework, classes so organizadas logicamente em namespaces

Veja alguns dos principais namespaces do framework, contendo as respectivas


classes para as finalidades indicadas:
System.Web.UI - criao de aplicaes visuais para Web com ASP.NET
Web Forms;
System.Web.Services - programao com Web Services usando ASP.
NET;
System.Windows.Forms - criao de aplicaes GUI com Windows
Form;
System.Data - conectividade com fontes de dados usando ADO.NET;
System.EnterpriseServices - classe para criao aplicaes COM+;
System.Globalization - localizao de aplicaes (cultura), inclundo
formato de data, moeda, nmeros etc.
System.IO - manipulao de arquivos;
System.Net - classes base para os principais protocolos da Internet;
System.Reflection - reflexo no .NET;
System.Runtime.InteropServices - Interoperabilidade .NET e COM;
System.Runtime.Remoting - aplicaes de objetos distribudos;
System.Runtime.Serialization - serializao de objetos;
System.Security - configurao de segurana;
System.Text - manipulao de strings e textos;
System.Threading - desenvolvimento multi-tarefa;
System.Web.Caching - Cache em ASP.NET;
System.Web.Configuration - Configurao ASP.NET;

32

E-Commerce
com Delphi e ASP.NET

System.Web.Mail - protocolos POP3 e SMTP;


System.Web.Mobile - desenvolvimento Mobile com ASP.NET;
System.Xml - processamento de documentos XML.

Nota:
Para uma lista completa de todos os namespaces, consulte a documentao
do SDK.
No confunda namespace com Assemblies. Assemblies so unidades fsicas,
enquanto namespace simplesmente uma forma de organizar logicamente
classes relacionadas. Um Assembly pode definir vrios namespaces. Ou ainda,
um namespace pode ter classes definidas em vrios tipos diferentes assembly.

Tipos de Objetos
O .NET Framework totalmente orientado a objetos. Isso significa dizer que
tudo no framework um objeto, desde inteiros, strings at objetos de acesso a
dados. Todos descendem obrigatoriamente de System.Object;
Existem dois tipos de objetos no .NET:
Reference: um objeto que referenciado atravs de um endereo na
pilha, um ponteiro tipado.
Value: so alocados diretamente na pilha, sempre contm um valor
e no podem ser nulos. Geralmente utilizados nos tipos primitivos,
como inteiros, strings etc.
Para permitir a utilizao de tipos Value como se fossem realmente objetos,
o .NET utiliza um recurso chamado Boxing, permitindo que voc possa chamar
mtodos e acessar suas propriedades. O processo inverso conhecido como
UnBoxing. Por exemplo, voc pode ter o seguinte:
var
i: integer;
s : string;
begin
i := 10;
i.ToString();

Ou sendo mais radical ainda:


s := 10.ToString();

Referncia
Para mais informaes sobre o .NET Framework, consulte o endereo msdn.
microsoft.com, onde existe uma extensa documentao sobre o assunto,
incluindo exemplos, tutoriais, diagramas etc. Para sua referncia futura, compilei
no quadro a seguir um pequeno glossrio de termos que provavelmente faro
parte a partir de agora do seu dia a dia como desenvolvedor .NET

33

E-Commerce
com Delphi e ASP.NET

Mini-glossrio do .NET Framework

CLI Common Language Infrastructure: um dos principais fundamentos da plataforma .NET.


CLI uma especificao que define um ambiente virtual de execuo (VM virtual machine), desenhado para
suportar diversas linguagens de programao que podem interagir entre si. A Microsoft submeteu essa especificao
ECMA (European Computer Manufacturers Association www.ecma-international.org/)
para que outras empresas pudessem oferecer diferentes implementaes. A especificao CLI inclui tambm as
especificaes do CTS, CLS, MetaData, CIL e VES (veja a seguir).

CTS Common Type System especificao que define um sistema comum de tipos (valor ou
referncia) que podem ser utilizados em diferentes linguagens de programao.

CLS Common Language Specification subconjunto do CTS, define convenes e regras


destinados a garantir a interoperabilidade entre diferentes linguagens (C#, VB, Delphi etc), incluindo herana,
manipulao de excees e polimorfismo.

CLR Common Language RunTime implementao da Microsoft para a especificao CLI.


Para aqueles que conhecem o Java, o CLR muito semelhante JVM (mquina virtual Java). Entre suas principais
funes, esto: converso do cdigo IL (Intermediate Language linguagem intermediria) em cdigo nativo
da plataforma, execuo das aplicaes .NET, gerenciamento de memria automtico (Garbage Collection) e
verificaes de segurana.

CIL Common Intermediate Language compiladores construdos para a plataforma .NET


no geram instrues nativas do processador. Ao invs disso, geram cdigo intermedirio (IL Intermediate
Language). Novamente, se voc conhece Java, pense nisso como algo semelhante ao bytecode, o que permite
que, pelo menos em teoria, seu cdigo compilado possa rodar futuramente em diferentes plataformas.

JIT Just-In-Time Compiler mecanismo associado ao CLR que permite a compilao do cdigo
IL em cdigo nativo da plataforma no momento da sua execuo.

FCL Framework Class Library conjunto de classes do .NET.

GAC Global Assembly Cache normalmente voc copia uma DLL para o diretrio de sistema
do Windows quando precisa compartilh-la entre vrias aplicaes; quando uma nova verso da DLL fornecida,
algumas aplicaes podem parar de funcionar. O GAC termina com isso, permitindo que voc instale diferentes verses
de um mesmo assembly: cada aplicao usar a verso para a qual foi compilada (recurso conhecido como side-byside execution execuo lado a lado).

GC Garbage Collector mecanismo associado ao CLR que realiza a coleta de lixo (garbage
collection), liberando recursos (como objetos) que no estejam mais sendo utilizados.

NameSpaces no .NET Framework, NameSpaces permitem organizar tipos, classes e


identificadores.

Assembly a unidade bsica de distribuio do .NET Framework, podendo conter o cdigo IL, dados
como imagens e recursos. Um assembly pode ser formado de um simples arquivo (.exe ou .dll), ou ser construdo a
partir de vrios arquivos.

Manifest cada assembly possui um manifesto, que basicamente um conjunto de informaes


que descrevem os arquivos que o assembly contm e de que outros arquivos ele depende.

Managed Code cdigo compilado para a plataforma .NET, que gerenciado pelo CLR.
Unmanaged Code o cdigo de aplicaes compiladas que no so gerenciadas pelo CLR e so nativas do
processador.

Download e Instalao do .NET Framework


O .NET Framework SDK e Redistributable podem ser obtidos a partir dos
endereos:
www.microsoft.com/downloads/details.aspx?FamilyID=9b3a2ca6-3647-40709f41-a333c6b9181d&DisplayLang=en

34

E-Commerce
com Delphi e ASP.NET

www.microsoft.com/downloads/details.aspx?FamilyID=262d25e3-f589-48428157-034d1e7cf3a3&DisplayLang=en

Configurao do ASP.NET no IIS

Para rodar as pginas ASP.NET deste curso, preciso que voc


tenha o Internet Information Services instalado. Para isso, voc pode usar o
Adicionar>Remover Programas do Painel de Controle. Caso tenha instalado
o .NET Framework antes do IIS, necessrio executar a seguinte linha de
comando:

35

Links

C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322>aspnet_regiis.exe i

ECMA
www.ecma-international.org
Links para as especificaes
msdn.microsoft.com/net/ecma

E-Commerce
com Delphi e ASP.NET

Fundamentos do
ASP.NET
Neste captulo vamos examinar alguns fundamentos bsicos do
desenvolvimento de aplicaes ASP.NET. Vamos conhecer a estrutura de
aplicaes, arquivos envolvidos, modelo de execuo e conheceremos os
principais objetos e classes do framework.

Criando uma Aplicao Web Forms


Para facilitar, vamos criar uma aplicao, de forma que os conceitos sero
expostos a seguir. O exemplo ser extremamente simples, facilitando o
entendimento dos fundamentos do desenvolvimento Web com o ASP.NET.
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 1. Criando uma aplicao ASP.NET

No formulrio principal, coloque um Button, um TextBox e um Label. Seu


formulrio deve estar semelhante ao mostrado na Figura 2.

Figura 2. Ol Mundo ASP.NET!

36

E-Commerce
com Delphi e ASP.NET

No evento Click do boto digite o seguinte:


Label1.Text := TextBox1.Text;

Execute e teste a aplicao (Figura 3).

Figura 3. Aplicao estilo Ola Mundo no ASP.NET

Dica:
Para executar a aplicao, clique no menu Run>Run. Se receber uma mensagem
de erro do debugger, use a opo Run>Run without debugging.

Nota:
Apesar de utilizarmos controles do lado servidor nos exemplos deste captulo
(Button, TextBox etc.), eles no sero discutidos em detalhes nesta parte do
curso, mas em captulos seguintes.
Com base neste exemplo, vamos examinar alguns detalhes sobre aplicaes
ASP.NET.

Arquitetura ASP.NET
Os principais componentes da arquitetura ASP.NET (Figura 4) so os Web
Forms, ASP.NET Server Controls, arquivos de Code-behind e DLLs compiladas.
Um Web Form contm elementos HTML, texto e Server Controls. Arquivos de
code-behind contm a lgica da aplicao para o formulrio associado. DLLs
compiladas geram HTML dinmico no servidor Web.

Figura 4. Arquitetura de aplicaes ASP.NET

37

E-Commerce
com Delphi e ASP.NET

Modelo de Execuo
A Figura 5 mostra o modelo de execuo do ASP.NET, que funciona da
seguinte forma:
1. O browser emite uma requisio HTTP ao servidor;
2. Um dispositivo do framework ASP.NET executa um parser que interpreta
o cdigo-fonte e identifica todas as suas dependncias;
3. A pgina compilada em MSIL (Microsoft Intermediate Language - cdigo
intermedirio);
4. O runtime do .NET (CLR Common Language Runtime) carrega e executa
o cdigo MSIL;
Quando algum usurio requisita a mesma pgina Web pela segunda vez, a
seguinte srie de eventos ocorre:
1. O browser emite uma requisio HTTP ao servidor;
2. O CLR carrega e executa imediatamente o cdigo MSIL que j havia sido
compilado durante a primeira requisio do usurio.

Figura 5. Modelo de execuo do ASP.NET

Arquivos Gerados
Os seguintes arquivos foram gerados na aplicao:
NomeProjeto.dll assembly compilado, em cdigo MSIL;
WebForm1.aspx pgina Web com controles e cdigo html/aspx;
Web.config arquivo de configurao da aplicao;
Global.asax arquivo com cdigo para responder aos eventos nvel
de aplicao;
WebForm1.pas contm a implementao dos eventos e cdigo
servidor responsvel pelo processamento da pgina.

Code-Behind
Observe que, diferente do ASP, h uma separao clara entre o cdigo de
interface (arquivo aspx) e o cdigo servidor (arquivo .pas). Esse recurso
conhecido como code-behind. Com isso, podemos integrar facilmente

38

E-Commerce
com Delphi e ASP.NET

programadores e Web Designers em uma mesma equipe de desenvolvimento.


Alm disso, o cdigo sempre compilado, o que garante a performance
superior do ASP.NET. O arquivo aspx pode ser modificado sem a necessidade
de recompilao do projeto na IDE.

Web Forms e Controles no servidor


O ASP.NET introduz o conceito de controles no lado servidor, que facilitam e
muito a criao de formulrios Web. Com isso, podemos desenvolver aplicaes
para Web de forma muito semelhante ao que fazamos ao desenvolver
aplicaes para Windows, utilizando recursos visuais e drag & drop da IDE. ASP.
NET desenvolvimento RAD para Web. Cada controle possui propriedades,
mtodos e eventos, que podem ser herdados e reutilizados atravs de mltiplas
aplicaes. Isso desenvolvimento POO.

Programao orientada a eventos


O conceito de eventos no lado servidor facilita a incluso de cdigo em
resposta a requisies e aes feitas sobre controles de tela. Por exemplo,
muito simples interceptar e fornecer uma resposta/sada para um clique em
um boto, escolha de um tem em uma caixa de seleo e assim por diante.

Estrutura do documento aspx


Vamos analisar o cdigo e a estrutura da pgina WebForm1.aspx criada na
aplicao anterior:
<%@ Page language=c# Codebehind=WebForm1.pas AutoEventWireup=false
Inherits=OlaMundo.WebForm1 %>
<!DOCTYPE HTML PUBLIC -//W3C//DTD HTML 4.0 Transitional//EN >
<HTML>
<HEAD>
<title></title>
</HEAD>
<body ms_positioning=GridLayout>
<form runat=server ID=Form1>
<p>
<asp:TextBox id=TextBox1 runat=server>
</asp:TextBox>
<asp:Button id=Button1 runat=server
text=Button></asp:Button>
</p>
<p>
<asp:Label id=Label1 runat=server>Label
</asp:Label>
</p>
</form>
</body>
</HTML>

39

E-Commerce
com Delphi e ASP.NET

Analisando o cdigo, podemos decompor as funcionalidades de um Web


Form em trs nveis de atributos:
atributos da pgina (page attributes) - definem funes globais;
atributos do corpo da pgina (body attributes) - definem como uma
pgina ser mostrada;
atributos do formulrio (form attributes) - definem como grupos de
controles sero processados.
A tag @Page define atributos especficos da pgina que sero usados pelo
page parser do ASP.NET e pelo compilador; voc pode incluir apenas uma tag
@Page por arquivo .aspx.
Os atributos da tag body definem a aparncia dos objetos que sero mostrados
no browser. Por exemplo, o atributo ms_positioning diz respeito ao layout da
pgina, determinando como os controles e o texto sero posicionados. Esto
disponveis duas opes:
FlowLayout controles ajustam-se automaticamente na tela,
dependendo do tamanho da janela do browser;
GridLayout controles so fixados na pgina atravs de coordenadas
absolutas.
A tag form define como grupos de controles sero processados. Apesar
de voc poder ter diversos formulrios HTML em uma pgina, apenas um
formulrio server-side poder estar presente em uma pgina aspx.
Repare ainda o atributo runat nos controles, ajustado para o valor server,
indicando que os mesmos iro rodar no servidor Web.

Estrutura do documento HTML


Obviamente, o cdigo que enviado ao browser HTML puro, com algum
Java Script. O ASP.NET capaz de detectar o browser utilizado e enviar o cdigo
compatvel com o mesmo. Por exemplo, ele pode suprimir a utilizao de Java
Script se o mesmo no suportar (browsers mais antigos, por exemplo). O browser
jamais enxerga o cdigo aspx ou do arquivo fonte de code-behind.
Veja o cdigo HTML gerado para o Web Form anterior:
<html>
<head>
<title></title>
</head>
<body ms_positioning=GridLayout>
<form name=_ctl0 method=post action=WebForm1.aspx id=_ctl0>
<input type=hidden name=__VIEWSTATE
value=dDwtMTA4MzE0MjEwNTs7PnBEsKiGxbH4nju5tJEN0hxXcynQ />
<input name=TextBox1 type=text id=TextBox1
style=Z-INDEX: 1; LEFT: 22px; POSITION: absolute; TOP: 22px />
<input type=submit name=Button1 value=Button id=Button1
style=Z-INDEX: 2; LEFT: 190px; POSITION: absolute; TOP: 22px />
<span id=Label1
style=Z-INDEX: 3; LEFT: 22px; POSITION: absolute; TOP:
54px>Label</span>
</form>
</body>
</html>

Observe que cada controle tem um ID e que o ASP.NET usa estilos para
posicionar os mesmos em coordenadas absolutas de tela.

40

E-Commerce
com Delphi e ASP.NET

Response
Response declarado no namespace System.Web e um objeto do tipo
HTTPResponse. usado para encapsular respostas HTTP enviados pelo servidor
Web ao browser. Algumas de suas principais propriedades so Cache, Cookies,
Filter e Buffer. Alguns dos seus principais mtodos so Redirect e Write. Vamos
fazer um exemplo prtico que mostra o uso do objeto.
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 6. Criando uma aplicao ASP.NET

O cdigo a seguir demonstra a utilizao do objeto. Coloque no evento Load


de um formulrio, dando um duplo clique no Web Form.
function GetSaudacao: System.string;
begin
result := Bom-dia! Hoje {0}!;
if DateTime.Now.Hour > 12 then
result := Boa-tarde! Hoje {0};
if DateTime.Now.Hour > 18 then
result := Boa-noite! Hoje {0};
end;
procedure TWebForm1.Page_Load(sender: System.Object; e: System.
EventArgs);
begin
Response.Write(System.String.Format(
GetSaudacao,System.DateTime.Now));
end;

A Figura 7 mostra o exemplo em execuo.

Figura 7. Aplicao em execuo

41

E-Commerce
com Delphi e ASP.NET

Request
Request declarado no namespace System.Web e um objeto do tipo
HTTPRequest. usado para capturar informaes enviadas pelo browser para
o servidor durante o processo de uma requisio HTTP. Algumas de suas
principais propriedades so QueryString, Cookies e Files.
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 8. Criando uma aplicao ASP.NET

O cdigo a seguir demonstra a utilizao do objeto (coloque no evento


Load de um formulrio), exibindo no browser informaes sobre a requisio
(caminho, IP, parmetros, variveis etc.):
procedure TWebForm1.Page_Load(sender: System.Object; e: System.
EventArgs);
begin
with System.String do begin
Response.Write(Format(ApplicationPath: {0} <hr>,
Request.ApplicationPath));
Response.Write(Format(FilePath: {0} <hr>,Request.FilePath));
Response.Write(Format(Headers: {0} <hr>,Request.Headers));
Response.Write(Format(HttpMethod: {0} <hr>,Request.HttpMethod));
Response.Write(Format(Path: {0} <hr>,Request.Path));
Response.Write(Format(PhysicalApplicationPath: {0} <hr>,
Request.PhysicalApplicationPath));
Response.Write(Format(PhysicalPath: {0} <hr>,Request.PhysicalPath));
Response.Write(Format(RequestType: {0} <hr>,Request.RequestType));
Response.Write(Format(Url: {0} <hr>,Request.Url));
Response.Write(Format(UserAgent: {0} <hr>,Request.UserAgent));
Response.Write(Format(UserHostAddress: {0} <hr>,
Request.UserHostAddress));
Response.Write(Format(UserHostName: {0} <hr>,Request.UserHostName));
end;
end;

42

E-Commerce
com Delphi e ASP.NET

A Figura 9 mosta o exemplo em execuo.

Figura 9. Usando o objeto Request

Cookies
HTTPCookie uma classe declarada no namespace System.Web, usada
para capturar/salvar informaes na mquina cliente (browser). Cookies so
largamente utilizados por qualquer aplicao Web, permitindo que o servidor
armazene no browser informaes sobre o cliente. Por exemplo, quando voc
entra em um Web Site e preenche um formulrio com seus dados, o servidor
pode gravar um cookie na sua mquina. Quando voc visitar o site novamente,
o servidor capaz de identific-lo fazendo a leitura do respectivo cookie.
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

43

E-Commerce
com Delphi e ASP.NET

Figura 10. Criando uma aplicao ASP.NET

No formulrio principal, coloque um TextBox, um Button e um Label


(Figura 11).

Figura 11. Formulrio principal da aplicao

O cdigo a seguir mostra os manipuladores para os eventos Click do boto


e Load do formulrio. No exemplo, solicitamos o nome do usurio na primeira
vez que ele entra no site, gravando essa informao em um Cookie. A partir da,
sempre que o usurio logar, verificamos se o Cookie existe (e no expirou) e
damos uma mensagem de boas-vindas:
procedure TWebForm1.Button1_Click(sender: System.Object; e: System.
EventArgs);
var
ck: System.Web.HttpCookie;
begin
// Cria Cookie, expira em 3 dias
ck := System.Web.HttpCookie.Create(Usuario,TextBox1.Text);
ck.Expires := DateTime.Today.AddDays(3);
Response.Cookies.Add(ck);
end;
procedure TWebForm1.Page_Load(sender: System.Object; e: System.
EventArgs);
begin
if Request.Cookies[Usuario] <> nil then
Label1.Text := System.String.Format(Seja bem-vindo {0},
Request.Cookies[Usuario].Value);
end;

Figura 12. Usando Cookies

44

E-Commerce
com Delphi e ASP.NET

IsPostBack
O evento Load de um formulrio sempre disparado quando uma requisio
enviada ao servidor. No entanto, em algumas situaes, precisamos saber se
a requisio feita a primeira ou uma resposta subseqente. Isso possvel
atravs da verificao da propriedade IsPostBack do objeto Page.
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 13. Criando uma aplicao ASP.NET

No formulrio principal, coloque um Button e no evento Load do formulrio


digite:
procedure TWebForm1.Page_Load(sender: System.Object; e: System.
EventArgs);
begin
if not IsPostBack then
Response.Write(Primeira requisio)
else
Response.Write(IsPostBack (no a primeira));
end;

Veja a aplicao em execuo nas Figuras 14 e 15.

Figura 14. Testando o IsPostBack

45

E-Commerce
com Delphi e ASP.NET

Clique no boto neste momento.

Figura 15. IsPostBack permite identificar se a requisio a primeira

Server
Server declarado no namespace System.Web e um objeto do tipo
HTTPServerUtility. Possui vrios mtodos utilizados no processamento de
requisies HTTP, como: CreateObject, CreateObjectFromClsid, MapPath e
Transfer.
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 16. Criando uma aplicao ASP.NET

O cdigo a seguir, que deve ser colocado no evento Load do form, mostra
como usar um importante mtodo desse objeto, o MapPath, que permite obter
o caminho fsico de um arquivo no disco. Deve ser usado sempre que possvel,
pois a indicao do caminho completo ao invs do relativo diretamente no
cdigo pode fazer com que sua aplicao pare de funcionar, caso seja instalada
em um local diferente do caminho utilizado em tempo de desenvolvimento.

46

E-Commerce
com Delphi e ASP.NET

procedure TWebForm1.Page_Load(sender: System.Object; e: System.


EventArgs);
begin
// Retorna c:\inetpub\wwwroot\Cap04Ex06\WebForm1.aspx
Response.Write(Server.MapPath(WebForm1.aspx));
end;

A Figura 17 mostra a aplicao em execuo.

Figura 17. Aplicao em execuo

Response.Redirect e Server.Transfer
O mtodo Redirect do objeto Response redireciona o usurio para uma nova
pgina (URL), que pode ser tanto um site da Web externo ao projeto ou uma
pgina aspx da prpria aplicao. Para passar dados de uma pgina para outra,
voc deve utilizar parmetros na URL (como limitao de tamanho e uso de
tipos de dados primitivos).
O mtodo Transfer do objeto Server outra forma de chamar uma pgina aspx
(da mesma aplicao), porm permite passar dados diretamente no servidor
de um formulrio para outro, que podem ser objetos, DataSets, conexes etc.
Vamos criar um exemplo que demonstra a utilizao de ambas as tcnicas. Em
um primeiro momento, vamos usar o Redirect para passar um valor digitado
em um formulrio para outro.
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 18. Criando uma aplicao ASP.NET

47

E-Commerce
com Delphi e ASP.NET

Adicione um segundo formulrio aspx ao projeto.


Dica:
Para adicionar um novo formulrio ao projeto, a partir do Project Manager, d
um clique de direita no nome da aplicao e a seguir selecione New>Other>New
ASP.NET Files>ASP.NET Page.
No primeiro formulrio, coloque um Button e um TextBox. No evento Click do
Button, digite o seguinte:
procedure TWebForm1.Button1_Click(sender: System.Object; e: System.
EventArgs);
begin
Response.Redirect(WebForm2.aspx?Nome= + TextBox1.Text);
end;

Isso passa o valor digitado no TextBox para a pgina WebForm2.aspx. A URL


formada pelo mtodo Redirect anterior ser algo do tipo:
http://localhost/caminho/WebForm2.aspx?Nome=Guinther

No evento Load do segundo formulrio, digite o seguinte:


procedure TWebForm2.Page_Load(sender: System.Object; e: System.
EventArgs);
begin
Response.Write(Ol + Request.QueryString[Nome]);
end;

Aqui usamos QueryString do Request para recuperar o valor passado no


primeiro formulrio (Figura 19).

Figura 19. Passando informaes entre pginas

Esse recurso bastante utilizado em vrios tipos de aplicaes Web. Por


exemplo, poderamos ter em uma pgina uma lista de produtos, com a
descrio e foto, obtidos a partir de uma consulta ao banco de dados. Ao clicar
em um produto, passamos o cdigo do mesmo para o outro formulrio, que
se encarregar de fazer uma consulta detalhada ao banco de dados, obtendo
mais informaes sobre o mesmo.
Para ver como funciona o outro mtodo, mude a linha do Redirect para:
Server.Transfer(WebForm2.aspx);

E o evento Load do segundo formulrio para:


Response.Write(Ol + TWebForm1(Context.Handler).TextBox1.Text)

48

E-Commerce
com Delphi e ASP.NET

Nota:
Para ter acesso ao TextBox1 a partir de outra classe, altere seu especificador
de visibilidade para public.
No cdigo, fazemos um typecast em Context.Handler para o tipo do primeito
WebForm, tornando possvel o acesso direto ao objeto. No necessria a
passagem de qualquer valor por URL.

ViewState
Aplicaes ASP.NET so state-less. Isso significa dizer que o servidor trata cada
requisio cliente como se fosse uma nova solicitao. Nenhuma informao
armazenada na memria do servidor aps o envio da pgina HTML para o
browser. claro, o ASP.NET permite a utilizao de alguns recursos especiais
para recuperar o estado de controles.
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 20. Criando uma aplicao ASP.NET

Coloque os seguintes controles no formulrio: Button, TextBox e ListBox


(Figura 21).

Figura 21. Formulrio principal da aplicao

49

E-Commerce
com Delphi e ASP.NET

No evento Click do boto digite:


procedure TWebForm1.Button1_Click(sender: System.Object; e: System.
EventArgs);
begin
ListBox1.Items.Add(TextBox1.Text);
end;

Isso adiciona ao ListBox o texto digitado no TextBox. Execute a aplicao e faa


um teste adicionando vrios tens ao ListBox (Figura 22).

Figura 22. ViewState faz o gerenciamento automtico do estado de controles

Se voc j desenvolveu em alguma outra linguagem para Web (Java, PHP,


ASP etc.) deve ter ficado curioso como o ASP.NET consegue manter os tens
digitados na lista, mesmo entre as requisies. Se toda requisio tratada
como se fosse uma nova, como os tens digitados persistiram?
O recurso conhecido como View State possibilita que os controles armazenem
automaticamente seu estado entre chamadas sucessivas (requisies) a uma
mesma pgina. Voc pode visualizar esse recurso em funcionamento atravs
do cdigo fonte HTML gerado para a nossa pgina, que deve estar semelhante
ao mostrado a seguir:
<input type=hidden name=__VIEWSTATE
value=dDwxODQ3MTM0NzMyO3Q8O2w8aTwxPjs+O2w8dDw7bDxpPDE+Oz47bDx0PHQ8O3A8bD
xpPDA+O2k8MT47aTwyPjtpPDM+Oz47bDxwPE9sw6EgTXVuZG8gQVNQLk5FVCE7T2zDoSBNdW5
kbyBBU1AuTkVUIT47cDxFdSBtYW50ZW5obyBtZXUgZXN0YWRvIGVudHJlIHJlcXVlc3RzITtF
dSBtYW50ZW5obyBtZXUgZXN0YWRvIGVudHJlIHJlcXVlc3RzIT47cDxVc2FuZG8gbyBWaWV3U
3RhdGU7VXNhbmRvIG8gVmlld1N0YXRlPjtwPFRlc3RlO1Rlc3RlPjs+Pjs+Ozs+Oz4+Oz4+Oz
7ZZcwCSIWouRv7D8d3ZO5Ume8Tyg== />

Os dados de cada controle ficamcodificadosneste campo do tipo Hidden, que


recuperado a cada requisio. Assim, o ASP.NET pode devolver ao controle
suas propriedades originais a cada requisio. Tudo de forma automtica. Alm
disso, isso garante a escalabilidade da soluo, pois NADA, absolutamente
NADA, mantido na memria do servidor entre as requisies.
Mais adiante neste curso esse recurso ser explorado em mais detalhes. Por
exemplo, veremos como adicionar nossos prprios objetos ao ViewState e
como usar outros tipos de objetos para tratamento de sesso, como Cache,
Session etc.

50

E-Commerce
com Delphi e ASP.NET

Exerccio Resolvido
Criar uma aplicao ASP.NET com duas pginas ASPX. No primeiro Web Form,
colocar dois TextBoxes e um Button. Quando o usurio clicar no Button, passar o
valor digitado nos dois TextBoxes como parmetro da URL em um Redirect para
o segundo WebForm. Neste segundo WebForm, exibir a soma dos dois nmeros,
fazendo a converso dos parmetros da URL. Se no for possvel fazer a soma (os
parmetros no forem nmeros, por exemplo), mostrar uma mensagem de erro
ao usurio (usar um try except). A seguir, adaptar o mesmo exemplo para que use
Cookies para guardar os valores do primeiro WebForm e recuperar no segundo
WebForm, mantendo a mesma funcionalidade.
A soluo para este exerccio pode ser encontrada nos apndices do
curso.

51

E-Commerce
com Delphi e ASP.NET

Web Forms e Controls

este captulo vamos conhecer em detalhes os controles disponveis


no ASP.NET destinados a criao de aplicaes Web Forms. Para cada
um, examinaremos suas principais propriedades, mtodos e eventos.
Primeiro, importante saber como o ASP.NET divide os tipos de controles.

Tipos de Servers Controls


Podemos dividir os Server Controls em quatro categorias:
HTML Server Controls modelo de objetos que possuem estrutura
bastante semelhante aos elementos HTML (tags) que eles geram;
Web Server Controls so objetos que possuem uma implementao
bem mais robusta que os HTML Server Controls. Seu modelo de objetos
no reflete necessariamente a sintaxe HTML, permitindo a construo
de controles bem mais sofisticados (calendrios, por exemplo), do
que simples botes e caixas de textos;
Validation Controls so um tipo especial de Web Server Control,
utilizados para validar entradas de usurio nos outros controles. Por
exemplo, eles permitem a verificao de um campo requerido, se um
valor est em uma determinada faixa de valores especficos ou se
de um determinado tipo;
User Controls utilizados para adicionar elementos que se repetem
em diversas pginas aspx. So geralmente usados na construo de
menus, barras de ferramentas e outros elementos reutilizveis.

HTML Controls
Os HTML Controls representam elementos HTML diretamente. Tambm
podem rodar no servidor, bastando para isso adicionar o atributo RunAt =
Server na definio do elemento no arquivo aspx. So indicados para a migrao
de formulrios HTML para aspx. A lista a seguir mostra os HTML Controls e as
respectivas tags HTML que eles geram.

Links

52

Referncia dos elementos HTML


www.htmlhelp.com/reference/html40/alist.html
www.w3schools.com/html/html_reference.asp

E-Commerce
com Delphi e ASP.NET

Controle

Exemplo de Tag HTML gerada


<a href = pagina.aspx></a>
<input type=button value=Button>
<input>
<textarea></textarea>
<input type=password>
<input type=submit value=Submit>
<input type=reset value=Reset>
<input type=image src=imagem.jpg>
<input type=checkbox>
<input type=radio>

<select><option selected=true>1
</option><option>2</option></select>
<select size=2><option>1</option><option>2
</option></select>
<input type=hidden>
<input type=le>
<a href=pagina.aspx>Anchor</a>
<img alt= src=imagem.jpg>
<table border = 1><tr><td>1</td></tr></table>
<span>Span</span>
<div>Div</div>
<div ms_positioning=FlowLayout>Div</div>
<div ms_positioning=GridLayout>Div</div>
<hr>

Controle

Exemplo da tag HTML gerada


Usado para fazer banners em pginas
Um boto, gerando um input type=submit
Cria um calendrio que pode ser bastante personalizado
Cria um controle de checagem
Cria uma lista de controle de checagem
Um dos principais componentes do ASP.NET, para gerar tabela de dados
Para gerar tabela de dados
Lista de opes, estilo ComboBox do Windows Forms
Usado para criar links entre pginas
Mostra uma imagem, gerando a tag img src
Mostra uma imagem que pode responder a um click de mouse
Exibe uma label (texto)
Boto que funciona como hyperLink
Lista de opes selecionveis
Usado para inserir texto diretamente no cdigo HTML, sem estilos
Cria uma painel, exatamente como em aplicaes Windows Forms
Container para controles gerados dinamicamente no servidor
Cria um boto de rdio para marcao
Cria uma lista de botes de rdio para marcao
Permite exibir tens de uma lista (fonte de dados por ex.) usando templates
Cria uma tabela (table)
Usado para entrada de dados
Mostra o contedo de um documento XML

53

E-Commerce
com Delphi e ASP.NET

Web Controls
Os Web Controls so controles mais especializados, que geram cdigo HTML
mais complexo e no representam diretamente elementos HTML simples. A lista
a seguir mostra os Web Controls e uma breve descrio de sua funcionalidade.

Bsicos: Label e TextBox


No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 1. Criando uma aplicao ASP.NET

No formulrio principal colque trs TextBoxes e um Label (Figura 2).

Figura 2. Formulrio principal da aplicao

O controle Label permite que seja exibido um determinado texto esttico em


um Web Form. O texto a ser exibido configurado na propriedade Text, que
tambm pode conter uma declarao HTML.
O controle TextBox usado para entrada de dados e pode assumir trs
diferentes formatos:

54

E-Commerce
com Delphi e ASP.NET

Entrada simples dados (padro);


Entrada de senhas;
Entra de textos com mltiplas linhas;
Para alterar o comportamento anterior, use a propriedade TextMode do
controle, que pode ser SingleLine, MultiLine ou Password (use um para cada
TextBox).
A propriedade Columns do TextBox o tamanho horizontal do controle em
caracteres. MaxLenght especifica o tamanho mximo em caracteres. Rows indica
o tamanho vertical em linhas quando o controle configurado como MultiLine.
Wrap indica se o texto deve ser quebrado quando em modo MultiLine.
AutoPostBack uma importante propriedade disponvel na maioria
dos controles do ASP.NET. Ela indica se o controle ir disparar um evento
imediatamente aps a sua ocorrncia ou somente quando o formulrio for
submetido. Configure essa propriedade para True em todos os TextBoxes.
Temos um nico manipulador para o evento TextChanged dos trs TextBoxes,
que mostra na Label o texto informado em caixa alta.
procedure TWebForm1.TextBox1_TextChanged(sender: System.Object; e:
System.EventArgs);
begin
Label1.Text := (Sender as TextBox).Text.ToUpper;
end;

Dica:
Para apontar os trs manipuladores para o mesmo mtodo, adicione
normalmente o evento no primeiro controle, dando um duplo clique na rea
branca ao lado do nome do evento. Para os demais, selecione o evento j
definido ao invs de dar o duplo clique.

Figura 3. Usando os controles bsicos do ASP.NET

Botes: Button, LinkButton e ImageButton


No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

55

E-Commerce
com Delphi e ASP.NET

Figura 4. Criando uma aplicao ASP.NET

Os trs tipos de botes disponveis no ASP.NET so Button, LinkButton e


ImageButton (coloque um de cada tipo no formulrio). Todos disparam um
submit ao servidor quando clicados. Utilize o evento Click para inserir um
manipulador no servidor em resposta ao evento de Click.
Como alternativa, voc pode usar o evento Command para fornecer um
manipulador no servidor em resposta ao Click no controle. Para esse evento,
passado o valor de CommandName e CommandArgument do controle.
A propriedade CausesValidation indica se o um Click no controle deve disparar
as rotinas para validao da pgina, vistas a seguir.
Use a propriedade Text do Button para configurar seu texto. Para o
ImageButton, use a propriedade ImageURL para indicar a imagem usada no
boto. AlternateText indica o texto que deve ser mostrado caso a imagem no
possa ser exibida no browser.
O LinkButton semelhante aos botes anteriores, porm ele renderizado
com um link HTML que pode submeter os dados para o formulrio.
As Figuras 5 e 6 mostram um exemplo de utilizao dos botes.

Figura 5. Usando botes em pginas ASP.NET

Figura 6. Aplicao em execuo

56

E-Commerce
com Delphi e ASP.NET

RadioButton e RadioButtonList
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 7. Criando uma aplicao ASP.NET

Coloque quatro RadioButtons no formulrio, quatro Labels e um Button no


formulrio, ajustando suas propriedades Text e posicionamento conforme
mostrado na Figura 8.

Figura 8. Formulrio principal da aplicao

RadioButtons representam uma lista de opes mutuamente exclusivas.


Somente um tem do grupo pode estar selecionado. O RadioButtonList facilita
a exibio de vrios tens, que possam vir de uma tabela do banco de dados,
por exemplo.
Use a propriedade Text do RadioButton para indicar o seu texto. Use GroupName
para agrupar vrios RadioButtons relacionados. Quando voc selecionar um

57

E-Commerce
com Delphi e ASP.NET

item nele, todos os demais RadioButtons que pertencem ao mesmo grupo


sero desmarcados. A propriedade Checked indica se o item est marcado.
A Figura 9 mostra o formulrio em execuo. Os RadioButtons devem
ser organizados em dois grupos, Comida e Esporte (use a propriedade
GroupName). Ao clicar no boto, mostramos os itens selecionados em dois
Labels.

Figura 9. Usando RadioButtons

Aqui est o cdigo que deve ser colocado no Click do boto:


procedure TWebForm1.Button1_Click(sender: System.Object; e: System.
EventArgs);
begin
if RadioButton1.Checked then
Label1.Text := RadioButton1.Text
else
if RadioButton2.Checked then
Label1.Text := RadioButton2.Text;
if RadioButton3.Checked then
Label2.Text := RadioButton3.Text
else
if RadioButton4.Checked then
Label2.Text := RadioButton4.Text;
Label1.Text := Comida preferida: + Label1.Text ;
Label2.Text := Esporte preferida: + Label2.Text ;
end;

RadioButtonList
Vamos fazer um exemplo com o RadioButtonList. O RadioButtonList permite
que voc adicione os tens diretamente em sua propriedade Items, ou que
traga os valores a partir de uma fonte de dados.
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

58

E-Commerce
com Delphi e ASP.NET

Figura 10. Criando uma aplicao ASP.NET

Coloque um Button e um RadioButtonList no formulrio e adicione alguns


tens nele, usando a propriedade Items. Observe que para cada tem, voc
pode fornecer um texto para ser mostrado (Text) e o valor que retornado ao
servidor (Value). No exemplo, coloquei algumas cores (Figura 11).

Figura 11. tens do RadioButtonList

Para recuperar o valor selecionado servidor, voc pode usar o seguinte:


SelectedItem - o tem selecionado, com o texto completo;
SelectedValue - o valor especificado para o tem;
SelectedIndex - o ndice do tem selecionado (inicia em 0);
O evento SelectedIndexChanged disparado quando um tem selecionado.
Se quiser que o mesmo seja executado imediatamente, lembre-se configurar
o AutoPostBack = True.
A Figura 12 mostra o exemplo em execuo usando o RadioButtonList. Para
cada cor (Azul, Verde e Laranja), adicionei um valor (Value) de retorno (A,V e L).
No evento Click do boto configuro a cor de fundo do mesmo com base no
tem selecionado (SelectedValue), exibindo ainda em seu Text o texto e o ndice
do tem corrente.
procedure TWebForm2.Button1_Click(sender: System.Object; e: System.
EventArgs);
begin
Button1.Text := RadioButtonList1.SelectedItem.ToString +
- ndice = + RadioButtonList1.SelectedIndex.ToString;
if RadioButtonList1.SelectedValue = A then
Button1.BackColor := Color.Blue else
if RadioButtonList1.SelectedValue = V then
Button1.BackColor := Color.Green else
if RadioButtonList1.SelectedValue = L then
Button1.BackColor := Color.Orange else
Button1.Text := Por favor selecione uma cor;
end;

59

E-Commerce
com Delphi e ASP.NET

Figura 12. Usando RadioButtonList

As seguintes propriedades podem ser configuradas para ajustar o layout do


controle (Figura 13):
RepeaterColumns - nmero de colunas;
RepeaterDirection direo dos tens, vertical ou horizontal;
RepeaterLayout como so mostrados os tens, em tabela ou flow.

Figura 13. Personalizando o RadioButtonList

Nota:
As propriedades DataSource, DataMember, DataTextField, DatatTextFormat e
DataValueField so discutidas mais adiante, quando estudarmos DataBindings.

CheckBox
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

60

E-Commerce
com Delphi e ASP.NET

Figura 14. Criando uma aplicao ASP.NET

No formulrio principal, coloque um CheckBox e um TextBox, ajustando os


textos e posicionamento conforme mostrado na Figura 15.

Figura 15. Formulrio principal da aplicao

O controle CheckBox semelhante ao RadioButton, exceto pelo fato que


podemos ter vrios controles desse tipo marcados em um formulrio. Sua
propriedade Checked indica se foi marcado ou no. Text indica o texto do
controle. O evento CheckedChanged disparado quando o usurio altera a
seleo.
No exemplo configuramos o TextBox como tendo Visible = False e o
AutoPostBack do CheckBox como True. No evento CheckedChanged do controle
mostramos ou no o TextBox de acordo com a escolha do usurio:
procedure TWebForm1.CheckBox1_CheckedChanged(sender: System.Object; e:
System.EventArgs);
begin
TextBox1.Visible := CheckBox1.Checked;
end;

Figura 16. Usando um CheckBox

61

E-Commerce
com Delphi e ASP.NET

CheckBoxList
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 17. Criando uma aplicao ASP.NET

Coloque um CheckBoxList e uma Label no formulrio.

Figura 18. Formulrio principal da aplicao

O controle CheckBoxList permite exibir uma lista de opes para serem


marcadas. Usando um DataSouce, os dados podem vir diretamente uma tabela
do banco de dados, por exemplo.
A Figura 18 mostra o exemplo de uso do controle. Para variar um pouco, ao
invs de adicionar os tens estaticamente, na propriedade Items, adicionei os
valores em tempo de execuo, no Page_Load:
procedure TWebForm1.Page_Load(sender: System.Object; e: System.
EventArgs);
begin
if not (IsPostBack) then begin
CheckBoxList1.Items.Add(ListItem.Create(Bold,B));
CheckBoxList1.Items.Add(ListItem.Create(Underlinee,U));
CheckBoxList1.Items.Add(ListItem.Create(Italic,I));
CheckBoxList1.Items.Add(ListItem.Create(StrikeOut,S));
end;
end;

62

E-Commerce
com Delphi e ASP.NET

No evento SelectedIndexChanged do controle configuramos a formatao


de uma Label conforme a escolha do usurio (lembre-se de configurar o
AutoPostBack para True):
procedure TWebForm1.CheckBoxList1_SelectedIndexChanged(sender: System.
Object;e: System.EventArgs);
begin
Label1.Font.Bold := CheckBoxList1.Items[0].Selected;
Label1.Font.Underline := CheckBoxList1.Items[1].Selected;
Label1.Font.Italic := CheckBoxList1.Items[2].Selected;
Label1.Font.Strikeout := CheckBoxList1.Items[3].Selected;
end;

Figura 19. Usando um CheckBoxList

CheckBoxList tem as mesmas propriedades do RadioButtonList para ajuste de


layout, como RepeaterColumns, RepeaterDirection e RepeaterLayout.

DropDownList
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

63

E-Commerce
com Delphi e ASP.NET

Figura 20. Criando uma aplicao ASP.NET

O DropDownList tem papel semelhante ao ComboBox do Windows Forms.


Pode fazer o mesmo papel de um RadioButtonList, porm ocupando bem
menos espao em tela. Adicione os tens diretamente em sua propriedade
Items, ou que traga os valores a partir de uma fonte de dados. Neste exemplo,
coloque o controle no formulrio e adicione alguns tens nele. Observe que
para cada tem, voc pode fornecer um texto para ser mostrado (Text) e o valor
que retornado ao servidor (Value).
Para recuperar o valor selecionado servidor, voc pode usar o seguinte:
SelectedItem - o tem selecionado, com o texto completo;
SelectedValue - o valor especificado para o tem;
SelectedIndex - o ndice do tem selecionado (inicia em 0);
O evento SelectedIndexChanged disparado quando um tem selecionado.
Se quiser que o mesmo seja executado imediatamente, lembre-se configurar
o AutoPostBack = True.
As propriedades DataSource, DataMember, DataTextField, DatatTextFormat e
DataValueField so discutidas mais adiante, quando estudarmos DataBindings.
A Figura 21 mostra um exemplo de utilizao do controle. Aqui colocamos
trs DropDownList com AutoPostBack = True e um Label.

Figura 21. Formulrio principal da aplicao

64

E-Commerce
com Delphi e ASP.NET

No Page_Load carregamos os controles:


procedure TWebForm1.Page_Load(sender: System.Object; e: System.
EventArgs);
var
i: integer;
begin
if not (IsPostBack) then begin
for i := 1 to 31 do
DropDownList1.Items.Add(i.ToString);
for i := 1 to 12 do
DropDownList2.Items.Add(i.ToString);
for i := 1800 to 2005 do
DropDownList3.Items.Add(i.ToString);
end;
end;

Apontamos o evento SelectedIndexChanged de todos os controles para o


mesmo manipulador:
procedure TWebForm1.DropDownList2_SelectedIndexChanged(sender: System.
Object;
e: System.EventArgs);
var
data: DateTime;
dif: TimeSpan;
d,m,a: integer;
begin
d := Convert.ToInt32(DropDownList1.SelectedItem.Text);
m := Convert.ToInt32(DropDownList2.SelectedItem.Text);
a := Convert.ToInt32(DropDownList3.SelectedItem.Text);
data := DateTime.Create(a,m,d);
dif := DateTime.Today - data;
Label1.Text := Voc tem + dif.TotalDays.ToString + dias de vida;
end;

Com isso, a aplicao mostra na Label a quantidade de dias entre hoje e a data
informada.

Figura 22. Usando um DropDownList

ListBox
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

65

E-Commerce
com Delphi e ASP.NET

Figura 23. Criando uma aplicao ASP.NET

O controle ListBox pode ser usado para apresentar uma lista de opes. Suas
propriedades so semelhantes as dos demais controles de seleo, vistos at
aqui. Na propriedade tems indicamos os tens a serem exibidos no controle. A
propriedade Rows indica o nmero de linhas a serem exibidas no controle. As
seguintes propriedades indicam o tem selecionado:
SelectedItem - o tem selecionado, com o texto completo;
SelectedValue - o valor especificado para o tem;
SelectedIndex - o ndice do tem selecionado (inicia em 0);
A Figura 24 mostra um exemplo de uso do controle. Coloquei alguns tens no
primeiro ListBox, usando a propriedade Items.

Figura 24. Formulrio principal da aplicao

Quando o boto clicado, adicionamos o tem selecionado ao segundo


ListBox;
procedure TWebForm1.Button1_Click(sender: System.Object; e: System.
EventArgs);
begin
ListBox2.Items.add(ListBox1.SelectedItem.Text);
end;

Figura 25. Usando um ListBox

66

E-Commerce
com Delphi e ASP.NET

As propriedades DataSource, DataMember, DataTextField, DatatTextFormat e


DataValueField so discutidas mais adiante, quando estudarmos DataBindings.

Image
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 26. Criando uma aplicao ASP.NET

O componente Image usado par exibir imagens em um formulrio aspx.


Sua propriedade ImageUrl indica a imagem que deve ser exibida. AlternateText
indica o texto que deve ser mostrado caso a imagem no possa ser exibida no
browser.
O exemplo da Figura 27 contm dois DropDownListBoxes, um Button e um
Image. O usurio escolha sua data de nascimento e ao clicar no boto exibimos
uma figura representando seu signo.

Figura 27. Formulrio principal da aplicao

67

E-Commerce
com Delphi e ASP.NET

Veja o cdigo para o Page_Load:


procedure TWebForm1.Page_Load(sender: System.Object; e: System.
EventArgs);
var
i: integer;
begin
if not (IsPostBack) then begin
for i := 1 to 31 do
DropDownList1.Items.Add(i.ToString);
for i := 1 to 12 do
DropDownList2.Items.Add(i.ToString);
end;
end;

O manipulador para o evento Click do boto mostrado a seguir (para facilitar,


inclui o teste para apenas dois signos, basta copiar o cdigo do teste a ajustar
as datas para testar os demais):
procedure TWebForm1.Button1_Click(sender: System.Object; e: System.
EventArgs);
var
Dia, Mes : integer;
Signo : string;
begin
Dia := Convert.ToInt32(DropDownList1.SelectedItem.Text);
Mes := Convert.ToInt32(DropDownList2.SelectedItem.Text);
if ((mes=3) and (dia>=21)) or ((mes=4) and (dia<=20)) then
Signo := ries;
if ((mes=4) and (dia>=21)) or ((mes=5) and (dia<=20)) then
Signo := Touro;
// Inclua o teste para os demais signos aqui, semelhante ao teste
// anterior
Label1.Text := O seu signo + Signo;
Image1.ImageUrl := System.String.Format({0}.bmp,[Signo]);
end;

Para testar o exemplo, voc deve gravar no mesmo diretrio da aplicao


uma imagem que represente cada signo, mantendo a nomenclatura usada no
cdigo (Touro.bmp,ries.bmp etc.).

Figura 28. Usando o controle Image

68

E-Commerce
com Delphi e ASP.NET

Panel
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other.
A seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web
Application (veja a figura a seguir). Lembre-se de dar um nome (Name) para
aplicao na janela que aparecer a seguir (New ASP.NET Web Application).

Figura 29. Criando uma aplicao ASP.NET

O componente Panel serve como um container para outros componentes


colocados no Web Form. O exemplo de Figura 30 contm dois Buttons e dois
Panels. Cada Panel contm controles internos. A propriedade Visible do Panel2
deve ser colocada como False.

Figura 30. Formulrio principal da aplicao

69

E-Commerce
com Delphi e ASP.NET

O cdigo a seguir mostra os manipuladores para os eventos Click de Button1


e Button2:
procedure TWebForm1.Button1_Click(sender:
EventArgs);
begin
Panel2.Visible := True;
Panel1.Visible := False;
end;

System.Object;

e:

System.

procedure TWebForm1.Button2_Click(sender: System.Object; e: System.


EventArgs);
begin
Panel1.Visible := True;
Panel2.Visible := False;
end;

Figura 31. Usando Panels

Calendar
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

Figura 32. Criando uma aplicao ASP.NET

70

E-Commerce
com Delphi e ASP.NET

O componente Calendar permite exibir um calendrio para seleo de datas,


com vrias opes de customizao e layout. Use a propriedade DayHeaderStyle,
DayStyle, NextPrevStyle, OtherMonthDayStyle, SelectDayStyle, SelectorStyle
TitleStyle, TodayDayStyle e WeekendDayStyle para personalizar cada um dos
estilos do calendrio. SelectionMode indica o tipo de seleo feita, que pode
ser dia, semana ou ms.
O exemplo da Figura 33 mostra em um Label a data selecionada no
calendrio.

Figura 33. Formulrio principal da aplicao

Para isso, inserimos o seguinte manipulador no evento SelectionChanged:


procedure TWebForm1.Calendar1_SelectionChanged(sender: System.Object; e:
System.EventArgs);
begin
Label1.Text := Data selecionada: +
Calendar1.SelectedDate.ToString(dd/MM/yyyy);
end;

Figura 34. Usando Calendar

AdRotator
No Delphi 2005, inicie uma nova aplicao clicando em File>New>Other. A
seguir, no tem Delphi for .NET Projects, selecione o tem ASP.NET Web Application
(veja a figura a seguir). Lembre-se de dar um nome (Name) para aplicao na
janela que aparecer a seguir (New ASP.NET Web Application).

71

E-Commerce
com Delphi e ASP.NET

Figura 35. Criando uma aplicao ASP.NET

O componente AdRotator usado para exibir uma banner na pgina. Tem uma
caracterstica especial: permite randomizar uma lista de imagens, cada usurio
que entrar no site ver uma imagem diferente, selecionada randomicamente.
Para ver como o componente funciona, coloque-o no formulrio um
AdRotator.

Figura 36. Formulrio principal da aplicao

Aponte sua propriedade AdvertisementFile para o arquivo imagens.xml, que


mostrado a seguir:
<Advertisements>
<Ad>
<ImageUrl>imagem1.jpg</ImageUrl>
<NavigateUrl>http://www.clubedelphi.net</NavigateUrl>
<AlternateText>ClubeDelphi</AlternateText>
<Keyword>Delphi</Keyword>
</Ad>
<Ad>
<ImageUrl>imagem2.jpg</ImageUrl>
<NavigateUrl>http://www.portalwebmobile.com.br</NavigateUrl>
<AlternateText>Portal WebMobile</AlternateText>
<Keyword>Web Mobile</Keyword>
</Ad>
</Advertisements>

Coloque duas imagens no mesmo diretrio da aplicao, chamadas


respectivamente de imagem1.jpg e imagem2.jpg. Cada vez que o formulrio
exibido, uma imagem randomizada lida a partir do arquivo XML mostrada
(Figura 37).

72

E-Commerce
com Delphi e ASP.NET

Figura 37. AdRotator permite exibir banners na aplicao

Formatao de controles
A maioria dos Web Controls vistos at aqui, possuem propriedades em comum,
que permitem configurar sua aparncia e estilo. Veja a seguir uma lista das
principais propriedades:
Propriedade
AccessKey
BackColor
BorderStyle
BorderWidth
Font-Bold
Font-Italic
Font-Name
Font-Names
Font-Overline
Font-Size
Font-StrikeOut
Font-Underline
ForeColor
Height
TabIndex
ToolTip
Width

Descrio
Indica a tecla de atalho para selecionar um controle (Alt + AccessKey)
Cor de fundo do controle
Estilo da borda do controle. Possveis valores: Dashed, Dotted,
Double, Groove, Inset, None, NotSet, Outset, Ridge e Solid.
Tamanho da borda em pixels
Se o texto do controle mostrado em negrito
Se o texto do controle mostrado em itlico
Nome da fonte usada no controle
Lista de nomes de fontes possvels para serem usadas no controle
Coloca uma linha sobre o texto
Tamanho em pixels do texto do controle
Mostra o texto riscado
Sublinha o texto do controle
Cor de frente do controle
Altura do controle, em pixels
Ordem de tabulao do controle
Hint do controle, quando o mouse repousa sobre ele
Tamanho do controle, em pixels

A Figura 38 mostra um exemplo de utilizao dessas propriedades em alguns


controles:

Figura 38. Formatando controles

73

E-Commerce
com Delphi e ASP.NET

Usando estilos
Para usar estilos em Web Controls, basta definir o nome da classe CSS para a
propriedade CssClass. Para fazer um teste, em uma nova aplicao, coloque um
Label, um TextBox e um ListBox. No arquivo aspx, defina o seguinte estilo, dentro
do elemente Head:
<style>
.TestStyle
{
FONT: 12pt tahoma; COLOR: blue
}
</style>

Agora, basta digitar TestStyle na propriedade CssClass dos controles para


que eles usem o estilo definido (Figura 39).

Figura 39. Usando estilos CSS

74

E-Commerce
com Delphi e ASP.NET

Exerccio resolvido
Crie uma calculadora usando controles ASP.NET. Utilize Buttons para os nmeros e
ImageButtons para as operaes (coloque algumas imagens personalizadas para
soma, subtrao etc.). O resultado das operaes deve ser exibido em um TextBox.
Utilize um HTML Table para organizar os controles, em Flow Layout. Implemente
as funcionalidades de memria. Quando o usurio apertar em um boto para
Gravar em Memria, gravar o valor atual do textBox em um cookie. Quando ele
clicar em Recuperar Memria, obter o nmero do cookie para ser utilizado na
operao corrente. As funcionalidades da calculadora devem ser implementadas
em um classe em um arquivo a parte.
A soluo para o exerccio pode ser encontrada nos apndices do curso.

75

Вам также может понравиться