the club - megazine · desenvolvimento de aplicativos .net c# para dispositivos móveis. para...

32
julho 2009

Upload: duongdat

Post on 08-Feb-2019

224 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009

Page 2: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009

Page 3: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 03

Delphi

Dicas Delphi Desafio The Club

InfoNews

.NET

.NET

Delphi

Delphi 2009 com MYSQL

13Autor: Luis Alexandre de Oliveria

índiceCriando e utilizando DLLs no Delphi 2009.

Editorial Delphi

06Passamos do meio do ano, e sabemos que para terminar este “restinho” de ano que falta vai ser rápido... 04

A Higiene do Computador

05Criptografia com InterBase - Seu banco de dados 100% protegido.Parte I 09

Desenvolvimento de aplicações .NET C# para dispositivos móveis18

Desvendando o GridView

24- Trazer primeiro dia útil do mês- Mudar data e hora do sistema- Mostra hint em um Panel 28

Caça-Palavras

30LegendaInicianteIntermediárioAvançado

Se você é capaz de sorrir quando tudo deu errado, é porque já descobriu em quem pôr a culpa.

Momento de Reflexão

Autor: Antonio Spitalleri

Autor: Felipe Santos Autor: Adilson Jr.

Autor: Luciano Pimenta

Autor: Vitor Manuel Rodrigues

Page 4: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200904

Bem-vindo

Delphi é marca registrada da Borland International, as demais marcas citadas são registradas

pelos seus respectivos proprietários.

Marcos César Silva - Editor [email protected]

Passamos do meio do ano, e sabemos que para terminar este “resti-nho” de ano que falta vai ser rápido, e tempestade da crise que no início do ano estava se abatendo sobre todos nós, já percebemos que se transformou em uma brisa para alguns seguimentos de ne-gócio, eu disse alguns! Assim já vemos empresas voltando a investir

em treinamentos e consultoria, a lição que estamos tomando é que mesmo em tempos difíceis devemos sempre aumentar e aperfeiçoar nossos conhecimentos. Uma boa leitura sempre será útil, e estamos nos esforçando ao máximo para levar até vocês sempre o melhor conteúdo possível.

Neste mês Vitor M. Rodrigues com seu artigo de abertura “A higiene do com-putador”, dá dicas simples, mas não menos importante de como realizar uma limpeza adequada no seu computador, alguns devem estar se questionando o porquê deste artigo, pois foge do tema de programação. Acredito que alguns assuntos mesmo que não esteja ligada diretamente a programação, mas que estejam relacionados à nossa área deve ser abordado nem que seja em um artigo curto como é este o caso, tanto por curiosidade, como para abrir a visão sobre informática principalmente pelos iniciantes da profissão. Também acredito que uma revista extremamente técnica pode se tornar cansativa, e uma leitura diferenciada para relaxar não irá fazer mal algum.

Temos de volta este mês o nosso consultor técnico Antonio Spitaleri Neto abordando a criação e utilização de dlls no artigo “Criando e utilizando Dll’s no Delphi 2009”, também Luiz Alexandre de Oliveira, com seu artigo “Delphi 2009 com MySQL”, onde mostra em exemplo como criar uma aplicação conectando-se com o banco de dados MySQL.

Dando continuidade na sua linha de artigos sobre banco de dados Felipe Santos, escreveu para nos este mês um assunto muito interessante que é a criptografia com banco de dados, mas precisamente com Interbase no artigo “Criptografia com Interbase – Seu banco de Dados 100% protegido Parte I”.

Devido ao salto no número de celulares e a previsão de seu aumento nos próximos anos, Adilson Jr observou o potencial de negócio no desenvolvimento de aplicações para estes dispositivos. Assim num artigo imperdível ele aborda o desenvolvimento de aplicativos .Net C# para dispositivos móveis.

Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid-View no artigo “Desvendando o Gridview”, onde mostra como usar e dá dicas importantes da utilização deste que é sem dúvida um dos componentes mais usados em ASP.NET.

Desejo a todos uma boa leitura e uma boa aprendizagem.

Av. Profº Celso Ferreira da Silva, 190 Jd. Europa - Avaré - SP - CEP 18.707-150

Informações: (14) 3732-1529 Suporte: (14) 3733-1588

Internethttp://www.theclub.com.br

Cadastro: [email protected]: [email protected] Informações: [email protected] Cadastro: theclub_cadastro

Skype Suporte: theclub_linha1 theclub_linha2 theclub_linha3

Copyright The Club Megazine 2009

Diretor TécnicoMarcos César Silva

Diagramação e ArteVitor M. Rodrigues

RevisãoTassiane Fileto

ColunistasAdilson Jr.

Antonio Spitaleri NetoFelipe Santos

Luciano PimentaLuis Alexandre de OliveiraMarco Antonio Armando

Vitor M. Rodrigues

Impressão e acabamento:GRIL - Gráfica e Editora

Taquarituba-SP - Tel. (14) 3762-1345

ReproduçãoA utilização, reprodução, apropriação, armazenamento em banco de dados, sob qualquer forma ou meio, de textos, fotos e outras criações intelectuais em cada publicação da revista “The Club Megazine” são terminantemente proibidos sem autorização escrita dos titulares dos direitos autorais.

Page 5: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 05

InfoNews

A higiene do computador

Page 6: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200906

Delphi

Criando e utilizando DLL’s no Delphi 2009

Quando utilizamos a plataforma de de-senvolvimento Delphi, em alguns momentos nos deparamos com o seguinte problema: Criamos uma determinada função em um aplicativo e necessitamos utilizar a mesma função em um aplicativo diferente, utilize este ou não a linguagem Object Pascal do Delphi.

Nessas situações se faz necessá-ria a exportação dessa função a ser utilizada por aplicativos diferentes. É claro que poderí-amos criar novamente a mesma

função nos aplicativos que necessitassem da mes-ma, porém essa medida além de ir contra as boas práticas de programação acrescentaria um “peso” desnecessário aos aplicativos, já que a função seria incorporada ao código fonte.

A criação e uso de DLL’s vem de encontro a esse problema, sendo uma das formas de expor-tação de funções mais dinâmicas que existe. DLL’s são arquivos com funções que são ligadas dinami-camente ao código fonte dos projetos que as utili-zam. Nesse ponto existe uma grande semelhança entre executáveis e DLL’s, ambos podem conter um conjunto de funções que podem ser utilizadas por outros aplicativos. Porém executáveis criam uma pilha, um espaço reservado de memória para eles e DLL’s utilizam a pilha do aplicativo chamador.

Quando dois aplicativos utilizam a mesma função proveniente de uma DLL, ambos os apli-cativos possuem o mapeamento da DLL, porém a DLL é carregada em memória apenas uma vez. Essa característica permite uma grande economia da memória disponível do computador.

O desenvolvedor que trabalha com Delphi tanto pode criar DLL’s para serem utilizadas por aplicativos Delphi como para serem utilizadas por aplicativos escritos em outras linguagens. Isso pro-porciona uma mobilidade para as funções comuns à vários projetos.

Tipos de Dados

O processo de criação de DLL’s em Delphi é relativamente simples, porém é necessário que conheçamos tipos de dados Windows que sejam reconhecidos entre aplicativos desenvolvidos em várias linguagens.

É recomendado o uso dos chamados tipos “pri-mitivos” que seriam: integer, pchar (para strings) e Double, o uso desses tipos de dados evita possíveis problemas de compatibilidade entre diferentes linguagens.

Caso a DLL só for ser utilizada em aplicativos Delphi, então o uso dos tipos de dados comuns do Delphi, como string, extended, boolean é possível e pode ser realizado sem preocupações quanto à compatibilidade.

Convenções de chamada de funções

Outro ponto importante a ser considerado no desenvolvimento de DLL’s é a forma como as funções e seus parâmetros serão chamados, essa forma pode ser controlada pelo desenvolvedor Delphi através das convenções de chamada.

O Delphi 2009 utiliza as seguintes convenções de chamada de funções: safecall, stdcall, cdecl, pascal e register.

Safecall, stdcall e cdecl fazem com que os parâmetros da função sejam avaliados da direita para a esquerda.

Pascal e register avaliam os parâmetros da esquerda para a direita. Se nenhuma convenção de chamada for especificada na declaração da função, a forma register será utilizada. Lembrando que register é uma forma mais insegura de chamada de funções já que utiliza os registradores da CPU e não a pilha para armazenar os parâmetros.

As funções provenientes da API do Windows utilizam stdcall e safecall como convenções de chamada, já que dessa forma os parâmetros são armazenados na pilha que é a área gerenciada de memória dos aplicativos que vierem a utilizar

as funções.Existem ainda as convenções de chamada near,

far e export que eram utilizadas em ambientes de programação 16 bits e são mantidas no Delphi 2009 apenas para compatibilidade.

Criando a DLL exemplo

Vamos agora partir para a prática e criar uma DLL simples com funções para cálculo de juros compostos.

Abra o Delphi 2009 e selecione a opção File-> New -> Other -> Delphi Projects -> DLL Wizard. Será criado o código esqueleto de nossa DLL como mostrado a seguir:

Veja o Código 01.

O longo trecho comentado fala justamente sobre o cuidado que devemos ter com os tipos de dados a serem utilizados na DLL.

Salve o projeto com o nome de juros, esse será o nome que a DLL irá receber quando construída.

Na seção uses inclua a unit Math que contém funções matemáticas que nos serão úteis.

Criaremos a seguir três funções para o cálculo de juros compostos: fatorjuros, que será responsá-vel por calcular o fator de aumento, montante que fará o cálculo do valor do capital acrescido dos juros e valorparcela que calculará o valor de cada parcela de acordo com o montante.

Lembrando que as três funções devem ser escritas após a diretiva {$R *.res} da DLL.

Função fatorjuros:Aqui faremos o cálculo do fator de aumento

utilizado na totalização do montante através do valor mensal dos juros e do número de parcelas passados por parâmetro.

Veja o Código 02.

Page 7: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 07

library Project1{ Important note about DLL memory management: ShareMem must be the first unit in your library’s USES clause AND your project’s (select Project-View Source) USES clause if your DLL exports any procedures or functions that pass strings as parameters or function results. This applies to all strings passed to and from your DLL--even those that are nested in records and classes. ShareMem is the interface unit to the BORLNDMM.DLL shared memory manager, which must be deployed along with your DLL. To avoid using BORLNDMM.DLL, pass string information using PChar or ShortString parameters. }uses SysUtils, Classes;{$R *.res}beginend.

function fatorjuros(valorjuros,numeroparcelas:double):double;var valordecimal:double; fatoraumento:double;begin valordecimal:=valorjuros/100; fatoraumento:=1+valordecimal; Result:=Power(fatoraumento,numeroparcelas);end;

Function montante(capital,valorjuros,numeroparcelas:double):Double;begin Result:=capital*fatorjuros(valorjuros,numeroparcelas);end;

Function montante(capital,valorjuros,numeroparcelas:double):Double;begin Result:=capital*fatorjuros(valorjuros,numeroparcelas);end;

Código 01.

Código 02.

Código 03.

Código 04.

Função montante:Essa função realiza a totalização do montante

multiplicando o capital passado como parâmetro e o retorno da função fatorjuros.

Veja o Código 03.

Função valorparcela:Essa função utiliza o retorno da função mon-

tante e divide-o pelo número de parcelas, obtendo assim o valor de cada parcela.

Veja o Código 04.

Após a implementação das funções precisa-mos declarar na claúsula exports de nossa DLL as fun ções que acabamos de criar. Essa declaração é muito simples, basta inseri-la antes do Begin contido na DLL conforme segue:

exportsfatorjuros,montante,valorparcela;

Iremos agora criar um pequeno aplicativo exemplo para utilizar nossa DLL e suas funções.

Criando o aplicativo de exemplo

Inicie um novo projeto em Delphi selecionando File -> New -> VCL forms application.

Começaremos fazendo a declaração das fun-ções contidas em nossa DLL e que serão utilizadas em nosso aplicativo. Abra a unit do formulário da aplicação e após a cláusula var e antes de imple-mentation faça a declaração como segue:

Function fatorjuros(valorjuros,numeroparcelas:double):Double;external ‘juros.dll’;

Function montante(capital,valorjuros,numeroparcelas:double):Double;external ‘juros.dll’;

Function valorparcela(capital,valorjuros,numeroparcelas:double):Double;external ‘juros.dll’;

Observe a diretiva external, que indica que as funções não estão contidas em uma unit do projeto ou do Delphi, e após a diretiva o nome da DLL que criamos a pouco.

Monte o layout de nosso aplicativo conforme a figura a seguir:

Page 8: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200908

procedure TForm1.Button1Click(Sender: TObject);var capital,valorjuros,parcelas:double;begin capital:=StrToFloat(edtcapital.Text); valorjuros:=StrToFloat(edjuros.Text); parcelas:=StrToFloat(edtparcelas.Text); edtmontante.Text:=FormatFloat(‘0.00’, montante(capital,valorjuros,parcelas)); edtvalorparcela.Text:=FormatFloat(‘0.00’, valorparcela(capital,valorjuros,parcelas));end;

Sobre o autor

Antonio Spitaleri Neto

Consultor Técnico The club

[email protected] Imagem 01.

Veja a Imagem 01.

No evento onclick do botão “calcular” faça:

Veja o Código 05.

Utilizaremos formatfloat para exibir o resul-tado para limitar em duas as casas decimais da exibição do resultado. Teste o aplicativo e salve as alterações.

Download do Exemplo:http://www.theclub.com.br/revista/rev0709/calcfin.rar

Conclusão

Vimos nesse artigo que a criação e uso de DLL’s em Delphi 2009, além de ser algo relativamente simples, pode ser de grande ajuda para quem tem funções que precisam ser utilizadas entre vários aplicativos, mesmo que esses tenham sido desenvolvidos em linguagens distintas da Object Pascal do Delphi 2009. Espero que tenham gostado e até a próxima!

Page 9: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 09

Olá pessoal,

No artigo desse mês, vamos apresentar uma funcionalidade incorporada na versão 2009 do banco de dados InterBase: crip-tografia. Sim, um recurso de alto nível que oferece de forma muito simples, um poder de segurança extremamente confiável. Ima-ginem poder oferecer, sem utilizar qualquer ferramenta de terceiros, recursos para cripto-grafar informações vitais de seus bancos de dados? É uma solução perfeita para todos os tipos de clientes, do pequeno ao grande, sem nenhum custo adicional em relação ao valor investido no banco de dados.

Nessa edição, iremos detalhar sobre o assunto, explicando todas as formas de uso. Na sequência, em nosso próximo artigo, vol-taremos com a Parte II do assunto, mostrando na prática como criar e usar a criptografia. Mas, mais importante do que simplesmente implementar, é sim entender o conceito da criptografia e assim planejar adequadamente a aplicação do recurso. Vamos entender quais são os pré-requisitos e quais as formas de uso. Vamos, enfim, aprender a tornar nosso banco de dados 100% seguro.

CRIPTOGRAFIA COM INTERBASESEU BANCO DE DADOS

100% PROTEGIDO

PARTE I

CRIPTOGRAFIA NO INTERBASE

A cada nova versão do InterBase, o produto vem sendo aprimorado com novos recursos, princi-palmente na questão de segurança e performance. Em sua versão 2009, a novidade é a criptografia. E a grande questão era como poder oferecer o máximo de segurança de forma simples e rápida. E o resultado final não poderia ter sido melhor. No InterBase SMP 2009 é possível implementar quatro níveis de criptografia que irão fechar todos os pontos críticos de segurança e possibilitar a nós desenvolvedores oferecer novos serviços e soluções a nossos clientes.

Os níveis de criptografia do InterBase são: • Database Level Cript, • Column Level Cript, • Over the Wire Cript e • Backup Cript. Detalharemos na sequência cada um desses

níveis, entendendo como cada um funciona, mas antes vamos ver o que é necessário para poder trabalhar com o recurso.

PRÉ-REQUISITOS

Para podermos utilizar os recursos de crip-

tografia do InterBase é preciso, além de utilizar a versão 2009 do produto, ter habilitado em nossos bancos de dados a opção de Embedded User Au-thetication, ou simplesmente EUA. Vamos entender como essa opção funciona.

Hoje, o tradicional usuário administrativo dos bancos de dados InterBase/Firebird é o famoso SYSDBA, com a também famosa senha MASTERKEY. Pois bem, para esse usuário se autenticar ao banco, o InterBase utiliza um banco de dados administra-tivo chamado ADMIN.IB (security.fdb no Firebird) que está localizado no diretório de instalação do produto. Uma boa prática utilizada é a troca da senha padrão do usuário SYSDBA. Mas um detalhe acaba sendo despercebido às vezes: essa senha é alterada no banco de dados ADMIN.IB. Com isso, se você copiar seu banco de dados de produção para outro servidor InterBase/Firebird, a senha do seu usuário SYSDBA volta a ser a padrão, pois nesse novo servidor, a senha não foi alterada no banco de dados administrativo.

Para resolver esse problema, o InterBase, des-de sua versão 7.5, utiliza a opção de autenticação embarcada – EUA. Quando ativamos esse parâme-tro em nossos bancos de dados, o InterBase passa a gravar as senhas dos usuários do banco, inclusive do SYSDBA, dentro do próprio arquivo gdb. Assim, se movermos nosso banco de dados para outro servidor as senhas alteradas serão mantidas, pois

Page 10: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200910

os usuários estão sendo autenticados no próprio arquivo.

Somente com esse recurso, nós já garantimos uma segurança muito interessante. E essa ativação passa a ser pré-requisito se desejarmos utilizar a criptografia com o InterBase.

Para ativar essa opção, podemos utilizar o utilitário IBConsole, acessando as propriedade do banco de dados, conforme a Imagem 1 abaixo:

Veja a Imagem 1

Poderíamos abordar muito mais sobre o assun-to de Embbeded User Authetication, mas vamos deixar para outro artigo. Por hora basta entender que, com esse parâmetro ativo, os recursos de crip-tografia já serão automaticamente disponibilizados para uso. Vamos conhecer então o primeiro nível de criptografia do InterBase.

DATABASE LEVEL CRIPT

Poucas pessoas sabem, mas se tentarmos abrir um banco de dados com algum utilitário de edição de texto, como o bloco de notas, por exemplo, muitas informações se encontram legíveis dentro do arquivo. A Imagem 2 abaixo mostra o banco de dados de exemplo employee.gdb aberto no bloco de notas:

Imagem 2

Veja que é possível notar informações como nomes de objetos (tabelas, domínios, stored proce-dures, triggers, views, generators, etc.), nomes de tabelas de sistemas e até mesmo dados de registros de colunas das tabelas. É claro que essa informação é apresentada de forma solta e necessita de um conhecimento sobre a estrutura do banco de dados para poder ser identificada de forma coerente. Mas essa é uma grande falha de segurança que pode ser evitada utilizando o primeiro nível de criptografia do InterBase: Database Level Crypt. Com o Data-base Level Crypt nós identificamos e geramos uma chave de criptografia que irá mascarar o arquivo físico do banco de dados. Além disso, é possível determinar que um banco de dados só poderá ser acessado a partir do servidor onde a criptográfica foi criada, impedindo cópias não desejadas do ar-quivo. A Imagem 3 abaixo mostra como o mesmo arquivo de exemplo – employee.gdb – é exibido após ser criptografado:

Imagem 3

Para criptografar o banco de dados, o mesmo deve já estar com a opção de Embedded User Au-

Imagem 1

Imagem 2

Imagem 3

Page 11: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 11

thentication ativa. Assim, pelo utilitário IBConsole, ao clicar com o botão direito do mouse sobre o banco de dados, uma opção Encrypt Database será exibida. Essa opção abrirá um wizard com um passo a passo simples de como implementar o recurso, conforme detalharemos em nosso próximo artigo.

Basicamente, o que o InterBase faz é criar um novo usuário administrativo de sistema – o usuário SYSDSO (Database Security Owner). Esse usuário, que pode ou não ser administrado pelo próprio SYSDBA, será o responsável pela criação e manu-tenção das chaves de criptografia do banco. Uma vez criadas as chaves, o InterBase cria também uma senha de criptografia de sistema (SEP), que será usada pelo serviço InterBase para levantar cone-xões em um banco de dados criptografado. Assim, com a chave criada pelo SYSDSO mais senha SEP, o arquivo do banco de dados é criptografado.

E o mais importante: esse processo pode ser executado mesmo com o banco de dados já populado, sem que haja perdas significativas de performance com seu uso.

COLUMN LEVEL CRIPT

Agora que o banco de dados está criptografa-do fisicamente, podemos implementar a próxima etapa de segurança: o Column Level Cript. Com esse nível de criptografia é possível proteger colu-nas e tabelas de nosso banco de dados. Exemplo: podemos criptografar uma coluna que contenha informações importantes, que não podem ser aces-sadas por todos os usuários. Assim, se o usuário tentar acessar, gerar um Select sobre essa coluna e esse não tiver privilégios de criptografia sobre a coluna, então o mesmo receberá uma mensagem do InterBase dizendo que ele não tem acesso para descriptografar essa informação.

Com o Column Level Cript é possível:• Criar diversas chaves de criptografia

para criptografar colunas distintas,• Criptografar quantas colunas desejar-

mos, de quantas tabelas quisermos. Lembrando é claro que, se todos os dados forem criptografados, podem sim haver perca de performance,

• Designar quais usuários ou roles podem ou não acessar colunas criptografadas,

• Mascarar uma coluna criptografada com um valor fixo que pode ser exibido aos usuários sem privilégios.

As Imagens 4 e 5 abaixo mostram uma tabela do banco de dados employee.gdb sendo aberta com e sem criptografia:

Veja as imagens 4 e 5.

Reparem que na Imagem 4, as colunas Job_Country e Salary são exibidas normalmente. Já na Imagem 5, essas colunas foram mascaradas com informações pré-definidas pelo usuário SYSDBA. Assim, um usuário que não tenha permissão para descriptografar essas colunas só irá visualizar as informações mascaradas, ao passo que um usuário com privilégios de descriptografia poderá abrir os dados normalmente.

OVER THE WIRE CRIPT

Muito bem, nós já criptografamos o banco de dados, já criptografamos colunas e tabelas. Agora podemos, com o terceiro nível, criptografar a co-municação entre o servidor e os clientes. Baseado nos já conhecidos padrões SSL, o Over-the-Wire Cript permite abrir uma nova porta de comunicação

Imagem 4

Imagem 5

ao serviço InterBase e criptografar os dados que entram e saem por esse canal. Na prática é pos-sível, por exemplo, manter a porta tradicional de comunicação do serviço (3050/tcp) aberta na rede local e criar uma nova porta (definida pelo admi-nistrador) para disponibilizar conexões remotas ou de outras redes. Essa nova porta será criptografada e somente as estações clientes que possuírem chaves específicas poderão levantar conexão com o serviço InterBase. É uma nova forma de pensar, uma nova oportunidade de planejar ambientes seguros sem abrir mão da facilidade de se liberar determinadas redes ou clientes para acessarem normalmente o serviço.

A Imagem 6 abaixo ilustra como é formado o ambiente Over-the-Wire Cript:

Veja a Imagem 6

Page 12: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200912

BACKUP CRIPT

Bom, nenhuma dessas formas apresentadas de criptografia faria sentido se não fosse possível criptografar os arquivos de backup de nossos bancos de dados. Para isso utilizaremos o nível de Backup Cript. Com o Backup Cript, o usuário SYS-DSO cria uma nova chave de criptografia vinculada a uma senha. Assim, quando o usuário SYSDBA for executar o backup do banco de dados, ele indicará essa chave que, por sua vez, irá criptografar o ar-quivo de backup. Quando o usuário for restaurar o arquivo de backup, a senha vinculada à chave de criptografia será solicitada. Sem isso, o backup não poderá ser restaurado.

A Imagem 7 abaixo mostra a tela do IBConsole exigindo as senhas para restauração do banco de dados:

Imagem 7

PADRÕES DE CRIPTOGRAFIA

E para poder utilizar todos esses recursos de criptografia, o InterBase SMP 2009 oferece dois padrões de cifragem de dados: Weak Cript e Strong Crypt:

• Weak Cript – Também conhecido como padrão “fraco”, utiliza o padrão DES (Data Encryp-tion Standard) para gerar as chaves de criptografia do banco de dados. Esse padrão utiliza chaves de 56 bits e pode ser utilizado em qualquer um dos 4 níveis. É um padrão interessante para quem quer começar a utilizar os recursos de criptografia. Oferece boa segurança e ótima performance.

• Strong Cript – Conhecido também como o padrão “forte”, utiliza o padrão AES (Advanced Encryption Standard) para gerar as chaves de crip-tografia. Esse padrão permite o uso de chaves de

Imagem 6

128, 192 ou 256 bits e é o padrão homologado pelo Instituto Nacional de Padrões e Tecnologia do De-partamento de Comércio Norte-Americano (NIST). Esse padrão é ideal para empresas que planejam exportar seus softwares. Para utilizar esse padrão é preciso solicitar uma chave de licença adicional, sem custo, no momento da compra do InterBase. Esse padrão também pode ser aplicado em todos os 4 níveis de criptografia.

CONCLUSÃO

São tantas novidades que esse assunto real-mente merece uma Parte II. Assim espero nessa primeira parte ter despertado o interesse do leitor a conhecer o recurso e aplicar em seus ambientes de teste. Para isso, utilizem a versão Developer Edition do InterBase SMP 2009, disponível gratuitamente para desenvolvedores de sistema. Essa versão permite o uso dos 4 níveis de criptografia: Database Level Cript, Column Level Cript, Over-the-Wire Cript e Backup Cript.

No próximo artigo voltaremos para mostrar com detalhes como aplicar os recursos e tornar nossos bancos de dados 100% protegidos.

Referência:

InterBase 2009 Operations Guide – cap. 5 e 13.

Sobre o autor

Felipe Santos

Felipe Santos é especialista em InterBase. Trabalha com o InterBase há mais de 8 anos, atuando como consultor e instrutor do produto em todo Brasil. Especialista em ambientes críti-cos. Atua e trabalha com os maiores clientes do InterBase no Brasil. Participante ativo na comunidade, com diversos artigos publicados. Participante do grupo de beta testers mundial do produto. Palestrante em eventos como IB Tour, Borcon Conference, CodeRage Latin América, Delphi Developers Day, Linux Day, entre outros. Atualmente trabalhando na área técnica do InterBase na Presence Tecnologia - distribuidora do produto no Brasil.

[email protected]

Page 13: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 13

Neste artigo irei demonstrar como integrar o Delphi 2009 com mySQL, mas especificamente a versão 5.0, como também a utilização do DBExpress. Optei pelo DBEx-press pois nas versões antigas do Delphi a conexão com esse driver era problemática, principalmente no que diz respeito a campos numéricos.

Vou utilizar a ferramenta administrativa SQL Manager 2005 Lite for MYSQL

Antes de tudo segue o script de criação do nosso Banco de dados e da tabela Clientes (Lis-tagem 1)

Veja a Listagem 1

Para não ocorrer um problema na conexão com o Delphi, copie o arquivo libMySQL.dll que se encontra na pasta bin do MySQL e adicione na pasta system do Windows.

Vamos criar uma nova aplicação vcl no Delphi 2009 em File -->New --> VCL Forms Application Delphi. Salve com um nome essa primeira unit com unPrincipal e o form como frmPrincipal.

Vamos adicionar um DataModule para abrigar os componentes do DBExpress. Clique em file --> New --> Other, item Categories Delphi Files e sele-cione o objeto DataModule conforme a figura 1

Veja a Figura 1

Salve a unit com unDM.Na tool Pallete localize a seção dbExpress.

Vamos adicionar no DataModule um TSQLConnec-tion e renomeie para Conexao. Infelizmente esse componente não tem um “duplo clique” para nos auxiliar a fazer a conexão com o MySQL.

No entanto o padrão novo que a CodeGear recomenda é utilizar o DataExplorer. Para isso clique no menu View --> Data Explorer. Observe

DELPHI 2009com MYSQL

# SQL Manager 2005 Lite for MySQL 3.6.5.1# ---------------------------------------# Host : localhost# Port : 3306# Database : ClientesSET FOREIGN_KEY_CHECKS=0;CREATE DATABASE `Clientes` CHARACTER SET ‘latin1’ COLLATE ‘latin1_swedish_ci’;## Structure for the `clientes` table : #CREATE TABLE `clientes` ( `ID_CLIENTE` int(11) NOT NULL auto_increment, `NOME` varchar(80) default NULL, `DATA_NASC` date default NULL, `LIMITE` decimal(11,3) default NULL, PRIMARY KEY (`ID_CLIENTE`)) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Listagem 1 – Script do Banco de Dados

Figura 1 – Adição do DataModule

Page 14: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200914

a figura 2.

Figura 2 – Data Explorer.

Vamos criar uma nova conexão. No Data Explorer selecione o driver MYSQL. Com o botão direito do mouse clique em Add New Connection. Observe que já vem filtrado o driver

Mysql. Em Connection name vamos colocar o nome da conexão. Veja Figura 3.

Figura 3 - Adição de uma nova conexão

Vamos modificar alguns parâmetros da cone-xão. Com botão direito clique em Modify Connec-tion. Irá surgir a figura 4.

Veja a Figura 4

Foi adicionado em Serve Name LocalHost, em DataBase Name Clientes. O usuário defini como root e a senha 1234567 que foi adicionada no mo-mento da instalação do banco de dados. No botão advanced temos algumas configurações avançadas, como por exemplo, o Host Name, Database, entre outras. Tudo isso tinha no duplo clique do SqlCon-nection do Delphi 7.

No objet Inspector podemos selecionar a conexão recém criada.

Agora é só trabalhar da mesma forma que trabalhávamos com Delphi 7.

Para exemplificar, vamos fazer um simples ca-

dastro com todas as operações no banco de dados. Adicione um SQLDataSet e renomeie como sds-Clientes. Na propriedade SQLConnection selecione a conexão. Na propriedade commandText adicione “select * from CLIENTES order by ID_CLIENTE”. Vá à aba DataAcess e adicone um DataSetProvider. Na propriedade name altere para dspClientes. Na propriedade DataSet selecione o sdsClientes. Em options do dspClientes altere a propriedade poAllo-wcommandText para true. Vamos carregar e alterar os TFields dos sdsClientes. O TField ID_CLIENTE, na seção provider flags, altere pfInUpdate para false, e pfInWhere e pfInkey para true. Os demais TFields, somente o pfInUpdate. Vale ressaltar que estamos utilizando um campo autoincremento na PK. A propriedade required deixe-a como false. Num outro momento iremos fazer o mesmo para o ClientDataset .

Altere também a propriedade UpdateMode para upWhereKeyOnly do DataSetProvider. Na seção DataSnapClient adicone um LocalConnec-tion 1. Esse componente será necessário para ligar um ClientDataSet que não se encontra num DataModule.

Nosso DataModule ficará assim (Figura 5):

Figura 5- DataModule

Vamos criar um formulário. Salve a unit com unCliente e o formulário como frmClientes. Dê um Alt + F11 para acessar as propriedades do Da-

taModule. Adicione um ToolBar e adicione os tool buttons para as ações no banco de dados. Altere a propriedade ShowCaption da ToolBar para true. Veja Figura 6 com os tool buttons.

Figura 6 – Formulário cadastro de Clientes

Altere a propriedade tag e name de cada tool Button. Sendo para o primeiro Tool Button, a pro-priedade name ficará btnIncluir e tag =2. Faça isso para os demais Tool Buttons, alterando as proprie-dades citadas e mantendo o mesmo padrão.

Adicione um CliendDataSet . Altere o nome para cdsClientes. Conecte-o com a propriedade remoteServer no dspClientes localizado no Data-Module. Isso justifica a utilização do lcConnection, pois estamos conectando ao DataSetProvider que se encontra no DataModule.

Configure os TFields do ClientDataSet da mes-ma forma que você configurou o SQLDataSet.

Agora vamos criar um método para guardar a posição do registro, pois quando utilizamos o método applyUpdates, precisaremos retornar o registro corrente.Observe na listagem 2.

procedure TfrmClientes.Marcador(Tabela: TDataset);var Bm: TBookmark;begin Bm := TClientDataSet(Tabela).GetBookmark; TClientDataSet(Tabela).Refresh; if Bm <> nil then if TClientDataSet(Tabela).BookmarkValid(Bm) then

Figura 4 – Alteração da conexão

Page 15: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 15

TClientDataSet(Tabela).GotoBookmark(Bm);end;

Listagem 2 - BookMark

No evento after post do cdsClientes adicione a listagem 3.

procedure TfrmClientes.cdsClientesAfterPost(DataSet: TDataSet);begin cdsClientes.ApplyUpdates(0); Marcador(cdsClientes);end;

Listagem 3 - AfterPost

Adicione os TFields no cdsClientes. Arraste-os para o formulário.

No evento onStateChange do DataSource adicione a listagem 3 para controlar os estados dos botões.

Veja a Listagem 4 – Estado dos Botões

Adicione um evento para a Tool Button Incluir. “Amarre” todos os demais ToolButtons (evento incluir) nesse evento.Listagem 5

procedure TfrmClientes.btnIncluirClick(Sender: TObject);begin Manutencao((Sender as TToolButton).Tag, cdsclientes)end;

Listagem 5 – Ação incluir

Isso justifica a inclusão de valores para as tags de cada botão.

O procedimento Manutenção tem a finalidade de verificar quem disparou a ação através da pro-priedade tag. O procedimento Manutenção ficará assim (Listagem 6):

Veja a Listagem 6 ao lado

procedure TfrmClientes.dsClientesStateChange(Sender: TObject);begin btnIncluir.Enabled:= not (dsClientes.State in [DSINSERT,DSEDIT]); btnEditar.Enabled:= not (dsClientes.State in [DSINSERT,DSEDIT]); btnExcluir.Enabled:= not (dsClientes.State in [DSINSERT,DSEDIT]); btnGravar.Enabled := dsClientes.State in [DSINSERT,DSEDIT]; btnCancelar.Enabled:= dsClientes.State in [DSINSERT,DSEDIT]; btnSair.Enabled:=not (dsClientes.State in [DSINSERT,DSEDIT]); btnAnterior.Enabled:= not dsClientes.DataSet.Bof; btnProximo.Enabled:= not dsClientes.DataSet.Eof;end;

procedure TfrmClientes.Manutencao(Botao: Integer; Tabela: TDataSet);begin case Botao of 2 : begin Tabela.Append; DBEdit2.SetFocus; end; 3 : begin Tabela.Edit; DBEdit2.SetFocus; end; 4 : if MessageDlg(‘Confirma a gravação?’, mtConfirmation, [mbYes, mbNo], 0) = mrYes then Tabela.Post; 5 : if MessageDlg(‘Cancelar a edição?’ , mtConfirmation, [mbYes, mbNo], 0) = mrYes then Tabela.Cancel; 6: if MessageDlg(‘Confirma a exclusão?’, mtConfirmation, [mbYes, mbNo], 0) = mrYes then begin Tabela.Delete; end; 7 : Tabela.Prior; 8 : Tabela.Next; 9: Application.Terminate; end;end;

Listagem 4 – Estado dos Botões

Listagem 6 – Procedimento Manutenção.

Page 16: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200916

Conclusão

Demonstrei nesse artigo a utilização do dbex-press com MySQL 5.0 no Delphi 2009 utilizando o Data Explorer, que é uma novidade para quem sempre utilizou o Delphi 7. Observei que o velho problema do campo numérico foi solucionado. Há um complicador com campo auto incremento que foi solucionado com a configuração correta dos tFields e de um método para “guardar” a posição do registro.

Quanto a migração do Delphi 7 para o Delphi 2009, tem um seminário on-line e gratuito mostran-do na prática os motivos para migrar para o Delphi 2009. Serão mais de duas horas de apresentação. http://latam.codegear.com/br/webinar/.

Segue alguns links que o ajudarão com mais informações técnicas sobre o produto.

Site do produto:

http://www.codegear.com/br/products/delphi/win32

http://www.codegear.com/br/products/radstudio

Por que migrar do Delphi 7 para o Delphi 2009:

http://dn.codegear.com/br/article/39230

No Developers Network tem o maior e mais completo conteúdo Delphi do mundo e completamente gratuito:

http://dn.codegear.com/br

Link de Vídeos em Português:

http://dn.codegear.com/article/37460

http://cc.codegear.com/coderage

http://dn.codegear.com/article/39129

Central de Documentação:

HTTP://docs.codegear.com

Luís Alexandre de Oliveira é Téc-nologo em Processamento de Dados ,graduado pela Faculdade de Técnologia de Sorocaba, Consultor técnico do The Club.

Docente do curso técnico informática - Etec de Avaré e do curso Tecnologia em Redes de Computadores - Fatec Eduvale – Avaré

Sobre o autor

Meu link de downloads gratuitos:

http://cc.codegear.com/author/795118

Central de Código: http://cc.codegear.com

Central de Qualidade:

http://qc.codegear.com

Page 17: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 17

Page 18: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200918

Desenvolvimento de Aplicações .NET

C# para Dispositivos Móveis

A arquitetura Web sem dúvida alguma é a solução mais utilizada no mercado e têm demonstrado aqui no Brasil maturidade e solução para alcançar os seguintes benefícios: Disponibilidade, soluções baseadas na Web possuem alta disponibilidade, pois sua arqui-tetura permite que o software seja acessado de qualquer local onde haja acesso a Internet. Manutenibilidade, pois uma vez que a solução estará hospedada em um único servidor, a manutenção ficará concentrada em um único ponto, excluindo a necessidade de ajustes nas máquinas cliente. Portabilidade, de qualquer sistema operacional ou dispositivo o sistema poderá ser utilizado, agregando uma concreta independência de plataforma.

Sistemas baseados na Web é uma ten-dência confirmada e não sofreu mudanças relevantes em sua filosofia desde sua incep-ção e sua utilização no mercado brasileiro em 1997, por isso, entendo como uma escolha arrojada e ao mesmo tempo conservadora sob a ótica do risco das constantes flutuações de tecnologia.

Celulares e o Mercado Brasileiro

O mercado de telefonia móvel no Brasil tem crescido a cada ano e possui atualmente 159,6 mi-lhões de aparelhos habilitados, segundo a Agência Nacional de Telecomunicações ANATEL. Segundo algumas projeções, devemos encerrar 2009 com nada menos que 170 milhões de celulares. Estes sedutores números atraiu diversas empresas es-trangeiras e tem atraído diversas mídias para este atraente veículo de massas.

Segundo o instituto de pesquisas Pyramid

Research, as vendas de smartphones na América Latina devem saltar de 7 milhões de unidades em 2009 para 48 milhões de aparelhos em 2014. Isto nos aponta uma tendência quase que estabelecida, de que o celular se transformará em um grande equipamento de acesso a produtos e serviços. Consulta a bancos, televisão, rádio, computador, informações através do Microsoft Tag, notícias tudo em um único dispositivo.

Já a algum tempo eu tenho olhado esse mer-cado e tenho percebido um grande potencial de negócios voltados ao desenvolvimento de aplica-ções para esta plataforma.

.NET e Mobilidade

O .NET possui recursos nativos para o desen-volvimento para dispositivos móveis, chamados de Smart Devices, que pode ser dividido em duas regi-ões, como demonstra a figura 1. Server-side Web Apps, que são aplicações ASP.NET renderizadas em Mobile Web Browsers usando Device Filtering. Client-side Rich App, que são aplicações embarca-das que usam o .NET Compact Framework.

Figura 1

O que Usei

Visual Studio 2008 SP1, Windows Mobile 6 Professional and Standard Software Development Kits Refresh, Compact Framework 3.5, Windows Vista Home Premium.

Primeiros Passos no Desenvolvimento Para Smart Devices

Crie um novo projeto em File | New | Project, em seguida selecione o item Smart Device, con-forme a figura 2:

Veja a Figura 2

Após selecionar o template “Smart Device Project”, algumas opções de projeto serão exibi-das. Device Application cria uma aplicação para a plataforma Windows Mobile. Class Library cria um assembly .dll. Console Application produz uma aplicação não gráfica. Control Library cria novos controles para aplicações da plataforma. Empty Project cria um projeto vazio.

Veja a Figura 3

Observe também que podemos selecionar a pla-taforma de deployment em “Target Plataform”, onde temos as opções Pocket PC 2003, para dis-positivos do tipo Pocket (PC de mão) que possu-am sistema operacional Windows Mobile 2003. Windows CE, como sugere

Page 19: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 19

a opção, para o sistema operacional Windows CE, Windows Mobile 5.0 Pocket PC SDK, para sistema operacional Windows Mobile 5 em Pockets (PC de mão) e Windows Mobile 5.0 Smartphone PC SDK para Smartphones (telefones celulares).

Em “.NET Compact Framework version” é possível decidir qual versão da Compact Framework será usada, entre as versões 2.0 e 3.5.

Compact Framework

O Compact Framework é um ambiente de execução de código gerenciado para dispositivos móveis com Windows Mobile. Na versão 3.5 o Compact Framework incorporou o Windows Com-munication Foundation WCF, Language Integrated Query LINQ, melhorias nos controles PictureBox, Control, Splitter, Panel, Combobox, TabPage para Windows Forms, o SoundPlayer para reprodução múltipla de sons, compactação por Compression-Mode, Deflate e Gzip e outros.

Figura 4

Observe na figura 4 a sobreposição de camadas que compõem o Compact Framework. Framework, apresenta a biblioteca de classes, Common Lan-guage Runtime para gerenciamento de código e o sistema operacional Windows Mobile.

Neste artigo abordarei o desenvolvimento para Windows Mobile 6.5, que inclusive, não faz parte da relação de possibilidades do Visual Studio 2008, portanto, acesse o link http://www.microsoft.com/downloads/details.aspx?familyid=06111a3a-a651-4745-88ef-3d48091a390b&displaylang=en e baixe o “Windows Mobile 6 Professional and Standard Software Development Kits Refresh”. Esta versão “Refresh” adicionou diversos recursos novos. Baixe os arquivos “Windows Mobile 6 Professional SDK Refresh.msi” e “Windows Mobile 6 Standard SDK Refresh.msi”. Instale o Professional, reinicie o computador, depois instale o Standard. Estes insta-ladores adicionarão ao Visual Studio 2008 todas as ferramentas necessárias ao desenvolvimento para dispositivos móveis com Windows Mobile 6.0.

Primeira Aplicação Smart Device

Após a instalação do Development Kits, volte a criar uma nova aplicação em File | New | Project, Smart Device, conforme a figura 5.

Figura 2.

Figura 3.

Figura 5.

Page 20: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200920

Note que agora o Visual Studio 2008 trás mais duas opções de plataforma: Windows Mobile 6 Pro-fessional SDK e Windows Mobile 6 Standard SDK. Selecione a opção Windows Mobile 6 Professional SDK e o template Device Application e em seguida, pressione o botão OK.

Veja a Figura 6

O Windows Forms típico dá lugar a uma imagem que simula as dimensões físicas de um dispositivo móvel. A Tool Box agora exibe Device Controls que podem ser livremente acomodados na área disponível no dispositivo.

O Target Device sinaliza qual dispositivo será emulado, o botão “Connect To Device” abre o emulador e o Device Options permite a troca de plataforma.

Figura 7 – Device Toolbar

Veja a Figura 8.

Adicione ao design um Button, TextBox e List-box, como mostra a figura 9.

Figura 9

No evento Click do botão, implemente o seguinte código:

private void button1_Click(object sender, EventArgs e) { listBox1.Items.Add(textBox1.Text); }

Figura 6.

Figura 8 – Device OptionsExecute a aplicação para que o diálogo da

figura 15 seja exibido. Veja a Figura 10.

Neste diálogo será selecionado que tipo de emulador será usado para executar a aplicação. Selecione a opção “Windows Mobile 6 Classic Emulator” e clique em “Deploy”.

Em seguida o Visual Studio irá distribuir o arquivo .cab da aplicação para o dispositivo. Esta tarefa pode ser acompanhada na barra de status da IDE e pode levar alguns segundos.

Veja a Figura 11

Figura 12

Page 21: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 21

Após alguns segundos, o emulador irá exibir uma animação no desktop do dispositivo e em seguida exibir automaticamente a aplicação.

Veja a Figura 13 Veja a Figura 14

ASP.NET para Aplicações Windows Mobile

O desenvolvimento de aplicações ASP.NET 3.5 para dispositivos móveis hoje não requer muito esforço, se levarmos em consideração a diversidade de aparelhos e tecnologias que cada dispositivo suporta. Teremos algumas preocupações quanto ao tamanho das páginas, imagens, e a preocupação em dar uma boa visualização da página em display tão pequeno, sem que o usuário não tenha que usar barras de rolagens. Os celulares e Pockets suportam um padrão especial de linguagem de marcação baseada em XML chamada WML Wire-less Markup Language, que é semelhante ao HTML embora muito mais restrita.

Boa parte do trabalho já é feito pelo ASP.NET 3.5, pois através do “Device Filtering” o WML é gerado automaticamente para o browser do dispositivo, que renderiza os controles para HTML 3.2, WML 1.1, cHTML e XHTML.

Device Filtering

Seria traumático desenvolvermos uma solução Web que pudesse suportar todas as variabilidades de tecnologia. O Device Filtering age quando um usuário requisita uma página Web, informações são transmitidas no cabeçalho da requisição, que indentifica o tipo de browser e dispositivo.

Criando um Web Mobile Application

Crie uma nova aplicação ASP.NET normalmente em File | New | Project “ASP.NET Web Application”, como na figura 15.

Adicione apenas um botão (Button) e uma caixa de texto (TextBox), como indica a figura 5.

Figura 16

Implemente o evento Click do botão conforme a seguir:

Figura 10.

Figura 11.

Figura 13. Figura 14.

Figura 15.

Page 22: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200922

protected void Button1_Click(object sender, EventArgs e) { Response.Write(TextBox1.Text); }

A partir deste ponto, se colocarmos a aplicação em execução, não teríamos nenhuma surpresa, pois a página será exibida normalmente no browser padrão, pois a infraestrutura do ASP.NET detecterá que se trata de um browser de um PC, como Firefox ou Internet Explorer por exemplo.

Figura 17

Sem dúvida alguma este ainda não é o nosso objetivo, queremos ver nossa solução em um ambiente de um dispositivo móvel. Para isso, usaremos um emulador para simule o ambiente do Windows Mobile, facilitando o nosso desen-volvimento.

Device Emulator Manager

Quando um site ASP.NET é desenvolvido para um dispositivo móvel, não é necessário ter o dispo-sitivo físico para testar a aplicação. Para simular o ambiente do Windows Mobile, usaremos o Device Emulator Manager, que apresenta diversas opções de ambiente para emulação. Portanto, acesse o menu Tools | Device Emulator Manager.

Veja a Figura 18

Selecione a opção Windows Mobile 6 Classic Emulator, com o botão direito a opção “Con-nect”.

Veja a Figura 19

Veja a Figura 20

Veja que o emulador é sinalizado indicando que foi instanciado e está em execução. Agora precisamos fazer com que o emulador acesse nossa página que está hospedada no PC, pra isso precisaremos de uma ferramenta de sincronização dispositivo x PC, que falaremos a seguir.

Active Sync e WMDC

Para que seja possível usar os emuladores de dispositivos é necessário um software de sincronização presente no PC, para que recur-

Figura 18.

Figura 19.

Figura 20.

sos sejam compartilhados, informações sejam transferidas, configurações e arquivos. Para PCs com Windows Vista ou Windows 7, deverá ser instalado o WMDC Windows Mobile Device Center, que pode ser baixado em http://www.microsoft.com/windowsmobile/en-us/help/synchronize/device-center-download.mspx. Já em PCs com Windows XP ou versões anteriores, é necessário o Active Sync, baixe-o em http://www.microsoft.com/windowsmobile/en-us/help/synchronize/activesync-download.mspx.

Como uso Windows Vista, vou usar o WMDC. Após a instalação execute-o através do menu iniciar “Windows Mobile Device Center”.

Page 23: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 23

Agora basta abrir o Internet Explorer do Windows Mobile e acessar a página. O segredo é substituir o localhost do endereço pelo IP da sua máquina, para evitar que o dispositivo não consiga conexão com a aplicação Web “Cannot connect with current connection settings”. Ob-serve a figura 26, eu substitui o endereço http://localhost:60984/Default.aspx produzido pelo Cassi-ni por http://192.168.254.2:60984/Default.aspx.

Figura 26

Simples Assim!

Samsung Live.Dev

A Sansung publicou um serviço gratuíto que permite que desenvolvedores façam testes em suas aplicações em aparelhos reais da empresa. Acesse o link http://wmlab.innovator.samsungmobile.com e inscreva-se.

O Windows Mobile Marketplace

O Windows Marketplace for Mobile permite que aplicações de terceiros sejam facilmente dis-tribuídas, tornando-as disponível para avaliação e

Figura 21

Clique no item Mobile Device Settings e em seguida “Connection Settings”.

Figura 22

Altere o tipo de conexão para DMA Direct Memory Access, que permitirá que o emulador do dispositivo tenha acesso a memória do computador independentemente da CPU. Pressione OK.

Figura 23

Feito isto, basta retornar ao Device Emulator Manager, com o botão direito sobre o emulador em execução, selecionar a opção “Cradle”. Isso fará com que o emulador através do WMDC conecte-se ao PC.

Veja a Figura 24

O emulador detecta e estabelece a conexão.

Adilson Jr

Diretor de Tecnologia da TDS, centro de treinamentos oficiais CodeGear/Borland/Embarcadero no Rio de Janeiro. Professor, pal-estrante, conferencista, certificado CodeGear RAD Studio 2007, StarTeam e CaliberRM. Atua como Arquiteto, na área de análise e desenvol-vimento orientado a objetos em C# há 2 anos e em Delphi há mais de 12 anos. Atualmente trabalha com treinamentos, consultoria e de-senvolvimento de soluções para as plataformas Win32 e .NET.

e-mail: [email protected]

Sobre o autor

Figura 24.

compra por milhões de usuários do Windows Mobile, criando um catá-logo global de aplicações for Windows Mobile . Este sistema virá pré instalado no Windows Mobile 6.5 e trará fer-ramentas que permitem o registro, submissão de aplicações, suporte, feedbacks e outros.

Para publicar sua aplicação no Marketpla-ce sera necessário criar uma conta de distribui-dor junto a Microsoft.

Passos importantes segundo o Windows Mo-

bile Team:

• Submeter suas informações pessoais em “Register Now” em http://developer.windo-wsmobile.com/Marketplace.aspx;

• Acompanhar o Twiter da equipe do Win-dows Mobile @wmdev, o Facebook http://www.fa-cebook.com/group.php?gid=2254845390#/pages/Windows-Mobile-Developer/39963827922?ref=mf e o YouTube http://www.youtube.com/windows-mobiledev;

• Mantenha-se atualizado através do blog do Windows Mobile Team http://blogs.msdn.com/windowsmobile;

• E, ainda informado com as últimas fer-ramentas de desenvolvimento no Windows Mobile Developer Center on MSDN em http://msdn.micro-soft.com/en-us/windowsmobile/default.aspx.

Conclusão

Esta foi apenas uma introdução ao mundo Mobile com o Visual Studio 2008. Voltaremos futuramente a falar mais profudamente sobre aplicações embarcadas com acesso a dados.

Figura 25.

Page 24: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200924

Controles ASP.NET, a partir da versão 2.0 do framework, tornaram-se bastante customi-záveis e com muitas opções ao usuário, entre eles podemos destacar o GridView, onde facilmente, podemos implementar: inserção, atualização, exclusão e seleção de dados.

Neste artigo, veremos algumas dicas úteis para a utilização desse controle para customizá-lo em suas aplicações Web. Não vou mostrar a parte de conexão com base de dados, isso é facilmente realizado com os assistentes do GridView.

Vamos diretamente as dicas para que o leitor adquira mais conhecimento com o controle.

Adicionando controles

O uso de templates do ASP.NET ajuda a custo-mização do GridView para a adição de controles. Basta criar um coluna do tipo TemplateField e adicionar os controles necessários.

Vamos adicionar um CheckBox, para podermos manipular os itens do Grid, para que possamos marcar/desmarcar todos, alterar estilo da linha (fonte) quando a mesmo for selecionada, retornar as linhas selecionadas etc.

Crie uma nova aplicação Web no Visual Studio 2008. Não vamos nos concentrar em conexões com o banco ou formatações do GridView. Formate o GridView na opção que desejar e conecte ao banco de dados Northwind que acompanha o SQL Server

Desvendando o

GridView

ou outro banco de sua preferência. Nesse exemplo, usaremos o SQL Server Express

2008, lançado recentemente, e usaremos os dados da tabela Customer (não será necessário selecionar todos os campos, escolha apenas alguns). Altere a propriedade AllowPaging para True (paginação).

Na propriedade Columns do GridView, adicio-ne um campo do tipo TemplateField e clique em OK (Figura 1).

Na Smart Tag do GridView, clique na opção Edit Templates. Em ItemTemplate, adicione um CheckBox. Feche o editor, rode a aplicação e veja os controles adicionados ao GridView.

Vamos saber que linhas “selecionadas” com o CheckBox. Adicione um botão e um TextBox (altere TextMode para Multline) na página. No Click do botão adicione o código da Listagem 1.

Figura 1. Adicionando um TemplateField como coluna do GridView

Page 25: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 25

Veja a Listagem 1.

Criamos uma variável do tipo StringBuilder (já adicionando um texto inicial), e percorremos todas as linhas do GridView a procura do CheckBox que adicionamos via template, com o FindControl.

Esse método retorna um Control, então fize-mos um cast para um CheckBox. Vale salientar que o parâmetro do FindControl é o nome do controle e o mesmo deve ser digitado corretamente, claro.

Se o controle não for nulo (foi encontrado) e estiver marcado (Checked), então adicionamos na sb os valores das colunas 1 e 2.

Nota: As colunas do GridView começam com 0, incluindo a do tipo TemplateField.

Rode a aplicação, marque algumas linhas e clique no botão. Como mostra a Figura 2, o TextBox exibe as linhas “selecionadas”.

Figura 2. Obtendo as linhas selecionados no GridView

Que tal colocar um CheckBox no cabeçalho para marcar/desmarcar todas as linhas do Grid? Abra o Template do GridView e acesse o Header-Template na opção Display.

Adicione outro CheckBox, altere a proprie-dade AutoPostBack do controle para True, pois sem ela o exemplo não funcionará. Dê um duplo clique no controle e no evento adicione o código da Listagem 2.

Veja a Listagem 2.

O código é praticamente igual ao anterior, apenas verificamos se a variável ch não está nula e repassamos para a mesma o valor da propriedade Checked do controle que adicionamos no cabeça-lho da coluna. Rode e faça o teste.

Fica a dica, ao selecionar o CheckBox no ca-beçalho, somente os itens da página do GridView serão selecionados.

using System.Text;...protected void Button1_Click(object sender, EventArgs e){ StringBuilder sb = new StringBuilder( “* Itens Selecionados *”); foreach (GridViewRow row in GridView1.Rows) { //”procura” pelo CheckBox CheckBox ch = (CheckBox)row.FindControl( “CheckBox1”); //se achou e está marcado if ((ch != null) && (ch.Checked)) { sb.AppendLine(); sb.Append(row.Cells[1].Text + “ - “ + row.Cells[2].Text); } } TextBox1.Text = “”; TextBox1.Text = sb.ToString();}

Listagem 1. Obtendo a linha com o CheckBox marcado

Alterando estilo da linha

E se ao clicar no CheckBox eu precisasse alterar a fonte da linha? Também fica muito simples. Aces-se o template do GridView para o CheckBox das linhas, alterando a propriedade AutoPostBack do mesmo para True. Dê um duplo clique no controle e adicione o código da Listagem 3.

Veja a Listagem 3.

O código continua semelhante, onde verifi-camos se a variável ch não é nula e depois se foi marcada. Se positivo, alteramos as configurações da fonte da linha. Senão, voltamos às configurações normais.

O código do else vai variar de acordo com as formatações do seu GridView. Rode a aplicação e

foreach (GridViewRow row in GridView1.Rows){ CheckBox ch = (CheckBox)row.FindControl( “CheckBox1”); if (ch != null) { ch.Checked = (sender as CheckBox).Checked; }}

Listagem 2. Marcando/desmarcando os CheckBoxes

teste (Figura 3).

Figura 3. Alterando a fonte da linha marcada

A funcionalidade de adicionar controles no GridView é semelhante para outros tipos de con-

Page 26: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200926

using System.Drawing;...foreach (GridViewRow row in GridView1.Rows){ CheckBox ch = (CheckBox)row.FindControl(“CheckBox1”); if (ch != null) { if (ch.Checked) { //formata o tamanho, negrito e cor row.Font.Size = 14; row.Font.Bold = true; row.ForeColor = Color.Red; } else { //volta ao padrão row.Font.Size = 12; row.Font.Bold = false; row.ForeColor = Color.Black; } }}

Listagem 3. Alterando a fonte da linha marcada

troles. Você pode tomar por base essas dicas para adicionar um DropDownList, por exemplo.

Master/Detail

Crie uma nova página e adicione dois Grid-Views. Para o primeiro, crie uma conexão com a tabela Orders. Para o segundo, acesse os dados da tabela Order Details.

Na tela do wizard do segundo GridView, onde escolhemos os campos, marque a opção Specify a custom SQL statement or stored procedure, pois vamos adicionar uma consulta SQL. Clique em Next e digite a consulta SQL da Listagem 4.

Veja a Listagem 4.

Ao clicar no Next, por termos um parâmetro na consulta, somos direcionados para a tela de configuração do parâmetro. Na tela, em Parameter source escolha Control, em ControlID selecione GridView1 (Figura 4).

Veja a Figura 4. Veja que em Parameters vamos pegar o valor

do SelectValue do GridView para preencher o parâmetro da consulta. Finalize o wizard e no GridView1 acesse a Smart Tag, marcando a opção Enable Selection.

Rode a aplicação, selecione uma linha do GridView1 e veja que o GridView2 será preenchido com os dados referente aos itens da tabela master (Order) (Figura 5).

Figura 5. Master/Detail com dois GridViews

Master/detail com Templates

Mas se necessitar que os itens (no caso os details) sejam mostrados diretamente, sem a intervenção do usuário? Para isso, usaremos tem-plates no GridView master. Crie uma nova página

select OD.OrderID, P.ProductName, OD.Quantity, OD.UnitPricefrom [Order Details] ODinner join Products P on P.ProductID = OD.ProductIDwhere OD.OrderID = @OrderID

Listagem 4. Consulta SQL

Figura 4. Parâmetros da consulta

Page 27: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 27

e adicione um GridView, adicionando os dados da tabela Orders.

Acesse o editor de colunas do controle e remova todos os campos, adicionando apenas uma coluna do tipo TemplateField. Acesse o template e adicione uma tabela com duas linhas e três colunas.

Na linha superior, vamos adicionar os rótulos dos campos (digite ou use Labels), e na linha in-ferior, adicione três Labels. Para as Labels vamos usar DataBind para mostrar os valores dos campos. Acesse a Smart Tag do primeiro Label e acesse a op-ção Edit Databindings. No editor aberto, configure o campo no item Bound to (Figura 6).

Veja a Figura 6.

Faça o mesmo para os outros campos. Abaixo da tabela, adicione um GridView e configure para acessar os dados da tabela Orders Details e configu-re um parâmetro igual ao exemplo anterior, só que ao invés de escolher o GridView1, você escolherá o Label1 (referente ao campo OrderID).

Finalize o wizard e rode a aplicação. Veja na Figura 7 que estamos visualizando os dados da mas-ter (Orders) e em seguida a detail (Order Details).

Figura 7. Master/detail sem a intervenção do usuário

Figura 6. Opção de DataBinding no TemplateField

Conclusão

Vimos neste artigo algumas dicas para a utiliza-ção do GridView, um dos controles mais utilizados em aplicações ASP.NET no Visual Studio 2008. Na segunda parte deste artigo, veremos como tra-balhar com imagens de acordo com valores dos campos, validações com Validators do ASP.NET, somatório no rodapé e agrupamento.

Não perca. Um grande abraço a todos e até a próxima!

Sobre o autor

Luciano Pimenta

É Técnico em Processamento de Dados, desenvolvedor Delphi/C# para aplicações Web com ASP.NET e Windows com Win32 e Windows Forms. Palestrante da 4ª edição da Borland Conference (BorCon).

Autor de mais de 60 artigos e de mais de 300 vídeos aulas publicadas em revistas e sites especializados. É consultor da FP2 Tecnologia (www.fp2.com.br) onde ministra cursos de programação e banco de dados. É desenvolvedor da Paradigma Web Bussiness em Florianópolis-SC.

CD de Treinamento em RAD Studio 2007: www.linhadecodigo.com.br/CDDVD.aspx?id=3361.

DVD de treinamento em Visual Web De-veloper: www.linhadecodigo.com.br/CDDVD.aspx?id=3795.

www.lucianopimenta.net

Confira o video deste artigo no site do The Club na edição online da revista.

Page 28: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200928

Dicas DELPHITrazer primeiro dia útil do mês

Function FirstDayOfMonth (Data : TDateTime; lSabDom : Boolean) : TDateTime;varAno, Mes, Dia : word;DiaDaSemana : Integer;beginDecodeDate (Data, Ano, Mes, Dia);Dia := 1;if lSabDom ThenbeginDiaDaSemana := DayOfWeek (Data);if DiaDaSemana = 1 ThenDia := 2elseif DiaDaSemana = 7 ThenDia := 3;end;FirstDayOfMonth := EncodeDate (Ano, Mes, Dia);end;Percentual de espaço livre em uma unidadefunction Percentdisk(unidade: byte): Integer;varA,B, Percentual : longint;begin if DiskFree(Unidade)<> -1 then begin A := DiskFree(Unidade) div 1024; B := DiskSize(Unidade) div 1024;Percentual:=(A*100) div B; result := Percentual;end else begin result := -1; end; end;

Mudar data e hora do sistema

function SystemDateTime(tDate: TDateTime; tTime: TDateTime): Boolean;vartSetDate: TDateTime;vDateBias: Variant;tSetTime: TDateTime;vTimeBias: Variant;tTZI: TTimeZoneInformation;tST: TSystemTime;

beginGetTimeZoneInformation(tTZI);vDateBias := tTZI.Bias / 1440;tSetDate := tDate + vDateBias;vTimeBias := tTZI.Bias / 1440;tSetTime := tTime + vTimeBias;with tST do beginwYear := StrToInt(FormatDateTime(‘yyyy’, tSetDate));wMonth := StrToInt(FormatDateTime(‘mm’, tSetDate));wDay := StrToInt(FormatDateTime(‘dd’, tSetDate));wHour := StrToInt(FormatDateTime(‘hh’, tSettime));wMinute := StrToInt(FormatDateTime(‘nn’, tSettime));wSecond := StrToInt(FormatDateTime(‘ss’, tSettime));wMilliseconds := 0;end;SystemDateTime := SetSystemTime(tST);end;

Mostra hint em um Panel

procedure TForm1.FormCreate(Sender: TObject);beginApplication.OnHint := DisplayHint;end;procedure TForm1.DisplayHint(Sender: TObject);beginPanel1.Caption := Application.Hint;end;

Retornar a quantidade de arquivos em diretorio/pastas

implementation{$R *.dfm}function GetTotFiles(Diretorio: String): Integer;

Page 29: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009 29

var SRec: TSearchRec; Res: Integer;begin Result := 0; Res := FindFirst(Diretorio+’\*.*’, faAnyFile, SRec); while Res = 0 do begin Res := FindNext(SRec); Inc(Result); end;end;procedure TForm1.Button1Click(Sender: TObject);begin Caption := IntToStr( GetTotFiles(‘d:\testes’) );end;

Apagar o conteudo da lixeira do Windows

function SHEmptyRecycleBin(Wnd: HWnd; LPCTSTR: PChar; DWORD: Word): Integer; stdcall; function SHEmptyRecycleBin; external ‘SHELL32.DLL’ name ‘SHEmptyRecycleBinA’;const SHERB_NOCONFIRMATION = $00000001; SHERB_NOPROGRESSUI = $00000002; SHERB_NOSOUND = $00000004;var Form1: TForm1;implementation{$R *.DFM}procedure TForm1.Button2Click(Sender: TObject);begin SHEmptyRecycleBin(Self.Handle, ‘’, SHERB_NOCONFIRMATION);end;

TreeView – Mostrar hint sobre item

type TForm1 = class(TForm)

tv: TTreeView; procedure tvMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); procedure FormCreate(Sender: TObject); private { Private declarations } hwHint: THintWindow; oHint: String; oX, oY: integer; procedure PegaHint(Sender: TObject); public { Public declarations } end;var Form1: TForm1;

implementation{$R *.dfm}procedure TForm1.PegaHint(Sender: TObject);var pt: TPoint; C: TControl;begin oHint := Application.Hint; pt.x := oX+80; pt.y := oY; pt := ClientToScreen(pt); if oHint <> ‘’ then hwHint.ActivateHint(Rect(pt.x, pt.y, pt.x + hwHint.Canvas.TextWidth(oHint) + 10, pt.y + hwHint.Canvas.TextHeight(oHint)), oHint) else hwHint.ReleaseHandle;end;procedure TForm1.tvMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer);begin if tv.GetNodeAt(X, Y) <> nil then begin tv.Hint := tv.GetNodeAt(X, Y).Text; oX := X; oY := Y; end;end;procedure TForm1.FormCreate(Sender: TObject);begin hwHint := THintWindow.Create(self); hwHint.Color := clInfoBk; Application.OnHint := PegaHint;end;

end.

Page 30: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 200930

Page 31: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009

Page 32: The Club - megazine · desenvolvimento de aplicativos .Net C# para dispositivos móveis. Para finalizar Luciano Pimenta em seu artigo .Net aborda a utilização do Grid- ... pilha,

julho 2009