Você está na página 1de 131

NOTAS INICIAIS

Este trabalho destina-se cadeira de Projecto, do segundo semestre do quinto ano, do curso de Engenharia Informtica, ramo de Computadores e Sistemas, leccionada no Instituto Superior de Engenharia do Porto. Tem como tema o Desenvolvimento de Aplicaes destinadas a PDAs, utilizando como ferramenta a plataforma .NET da Microsoft. Inicialmente, o tema proposto tinha sido o desenvolvimento de aplicaes para PDAs em geral, mas devido ao interesse de mais do que um aluno nesse tema e talvez pela imergente importncia do .NET neste domnio, o professor Paulo Ferreira dividiu os temas e incluiu um projecto s para o desenvolvimento em .NET. O facto de tanto os PDAs como o .NET serem tecnologias muito recentes e com enormes potencialidades de desenvolvimento, foram as razes que me levaram a optar por este projecto. A evoluo dos PDAs, cada vez com maior capacidade de processamento, de armazenamento e comunicao, a iminente fuso com os telemveis e consequente massificao, tero progressivamente uma maior implicao na sociedade, desempenhando um papel cada vez mais importante. O .NET d-nos um ambiente de trabalho mais eficiente, possibilitando desenvolver mais facilmente e rapidamente as aplicaes de que necessitamos. Assim, na escolha deste tema foi tambm minha inteno me familiarizar com a plataforma .NET, da qual s tinha algumas ideias. Esta ser a ferramenta primordial utilizada para desenvolver a maior parte das aplicaes nos prximos anos a nvel mundial. Julgo assim que esta combinao, a dos PDAs com o .NET algo de muito importante e com grandes potencialidades. Espero que os conhecimentos obtidos na realizao deste trabalho me venham a ser teis como programador e sirvam como base para desenvolver aplicaes deste gnero na minha vida profissional.

DESCRIO DO TRABALHO
Inicialmente irei comparar as diferenas existentes na plataforma .NET em relao s ferramentas que existiam anteriormente, e indicar quais as vantagens na sua utilizao. Mostrarei as ferramentas existentes e como criar um simples Hello World. Achei importante dar uma amostra do hardware disponvel neste momento para correr este tipo de aplicaes. De seguida, irei descrever os controls mais comuns para criar o interface de uma aplicao, as suas propriedades mais utilizadas, juntamente com imagens e amostras de cdigo para dar uma ideia de como so e como funcionam. Indicarei quais os principios gerais a ter na construo de uma aplicao e como definir alguns parmetros. Darei uma descrio geral e uma pequena introduo a temas mais avanados, capazes de tornar a aplicao mais poderosa e com mais capacidades. Por fim dou alguns exemplos de aplicaes destas tecnologias no mundo empresarial, a sua implementao e beneficios. Este trabalho tem incluido em toda a sua exteno uma linguagem muito tcnica, sendo necessrio alguns conhecimentos de informtica e programao para facilitar a sua compreeno. A maior partes dos exemplos dados ao nivel do cdigo fonte esto escritos na linguagem C#. Esta linguagem e o Visual Basic .NET so neste momento as nicas linguagens utilizadas neste tipo de programao. Grande parte da informao recolhida para a realizao deste trabalho foi retirada de sites pertencentes Microsoft. Em Portugal a documentao relacionada com este tema neste momento praticamente inexistente. Estas foram as ferramentas e o hardware utilizado na realizao deste trabalho: - Intel Pentium4 1,7GHz 256MB RAM - Microsoft Windows XP - Adobe Acrobat 6.0 - Paint Shop Pro 8.0 - EditPad Lite e Notepad - Internet Explorer 6 - Visual Studio .Net 2003 - .NET Compact Framework

INDEX

002 Notas Iniciais 003 Descrio do Trabalho

INDEX INTRODUO
005 Index

012 Introduo
014 016 018 018 019 020 020 021 021 023 024 025 026 027 028 029

013 Requisitos de Sistema:

014 A Plataforma .NET

Antes do .NET Servidor HelloWorld em .NET Concluso das Vantagens do .NET .NET Compact Framework SQL Server CE ASP.NET Mobile Controls Mobile Information Server Plataformas para o .NET Compact Framework Plataformas No Suportadas

022 Hardware

Hewlett-Packard iPAQ h5550 Compaq iPAQ 3955 Asus MyPal A600 Toshiba e740 ViewSonic PocketPC V36 Siemens SX56 (PocketPC Phone Edition) Proximus Qtek 1010 (PocketPC Phone Edition)

FERRAMENTAS DE DESENVOLVIMENTO
031 Ferramentas
031 032 032 032 033 034 035 035 037 037 Visual Studio .NET 2003 eMbedded Visual Tools Version 3 eMbedded C++ Version 4 O Visual Studio .NET Para Aparelhos Mveis Como Criar um Projecto Smart Device Application Wizard Diferenas entre Projectos de Desktop e de Device Gerir o Projecto Sistema de Ajuda Aplicao Hello World

033 Ambiente de Desenvolvimento

040 O Emulador e As Comunicaes


040 041 041 042 042 042 042 043 043

Utilizao do Emulador Desenvolvimento de Aplicaes numa Rede Utilizando o Emulador PocketPC Especificidades dos Aparelhos Mveis Transferncia de Dados XML Web Services SQL Server CE Dispositivos Com Recursos Limitados Implicaes a Nvel da Segurana

CONTROLS DA WINDOWS FORMS


045 Windows Forms
045 046 046 046 046 Criao de Controls Membros dos Controls Propriedades Mtodos Eventos

047 Controls
047 048 049 050 050 052 054 054 056 056 057 058 059 060 061 062 062 064 064 065 066 067 067 069 070

Button CheckBox ComboBox ContextMenu DataGrid DomainUpDown HScrollBar e VScrollBar ImageList Label ListBox ListView MainMenu NumericUpDown OpenFileDialog / SaveFileDialog Panel PictureBox ProgressBar RadioButton StatusBar TabControl TextBox Timer Toolbar TrackBar TreeView

CONSTRUIR APLICAES PARA POCKETPC


073 A Class Form
075 075 078 078 079 081 083 084 084 085 086 086 073 Propriedades de uma Form

075 Controls da Aplicao

Respeitando as Normas Gerais Criao de Caixas de Dilogo Utilizao das Caixas de Dilogo do Sistema O Control InputPanel O Control MainMenu O Control ToolBar Activao e Desactivao de uma Form O Activate e Deactivate Fechar Aplicaes Evento Tap-And-Hold Teclas de Hardware de um PocketPC Finalizar o Desenvolvimento da Aplicao

088 Normas Recomendadas 090 Teste e Debug


090 090 091 091 092 Utilizar o Debugger O Modo Break Criar um BreakPoint Watch Window Utilizar o Debug

POTENCIALIDADES
094 Coleces de Objectos
094 095 095 096 Classes de Coleces em System.Collections Namespace System.Collections.Specialized Arrays Multidimensionais ArrayList

097 Strings e Datas 099 XML 100 Input e Output

099 Exemplo Prtico 099 Utilizao do XML no .NET Compact Framework 100 Classe Stream 101 Classes BinaryTrade e BinaryWriter 101 Classes StreamReader e StreamWriter

102 Comunicao em Rede 103 Segurana 105 ADO.NET

102 Namespace System.Net 103 O Bsico ao Nvel da Segurana 104 Recomendaes de Segurana

105 Connectionless do ADO.NET 105 ADO.NET e XML 106 Binding de Controls

107 XML Web Services 108 SQL Server CE

107 Arquitectura do XML Web Services 108 Utilizao do SQL Server CE

109 Controls Personalizados 110 Globalizao e Localizao


110 Globalizao 110 Localizao

111 Threads

111 Capacidade de Resposta e Escalonabilidade 111 Conceito Multithreading 112 Vantagens do Multithreading

113 Grficos
113 GDI+

UTILIZAO EM CASOS REAIS


115 Tesco
115 115 115 116 117 Introduo Situao Soluo Beneficios Teste

118 GeoVector

118 Soluo 120 Benefcios 120 Futuro

122 Apontamentos Finais

REFERNCIA
124 Informao na Internet 125 Sites
125 125 125 125 125 126 126 126 126 126 127 127 Microsoft MSDN: Microsoft Software Development Network Google ZDNet Reviews CNet Reviews LearnMobile.net Open .NET Compact Framework JWHedgehog-Developmentor .NET Reference DevBuzz DevX GotDotNet .NET Framework Community CSharp Friends Microsoft .NET Compact Framework Definitive Guide to the .NET Compact Framework Mastering Visual Basic .NET VB.NET Developer's Guide Visual Blueprint for Building C# .Net Applications C#.Net Web Developer's Guide Applied Microsoft .NET Framework Programming O'Reilly .NET Framework Essentials

128 Livros e eBooks


128 128 128 129 129 129 130 130 131 131 131 131 131 131 131 131 131 131 132 132 132 132 132 132 132 132

131 Documentos

Windows Mobile Hardware The Visual Studio Vision Top 10 reasons to go with .Net Developing Applications for Windows Mobile: FAQ Microsoft .NET Compact Framework for Mobile Introduction to Development Tools The PC in Your Pocket Taking Control with C# Creating Custom Controls Pocket PC 2002 at home in enterprise Developing Applications Using Web Services Ways Compact Framework Can Access Databases What's New for Developers in Win Mobile 2003 Microsoft Case Studies: Pepsi Bottling Group, The Microsoft Case Studies: Tesco.com Microsoft Case Studies: GeoVector.com Microsoft Preps New Handheld OS ActiveSync 3.6 Download

Introduo

10

INTRODUO
A utilizao de PDAs e de outros aparelhos de pequeno porte tem vindo a aumentar com o avano das tecnologias. Uma das razes desta massificao tm a ver com o contnuo decrscimo do seu custo. A crescente competio entre fabricantes tem provocado preos mais atractivos para os consumidores. Assim, as empresas mais do que nunca, tm em considerao aplicar investimentos nesta rea, tendo em vista a utilizao destes aparelhos a um nmero cada vez maior dos seus empregados. Alm disso, os aparelhos tm-se tornado mais poderosos. A velocidade de processamento cada vez maior, possuem mais memria e capacidades grficas. Incorporam diferentes tecnologias a nvel de comunicao, como o Bluetooth, Wi-Fi, 802.11, ou mesmo PDAs hbridos com telefone que esto aptos a usar operadores mveis atravs de GPRS (General Packet Radio Service) ou CDMA2000 (Comunicaes de Dados por Pacotes). Outro factor impulsionador da utilizao dos PDAs a melhoria na arquitectura do software. Um exemplo disso o .NET Compact Framework. Este motor de execuo responsvel pela gesto das aplicaes .NET em dispositivos portteis. Algumas das vantagens so a interoperabilidade entre linguagens, a melhoria ao nvel de tratamento de erros e a melhoria ao nvel da gesto de memria. O .NET Compact Framework tambm implementa um conjunto de librarias de classes unificadas, orientadas ao objecto, hierarquizadas, extensveis e que podem ser chamadas por qualquer aplicao escrita em qualquer linguagem .NET. O benefcio mais significativo no .NET Compact Framework o facto do modelo de programao ser idntico ao utilizado pelos programadores que usam o .NET para criar aplicaes que se destinam aos PCs de desktop ou a servidores. O .NET Compact Framework implementa um sub-conjunto compatvel com o abrangente .NET Framework. Deste modo, os criadores utilizam as mesmas tcnicas para conseguir resultados semelhantes usando as mesmas ferramentas, tal como o Visual Studio .NET. Antes do .NET o desenvolvimento de aplicaes para o Windows CE necessitava de um conjunto diferente de ferramentas, com tcnicas similares s necessrias na programao Win32 nos desktops, mas suficientemente diferente para que muitas empresas no se interessassem pelo desenvolvimento deste tipo de aplicaes. 11

Agora, os programadores de desktop podem facilmente transferir os seus conhecimentos e tcnicas para o desenvolvimento de aplicaes destinadas a dispositivos portteis, reduzindo os custos de formao. O .NET torna mais fcil fazer coisas simples mas tambm facilita fazer coisas complexas, tais como aceder a servios Web ou construir componentes. Desta forma, sobra mais tempo para criar solues inovadoras. Uma implementao poder ser a utilizao de sistemas distribudos construdos com aplicaes nos aparelhos mveis que acedem a dados em servidores utilizando XML ou utilizando as capacidades do SQL Server CE. Com o custo mais baixo, melhor performance e processos de desenvolvimento melhorado, estes dispositivos tornar-se-o componentes chave em aplicaes empresariais e no s. Requisitos de Sistema: necessrio o seguinte software para desenvolver aplicaes para .NET Compact Framework: - Microsoft Visual Studio .NET 2003; - Microsoft Windows 2000, Microsoft Windows XP ou Microsoft .NET Server. O hardware mnimo necessrio o seguinte: - Pentium2 450 MHz; - Memria RAM: 128MB (Win2000) ou (Windows XP ou .NET Server); - 5GB de espao livre no disco.

256MB

O Visual Studio .NET 2003 inclui um emulador de Windows CE .NET e do PocketPC 2003, de forma que no essencial ter um equipamento real. No entanto, para testar num engenho verdadeiro, necessrio o seguinte software e hardware: - Um aparelho com o PocketPC 2000 ou 2002 ou Windows CE .NET 4.1 e seguintes; - ActiveSync 3.6 ou seguinte; - Um cabo de sincronizao Serial/USB.

12

A PLATAFORMA .NET
Antes do .NET Para mostrar as diferenas do .NET em relao aos modelos de programao anteriores, o cdigo seguinte o exemplo de um componente COM que retorna uma String "Hello, World" quando chamado. utilizado o eMbedded Visual C++ 3 e o Active Template Library (ATL).

HelloWorldProvider.idl import "oaidl.idl"; import "ocidl.idl"; [ object, uuid(1D781DA4-A0AE-4F87-97A4-E8D67678B5FC), dual, helpstring("IHelloWorld Interface"), pointer_default(unique) ] interface IHelloWorld : IDispatch { [propget, id(1), helpstring("property Message")] HRESULT Message([out, retval] BSTR *pVal); }; [ uuid(E0829B73-C513-4509-936D-D905376F4B0C), version(1.0), helpstring("HelloWorldProvider 1.0 Type Library") ] library HELLOWORLDPROVIDERLib { importlib("stdole32.tlb"); importlib("stdole2.tlb"); [ uuid(BE71BAA4-7E78-4178-B00C-4E0D53886989), helpstring("HelloWorld Class") ] coclass HelloWorld { [default] interface IHelloWorld; }; };

13

HelloWorld.h // HelloWorld.h : Declaration of the CHelloWorld #ifndef __HELLOWORLD_H_ #define __HELLOWORLD_H_ #include "resource.h" // main symbols

////////////////////////////////////////////////////////////// // CHelloWorld class ATL_NO_VTABLE CHelloWorld : public CComObjectRootEx<CComSingleThreadModel>, public CComCoClass<CHelloWorld, &CLSID_HelloWorld>, public { public: CHelloWorld() { m_MessageTxt= SysAllocString(L"Hello, World"); } DECLARE_REGISTRY_RESOURCEID(IDR_HELLOWORLD) DECLARE_PROTECT_FINAL_CONSTRUCT() BEGIN_COM_MAP(CHelloWorld) COM_INTERFACE_ENTRY(IHelloWorld) COM_INTERFACE_ENTRY(IDispatch) END_COM_MAP() // IHelloWorld public: STDMETHOD(get_Message)(/*[out, retval]*/ BSTR *pVal); private: BSTR m_MessageTxt; }; #endif //__HELLOWORLD_H_ IDispatchImpl<IHelloWorld, &IID_IHelloWorld, &LIBID_HELLOWORLDPROVIDERLib>

Alm destes, o Wizard gera um grande nmero de outros ficheiros necessrios para a implementao do COM. Os clientes, apesar de mais simples, tambm necessitam de cdigo adicional no caso do Visual C++.

14

HelloWorld.cpp // HelloWorld.cpp : Implementation of CHelloWorld #include "stdafx.h" #include "HelloWorldProvider.h" #include "HelloWorld.h" ////////////////////////////////////////////////////////////// // CHelloWorld STDMETHODIMP CHelloWorld::get_Message(BSTR *pVal) { CComBSTR tbstr; tbstr=m_MessageTxt; *pVal=SysAllocString(tbstr); return S_OK; } HelloWorld.bas Option Explicit Dim comServer As Object Sub Main() Dim aMsg Set comServer = CreateObject("HelloWorldProvider.HelloWorld") aMsg = comServer.Message MsgBox aMsg End Sub

Servidor HelloWorld em .NET Este o cdigo para os mesmos servidores e clientes em .NET. No eMbedded Visual Tools no era possvel criar um servidor COM utilizando o Visual Basic, mas aqui o cdigo do servidor foi escrito nesta linguagem.

HelloWorldProvider.vb Namespace HelloWorldProvider Public Class HelloWorld Public ReadOnly Property Message() As String Get Return "Hello, World" End Get End Property End Class End Namespace

15

Client.cs using System.IO; using HelloWorldProvider_NET.HelloWorldProvider; namespace ClientCsharp { class Client { static void Main(string[] args) { HelloWorld myServer; myServer = new HelloWorld(); string aMsg = myServer.Message; // Write the greeting to a file StreamWriter sr = File.CreateText(@"\My Documents\Greeting.txt"); sr.WriteLine(aMsg); sr.Close(); } } }

Client.vb Imports System.IO Imports HelloWorldProvider_NET Module Client Sub Main() Dim myServer As HelloWorldProvider.HelloWorld myServer = New HelloWorldProvider.HelloWorld Dim aMsg As String = myServer.Message ' Write the greeting to a file Dim sr As StreamWriter sr = File.CreateText("\My Documents\Greeting.txt") sr.WriteLine(aMsg) sr.Close() End Sub End Module

O principal benefcio do .NET foi ilustrado neste exemplo, e a sua simplicidade. possvel escrever componentes em qualquer linguagem suportada pelo .NET e muito simples escrever um componente que pode ser utilizado por qualquer outra linguagem compatvel com o .NET. Tal possvel porque todas estas linguagens so construdas tendo como base o mesmo sistema. A baixo nvel, os tipos de objecto de cada linguagem so exactamente os mesmos.

16

Outra vantagem, que inclusiv se pode observar neste exemplo, que tanto o Visual Basic como o C# usam as mesmas classes (StreamWrite e o File). Assim, no necessrio aprender todo um novo conjunto de funes de runtime. Neste exemplo, fica-se com a ideia de que o COM apenas um modo de desenvolver componentes em mltiplas linguagens, no entanto mais do que isso. O Distributed COM (DCOM) permite ter acesso a COMs atravs de qualquer tipo de rede. O .NET introduz o .Net Remoting que representa um avano substancial em relao ao DCOM. Concluso das Vantagens do .NET O .NET no tem somente a vantagem de implementar componentes facilmente. Um dos seus grandes atributos a fiabilidade do cdigo gerado. As aplicaes contrudas com o .NET quando executadas so controladas pelo Common Language Runtime (CLR). O CLR compila todo o cdigo em runtime, com a utilizao do Just-In-Time (JIT). Aloca memria quando se cria novos objectos e faz o garbage collection dos objectos que no so mais necessrios, libertando automaticamente a memria. Como o CLR compila todo o cdigo no momento de execuo, implementa medidas restritas na verificao de tipo de dados. Assim, no possvel surgirem erros tais como, o de castings inseguros de um objecto para outro, o endereamento de um array fora dos seus limites ou escrever para alm do fim de um buffer. O CLR tambm faz a gesto ao nvel da segurana, exercendo um controlo das funes que so permitidas executar e os recursos a que pode ter acesso um pedao de cdigo. .NET Compact Framework O .NET Compact Framework uma verso mais compacta da abrangente verso .NET Framework para os desktops. Inclui um sub-conjunto compatvel das classes base do .NET Framework. Tambm engloba algumas novas classes especialmente destinadas a aparelhos mveis. Compreende ainda uma nova implementao do Common Language Runtime (CLR), concebido de raiz para correr eficazmente em hardware de pequenas dimenses, com restries de memria e processamento, e com limitaes no consumo de bateria.

17

O primeiro lanamento do .NET Compact Framework destinou-se aos aparelhos com o PocketPC 2000 e PocketPC 2002, e aparelhos Windows CE .NET 4.1 ou seguintes. Futuramente, espera-se que seja igualmente utilizado em SmartPhones e outros engenhos. Os operadores de telecomunicaes e de transmisso de dados, podero fornecer as suas prprias librarias, permitindo aos criadores de software desenvolver aplicaes direccionadas especificidade dos servios que oferecem. O .NET Compact Framework foi desenvolvido com uma ideia de portabilidade. Assim possvel, que de futuro, esteja disponvel tambm em outros sistemas operativos no pertencentes Microsoft. O Visual Studio .NET 2003 inclui o software e ferramentas necessrias para criar aplicaes que correm em aparelhos que tenham o .NET Compact Framework instalado. Na sua instalao tambm so copiados os componentes indispensveis para instalar o .NET Compact Framework num aparelho porttil. Tal como o .NET Compact Framework, o ASP.NET Mobile Controls, anteriormente denominado Microsoft Mobile Internet Toolkit (MMIT), permite igualmente criar aplicaes que podem ser utilizadas em aparelhos mveis. No entanto, as aplicaes do .NET Compact Framework correm no aparelho como clientes com mais potencialidade, com acesso aos recursos da mquina, tal como armazenamento e outros componentes de hardware. Nas aplicaes de ASP.NET, o nico software em execuo no aparelho um Browser de Internet. SQL Server CE O SQL Server CE uma verso compacta de uma base de dados relacional que corre em aparelhos equipados com o Windows CE. compatvel com o SQL Server atravs da utilizao de tipos de dados compatveis. Ocupa apenas 800KB num processador ARM, que adequado para aparelhos fisicamente limitados. A segunda verso do SQL Server CE suporta ainda mais funes intrnsecas que a verso anterior. Funes tais como ABS, Log, Pi, Substring e atributos tais como queries e unions parametrizados. No entanto, a caracterstica mais importante o namespace System.Data.SqlServerCe, que permite que uma base de dados SQL Server CE seja manipulada a partir de aplicaes .NET Compact Framework.

18

As suas classes do acesso directo informao armazenada na base de dados e permitem a utilizao do Remote Data Access (RDA) e de Merge Replication, que so duas tcnicas poderosas que possibilitam replicar dados de um SQL Server de uma empresa para o SQL Server CE do PDA para posteriormente serem utilizados nas suas aplicaes. ASP.NET Mobile Controls O ASP.NET Mobile Controls permite utilizar o Visual Studio .NET para desenvolver aplicaes destinadas a aparelhos mveis tendo como finalidade os Browsers dos PDAs, SmartPhones, WAP e I-Mode Phones. O ASP.NET Mobile Controls e ferramentas de desenvolvimento eram anteriormente denominados Microsoft Mobile Internet Toolkit (MMIT) e foram lanados no mesmo dia que o Visual Studio .NET 2002. Estavam disponveis para download em separado a partir da pgina do MSDN da Microsoft como um componente Add-On do Visual Studio. Com o lanamento do Visual Studio .NET 2003, o desenvolvimento de aplicaes Web Mobile tornou-se uma parte totalmente integrante do IDE (Integrated Development Environment) e no mais um produto separado. As aplicaes so executadas num IIS Web Server que tem instalado o .NET Compact Framework, mas no necessrio o .NET nos dispositivos de pequeno porte. As aplicaes MMIT funcionam perfeitamente com o Pocket Internet Explorer que se encontra no PocketPC e em outros equipamentos com o Windows CE. Mas, ao contrrio das aplicaes .NET Compact Framework, nenhum cdigo executado na mquina. Mobile Information Server Existem duas verses do Mobile Information Server (MIS), o Carrier Edition e o Enterprise Edition. O MIS permite aos utilizadores mveis com o PocketPC ou telefones com WAP, sincronizar com um Microsoft Exchange Server, recebendo e-mails e outras mensagens. Tambm oferece capacidades de autenticao de clientes. Durante 2003, MIS deixar de ser um produto individual e ser integrado com o Exchange e no Microsoft ISA Server (Internet Security And Acceleration Server).

19

Plataformas para o .NET Compact Framework A primeira verso do .NET Compact Framework suporta os sistemas Power PC, assim como solues integradas, construdas com base no Windows CE .NET. suportado nas seguintes plataformas da Microsoft: - PocketPC 2000 - PocketPC 2002 - PocketPC 2002 Phone Edition - PocketPC .NET - Windows CE .NET verso 4.1 e seguintes Plataformas No Suportadas O .NET Compact Framework no suportado pelas seguintes plataformas: - Windows CE verso 3 e anteriores - Handheld PC 2000 e anteriores - Microsoft SmartPhone 2002

20

HARDWARE
H um constante aperfeioamento do hardware capaz de correr aplicaes baseadas na plataforma .NET. Neste momento, Setembro de 2003, as especificaes mais comuns neste tipo de aparelhos so processadores Intel Xscale de 400MHz, com 64MB de RAM, ecrs de 240 pixeis de largura e 320 de altura e 64 mil cores. Equipados com capacidades wireless 802.11 e BlueTooth. Estas caractersticas certamente que em alguns meses se encontraro ultrapassadas e em poucos anos completamente obsoletas. Os avanos tecnolgicos iro dotar estas mquinas de mais e melhores capacidades, capazes de realizar funes mais complexas e abrangentes com maior rapidez e qualidade. Estes so alguns dos dispositivos disponveis nos mercados mundiais de momento. So descritos a marca, o modelo e as especificaes mais importantes, tais como o tipo e velocidade do processador, quantidade de memria, caractersticas do ecr, capacidades na transferncia de dados, etc.

21

Hewlett-Packard iPAQ h5550

Processador

Intel XScale Processor 400 MHz


Memria

RAM: 128MB ROM: 48MB 3.8" Retro-Iluminado; Sensvel ao toque 65000 Cores; Resoluo: 240x320 13,5 x 8,2 x 1,5 inches; 207 gramas Removable Lithium-Ion Slot SD Integrados BlueTooth; 802.11b; IRDA; USB

Ecr

Dimenses / Peso Bateria

Expansibilidade Comunicao

22

Compaq iPAQ 3955

Processador

Intel XScale Processor 400 MHz


Memria

RAM: 64MB ROM: 32MB 3.5" Retro-Iluminado 65000 Cores; Resoluo: 240x320 12,2 x 7,6 x 1,0cm; 130 gramas 12 horas Compact Flash Integrado BlueTooth

Ecr

Dimenses Bateria

Expansibilidade Comunicao

23

Asus MyPal A600

Processador Memria

Intel XScale Processor 400 MHz RAM: 64MB ROM: 32MB

Ecr

3.5" Reflexivo 65000 Cores; Resoluo: 240x320 12,5 x 7,5 x 1,2cm; 138 gramas

Dimenses Bateria

15 horas; Rechargeable Lithium Polymer Slot SD Integrado

Expansibilidade

24

Toshiba e740

Processador

Intel XScale Processor 400 MHz


Memria

RAM: 64MB ROM: 32MB 3.5" Sensvel ao toque 65000 Cores; Resoluo: 240x320 12,2 x 7,7 x 1,5cm; 173 gramas Advanced Lithium-Ion Slot SD Integrados BlueTooth; WiFi Opcional; IRDA; USB

Ecr

Dimenses / Peso Bateria

Expansibilidade Comunicao

25

ViewSonic PocketPC V36

Processador

Intel XScale Processor 300 MHz


Memria

RAM: 64MB ROM: 32MB 3.5" Retro-Iluminado TFT; Sensvel ao toque 65000 Cores; Resoluo: 240x320 12,2 x 7,6 x 1,0cm; 130 gramas 10 horas; Advanced Lithium-Ion Slot SD/MMCard Integrados BlueTooth; WiFi Opcional; IRDA; USB

Ecr

Dimenses Bateria

Expansibilidade Comunicao

26

Siemens SX56 (PocketPC Phone Edition)

Processador Memria

Intel StrongARM 32-bit 206MHz RAM: 32MB ROM: 32MB

Ecr

3.5" Retro-Iluminado; Sensvel ao Toque 4096 Cores; Resoluo: 240x320 12,5 x 7,0 x 1,7cm; 193 gramas

Dimenses Bateria

15 horas; Lithium Ion Slot SD Integrado GPRS; GSM; IRDA

Expansibilidade Comunicao

27

Proximus Qtek 1010 (PocketPC Phone Edition)

Processador

Intel StrongARM 32-bit 206MHz


Memria

RAM: 32MB ROM: 32MB 3.5" Reflexivo 4096 Cores; Resoluo: 240x320 12,9 x 7,3 x 1,8cm; 200 gramas 15 horas; Rechargeable Lithium Polymer Slot SD/MMCard Integrados GPRS; GSM; IRDA; USB

Ecr

Dimenses Bateria

Expansibilidade Comunicao

28

FERRAMENTAS
DE DESENVOLVIME NTO

FERRAMENTAS
H actualmente trs ferramentas distintas para o desenvolvimento de aplicaes para o PocketPC e Windows CE. Visual Studio .NET 2003 O Visual Studio .NET 2003 inclui capacidades que possibilitam escrever cdigo e fazer o debug de aplicaes para o .NET Compact Framework. Estas ferramentas e as tcnicas utilizadas so exactamente as mesmas que so usadas no desenvolvimento de aplicaes para o abrangente .NET Framework. Todavia, utiliza-se as librarias das classes de base do .NET Compact Framework que so um sub-conjunto das do .NET Framework geral. Quando se testa uma aplicao em desenvolvimento, os resultados so exibidos ou num dispositivo mvel ou num emulador e o debug realizado remotamente usufruindo das capacidades de debug do Visual Studio .NET. Tanto o .NET Framework como o .NET Compact Framework fornecem uma abstraco das capacidades oferecidas pelo Sistema Operativo que se tem por base. Quer seja Windows 95, Windows 98, Windows ME, Windows NT, Windows 2000, Windows XP para o .NET Framework ou o Windows CE, Windows CE.NET para o .NET Compact Framework. Antes do .NET trabalhava-se directamente com o Win32 API do sistema operativo, tornando o desenvolvimento para o Windows CE uma rea de especializao da programao. Agora possvel para tarefas similares, a utilizao das mesmas ferramentas que no desenvolvimento das aplicaes para desktop. Assim, esta rea torna-se mais atractiva economicamente para as empresas, j que diminuram os gastos dispendidos na formao de pessoal para este tipo de projectos. No entanto, existem algumas particularidades que requerem tcnicas especiais. Quer devido s dimenses fsicas do ecr, quer s tcnicas de enviar e retirar dados do aparelho ou implicaes ao nvel da segurana. Tambm preciso adoptar solues que protejam os dados sensveis pertencentes empresa e que podem ser interceptados numa comunicao ou facilmente perdidos ou roubados juntamente com o aparelho.

30

Existem situaes que podem levar o programador que desenvolve a aplicao a precisar trabalhar fora do ambiente .NET Compact Framework, como por exemplo nos casos em que necessrio: - Ter acesso directo API Win32 de modo a executar funes no disponveis nas librarias do .NET Compact Framework. - Aceder a objectos COM. No .NET Compact Framework no possvel aceder directamente a objectos COM. necessrio utilizar o eMbedded Visual C++ para criar um invlucro que permita executar chamadas s funes do objecto. - Interagir com DLLs fornecidas por fabricantes de perifricos. Quando os fabricantes disponibilizarem librarias .NET, estes perifricos j podero ser directamente controlados. eMbedded Visual Tools Version 3 um ambiente de desenvolvimento que funciona por si s, ou seja, no necessita do .NET ou de mais ferramentas e que transmite um aspecto similar ao Visual Studio 6. Inclui o eMbedded Visual Basic e o eMbedded Visual C++, incluindo SDKs para o PocketPC, Palm-size PC e Handheld PC. O eMbedded Visual Tools utilizado para desenvolver aplicaes que o .NET Compact Framework no suporta. Tambm se deve ter esta ferramenta em considerao, quando se pretende desenvolver cdigo com melhor performance ou quando se pretende controlar o hardware directamente ou os servios do sistema operativo. Neste caso, utiliza-se o eMbedded Visual C++ que, com o seu acesso directo, consegue ultrapassar o .NET em termos de velocidade. eMbedded C++ Version 4 A verso 4 do eMbedded C++ tal como o seu antecessor um IDE que permite desenvolver aplicaes nativas utilizando o Win32 API, o Microsoft Foundation Classes (MFC) e ATL. No entanto, a verso 4 apenas funciona com o Windows CE .NET. O Visual Studio .NET Para Aparelhos Mveis Utiliza-se o Visual Studio .NET 2003 para desenvolver aplicaes para o .NET Compact Framework. Esta possibilidade apenas foi incluida nesta verso do Visual Studio, dando a vantagem de permitir aos programadores j ambientados com a plataforma .NET, de desenvolver aplicaes para aparelhos mveis. 31

AMBIENTE DE DESENVOLVIMENTO
Como Criar um Projecto A maneira de criar um projecto para uma aplicao para PocketPC a mesma que para criar uma aplicao de desktop. A principal diferena que s depois de se escolher a plataforma em que se vai trabalhar, que se pode escolher o tipo de projecto (por exemplo: Windows Application ou Class Library). Cria-se um projecto de uma aplicao Smart Devices, indo ao menu File e seleccionando New e em seguida Project.

Figura 1 - Janela de Novo Projecto

Aparece a janela de dilogo de novo projecto. Selecciona-se ento a linguagem que se vai utilizar no projecto a partir do painel do lado esquerdo. O painel do lado direito lista os templates disponveis da linguagem seleccionada. Escolhe-se ento o template Smart Device Application para criar um projecto para aparelhos mveis. O Visual Studio .NET 2003 suporta as linguagens Visual Basic .NET e o C#. Digita-se o nome para o projecto e a localizao dos seus ficheiros.

32

Smart Device Application Wizard Depois de criar o novo projecto, escolhe-se a plataforma em que se vai trabalhar e o tipo de projecto para aplicao com o Smart Device Application Wizard.

Figura 2 - Wizard para o Projecto

A seco superior lista as plataformas disponveis e o lado direito, os dispositivos instalados no sistema que so capazes de correr as aplicaes para esse tipo de plataforma. A parte de baixo lista os tipos de projecto disponveis para a plataforma seleccionada. Tipos de Projecto para uma aplicao de aparelhos mveis (Smart Device Application): Cria uma aplicao com o Windows Forms que permita a entrada e visualizao de informao. Cria uma libraria de classes de modo a ser usado pelos programadores nos seus projectos. Cria um projecto sem elementos grficos que pode ser utilizado numa tarefa que corra em background, e que no tenha necessidade de interaco com o utilizador. Cria um projecto sem elementos grficos e que pode ser chamado a partir da consola de comandos do Windows CE.
Empty Project Console Application (apenas Windows CE) Non-Graphical Application (apenas PocketPC) Class Library Windows Application

Cria um projecto que no tem ficheiros.

33

O Wizard gera os ficheiros para o projecto seleccionado e mostra o ambiente de trabalho que tem por defeito.

Figura 3 - Ambiente de Trabalho

Diferenas entre os Projectos de Desktop e de Device Algumas funcionalidades que esto acessveis para as aplicaes de desktop, no se encontram disponveis para os projectos de Smart Devices. As principais diferenas so: - O Input/Output de ficheiros no Visual Basic .NET: - Os projectos de Device apenas suportam o .NET System.IO namespace, no sendo suportado o .NET Microsoft.VisualBasic.FileSystem namespace; - No suportado o COM interop; - No suportado o uso do Visual Basic .NET late binding. Gerir o Projecto O ambiente de desenvolvimento do Visual Studio .NET assemelha-se bastante ao que apresentado quando se desenvolve uma aplicao para desktop. No entanto, o SDE (Smart Devices Environment) no dispe de acesso a todos os controls disponveis para o desktop.

34

Figura 4 - Toolbox do SDE

Um projecto SDE suporta os seguintes controls: - Button, CheckBox, ComboBox, ContextMenu, Control, DomainUpDown, Form, DataGrid, HScrollBar, ImageList, InputPanel, Label, ListBox, ListView, MainMenu, NumericUpDown, OpenFileDialog, Panel, PictureBox, ProgressBar, RadioButton, SaveFileDialog, StatusBar, TabControl, TextBox, Timer, ToolBar, TrackBar, TreeView, VScrollBar. Todavia, o .NET Compact Framework no suporta todos os membros destes controls.

35

Sistema de Ajuda possvel encontrar documentao e ajuda sobre os controls e aspectos do Visual Studio na janela do Dynamic Help. Ou ento, atravs da tecnologia IntelliSense que mostra a sntaxe do comando que se est a digitar, usando janelas de pop-up e listas drop-down. O sistema de ajuda do Visual Studio est preparado para restringir a procura e a amostra de resultados apenas ao contexto do .NET Compact Framework e SDE. Para isso, basta activar o filtro existente na lista drop-down que est disponvel tanto no Contents, como no Index e nas Search pages.

Figura 5 - Dynamic Help

Aplicao Hello World Tal como em qualquer linguagem, uma maneira til de expor uma pequena amostra do seu funcionamento, utiliza-se o exemplo do Hello World. Para iniciar o desenvolvimento da aplicao, executa-se o Visual Studio .NET e cria-se um novo projecto em File/New/Project. Na janela de dilogo selecciona-se Visual C# Projects e Smart Devices Application.

36

Figura 6 - Criao do Projecto HelloWorld

Como nome do projecto coloca-se HelloWorld e faz-se a escolha da localizao dos ficheiros do projecto. Aps clicar em OK, na janela de Wizard optamos pelo PocketPC como plataforma e Windows Application como o tipo de projecto.

Figura 7 - Escolha do Tipo de Projecto

Utilizando o ToolBox adicionada uma Label Form1. A Label expandida de modo a cobrir a metade superior da Form1. Depois de seleccionada a Label, altera-se a propriedade FontSize para 48 e apaga-se o texto da propriedade Text. Novamente utilizando o ToolBox, adiciona-se um Button no fundo da Form1. Altera-se a propriedade Size para 100, 50 e o Text para Say Hello.

37

Figura 8 - Form da Aplicao HelloWorld

Ao fazer duplo clique no Button1 criado um procedimento click-event. Coloca-se ento o cdigo seguinte que atribui o texto Hello World propriedade Text da Label1.
Label1.Text = Hello World;

Figura 9 - Cdigo da Aplicao

Grava-se o ficheiro para depois testar a aplicao utilizando o Emulador.

38

O EMULADOR E AS COMUNICAES
Utilizao do Emulador Para testar uma aplicao, pode-se fazer uso de um aparelho directamente ligado ao computador em que se est a desenvolver ou atravs de uma ligao em rede. Caso no tenha acesso a um aparelho pode-se utilizar o emulador includo no Visual Studio .NET 2003. O emulador simula um dispositivo com o PocketPC ou Windows CE .NET. Mesmo assim, aps terminada, a aplicao deve ser sempre testada num dispositivo real antes de ser entregue ao cliente.

Figura 10 - Emulador PocketPC 2002

39

Desenvolvimento de Aplicaes numa Rede Para que a aplicao seja colocada no emulador, o computador de desenvolvimento tem de ter uma conexo activa. Caso contrrio, ou por no ter um carto de rede ou por no estar ligado a uma rede, necessrio instalar o Microsoft Loopback Adapter para simular a ligao. O emulador um PocketPC real que corre como um processo na mquina. Logicamente, um aparelho separado em que o Visual Studio .NET e o PocketPC comunicam atravs de protocolos de rede. Utilizando o Emulador PocketPC Para testar a aplicao Hello World no Emulador do PocketPC selecciona-se Start a partir do menu de Debug. Na janela de Deploy so listados os dispositivos que suportam o tipo de projecto corrente. Selecciona-se o PocketPC Device e clica-se no boto de Deploy. O Visual Studio ir fazer o build da aplicao e iniciar a aplicao no Emulador. Ao clicar no boto HelloWorld ir aparecer na Label a mensagem Hello World.

Figura 11 - Aplicao HelloWorld em Execuo

40

Especificidades dos Aparelhos Mveis O .NET Compact Framework possibilita um maior acesso ao desenvolvimento para dispositivos mveis a um maior nmero de programadores, em virtude da sua consistncia em relao ao modelo de programao destinado aos desktops. No entanto, restam algumas consideraes a ter face ao desenvolvimento e concepo para aparelhos mveis. Transferncia de Dados Os equipamentos portteis como os PocketPC oferecem gesto e sincronizao de dados pessoais que do acessos mveis a e-mails, agendas e calendrios. Todavia, num dispositivo com uma boa conectividade, a capacidade de transferncia de dados de e para o aparelho proporciona grandes potencialidades s aplicaes. No entanto, existem alguns factores a ter em conta no que diz respeito s aplicaes mveis, como a frequncia em que os dados so transferidos de e para o dispositivo, por exemplo se dirio ou est permanentemente ligado a uma rede. Tambm se deve ter em ateno se a conectividade rede fivel, pois em caso contrrio ser necessrio guardar os dados na cache do aparelho, para serem transmitidos assim que possvel. XML Web Services XML Web Services redefinem o modo como os sistemas informticos funcionam. Construdo sobre linguagens standard de XML e HTTP, o XML Web Service proporciona um modelo simples de oferecer servios atravs da rede. Assim, permite que servidores de diferentes plataformas se liguem a servios em qualquer lugar da rede. Com o alargamento do XML Web Services tambm aos dispositivos mveis, desde que estes tenham uma ligao Web, as aplicaes nos aparelhos tero acesso a uma multiplicidade de servios e dados. Para alm disso, permite enviar dados de volta para os servidores de uma empresa. SQL Server CE Enquanto o XML Web Services possibilita solucionar a transferncia de dados, o SQL Server CE permite fazer uso das classes disponveis no System.Data.SqlServerCE, aceder a dados em servidores SQL remotos, descarreglos para o dispositivo, proceder a consultas e alteraes 41

enquanto desconectado e possibilitando o posterior envio e actualizao das alteraes efectuadas. Dispositivos Com Recursos Limitados Devido s especificidades prprias dos PDAs e dispositivos mveis, estes so aparelhos pequenos, possuindo uma rea de visualizao diminuta, e com memria reduzida. Dependem de bateria com uma durao limitada, que dever prolongar-se no mximo perodo de tempo possvel. Tem que se ter em conta que, a no ser nos casos em que a aplicao corra num hardware com um teclado, na maioria das vezes a interaco feita atravs de uma caneta. Estas caractersticas nicas trazem implicaes ao nvel de concepo no que diz respeito ao desenvolvimento do interface. Assim, fazem-se uso de tcnicas de seleco fcil, tal como listas de drop-down, e um interface que limite a quantidade de introduo de texto por parte do utilizador. aconselhvel ter sempre em considerao a utilizao de memria por parte da aplicao. E se for necessrio manter objectos de grandes dimenses em memria, deve-os libertar assim que possvel. No PocketPC no existe um boto de sada da aplicao e esta tende a correr continuamente, a janela da aplicao fica em background enquanto as outras esto a correr. Implicaes a Nvel da Segurana particularmente importante ter em ateno a segurana no que concerne as aplicaes para aparelhos mveis, pois existem muitas possiveis falhas de segurana nestes dispositivos. Por isso, imperativo que esta ideia esteja presente desde a primeira fase do projecto de modo a evitar estas situaes. Os dados podem ter que ser encriptados quando transferidos de e para o aparelho atravs do XML Web Services e os dados podero ter que estar encriptados no aparelho e protegidos por password ou com mtodos biomtricos tal como leitura de impresses digitais. Os clientes devero de ser autenticados quando acedem a dados confidenciais em IIS ou SQL Server.

42

CONTROLS DA WINDOWS FORMS

43

WINDOWS FORMS
O interface de uma aplicao um aspecto importante no desenvolvimento de um software. Quer num sistema desktop quer num PocketPC, a aplicao deve dar ao utilizador uma experincia intuitiva e com bom feedback. A libraria Windows Form um conjunto de classes orientada ao objecto especificamente para dotar o programador de ferramentas que permitem construir interfaces mais ricos e poderosos. Inclui desde botes e caixas de texto at controls mais complexos como o TreeView e TabControl, assim como caixas de dilogo frequentemente utilizadas para abrir ou gravar documentos. Todos os controls so baseados numa arquitectura hierrquica comum, que permite desenvolver mais facilmente controls prprios ou acrescentar funcionalidades aos j existentes. As classes do Windows Forms assumem uma importncia ainda maior, j que so os mesmos controls utilizados no abrangente Visual Studio .NET Framework. Deste modo, os programadores podem rapidamente desenvolver interfaces, accionando e arrastando controls, definir as suas propriedades, escrever cdigo para quando se despoleta um evento. Tudo isto da mesma forma que tm vindo a fazer desde h anos no Visual Studio. Criao de Controls O Forms Designer permite arrastar e largar controls desde a ToolBox directamente para uma Form. Ento, possvel alterar o tamanho, posio e outras propriedades desses controls. tambm possvel instanciar controls em runtime atravs de cdigo. O exemplo seguinte mostra como criar um boto em runtime, definindo a sua posio em relao form, e adicionando-a coleco de Controls da Form.
System.Windows.Form.Button submitButton = new Button(); submitButton.Location = new Pount(100,100); submitButton.Text = Submit; this.Controls.Add(submitButton);

44

Membros dos Controls Como os controls do .NET Compact Framework so um sub-conjunto dos controls no .NET Framework, grande parte das propriedades, eventos e mtodos so idnticos na sua utilizao. Mas, algumas das funcionalidades foram excludas do .NET Compact Framework devido limitao ao nvel de recursos ou porque tal funcionalidade no aplicvel para o desenvolvimento de aplicaes para PocketPC. Propriedades possvel definir as propriedades de um control utilizando a janela de propriedades durante o design-time ou atravs de cdigo em runtime. Para definir as propriedades em design-time basta clicar no control que se pretende, escolher a propriedade e introduzir o valor pretendido ou clicar numa lista de valores possiveis. Mtodos Cada control tem um conjunto de mtodos prdefinidos que possibilitam exercer as funcionalidades prprias a cada um. Existem mtodos comuns a vrios controls, estes mtodos desempenham a mesma funo mas de acordo com o control em causa. Eventos Para tratar de um determinado evento cria-se um mtodo contendo o cdigo a ser executado quando esse evento ocorre, interligando depois esse mtodo ao evento. Tambm possvel criar o mtodo do evento de um control ao fazer um duplo-clique sobre o control no Forms Designer. Esta aco cria o mtodo correspondente ao evento primrio de um control. Ou seja, o evento mais provvel de ser utilizado no control. Por exemplo, no caso de um Button, o evento mais provvel

45

CONTROLS
Descrio e exemplos de cdigos dos controls disponveis de base no .NET Compact Framework. Button O control button um dos mais utilizados numa aplicao de Windows. Um button pode ser clicado com o rato ou com o stylus. Tal aco faz com que o control despolete o evento Click.

Figura 12 - Button

46

CheckBox O control CheckBox normalmente utilizado para apresentar uma opo de Verdadeiro/Falso ou de Sim/No. A propriedade Checked indica o estado actual do control (Verdadeiro/Falso).

Figura 13 - CheckBox

A propriedade CheckState.Checked verifica igualmente se a caixa est seleccionada atravs dos valores CheckState.Unchecked e CheckState.Check. Mas h ainda um terceiro estado para esta propriedade, o CheckState.Indeterminate que fica disponvel ao colocar a propriedade ThreeState a true. Se a propriedade CheckedState estiver em CheckState.Indeterminate o control aparece seleccionado mas acizentado.
checkBox1.ThreeState = true; checkBox1.CheckState = CheckState.Indeterminate; checkBox1.AutoCheck = false;

47

ComboBox O ComboBox uma boa maneira de proporcionar vrias escolhas ao utilizador enquanto conserva espao de visionamento. Quando o utilizador clica no control listado um conjunto de opes.

Figura 14 - ComboBox

possvel adicionar itens ComboBox em design-time atravs da propriedade Itens na janela de propriedades. Ou ento, no cdigo atravs do mtodo Add da coleco Itens.
comboBox.Items.Add(Item 1); comboBox.Items.Add(Item 2);

A propriedade SelectedIndex indica o ndex do item seleccionado. Se esta propriedade for definida no cdigo, o item aparecer seleccionado. Se nenhum item estiver seleccionado esta propriedade retorna -1. A propriedade SelectedItem similar mas retorna uma referncia ao item seleccionado.
// Item seleccionado com SelectedIndex label1.Text = (string)comboBox1.Items[comboBox1.SelectedIndex]; // Item seleccionado com SelectedItem label2.Text = (string)comboBox1.SelectedItem;

48

ContextMenu O ContextMenu permite construir menus de pop-up associados a um control, que so activados no PocketPC por tap-and-hold.

Figura 15 - ContextMenu

Exemplo da criao de uma ContextMenu e a sua atribuio a uma TextBox:


// criar objecto ContextMenu System.Windows.Forms.ContextMenu ConMenu = new ContextMenu(); // criar itens System.Windows.Forms.MenuItem menuItem1 = new MenuItem(); menuItem1.Text = "&Paste"; System.Windows.Forms.MenuItem menuItem2 = new MenuItem(); menuItem1.Text = "&Cut"; // adicionar items ao ContextMenu ConMenu.MenuItems.Add(menuItem1); ConMenu.MenuItems.Add(menuItem2); // inferir o ContextMenu TextBox textBox1.ContextMenu = ConMenu;

DataGrid Este control apresenta dados a partir de uma tabela de dados ou de uma coleco. O programador pode seleccionar quais as colunas a visualizar da tabela de dados, definir a largura da coluna e o texto do cabealho. Pode controlar os eventos que so despoletados quando o utilizador selecciona uma linha ou uma clula.

49

A propriedade DataSource deste objecto pode funcionar como a origem dos dados para serem exibidos num objecto DataTable, DataView, ArrayList ou em qualquer componente que implemente os interfaces IListSource ou IList.
// myDataSet may contain more than one DataTable DataTable myDataTable = myDataSet.Tables[Customers]; DataGrid.DataSource = myDataTable;

Os utilizadores podem seleccionar uma das linhas ao carregar na coluna da esquerda ou ento podem seleccionar uma s clula. possvel detectar quando um utilizador carrega em qualquer parte do control atravs do evento MouseUp. So passadas as coordenadas X e Y de onde o utilizador carregou. O mtodo HitTest retorna o objecto HitTestInfo que tem as propriedades Type, Row e Column que, por sua vez, retornam informao acerca da clula em que o utilizador carregou. A propriedade HitTestInfo.Type retorna um dos valores Cell, ColumnHeader, ColumnResize, RowHeader, RowResize ou None.
private void Grid_MouseUp(object sender, MouseEventArgs e) { // Get the DataGrid by casting sender. DataGrid myGrid = (DataGrid)sender; // Create a HitTestInfo object using the HitTest method. DataGrid.HitTestInfo myHitInfo = myGrid.HitTest(e.X, e.Y); Console.WriteLine(myHitInfo); Console.WriteLine(myHitInfo.Type); Console.WriteLine(myHitInfo.Row); Console.WriteLine(myHitInfo.Column); if (myHitInfo.Type == DataGrid.HitTestType.Cell) { Console.Write("Data: "); object celldata = myGrid[myHitInfo.Row, myHitInfo.Column]; Console.WriteLine(celldata.ToString()); } }

Permite obter ou ento estabelecer a clula que est seleccionada. S possvel utilizar esta propriedade em runtime. O DataGrid posiciona-se de forma a mostrar a clula caso esta no esteja visvel.

CurrentCell

50

// Set focus to cell 3,5 myGrid.CurrentCell = new DataGridCell(3,5);

BackColor, ForeColor, GridLineColor, HeaderBackColor, HeaderForColor, SelectionBackColor, SelectionForColor

Formatam as cores do control. Determinam se os cabealhos das colunas e indicadores de linha estaro visveis.
ColumnHeadersVisible, RowHeadersVisible

os

Para definir as propriedades de cada uma das colunas, tais como o ttulo e a largura, necessrio criar uma instncia da classe DataGridTableStyle e adicionar a instncia DataGridColumnStyle para cada uma das colunas. Depois adicionar a DataGridTableStyle propriedade TableStyles da classe DataGrid.
GridTableStyle tsl = new GridTableStyle(); tsl.MappingName = Customers; /* Add a GridColumnStyle and set its MappingName to the name of a DataColumn in the DataTable. Set the GeaderText and Width properties. */ DataGridColumnStyle boolCol = new DataGridTextBoxColumn(); boolCol.MappingName = Current; boolCol.HeaderText = IsCurrent Custumer; boolCol.Width = 150; // Add a second column style DataGridColumnStyle TextCol = newDataGridTextBoxColumn(); TextCol.MappingName = CustName; TextCol.HeaderText = Custumer Name; TextCol.Width = 250; tsl.GridColumnStyles.Add(TextCol) /* Add the DataGridTableStyle instance to the GridTableStyleCollection. */ dataGrid1.TableStyles.Add(tsl);

DomainUpDown O control DomainUpDown muito similar aos controls ComboBox e ListBox mas ocupa muito pouco espao, o que ideal para aplicaes PocketPC. Permite ao utilizador fazer uma seleco a partir de uma lista de objectos. O control chama o mtodo ToString para cada objecto, de modo a retornar o texto que exibe. Visualmente, parecido com uma TextBox com um par de botes para mover num e noutro sentido da lista. A desvantagem em relao ComboBox e ListBox o facto de o utilizador no poder visualizar todos os itens da lista. 51

Figura 16 - DomainUpDown ReadOnly

Se estiver True, apenas os itens da lista podem ser seleccionados. Se estiver False o utilizador pode introduzir texto que no est na lista. Indica ou define qual o item que est seleccionado. Por defeito tem o valor -1 indicando que nenhum item est seleccionado.
private void Form1_Load(object sender, System.EventArgs e) { domainUpDown1.Items.Add("Item 1"); domainUpDown1.Items.Add("Item 2"); domainUpDown1.Items.Add("Item 3"); domainUpDown1.Items.Add("Item 4"); domainUpDown1.ReadOnly = true; } private void domainUpDown1_SelectedItemChanged(object sender, System.EventArgs e) { label1.Text = domainUpDown1.SelectedIndex.ToString(); label2.Text domainUpDown1.Items[domainUpDown1.SelectedIndex].ToString(); } = SelectedIndex

52

HScrollBar e VScrollBar Muitos controls j possuem barras de deslocamento quando o seu contedo excede as dimenses do control. No entanto, quando se pretende obter o mesmo efeito utilizando outros controls necessrio utilizar o HScrollBar e o VScrollBar.
HScrollBar.Minimum e LScrollBar.Minimum

Define a posio quando a caixa de deslocamento est no extremo esquerdo (HScrollBar) ou no topo (VScrollBar) do control.
HScrollBar.Maximum e LScrollBar.Maximum

Atribui o extremo mximo da barra de deslocamento. Ajusta o incremento a usar quando o utilizador pressiona uma das setas da barra. Estabelece o incremento a usar quando o utilizador pressiona as teclas PageUp ou PageDown, ou quando o utilizador clica na barra de deslocamento, fora da caixa de deslocamento.
Evento ValueChanged HScrollBar.LargeChange e LScrollBar.Maximum HScrollBar.SmallChange e LScrollBar.Maximum

accionado quando a barra de deslocamento utilizada. Com a propriedade Value possvel obter a posio corrente. ImageList O control ImageList um componente que funciona como recipiente de imagens. Em design-time possvel adicionar imagens ao control atravs da janela Image Collection Editor. Em runtime possvel adicionar imagens utilizando o mtodo ImageList.Images.Add. Todas as imagens por defeito tm o mesmo tamanho (16, 16). possvel com a propriedade ImageSize especificar um tamanho diferente. As imagens guardadas na ImageList podem ser utilizadas nos controls ListView, TreeView ou ToolBar. O exemplo seguinte constri uma nova instncia da classe ImageList e adiciona-lhe imagens. So includos itens a uma ListView e direccionada a propriedade ImageIndex para o ndex da instncia ImageList.
using System; using System.Drawing; using System.Collections; using System.Windows.Forms; using System.Reflection;

53

private void Form1_Load(object sender, System.EventArgs e) { ImageList imgList = new ImageList(); // acrescenta quatro imagens como recursos embedded Bitmap bmp = new Bitmap(Assembly.GetExecutingAssembly() .GetManifestResourceStream(pic01.jpg")); imgList.Images.Add(bmp); bmp = new Bitmap(Assembly.GetExecutingAssembly() .GetManifestResourceStream("pic02.jpg")); imgList.Images.Add(bmp); bmp = new Bitmap(Assembly.GetExecutingAssembly() .GetManifestResourceStream("pic03.jpg")); imgList.Images.Add(bmp); bmp = new Bitmap(Assembly.GetExecutingAssembly() .GetManifestResourceStream("pic04.jpg")); imgList.Images.Add(bmp); imgList.ImageSize = new Size(64, 64); // define a ListView listView1.SmallImageList = imgList; listView1.View = View.List; // adiciona imagens listView1.Items.Add(new ListViewItem("Pic1")); listView1.Items[0].ImageIndex = 3; listView1.Items.Add(new ListViewItem("Pic2")); listView1.Items[1].ImageIndex = 2; listView1.Items.Add(new ListViewItem("Pic3")); listView1.Items[2].ImageIndex = 1; listView1.Items.Add(new ListViewItem("Pic4")); listView1.Items[3].ImageIndex = 0; }

Figura 17 - ImageList

54

Label Este control utilizado para exibir texto especificado pela propriedade Text.
TextAlign

Utilizado para alinhar o texto com um dos seguintes valores: TopLeft (esquerda), TopCenter (centrado), TopRight (direita). ListBox O control exibe uma lista de itens da qual o utilizador pode escolher. Possui uma barra de deslocamento e se o nmero de itens exceder a rea de visualizao, ser apresentada uma barra de deslocamento vertical. As propriedades e mtodos da ListBox so muito idnticos aos da ComboBox. As principais diferenas entre eles que a ComboBox exibe a lista de itens apenas quando o utilizador clica na seta do lado direito do control. Por sua vez, a ListBox apresenta o maior nmero de itens possvel para o tamanho que lhe foi atribuido.

Figura 18 - ListBox

O mtodo Add adiciona itens ListBox, sendo possvel remover um item individualmente com Remove ou todos os itens com o mtodo Clear.

55

possvel popular a ListBox em design-time editando a propriedade Itens na janela de propriedades. A propriedade SelectedIndex indica o ndex do item seleccionado. A propriedade SelectedItem similar mas retorna uma referncia ao item seleccionado. possvel fazer o bind da ListBox a uma coleco, direccionando a propriedade DataSource coleco pretendida e atribuindo propriedade DisplayMember o nome do campo que se pretende visualizar. ListView Este control utilizado para visualizar uma lista de itens, com a possibilidade de associar um con que visualmente os identifique. Os itens da ListView podem ser expostos de quatro modos: Large Icons, Small Icons, List e Details. No modo Details, o ListView pode mostrar texto adicional relativo a cada Item atravs de subitens. A primeira coluna exibe o texto do Item, a segunda, terceira e subsequntes colunas mostram texto dos subitens associados. O exemplo seguinte mostra como adicionar Itens a um ListView, representando uma lista de contactos e respectivos subitens com os nmeros de telefone de cada contacto.
myListView.View = View.Details; myListView.CheckBoxes = true; myListView.FullRowSelect = true; ListViewItem Contact1 = new ListViewItem("Ana"); Contact1.SubItems.Add ("22 445 65 45"); Contact1.SubItems.Add ("22 784 26 19"); Contact1.SubItems.Add ("91 484 27 49"); ListViewItem Contact2 = new ListViewItem("Joo"); Contact2.SubItems.Add ("25 865 75 05"); Contact2.SubItems.Add ("22 412 86 12"); Contact2.SubItems.Add ("93 484 07 40"); ListViewItem Contact3 = new ListViewItem("Jorge"); Contact3.SubItems.Add ("22 954 12 41"); Contact3.SubItems.Add ("26 214 56 53"); Contact3.SubItems.Add ("96 164 97 69"); myListView.Columns.Add("Nome", -2, HorizontalAlignment.Right); myListView.Columns.Add("Trab", -2, HorizontalAlignment.Left); myListView.Columns.Add("Casa", -2, HorizontalAlignment.Left); myListView.Columns.Add("Telm", HorizontalAlignment.Center); -2,

56

myListView.Items.Add(Contact1); myListView.Items.Add(Contact2); myListView.Items.Add(Contact3);

Figura 19 - ListView

possivel examinar a lista percorrendo cada elemento e verificando cada propriedade Checked para determinar quais os Itens que o utilizador seleccionou.
foreach (ListViewItem chkItem in myListView.Items) { if (chkItem.Checked) { // operaes com o item seleccionado } }

Para aceder ao Item que tem o focus, utiliza-se a propriedade FocusedItem e para obter o texto de um dos subitens, a propriedade SubItens.
MessageBox.Show(myListView.FocusedItem.SubItems[0].Text);

MainMenu Uma aplicao de PocketPC por defeito contm um control MainMenu. Os menus so colocados no fundo da form. Apesar de reduzir o espao de rea disponivel, de uma maneira geral, um modo eficiente de apresentar mltiplas opes ao utilizador. possivel adicionar itens a um menu, tanto na janela de desenvolvimento, como tambm no prprio cdigo. 57

Exemplo da criao de um Menu com sub-menus:


Menu mainMenu1 = new Menu(); MenuItem SubItem1 = new MenuItem(); MenuItem Item1 = new MenuItem(); SubItem1.Text = "Cut"; Item1.Text = "Edit"; Item1.MenuItems.Add(SubItem1); mainMenu1.MenuItems.Add (Item1);

NumericUpDown Este control semelhante ao DomainUpDown, mas funcionando com nmeros em vez de objectos. Apenas aceita valores inteiros, sendo truncados os valores decimais.
NumericUpDown.Maximum e NumericUpDown.Minimum

Estabelece os limites superiores e inferiores dos valores a apresentar.


NumericUpDown.Increment

Define as unidades a incrementar quando o utilizador clica nos botes Up e Down.


NumericUpDown.Value

Retorna o valor seleccionado.

Se estiver a True, o utilizador est limitado aos valores apresentados. Se False, pode introduzir qualquer valor alm dos que so dados.

NumericUpDown.ReadOnly

Figura 20 - NumericUpDown

58

OpenFileDialog / SaveFileDialog Estes dois controls so componentes, por isso quando so colocados numa form aparecem na rea destinada aos componentes.
OpenFileDialog.ShowDialog e SaveFileDialog.ShowDialog

Torna visivel a caixa de dilogo, retornando a enumerao DialogResult que indica se o utilizador colocou um nome de ficheiro vlido, ou se pressionou o boto para cancelar.
OpenFileDialog.FileName e SaveFileDialog.FileName

Obtem-se o caminho e o nome do ficheiro.

Estabelece os tipos de ficheiro e extenses que sero vlidos para as caixas de dilogo.
// filtra os nomes da caixa de dilogo a ficheiros de imagem saveFileDialog1.Filter = Jpeg image|*.jpg|Bitmap image|*.bmp|GIF image|*.gif

OpenFileDialog.Filter e SaveFileDialog.Filter

OpenFileDialog.InitialDirectory

Especifica o directrio que por defeito ser apresentado na caixa de dilogo.

SaveFileDialog.InitialDirectory

Figura 21 - SaveFileDialog

O exemplo seguinte cria um directrio, mostra o control saveFileDialog e grava num ficheiro com o nome especificado pelo utilizador, o contedo de uma TextBox.

59

include System.IO; include System.Windows.Forms; private void button1_Click(object sender, System.EventArgs e) { // cria e inicializa o control SaveFileDialog dlg = new SaveFileDialog(); dlg.Filter = "Text File|*.txt"; dlg.FileName = "exemplo.txt"; dlg.InitialDirectory = "\\My Documents"; // se foi inserido um nome correcto, o ficheiro gravado if (dlg.ShowDialog() == DialogResult.OK) { StreamWriter sw = new StreamWriter(dlg.FileName, false); sw.Write(textBox1.Text); sw.Close(); } }

Panel O Panel funciona como um recipiente para outros controls. Em design-time possivel colocar controls no Panel, de modo que, quando se move o Panel os controls nele inseridos se movam tambm.
Panel.BackColor

Define a cor de fundo do Panel.

Figura 22 - Panel

60

Este o exemplo de um Panel com uma barra de deslocamento que foi realizado utilizando um control VScroolBar e um outro Panel dentro do Panel inicial. PictureBox Este control utilizado para quando se tem o objectivo de mostrar imagens, fazendo a leitura a partir de um ficheiro ou mesmo de um recurso incluido. ento possivel posicionar a imagem num local desejado ou redimensionla de acordo com a rea pretendida.
Image

Define a imagem a carregar no control.

Bitmap bmp = new Bitmap(Assembly.GetExecutingAssembly() .GetManifestResourceStream( "isep.jpg"));

Caso seja necessrio redimensionar uma imagem utilizam-se mtodos das classes System.Drawing.

Figura 23 - PictureBox

ProgressBar Permite transmitir visualmente ao utilizador, atravs de uma barra de progresso, a proporo do tratamento de uma tarefa. Deste modo, o utilizador ter uma noo de que algo est a ser processado em background e evitar que confunda um longo perodo de inactividade com um qualquer bloqueio de sistema. 61

Definem os valores mnimos e mximos da barra de progresso.


ProgressBar.Value

ProgressBar.Minimum e ProgressBar.Maximum

Indica quantas unidades possui a barra nesse determinado momento. Quando este valor for igual ao valor de Maximum, a barra est cheia.

Figura 24 ProgressBar #1

Figura 25 ProgressBar #2

62

private void button1_Click(object sender, System.EventArgs e) { label1.Text = "Loading... Please Wait"; Application.DoEvents(); // define os limites minimos e maximos progressBar1.Minimum = 250; progressBar1.Maximum = 25000; progressBar1.Value = progressBar1.Minimum; // faz a leitura do ficheiro string fileUrl = new FileInfo(path).DirectoryName + @"\progressbar.txt"; int readcount = 0; while (fileUrl.Read()) { // faz o update do progressbar em cada 100 leituras if ((++readcount % 100) == 0) { if (progressBar1.Value < progressBar1.Maximum) progressBar1.Value += progressBar1.Minimum; } } // tarefa completa progressBar1.Value = progressBar1.Maximum; label1.Text = "Complete!"; }

RadioButton So normalmente utilizados quando necessrio fazer excluses mltiplas de opes. Caso seja necessrio dois ou mais grupos de RadioButtons, utiliza-se o control Panel. Quando um utilizador clica num qualquer RadioButton, todos os RadioButtons do mesmo grupo sero desseleccionados.
RadioButton.Checked

Define se um RadioButton est seleccionado se o valor for True ou se no est seleccionado caso o valor seja False.
Evento CheckedChanged

Dispara sempre que a propriedade Checked alterada. StatusBar uma rea onde se coloca informao no fundo da janela. Permite exibir uma linha de texto, sendo uma boa alternativa ao ProgressBar.

63

Figura 26 - StatusBar

TabControl Permite mostrar mltiplas vistas numa mesma rea. um control muito til em dispositivos mveis pois permite o uso do ecr de uma forma mais eficiente. Os utilizadores podem clicar num separador para o activar. Em design-time, quando se arrasta um TabControl para a form no possui qualquer tab. necessrio adicionar ou remover tabs de acordo com os objectivos pretendidos. possivel ento adicionar outros controls TabControl tal como no Form ou no Panel.
TabControl.SelectedIndex

Define qual o Tab a ser exibido.

Dispara quando o utilizador activa um dos Tabs que esto em background.

Evento SelectedIndexChanged

64

Figura 27 - TabControl

TextBox utilizado para introduo de texto.


TextBox.BackColor e TextBox.ForeColor

Estabelece a cr de fundo e a cr do texto presente na TextBox.


Eventos KeyPress, KeyUp e KeyDown

Detecta a introduo de texto no control.

O cdigo seguinte converte o texto introduzido numa TextBox para maisculas.


public class myTextBox : TextBox { protected override void OnKeyPress(KeyPressEventArgs e) { if(Char.IsLetter(e.KeyChar)) { int pos = this.SelectionStart; this.Text = this.Text.Insert( this.SelectionStart, char.ToUpper(e.KeyChar).ToString()); this.SelectionStart=pos+1; e.Handled=true; } } }

65

Timer Permite que seja executado determinado cdigo repetidamente entre um intervalo de tempo definido. Existem outros temporizadores disponveis no namespace System.Threading que devem ser utilizados quando o cdigo executado fora da form, em processos multithread. No design-time, quando se arrasta o Timer da janela de propriedades para a form, sendo um componente aparecer no menu de componentes.
Timer.Enabled

Ao definir com True iniciar o temporizador, e ao colocar False far com que pare; Ajusta o tempo em mili-segundos entre o qual o evento Tick ser chamado. O exemplo seguinte mostra uma imagem que redimensionada de 100 em 100 mili-segundos:
private void Form1_Load(object sender, System.EventArgs e) { // definir o intervalo tempo em que o mtodo tick chamado timer1.Interval = 100; timer1.Enabled = true; } private void timer1_Tick(object sender, System.EventArgs e) { if (continuarTick()) { // cdigo a executar entre perodo de tempo } else // pra o temporizador timer1.Enabled = false; } Timer. Interval

Toolbar Uma Toolbar contm botes que normalmente so utilizados como atalhos para itens de menus. assim, uma forma mais rpida de aceder s funcionalidades mais utilizadas. Consiste em botes grficos, no sendo possivel colocar texto nestes botes. associado um control ImageList para aceder s imagens a utilizar. Por defeito, o Toolbar aparece na parte inferior do ecr, ao lado direito das opes de menu.

66

Para utilizar o Toolbar adiciona-se uma ImageList e atravs do Image Collection Editor acrescenta-se imagens a esse control. Esta ImageList direccionada como sendo a fonte das imagens utilizadas na Toolbar atravs da propriedade ImageList. Com o ToolBarButton Collection Editor possivel adicionar as imagens para os botes necessrios.

Figura 28 - ToolBar ToolBar.Style

Define os quatro tipos de botes possveis: - PushButton; - ToggleButton; - Separator; - DropDownButton.

Private Sub toolBar1_ButtonClick( ByVal sender As Object, ByVal e As System.Windows.Forms.ToolBarButtonClickEventArgs) _ Handles toolBar1.ButtonClick If e.Button.Equals(Me.toolBarButton1) Then label1.Text = " Button1 foi pressionado" Else If e.Button.Equals(Me.toolBarButton2) Then If e.Button.Pushed Then label1.Text = "Button2 est pressionado" Else label1.Text = "Button2 no est pressionado" End If End If End If End Sub

67

necessrio definir em cada boto atravs da propriedade ImageIndex, o ndex da imagem que se quer utilizar na ImageList.
Evento ButtonClick

Detecta quando o utilizador pressiona uma das imagens. Este evento recebe o objecto ToolBarButtonClickEventArgs que identifica qual o boto que foi pressionado. TrackBar Este control funciona como uma barra de ajuste atravs da qual o utilizador pode escolher um valor entre um limite estabelecido. Uma utilizao comum a seleco de opes de configurao, tais como um valor de timeout ou de refrescamento.

Figura 29 - TrackBar

TrackBar.Minimum e TrackBar.Maximum

Define os limites mnimos e mximos do valor que a barra pode assumir. Define a distncia entre as marcas na parte inferior da barra. Define o incremento a utilizar quando o utilizador pressiona uma das teclas de navegao.
TrackBar.SmallChange TrackBar.TickFrequency

68

Define o incremento quando o utilizador pressiona em PageUp ou PageDown, ou quando clica num dos lados da barra. TreeView Apresenta uma vista hierarquizada de uma coleco de objectos. A propriedade Nodes da TreeView uma coleco de objectos TreeNode. possivel adicionar um ou mais Nodes (ramos) a esta coleco. Estes Nodes so os ramos na raiz da rvore. A propriedade Text de cada objecto TreeNode determina o texto a exibir nesse Node. Cada objecto TreeNode tem igualmente a propriedade Nodes, permitindo assim adicionar sub-ramos a cada ramo e assim sucessivamente.

TrackBar.LargeChange

Figura 30 - TreeView

Define se so desenhadas linhas entre os ramos da raiz da rvore.


TreeView.ShowLines

TreeView.ShowRootLines

Define se so desenhadas linhas entre cada ramo.

Define se so desenhados os botes + e - junto dos ramos que tm filhos, permitindo expandir ou contrair os sub-ramos.

TreeView.ShowPlusMinus

69

Inclui cons que podero ser acrescentados aos ramos da rvore. O ImageIndex define o ndex do con que ser mostrado por defeito em cada ramo. Para exibir um icon em particular no ramo utiliza-se a propriedade ImageIndex do respectivo TreeNode. Indica o ndex do icon que ser mostrado quando um ramo seleccionado. Apenas possivel seleccionar um Node de cada vez. Define se mostrada uma CheckBox junto a cada folha. A propriedade Checked do TreeNode indica se um Node em particular est ou no com a caixa seleccionada atravs dos valores True ou False, respectivamente.
Evento AfterCheck TreeView.CheckBoxes TreeView.SelectedNodeIndex

TreeView.ImageList

Dispara quando o utilizador clica numa CheckBox.


// criar TreeNode, TreeView e ImageList System.Windows.Forms.TreeNode treeNode1 = new System.Windows.Forms.TreeNode(); this.treeView1 = new System.Windows.Forms.TreeView(); this.imageList1 = new System.Windows.Forms.ImageList(); // propriedades do treeView1 this.treeView1.CheckBoxes = true; this.treeView1.ImageList = this.imageList1; this.treeView1.Location = new System.Drawing.Point(16, 16); treeNode1.Text = "Compras"; this.treeView1.Nodes.Add(treeNode1); this.treeView1.Size = new System.Drawing.Size(200, 232); // adicionar treeView1 form1 this.Controls.Add(this.treeView1);

O control TreeView coloca automaticamente barras de deslocamento, caso a rvore ultrapasse a rea de visionamento.

70

CONSTRUIR APLICAES PARA POCKETPC

A CLASS FORM
Apesar de termos constatado que elaborar uma form do Windows e o seu respectivo cdigo no .Net Compact Framework semelhante ao modo como feito na generalidade do .Net Framework, o design da form muito diferente. A plataforma PocketPC concebida com uma janela pequena, um ecr sensivel ao toque e a introduo de dados realizada atravs do uso de um stylus. Isto significa que quando se elabora o design de uma aplicao para o PocketPC (ou qualquer outro engenho com limitado tamanho de ecr), em cada uma das forms deve-se planear o nmero, o tamanho e a disposio dos controls. Propriedades de uma Form Os valores que controlam o estilo da border da form, diferem entre um PocketPC e o Windows. De igual modo, os que controlam o aspecto da caixa de control e os botes de fechar, minimizar e maximizar tambm so distintos. As seguintes propriedades definem o aspecto da form e seu comportamento:
Form.FormBorderStyle

A propriedade FormBorderStyle controla o estilo da border da form. Esta propriedade pode ser atribuida em design-time atravs da janela de Propriedades ou em runtime atravs de cdigo. A definio por defeito para a form FormBorderStyle.FixedSingle. Definindo a propriedade como FormBorderStyle.None, vai criar uma form sem border e sem titulo. Neste caso, a form pode ser deslocada ou redimensionada atravs de cdigo. Estabelecendo a propriedade com qualquer outro valor far expandir a form at preencher por completo a rea de desktop, evitando que esta seja movida ou redimensionada. A rea desktop engloba todo o ecr, excepto a barra de Start e o menu principal (caso esteja presente).
Form.WindowState

Aceita s duas definies: FormWindowState.Normal ou FormWindowsState.Maximized. No existe nesta propriedade nenhuma opo para minimizar a janela. O FormWindowState.Normal far com que a aplicao ocupe toda a rea do desktop. Se estiver em FormWindowsState.Maximized far com que esta preencha o ecr por inteiro, tapando o menu Start mas mostrando o menu principal da form (se este estiver presente). 72

A Propriedade ControlBox pode ser atribuida com True para que seja exibida a ControlBox da form ou com False para prevenir que esta aparea. Numa form de PocketPC, a ControlBox contm somente um boto, que pode ser o boto de minimizar ou o que fecha a aplicao.
Form.MinimizeBox

Form.ControlBox

A propriedade MinimizeBox define o tipo de boto da ControlBox. Se True ser atribuido o boto de Minimizar (sob a forma de um X), se especificado como False ter um boto de encerramento da aplicao (sob a forma de um boto OK). A propriedade MaximizeBox no tem efeito numa aplicao para PocketPC j que estes no possuem um boto desse tipo.
Form.Size

usada para estabelecer a largura e altura da form. Esta propriedade apenas utilizada se a propriedade FormBorderStyle estiver atribuida com FormBorderStyle.None.
Form.Location

Especifica a colocao da form no ecr, atravs da utilizao da coordenadas X e Y, situadas na parte superior esquerda do ecr. Esta propriedade apenas ter efeito se a propriedade FormBorderStyle estiver definida como FormBorderStyle.None.

73

CONTROLS DA APLICAO
Respeitando as Normas Gerais recomendado que as forms de uma aplicao de PocketPC sejam do tamanho da rea do desktop. No entanto, possivel criar uma form de menores dimenses de forma a se ajustar a determinadas situaes. Se criar uma form que seja mais pequena que o ecr fisico, a form deve estar centrada verticalmente e horizontalmente no ecr, tendo em conta o menu Start, o menu principal e o Soft Input Panel (caso este esteja visvel). Criao de Caixas de Dilogo Em certas situaes til criar as nossas prprias caixas de dilogo. O mtodo ShowDialog usado para mostrar a caixa de dilogo. Este mtodo desactiva a form principal enquanto a caixa de dilogo estiver visivel. Quando encerrada retorna um resultado form que a chamou. Todavia, os membros pblicos da caixa de dilogo estaro disponiveis form principal mesmo aps o retorno do ShowDialog.
AddDVDForm addForm = new AddDVDForm(); // se a caixa de dilogo retornar OK if (addForm.ShowDialog() == DialogResult.OK) { // prosseguir programa }

Caso necessrio, possivel utilizar as propriedades FormBorderStyle e Size da form da caixa de dilogo para que esta seja mais pequena que o tamanho do ecr do aparelho. Neste caso, convm a utilizao da propriedade Location para posicionar a caixa de dilogo no ecr da forma que for mais conveniente. Uma aplicao que utiliza dados sensveis deve ter mecanismos de segurana que proteja esses dados. Uma forma de segurana ser a validao do utilizador. Este poder ter que fazer um logon antes de poder aceder aos dados. Uma utilizao possvel para uma caixa de dialgo mais pequena poder ser uma caixa de dilogo log-on no topo da form principal. Esta ser chamada assim que a aplicao for iniciada.

74

Figura 31 - Caixa de Dilogo para Autenticao

Este um dos casos em que convm fazer uso de uma caixa de dilogo em vez da form principal, pois uma vez feita a validao, a caixa de dilogo poder ser encerrada para libertar recursos. Tal no possivel na form principal porque ao fech-la encerraria toda a aplicao. Assim, a form principal que chama a form de log-on da caixa de dilogo e dependendo do resultado desta, a aplicao continua ou terminada.

Figura 32 - Form Principal

75

O cdigo seguinte o handler do evento de carregamento da form principal (Main Form). Neste Event Handler precisamos criar uma nova instncia do objecto LogonForm e cham-lo como uma caixa de dilogo. Esta form para log-on retorna DialogResult.OK ou DialogResult.Cancel, dependendo se o utilizador digitou um nome de utilizador vlido ou se simplesmente fechou a form. Se os dados do utilizador forem vlidos, a form principal ir continuar com o seu processamento normal. Se o utilizador fechar a form de log-on sem ter introduzido um nome vlido, a aplicao ser encerrada.
private void MainForm_Load(object sender, System.EventArgs e) { LogonForm LogonFrm = new LogonForm(); if (LogonFrm.ShowDialog() == DialogResult.Cancel) { LogonFrm.Dispose(); this.Close(); } else { this.Text+= " - " + LogonFrm.Username.Text; LogonFrm.Dispose(); OpenCatalogFile(DataFile); } }

Neste exemplo, o handler para o evento Click do boto Logon da form de log-on verifica se o nome do utilizador introduzido vlido. A funo CheckUser recebe o texto com o nome e retorna verdadeiro ou falso caso seja ou no um utilizador vlido. Se o utilizador introduzir um nome de utlilizador vlido, a caixa de dilogo retorna o valor DialogResult.OK.
private void LogonButton_Click(object sender, System.EventArgs e) { if (CheckUser(Username.Text)) { this.DialogResult = DialogResult.OK; } else { MessageBox.Show("Username not valid. Please Try Again", "Logon Error"); } }

76

No caso do utilizador encerrar a form sem digitar um nome de utilizador vlido, o handler do evento CancelButton_Click far com que a caixa de dilogo retorne o valor DialogResult.Cancel form principal. Tal far com que a aplicao seja encerrada.
private void CancelButton_Click(object sender, System.EventArgs e) { this.DialogResult = DialogResult.Cancel; }

Utilizao das Caixas de Dilogo do Sistema Estas caixas encontram-se nas classes OpenFileDialog e SaveFileDialog e podem ser utilizadas para abrir e gravar ficheiros no sistema de ficheiros do aparelho. Ambas as classes tm uma propriedade de filtro que lhes permite especificar o tipo de ficheiro que ir ser exibido na lista de ficheiros da caixa de dilogo. Tal como as caixas de dilogo desenvolvidas pelo utilizador, estas retornam o valor DialogResult para especificar se o resultado da caixa de dilogo foi ou no bem sucedido.
openFileDialog openDialog = new OpenFileDialog(); openDialog.Filter = "XML Files (*.xml)|*.xml"; if (openDialog.ShowDialog() == DialogResult.OK) { OpenCatalogFile(openDialog.FileName); } saveFileDialog saveDialog = new SaveFileDialog(); saveDialog.Filter = "XML Files (*.xml)|*.xml"; if (saveDialog.ShowDialog() == DialogResult.OK) { SpenCatalogFile(saveDialog.FileName); }

O Control InputPanel Este permite ao utilizador de um PocketPC introduzir informao textual usando um teclado virtual ou um dispositivo de reconhecimento de escrita. O InputPanel aparece no fundo de uma form, sempre que a form contm um control MainMenu ou um control ToolBar. Quando o control InputPanel est disponivel para uso do utilizador, importante esquematizar a form para que este no sobreponha qualquer outro control importante, principalmente os controls que requerem introduo de 77

texto. importante colocar este tipo de controls numa posio superior do InputPanel. Outra opo ser possibilitar a movimentao dos controls com barras de deslocamento de modo a obter espao para o InputPanel, assim ser possivel ter acesso ao mesmo tempo a todos os controls da form tendo o InputPanel disponivel. O cdigo seguinte demonstra como tornar activo o InputPanel quando uma TextBox recebe o focus e como desactiv-lo quando o focus perdido.
private void textBox1_GotFocus( object sender, System.EventArgs e) { // activa InputPanel quando TextBox tem focus inputPanel1.Enabled = true; } private void textBox1_LostFocus( object sender, System.EventArgs e) { // desactiva InputPanel quando TextBox perde focus inputPanel1.Enabled = false; }

O evento EnabledChanged despoletado quando o InputPanel activado ou desactivado, pelo utilizador ou pelo programa. Uma outra soluo, ser colocar os controls de introduo de texto dentro de um Panel. Quando detectada a activao do InputPanel, este Panel ser reposicionado no topo do ecr para possibilitar a sua visualizao. Quando o InputPanel for baixado, o Panel ser movido para a sua posio original.
private void inputPanel1_EnableChanged( object sender, System.EventArgs e) { if (inputPanel1.Enabled == true) this.panel1.Top = 180 - inputPanel1.Bounds.Height; else this.panel1.Top = 180; }

O Control MainMenu Este control adicionado por defeito form inicial de uma aplicao PocketPC, mas ter que o fazer manualmente s forms adicionais. Numa aplicao PocketPC, para o utilizador activar o SIP ou definir qual SIP a usar, vai precisar adicionar form um control Main Menu ou um control ToolBar. 78

Figura 33 - Itens do MainMenu

Para acrescentar itens ao menu MainMenu utiliza-se o Windows Form Design.

Figura 34 - Edio do MainMenu

79

possivel criar menus em cascata mas tendo o cuidado de no sobrecarregar o ecr. Deve conter as funes necessrias para o uso da aplicao, tais como abrir ou gravar ficheiros. As funes que sero mais frequentemente utilizadas devero ser colocadas no ToolBar. Numa aplicao PocketPC no devem ser colocadas as mesmas funes em controls distintos devido ao espao limitado disponivel para a aplicao. O Control ToolBar O ToolBar um modo til de adicionar tarefas que so mais usadas. Funciona como um recipiente de botes que o utilizador pode clicar para realizar uma funo. Cada boto possui uma imagem associada a um ImageList que ajuda a identificar a sua funo. possivel definir ainda o estilo de cada boto. Estas propriedades podem ser definidas em design-time com a ajuda do ToolBar Button Collection Editor.

Figura 35 - Toolbar Button Collection Editor

O exemplo seguinte mostra como adicionar uma ToolBar atravs de cdigo:


// cria um objecto ImageList para ser utilizado no ToolBar ToolBar DVDToolbar = new ToolBar(); ImageList imageList = new ImageList();

80

// carrega imagens para a ImageList Bitmap bmp; bmp = new Bitmap( Assembly.GetExecutingAssembly(), GetManifestResourceStream("add.bmp")); imageList.Images.Add(bmp); bmp = new Bitmap( Assembly.GetExecutingAssembly(), GetManifestResourceStream("edit.bmp")); imageList.Images.Add(bmp); bmp = new Bitmap( Assembly.GetExecutingAssembly(), GetManifestResourceStream("del.bmp")); imageList.Images.Add(bmp); // associa objecto ImageList com a ToolBar DVDToolbar.ImageList = imageList; // acrescenta botes ToolBar ToolBarButton btn = new ToolBarButton(); btn.ImageIndex = 0; DVDToolbar.Buttons.Add(btn); btn = new ToolBarButton(); btn.ImageIndex = 1; DVDToolbar.Buttons.Add(btn); DVDToolbar.Buttons[1].Enabled = false; DVDToolbar.Buttons[1].Visible = false; btn = new ToolBarButton(); btn.ImageIndex = 2; DVDToolbar.Buttons.Add(btn); DVDToolbar.Buttons[2].Enabled = false; DVDToolbar.Buttons[2].Visible = false; // adiciona a ToolBar Form this.Controls.Add(DVDToolbar); // acrescenta o evento de pressionar botes da ToolBar DVDToolbar.ButtonClick += new ToolBarButtonClickEventHandler( this.DVDToolbar_ButtonClick);

criado um objecto ImageList e carregadas trs imagens que iro ser utilizadas para mostrar trs botes na ToolBar. associada uma rotina que trata do evento relacionado com a aco de clicar num dos botes da ToolBar. O cdigo seguinte mostra uma mensagem especificando qual dos botes foi pressionado.

81

protected void DVDToolbar_ButtonClick( object sender, ToolBarButtonClickEventArgs e) { switch(DVDToolbar.Buttons.IndexOf(e.Button)) { case 0: MessageBox.Show("Pressionado o Boto Acrecescentar") break; case 1: MessageBox.Show("Pressionado o Boto Editar") break; case 2: MessageBox.Show("Pressionado o Boto Apagar") break; } }

O parmetro ToolBarButtonClickEventArgs inclui uma referncia para o boto em causa e o mtodo IndexOf retorna o ndex desse boto.

Figura 36 - Exemplo de uma ToolBar

Activao e Desactivao de uma Form As normas gerais de interface para aplicaes de PocketPC foram criadas de modo a assegurar que estas tivessem boa ergonomia e se comportassem de modo consistente. Uma das recomendaes mais importantes que diferem das aplicaes para o Windows de desktop que apenas deve existir uma ocorrncia de uma aplicao de cada vez. Se uma aplicao executada havendo j uma ocorrncia 82

a correr, esta reactivada. Caso contrrio, uma nova cpia iniciada. O prprio runtime do .NET Compact Framework assegura automaticamente esta restrio. Outra recomendao importante que, uma vez iniciada uma aplicao, no pode ser encerrada pelo utilizador. Quando o utilizador alterna para outra aplicao, esta encobre a aplicao anterior, que desactivada. Quando o utilizador volta a seleccion-la, a aplicao reactivada. O Activate e Deactivate Quando uma aplicao desactivada, deve libertar todos os recursos que for possivel, de modo a conservar os recursos limitados do aparelho. O prprio .NET Compact Framework lana automaticamente um processo de Garbage-Collection para libertar os recursos de que a aplicao j no necessita. O Garbage-Collection do .NET Compact Framework est optimizado para conseguir um baixo uso de memria do aparelho, ao contrrio do completo .NET Framework mais focado na velocidade e na escalonabilidade. Todas as alocaes de memria so feitas a partir da mesma zona, sendo fcil libertar recursos da memria se necessrio. Mesmo assim, ainda necessrio especificar a libertao de alguns recursos, tais como ligaes a bases de dados, ligaes a portas COM ou grandes objectos na memria como datasets. Existem os seguintes eventos na form que permitem detectar quando uma aplicao posta em background e quando restaurada.
private void Form1_Activate( object sender, System.EventArgs e) { // cdigo para restaurar comunicaes ou acessos a BDs } private void Form1_Deactivate( object sender, System.EventArgs e) { // cdigo para libertar recursos }

Fechar Aplicaes De acordo com as normas de interface do PocketPC no deve ser possivel ao utilizador encerrar a aplicao, apenas minimiza-la. 83

A propriedade MinimizeBox deve ter o valor de True para ter o boto de minimizar (icon X) ou False para o boto de encerrar (icon OK). Enquanto que a form principal no deve ser encerrada, as caixas de dilogo devem ter o boto de fechar de modo a voltar form principal. Se os recursos comearem a escassear, o sistema operativo comea a encerrar aplicaes que esto a correr em background. Sendo assim, aconselhvel guardar os dados da aplicao logo aps o evento Deactivate, pois a aplicao corre o risco de ser fechada enquanto est minimizada. Evento Tap-And-Hold Como os dispositivos PocketPC no possuem rato, os utilizadores no podem clicar com o boto do lado direito sobre um control. Em alternativa devem pressionar o control com o stylus e mant-lo nessa posio at surgir um menu de contexto. Para dotar a aplicao de outras funcionalidades para alm de menus de contexto associados funo de tapand-hold num dos controls, necessrio desenvolver cdigo especfico. Para tal, necessrio criar um control Timer que define o intervalo de tempo que o utilizador deve manter a pressionar at ser lanada a aco. Ao capturar o evento MouseDown inicia-se o contador at ao momento em que largado com o MouseUp. Calcula-se o evento Tick do Timer para executar o cdigo pretendido. O cdigo seguinte demonstra um evento personalizado do tap-and-hold:
private void timer1_Tick( object sender, System.EventArgs e) { // cdigo que se pretende executar } private void Form1_MouseDown( object sender, System.Windows.Forms.MouseEventArgs e) { timer1.Enable = false; } private void Form1_MouseUp( object sender, System.Windows.Forms.MouseEventArgs e) { timer1.Enable = true; }

84

Teclas de Hardware de um PocketPC Um PocketPC no possui um teclado, sendo uma grande parte da interaco feita com um stylus e com o SIP. No entanto, existem algumas teclas de hardware que podem ser teis em certas situaes. possivel capturar estas teclas atravs do evento KeyDown, que dispara quando o utilizador pressiona uma destas teclas.
private void Form1_KeyDown( object sender, System.Windows.Forms.MouseEventArgs e) { switch (e.KeyCode) { case Keys.Up: MessageBox.Show("Pressionada Tecla de Cima"); break; case Keys.Down: MessageBox.Show("Pressionada Tecla de Baixo"); break; case Keys.Left: MessageBox.Show("Pressionada Tecla da Esquerda"); break; case Keys.Right: MessageBox.Show("Pressionada Tecla da Direita"); break; case Keys.Return: MessageBox.Show("Pressionada Tecla Para Dentro"); break; } }

Finalizar o Desenvolvimento da Aplicao Aps terminada a introduo de cdigo e de todas as funcionalidades, ser til dotar a aplicao de um icon e colocar um atalho da aplicao no Start Menu do PocketPC. Para associar um icon a uma aplicao, utiliza-se a caixa de dilogo das propriedades do projecto. Na seco General, introduz-se no campo Aplication Icon, o caminho at ao ficheiro do icon que se quer utilizar.

85

Figura 37 - Propriedades do Projecto

Um atalho ir permitir ao utilizador executar a aplicao mais facilmente. Para adicionar um atalho ao Menu Start, coloca-se o atalho na pasta \Windows\Start Menu do sistema operativo. O Visual Studio .NET, na fase de contruo do ficheiro CAB, ir definir o atalho a criar no momento de instalao da aplicao.

86

NORMAS RECOMENDADAS
Existem um certificado aprovado pela Microsoft que identifica as aplicaes que cumprem um conjunto de regras no seu desenvolvimento. Estas recebem um logtipo Designed For Windows For PocketPC. Para tal, existem regras e requisitos sobre icons, menus, ToolBar, InputPanel, etc. Um documento com estas especificaes est disponvel para download no site da QualityLogic em http://www.qualitylogic.com/certprograms/pocketpc_spec. html. Num aparelho com PocketPC a maior parte da entrada de texto realizada atravs do SIP. Comparando entre este e um teclado normal, podemos reparar que o SIP consume mais tempo e mais propenso a erros. Deste modo, ao desenvolver uma form de entrada de dados deve-se tentar reduzir a quantidade de informao textual. Deve-se fazer um maior uso por exemplo das drop-down lists, como se pode ver na TaskInputForm do PocketPC.

Figura 38 - Menu Drop-Down na Insero de uma Task

Tambm necessrio ter em ateno que o utilizador est a usar um stylus e no um rato para seleccionar os itens da form. Por isso, aconselhvel fazer os controls suficientemente grandes para evitar que se falhe o alvo. O tamanho recomendado de 5mm (21x21 pixels) para o

87

alvo de um stylus e de 9mm (38x38 pixels) para o alvo de um dedo. Deve-se igualmente deixar espao suficiente entre controls para reduzir o risco de engano. Tal importante em tarefas relacionadas, como por exemplo nas funes de cortar, copiar, colar. A distncia entre os controls mais utilizados e tarefas na form deve ser minimizada. Os controls que esto relacionados entre si, devem ser mantidos juntos para um melhor acesso. Deve-se reduzir o movimento que o utilizador tem de realizar para executar as funes mais comuns da aplicao. Deve ser considerado o modo como o utilizador pega no aparelho. A informao mais frequente e mais utilizada deve estar posicionada de modo a no ser tapada pelas mos quando esto a ser introduzidos dados ou a seleccionar itens. Num dispositivo de PocketPC, ao contrrio de um Windows normal, a altura do ecr maior do que a sua largura. preciso ter ateno que a rea de visualizao estreita, por isso os controls devem ser dispostos verticalmente e no horizontalmente, evitanto que o utilizador tenha de utilizar barras de deslocamento horizontais. As form devem ser concepcionadas de modo a todos os controls caberem na rea de visualizao sem necessidade de deslocamento. Se tal no for possivel, os controls mais importantes devero aparecer primeiro e os menos importantes exibidos com a ajuda de barras de deslocamento. Deve-se ao mximo evitar sobrepr comandos e forms. O utilizador deve ter um feedback das aces que vai executanto, quer atravs de sons ou pela mudana da aparncia dos controls ou da form.

88

TESTE E DEBUG
Qualquer programador ao desenvolver uma aplicao comete falhas. Apesar dos compiladores tentarem encontrar o maior nmero de erros, no possivel solucionar todos eles. Os erros mais fceis de resolver so os de sntaxe, que ocorrem quando o programador escreve cdigo que no vlido na linguagem que est a utilizar. Estes so encontrados na fase de compilao e so normalmente fceis de resolver. Outro tipo de erros ocorrem quando uma aplicao compila com sucesso mas no funciona como esperado. A aplicao poder dar resultados incorrectos ou de nicio funcionar correctamente, mas numa dada utilizao abortar com uma mensagem de erro. Estes erros podem ser erros de runtime, erros semnticos ou erros lgicos. Alm dos erros do programador, o ambiente em que a aplicao est a ser executada tambm pode causar problemas. Apesar de no ser possivel controlar todos os aspectos do ambiente, deve-se de modo apropriado proceder ao tratamento de erros. Utilizar o Debugger Com o Debugger do Visual Studio possivel: - Colocar breakpoints em programas, numa linha de cdigo ou numa condio; - Correr a aplicao passo a passo ou at um novo breakpoint; - Examinar qual o valor de expresses ou modificar o contedo de variveis; - Alterar a sequncia de execuo do programa. O Modo Break Quando uma aplicao est a operar em modo de debug est num de dois estados: ou est a correr ou est em break mode. Neste ltimo, a execuo est suspensa sendo possivel examinar o estado da aplicao. Uma aplicao entra em modo suspenso quando: - encontrada uma excepo; - Se chega a um breakpoint; - O utilizador fora a paragem de execuo (com CTRL+ALT+Break)

89

Criar um BreakPoint Quando a execuo de uma aplicao chega a uma linha de cdigo que contm um breakpoint, a execuo suspensa e o Debugger entra em break mode. Para colocar um breakpoint selecciona-se a linha pretendida e pressiona-se a tecla F9.

Figura 39 - Debug da Aplicao

Watch Window Em break mode possivel verificar qual o valor de variveis e de expresses nesse momento. Para tal utilizase a janela QuickWatch. Tambm, ao colocar o cursor sobre uma varivel na janela de edio de cdigo, exibe o seu valor.

90

Figura 40 - QuickWatch

Utilizar o Debug No menu de Debug possivel aceder s seguintes opes: Corre a aplicao utilizando o Debbuger. O programa ser interrompido imediatamente antes da execuo da primeira linha que contiver um breakpoint.
Step Over (F10) Start (F5)

Executa uma linha completa de cdigo. Os mtodos so executados por completo. similar ao Step Over mas se a linha contm um mtodo, o debug continua no cdigo desse mtodo at retornar ao ponto em que esse mtodo foi chamado, continuando o debug a partir da. Executa o mtodo at ao fim, e s ento retorna ao break mode. Retoma a execuo do programa saindo do break mode. Fora a paragem do programa e descarrega-o da memria.
Stop Debugging (Shift+F5) Continue (F5) Step Out (Shift+F11) Step Into (F11)

91

POTENCIALIDA
DES

COLECES DE OBJECTOS
O Compact Framework inclui um nmero de classes que permitem ao programador trabalhar com coleces de objectos. A maior parte das aplicaes necessitam de trabalhar com Arrays ou coleces de objectos mais complexos. A plataforma .NET inclui funcionalidades especificamente destinadas a aceder a esses objectos. A maior parte destas classes esto nos namespaces System.Collections e System.Collections.Specialized. Classes de Coleces em System.Collections
Array

Dispe de mtodos para criar, manipular, procurar e ordenar arrays e a classe base para todos os arrays da Common Language Runtime. um array de objectos cujo tamanho dinamicamente ajustado de acordo com as necessidades. Controla um array de bits de representados por valores booleanos.
CaseInsensitiveComparer BitArray ArrayList

tamanho

fixo,

Compara dois objectos e indica se so equivalentes, ignorando a capitalizao das letras nas strings. Fornece um hash code para um objecto ignorando a capitalizao das letras nas strings. Esta uma classe abstracta, o que significa que necessrio derivar esta classe para se a poder usar. Permite aos programadores criar e implementar coleces personalizadas. Compara dois objectos e indica se so equivalentes, tendo em conta a capitalizao das letras nas strings. Define o par chave/valor de um item que armazenado num coleco do tipo dicionrio, tais como o Hashtable ou ListDictionary. Uma coleco de pares chave/valor que organizados tendo como base o hash da chave.
Stack Hashtable DictionaryEntry Comparer CollectionBase CaseInsensitiveHashCodeProvider

esto

Uma coleco de objectos do tipo pilha (Last In, First Out). O ltimo a entrar o primeiro a sair.

93

Namespace System.Collections.Specialized
HybridDictionary

Representa uma coleco eficiente com uma estrutura do tipo dicionrio. Tem a designao de hbrido porque enquanto o seu tamanho pequeno deriva a partir do ListDictionary mas quando a dimenso da coleco se torna maior altera para uma Hashtable. Representa uma classe dicionrio destinada a albergar um nmero pequeno de objectos, normalmente com 10 ou menos itens. Representa uma classe abstracta para servir como base a uma coleco de chaves do tipo String e objectos que podem ser acedidos pelo valor da chave ou por um ndex nmerico. Representa uma coleco ordenada de itens com uma chave do tipo String e valores tambm do tipo String. Esta classe herda a partir do NameObjectCollectionBase. Arrays Multidimensionais Em certas situaes necessrio criar arrays com mais do que uma dimenso. No exemplo seguinte demonstrado como se cria um array de arrays. declarado o limite superior da primeira dimenso e inicializado cada elemento. O nvel superior constituido por quatro elementos, cada um um array de short integers. O primeiro elemento contm seis elementos e o segundo de trs elementos. O terceiro e quarto no esto inicializados.
C# Short[][] myArray = new short[4][]; myArray[0] = new short[] {16, 45, 3, 2, 1, 6}; myArray[1] = new short[3]; myArray[1][0] = 42; NameValueCollection NameObjectCollectionBase ListDictionary

VB.NET Dim myArray()() As Short = new Short(3)() {} myArray(0) = New short(5) {16, 45, 3, 2, 1, 6}; myArray(1) = New short(3) {}; myArray(1)(0) = 42;

94

ArrayList A coleco ArrayList ajusta dinamicamente o seu tamanho em runtime medida que novos itens so adicionados.
using Sistem.Collections; // inicializa o Array ArrayList myArrayList = new ArrayList(); // insere elementos no Array myArrayList.Add("Portugal"); myArrayList.Add("Espanha"); myArrayList.Add("Itlia"); // ordena alfabeticamente o Array myArrayList.Sort; // retorna o nmero de elementos int conta = myArrayList.Count;

95

STRINGS E DATAS
A classe String permite criar e realizar modicaes em strings. possivel fazer uso de expresses regulares para produzir procuras e alteraes mais complexas em strings. Tambm esto disponiveis funes para a converso de e para outros tipos de dados atravs de formatao e parsing de strings. Strings representam sequncias de caracteres Unicode e so imutveis. Ou seja, sempre que instanciado um novo valor a uma String, criado um novo objecto com a destruio do objecto antigo. Um exemplo da criao e comparao de uma String:
string myString = Hello; myString += World; if (myString == Hello World MessageBox.Show(myString);

Pode-se criar Strings a partir de outras Strings dos seguintes modos: Cria uma nova String que aponta para o mesmo objecto.
String.Copy SubString Join String s1 = s2

Cria uma nova cpia independente da String. Retira uma substring da String.

Produz uma String a partir de um Array de Strings, separadas por uma dada String que funciona como um separador.
Split

Cria um Array de Strings que resultam da diviso de uma String em determinados pontos onde foram encontrados caracteres especificados. Existem vrios mtodos que permitem procurar substrings ou caracteres numa determinada String:
IndexOf

Retorna a primeira posio de uma substring.

Executa a mesma operao que o IndexOf mas procura por qualquer elemento num Array de Chars.
LastIndexOf e LastIndexOfAny

IndexOfAny

Fazem as mesmas operaes que o IndexOf e o IndexOfAny mas realizam a procura a partir do final da String. 96

StartsWith e EndsWith

Procuram as substrings no inicio ou no final da string. fazer determinadas

Mtodos que permitem modificaes numa String:


Insert

Insere numa String uma outra instncia de uma String numa posio especifica.
Remove

Retira um nmero indicado de caracteres de uma determinada posio. Substitui uma substring por outra substring. Tambm possivel fazer a substituio de todas as ocorrncias de uma substring por outra. Outros mtodos teis para a manipulao de Strings:
Equals Clone Replace

Compara uma String a outra. Retorna a referncia da instncia de uma String. Altera a String para maisculas ou minsculas. Remove espaos ou caracteres indesejados.

ToLower e ToUpper

Trim, TrimStart e TrimEnd PadLeft e PadRight

Insere espaos esquerda ou direita da String.

97

XML
O XML proporciona uma plataforma independente de descrever dados complexos utilizando documentos compostos hierarquicamente por elementos e atributos. Os documentos XML podem ser utilizados na troca de dados entre componentes de uma aplicao distribuida, entre diferentes aplicaes na mesma empresa ou mesmo entre empresas diferentes. Como o XML uma tecnologia standard, em que os dados esto representados em forma de texto, as diferenas entre distintas plataformas de hardware, de sistema operativo ou de linguagens de programao podem ser facilmente contornadas. assim possivel, construir solues integradas utilizando componentes que interagem entre si a partir de sistemas diferentes. Exemplo Prtico Por exemplo, uma soluo distribuida em que um catlogo de produtos de um revendedor retirado de um sistema ERP (Enterprise Resource Planning). As aplicaes clientes podero utilizar o Web Service para fazer o download dos dados de produtos e realizar as operaes necessrias localmente. Um vendedor com um PocketPC pode retirar os dados de um produto a partir do Web Service ainda no escritrio e esses dados persistirem localmente no PocketPC, de modo a estarem disponiveis quando estiver em contacto com os clientes. Utilizando o XML para representar o catlogo, os dados podem facilmente ser trocados entre o sistema ERP, o servidor de Web e o PocketPC. Utilizao do XML no .NET Compact Framework Existem dois modos principais de trabalhar com o XML. Com as classes XmlReader e XmlWriter que permitem ler ou escrever XML ou ento atravs da classe XmlDocument que implementa o DOM (Document Object Model). Esta classe constri em memria, um documento em modo de rvore permitindo a modificao dos dados e sua navegao em qualquer direco. Este mtodo requer uma elevada quantidade de memria para grandes documentos, enquanto que o XmlReader o XmlWriter so mais rpidos e mais eficientes a nivel de memria, mas apenas permitem uma navegao unidireccional.

98

INPUT E OUTPUT
possivel ler e escrever todo o tipo de ficheiros, desde simples ficheiros de texto at puros ficheiros binrios. Existem funcionalidades para mover o apontador atravs do ficheiro e para copiar, mover e apagar ficheiros inteiros. Um ficheiro pode ser um ficheiro fisico num dispositivo local, um ficheiro remoto numa rede ou um objecto que ainda no um ficheiro mas um simples Stream de bytes em memria, num socket ou outra ligao de rede. possivel ler e escrever Streams de um modo sincrono ou assincrono. So suportadas operaes de Input/Output a dois niveis: Acesso de baixo nivel (byte) utilizando os objectos Stream ou o acesso a nivel de caracteres utilizando os objectos StreamReader e StreamWriter. Classe Stream uma classe abstracta que dispe de funcionalidades para ler ou escrever vrios tipos de dados em bytes. Estes dados podem estar num ficheiro local ou de rede, ou em algo similar a um ficheiro em memria. O importante a reter na classe Stream que trabalha em forma de bytes. O objecto FileStream dispe dos seguintes mtodos: Abre um dado ficheiro. Retorna uma excepo se o ficheiro no existir.
FileMode.Create FileMode.Open

Cria um novo ficheiro ou reescreve o ficheiro se j existir. Cria um novo ficheiro apenas se o ficheiro no existir. Caso contrrio, abre o ficheiro existente.
FileMode.Append FileMode.OpenOrCreate

Abre ou cria um ficheiro, mas procura pelo final do ficheiro antes das operaes de escrita ou de leitura.
try { FileStream myFileStream = new FileStream ("\\myFile.txt", FileMode.Open); } catch (System.IO.FileNotFoundException fnfE) { // mensagem de erro de leitura }

99

Classes BinaryTrade e BinaryWriter Estas classes permitem ler e escrever primitivas de tipos de dados, tais como integers ou doubles, directamente de ou para streams, sem implementar qualquer converso de caracteres. Os ficheiros binrios podem poupar muito espao quando comparados com os ficheiros de texto. Tambm poupam a necessidade de converso dos caracteres.
// recebe de uma caixa de dilogo o nome do ficheiro String fileName = myFileDialog.FileName; // cria um FileStream e define caracteristicas FileStrem myFileStream = new FileStream( fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.None); // cria um objecto para escrita binria BinaryWriter writer = new BinaryWriter( myFileStream, Encoding.ASCII); // escreve dados no ficheiro writer.Write("Produto"); writer.Write(42); writer.Write(3.47); // fecha o objecto de escrita writer.Close();

Classes StreamReader e StreamWriter Estas classes derivam respectivamente das classes abstractas TextReader e TextWriter. Estas classes direccionam o input e output de caracteres atravs de uma stream com uma codificao que traduz os caracteres em bytes e o inverso.
// cria o StreamReader StreamReader reader = new StreamReader("\\MyFile.txt"); int myChar; String myString = ""; // enquanto conseguir ler do Stream // converte e introduz cada caracter na String While ((myChar = reader.Read()) != -1) { myString += System.Convert.ToChar(myChar); if(myChar == (int).) break; } // mostra a String MessageBox.Show(myString); // fecha o Stream reader.Close;

100

COMUNICAO EM REDE
Um dos melhores mtodos de aceder a recursos a partir de um dispositivo mvel atravs do XML Web Services. No entanto, se em certas situaes esta no for a soluo apropriada para aceder a recursos de rede, possivel utilizar o protocolo HTTP (Hypertext Transfer Protocol) atravs das classes System.Net.WebRequest e System.Net.WebResponse. Mas se for necessrio ter controlo directo sobre a ligao TCP/IP (Transmission Control Protocol) ou UDP/IP (User Datagram Protocol), utiliza-se a classe System.Net.Sockets.Socket. Alm destas, tambm existem classes para comunicaes por infra-vermelhos ou comunicaes de srie com outros aparelhos portteis. Namespace System.Net Contm classes para aceder a recursos na Internet. O endereo para cada contedo na internet dado pelo URI (Uniform Resource Identifies) e composto pelo protcolo, o nome do host e o nome do ficheiro. Para aceder a um recurso necessrio enviar um pedido de comunicao utiizando o mtodo WebRequest.Create, passando o endereo do recurso que se pretende aceder. Se o protcolo est na forma http:// ou https:// retornada uma instncia da classe HttpWebRequest correspondente ao protcolo especificado. ento retornada a instncia HttpWebResponse contendo a resposta.
using System.Net; using System.IO; WebRequest req = WebRequest.Create(uri); WebResponse res = req.GetResponse(); // espera at que resposta chegue Stream ReceiveStream = res.GetResponseStream(); // l o Stream para uma String StreamReader sr = new StreamReader( ReceiveStream ); string resultstring = sr.ReadToEnd();

101

SEGURANA
A funo de estabelecer uma soluo ao nvel da segurana num projecto deve ser pensada desde o primeiro momento. Ignorar preocupaes de segurana na fase de design, pode mais tarde resultar numa grande reformulao. Escrever cdigo seguro apenas uma parte da implementao de uma soluo segura. O nvel de segurana alcanado numa aplicao to boa quanto o seu ponto mais fraco, logo no vale a pena escrever cdigo avanado, por exemplo na encriptao dos dados no envio para o servidor se depois esse servidor no tem proteco suficiente, podendo um hacker ter acesso informao protegida. A segurana das principais preocupaes das empresas quando se considera desenvolver aplicaes para aparelhos portteis. Pela sua prpria natureza, estes dispositivos so levados para fora do escritrio, operam sobre redes sem fios fora das firewalls das empresas e sendo pequenos podem so facilmente perdidos ou roubados. O responsvel da empresa ter questes sobre de que modo os dados esto protegidos. Se o equipamento for parar a mos alheias. Ou no caso de um aparelho que est a retirar informao dos servidores, como sabemos que um funcionrio e no algum que tenha roubado o dispositivo? Como esto protegidas as redes sem fios de modo que os dados no sejam interceptados por um hacker? O Bsico ao Nvel da Segurana Antes de comear a pensar nos requisitos de uma aplicao especfica, deve-se considerar em criar uma poltica de segurana, de modo a definir as responsabilidades de cada utilizador. essencial a autenticao do utilizador, antes de qualquer tipo de interaco com o aparelho, se possivel logo aps o ter ligado. O utilizador deve reintroduzir a password, caso o aparelho esteja inactivo depois de um determinado periodo de tempo, uma hora por exemplo.

102

Recomendaes de Segurana Existem vrios pontos a ter em ateno quando se trata de segurana: - Utilizao de um anti-virus para prevenir uma infeco atravs da Internet ou de um e-mail; - Aconselhada a utilizao de firewalls para aparelhos que estejam ligados em rede por extensos periodos de tempo; - Utilizao de VPNs (Virtual Private Networking) encriptando os dados e criando um tnel na autenticao e ligao de utilizadores dentro ou fora de uma rede privada; - Utilizao de SSL para encriptar dados at 128bits; - Prevenir o spoofing, equipando o servidor de um certificado que permita identific-lo como a mquina verdadeira; - Autenticao dos clientes e definir as autorizaes do que eles podem fazer; - Proteger os dados dos XML Web Services; - Criao de segurana nas conexes com o SQL Server; - Autenticao do utilizador atravs de uma password, de uma impresso digital, de um carto de segurana.

103

ADO.NET
A maior parte das aplicaes permitem armazenar, extrair e alterar dados. As classes ADO.NET permitem realizar essas operaes com um servidor SQL atravs de uma ligao de rede, com um servidor SQL Server CE presente no aparelho, ou com XML Web Services. Estas classes permitem de um modo simples e conveniente representar, criar e manipular os dados de que uma aplicao necessita. Connectionless do ADO.NET O ADO.NET connectionless, ou seja, no necessita de ter ligaes activas a uma fonte de dados, o que bastante til no caso de aparelhos mveis, uma vez que as ligaes podem estar ocasionalmente indisponveis ou desligadas durante longos periodos de tempo. Estes objectos podem ser criados independentemente do tipo de dados, como por exemplo o SQL Server. possivel conectar a uma fonte de dados pelo tempo unicamente necessrio para fazer o download dos dados pretendidos e ento desligar para edit-los off-line. Quando o processamento realizado localmente est finalizado restabelecida a ligao e os dados actualizados. Um exemplo de uma aplicao real: Um tcnico que de manh faz a ligao base de dados central de onde retira a agenda dos trabalhos a realizar durante o dia. Durante o seu trabalho, o tcnico utiliza o aparelho para recolher relatrios e observaes, mas devido prpria natureza do seu trabalho no possivel ligar base de dados central durante esse periodo. No fim do dia, necessrio fazer a actualizao para que os clientes sejam cobrados e a agenda calculada para o prximo dia. ADO.NET e XML O XML reconhecido como sendo uma linguagem de troca de dados. Tem como base informao textual, por isso no contm informao binria. Assim, pode passar por firewalls que geralmente bloqueiam dados binrios, tais como executveis e objectos COM, permitindo os objectos ADO.NET comunicar atravs da Internet utilizando HTTP.

104

Outra grande vantagem em guardar informao no formato XML a facilidade de troca de dados entre aplicaes instaladas em mquinas ou linguagens diferentes. Os objectos ADO.NET podem tambm escrever o seu contedo para um ficheiro de texto ou para um mecanismo de transmisso como um objecto Stream. Binding de Controls O ADO.NET permite tambm fazer o binding de dados, ou seja, fornecer dados a controls do interface do utilizador. Podem tambm receber alteraes que sejam realizadas nesses controls, o que significa que o programador no tem de programar mecanismos para exibir e alterar dados, permitindo uma maior rapidez no desenvolvimento de aplicaes que tenham manipulao de dados.

105

XML WEB SERVICES


Permitem o acesso a dados e a funes ao nivel da empresa ou remotamente num aparelho mvel. Utilizam standards de Web para aceder a funcionalidades num servidor. transmitida atravs de HTTP numa Intranet ou na Internet. S necessria uma ligao ao servidor que disponibiliza o Web Service quando uma funo est a ser chamada ou quando est a ser dada resposta ao dispositivo mvel. O XML Web Service pode ser facilmente configurado atravs de uma firewall, pois os dados esto em forma de texto e no em formato binrio. E o seu acesso, integrado na segurana do Windows ao configurar a autenticao com um nome de utilizador e password. Uma aplicao de um cliente mvel pode utilizar o XML Web Service sem ter que instalar software adicional. Como exemplo, um XML Web Service pode ser usado para ligar os empregados de um restaurante que recebem pedidos dos clientes com um sistema que gere esses pedidos. A aplicao pode aceder ao menu mostrando o nivel dos stocks, as recomendaes do chefe e transmitindo o pedido do cliente. O sistema reduz o stock dos pedidos efectuados e d a ordem para a cozinha. No fim, elabora a factura que ser apresentada ao cliente. Arquitectura do XML Web Services Os dados descritos e representados em XML esto num formato neutro. As operaes suportadas por um XML Web Service descrevem-se a si prprias utilizando igualmente um formato prprio em XML. Os dados so retirados do dispositivo mas escondendo os detalhes de como a ligao base de dados realizada e como os objectos da base de dados so utilizados pela aplicao cliente. Um XML Web Service utiliza o ASP.NET e corre no IIS (Microsoft Internet Information Service). A aplicao cliente tem que criar um objecto proxy capaz de ligar ao Web Service e invocar os seus mtodos.

106

SQL SERVER CE
O SQL Server CE uma pequena implementao de base de dados SQL num PocketPC e pode ser instalado independentemente do .NET Compact Framework. um modo ideal de guardar dados localmente, permitindo a sua encriptao tanto durante o seu armazenamento no aparelho como na transmisso para um servidor central. A utilizao do SQL Server CE possibilita ao programador um ambiente familiar, com a utilizao de tcnicas similares s usadas na programao de uma aplicao de desktop com SQL Server. Possui o motor da base de dados, um programa cliente para conectar a uma base de dados central e uma verso do Query Analyzer que permite graficamente criar a estrutura da base de dados com seus objectos, realizar um query e obter os seus resultados. O tamanho mximo da base de dados depende do espao local disponivel e pode ter at 2GB. Numa utilizao possivel, um motorista pode usar uma aplicao num PocketPC para verificar e registar o carregamento de produtos e a sua entrega aos respectivos clientes, utilizando uma base de dados SQL Server CE. Ao regressar ao armazm depois de um dia de trabalho, o motorista re-conecta ao servidor central para coordenar o controlo de stocks e guardar o estado das estregas. Esta actualizao tambm pode ser feita durante o perodo de entregas atravs de uma rede sem fios de modo a dar aos clientes informao actual sobre a localizao da encomenda. Utilizao do SQL Server CE Ao programar com o SQL Server CE existem trs fases de desenvolvimento: - Criao da base de dados localmente. - Actualizao dos dados no aparelho. - Actualizao dos dados localmente alterados para a base de dados central. Esta actualizao pode ser feita utilizando a arquitectura RDA ou ento a arquitectura Merge Replication. Esta ltima, apesar de mais poderosa e simples de usar mais complexa de instalar, sobretudo nas configuraes de segurana. Todavia, caso no seja necessrio o suporte de base de dados anteriores ao SQL Server 2000, vale a pena investir neste esforo inicial extra, com dividendos futuros aquando o crescimento da complexidade da aplicao.

107

CONTROLS PERSONALIZADOS
Os controls fornecidos pelo .NET Compact Framework contm funcionalidades bastante teis para o interface da aplicao que se pretende desenvolver. No entanto, uma facilidade dada pela plataforma, a capacidade de criar verses alteradas desses controls com adaptaes a necessidades prprias, promovendo assim a reutilizao de cdigo. Controls que so reutilizados na mesma aplicao, podem reduzir o tamanho dos ficheiros e as necessidades de memria. Ao modularizar o cdigo deste modo, ajuda a asegurar a consistncia de design pois so utilizados no interface os mesmos componentes relativos aos controls. O suporte dado pelo .NET herana de objectos, permite construir facilmente um control prprio que seja substancialmente parecido com um control j existente, particularmente quando se pretende aperfeioar o comportamento desse control. Por exemplo, se se considerar um control de texto que apenas deva permitir caracteres numricos. Neste caso, cria-se uma classe que herda as propriedades da classe TextBox. Com esta nova classe, uma nova verso do OnKeyPress criada e alterado o tratamento que controla os caracteres que vo sendo teclados, sobrecarregando este mtodo para apenas aceitar nmeros e o BackSpace. Todos os restantes comportamentos so derivados a partir da classe TextBox.
namespace teste { public class NumericTextBox : System.Windows.Forms.TextBox { protected override void OnKeyPress(KeyPressEventArgs e) { if (!(Char.IsDigit(e.KeyChar) || (e.KeyChar=='\b') || (e.KeyChar==13))) { e.Handled=true; } base.OnKeyPress(e); } } }

108

GLOBALIZAO E LOCALIZAO
Em alguns casos, necessrio desenvolver uma aplicao que ir ser utilizada internacionalmente, por pessoas com culturas e lnguas diferentes. O planeamento necessrio no desenvolvimento de uma aplicao deste tipo pode ser bem mais complicado. Mas, este esforo na fase de planeamento pode ter os seus dividendos, pois muito mais difcil a introduo de conscincia cultural a uma aplicao j finalizada. Globalizao Por globalizao entende-se que no design da aplicao a sua lgica de funcionamento no deve ser um factor que impea a sua utilizao por mltiplas culturas. Uma aplicao deve utilizar um formato de data neutro e separar recursos que devem ser traduzidos para diferentes culturas. Uma aplicao em que os formatos de datas e moedas estejam implicitos no cdigo, ou em que o interface tenha uma determinada lgica local, ser muito complicada utilizar internacionalmente. Localizao A localizao consiste em especificar uma aplicao para uma determinada cultura, normalmente traduzindo o texto do interface e assegurando que os formatos de datas e nmeros apresentados se ajustam s definies locais.

109

THREADS
A utilizao de threads mltiplas numa aplicao significa dividir o processamento de uma determinada funo em duas ou mais tarefas. Deste modo, o processamento pode ser realizado mais rapidamente do que se cada tarefa estivesse a ser processada em srie. Esta performance extra pode fazer uma grande diferena em aplicaes num dispositivo com capacidades limitadas, j que no possuem o mesmo poder de processamento que uma mquina desktop. Capacidade de Resposta e Escalonabilidade Como resultado, possivel tornar a aplicao mais escalonvel e com melhores capacidades de resposta. escalonvel quando o programador pode facilmente responder a novos pedidos, como por exemplo ir buscar dados adicionais a um Web Service sem ter que restruturar todas as outras partes da aplicao que foram buscar dados a outras fontes. Tem maior capacidade de resposta ao ser capaz de responder mais facilmente aos pedidos do utilizador, ao mesmo tempo que est a decorrer uma tarefa demorada, tal como uma pesquisa a uma base de dados ou ao retirar dados da Internet. Conceito Multithreading O conceito multithread refere-se possibilidade de uma aplicao desempenhar mais do que uma tarefa de cada vez. Em contraste com este conceito est o multiprocessamento, em que uma mquina pode correr diversas aplicaes ao mesmo tempo. Neste caso, cada aplicao corre num processo diferente em espaos de memria isolados uns dos outros. O sistema operativo faz com que paream estar a correr simultaneamente ao alternar entre eles vrias vezes por segundo. Com multithreading, so criadas mltiplas tarefas de processamento para cada aplicao. O sistema operativo capaz de organizar as threads individuais de cada aplicao de modo a parecer que est a executar simultaneamente tarefas distintas.

110

Vantagens do Multithreading Numa aplicao com uma nica thread tudo tem de ser executado numa ordem pr-definida. Por exemplo, uma aplicao que tem de desempenhar duas tarefas, receber introduo de dados e utilizar esses dados para realizar uma longa operao de procura numa base de dados. Se a aplicao s utilizar uma thread, o utilizador ao realizar mais do que uma procura ter de esperar que a primeira procura acabe para poder voltar a introduzir os dados de uma nova procura. Dividindo a aplicao em duas threads, uma para a introduo de dados e outra para realizar a procura, melhorava o desempenho da aplicao ao nvel do tempo de resposta. Assim que o utilizador dava inicio a uma procura, a thread que trata da introduo dos dados transmitia-os thread responsvel pela procura, e imediatamente ficaria disponivel ao utilizador enquanto que decorria a procura. O utilizador podia introduzir vrias procuras sem ter que esperar que alguma terminasse. Multithreading pode igualmente melhorar o desempenho de algumas aplicaes ao rentabilizar a utilizao do processador. Torna-se mais transparente no ponto de vista de concepo, se houver threads mltiplas, cada uma com a sua responsabilidade, do que uma nica thread que faa tudo. Threads mltiplas tambm permitem automaticamente fazer melhor uso do processador porque o Sistema Operativo alterna entre uma thread que est espera de resposta para outra que esteja pronta para ser executada.

111

GRFICOS
Existem vrias classes que podem ser utilizadas em programao grfica. Estas classes derivam do namespace System.Drawing e podem ser utilizadas para criar formas, linhas, imagens e texto em superficies desenhadas. GDI+ Enquanto que os controls complexos so ideais para aplicaes empresariais, os programadores de jogos necessitam do mximo de processamento e de flexibilidade a nvel grfico. Para o desenvolvimento de aplicaes grficas mais complexas o .NET Compact Framework dispe de um conjunto de librarias chamadas GDI+ que permitem desenhar e controlar imagens.

112

UTILIZAO EM CASOS REAIS

TESCO
www.tesco.com

Introduo O Tesco PLC maior cadeia de supermercados alimentares do Reino Unido. Com 270 lojas e uma loja online, procurou melhorar a eficincia do seu processo de entregas ao domiclio. Situao Quando o site tesco.com e os supermercados Tesco quiseram abranger a sua infra-estrutura de automatizao de processos s suas carrinhas de entrega de produtos, procuraram uma soluo utilizando o Visual Studio e o .NET Compact Framework. Para tal, utilizaram dispositivos com PocketPC, dotados de capacidades wireless ligados a receptores GPS montados em cada carrinha. Desenvolveram uma aplicao em C# capaz de realizar o download das listas de encomendas dos clientes, definir a rota para os destinos pretendidos, receber rejeies de clientes aos produtos substituidos, anotar a assinatura do cliente junto com a hora e o local, alm de registar todo o percurso efectuado pela carrinha. Soluo A soluo prottipo foi desenvolvida por um nico programador em 8 semanas. A aplicao substitui toda a papelada utilizada pelo servio de entregas. Aquando na loja, a aplicao carrega as encomendas a ser processadas pela carrinha, atravs de uma ligao wireless 802.11b. A lista de encomendas inclui a localizao dos clientes e uma lista dos produtos substituidos (certos produtos so substituidos por estarem esgotados, cabendo ao cliente aceitar a substituio).

114

Figura 41 - Lista de Clientes e Horas das Entregas

A carrinha dispe de um receptor GPS que fornece a sua latitude e longitude, assim como a hora e data actual. Quando a lista de encomendas carregada, a aplicao exibe um mapa que indica o trajecto at ao primeiro cliente. Quando o condutor chega ao destino, leva junto do cliente o PocketPC e os produtos. Cabe ento a este aceitar aceitar ou rejeitar alguma substiuio de um produto. O aparelho grava a assinatura do cliente, assim como a hora e posio da carrinha. Beneficios Assim que feita uma entrega, conhecida e registada a latitude e longitude. Deste modo, em entregas futuras independentemente do condutor, aparecer no mapa a mesma exacta posio. Entre curtos espaos de tempo, tambm registado todo o percurso efectuado assim como a hora. Esta informao retornada ao programa de mapas e delineao de rotas, permitindo melhorar os percursos e a preciso dos tempos de entrega.

115

Figura 42 - Mapa do Percurso

Teste O sistema foi testado num supermercado da cidade de Basingstoke com quatro carrinhas. De trs em trs semanas foram ouvidas os comentrios dos condutores acerca do programa e realizadas as alteraes necessrias. Este um bom exemplo de como este tipo de aplicao pode ajudar a prestar um melhor servio e com menores custos, quer para a empresa quer para os clientes.

116

GEOVECTOR
www.geovector.com

A Geovector Corporation uma empresa norteamericana que estabeleceu um laboratrio de desenvolvimento em Auckland na Nova Zelndia, destinado a desenvolver aplicaes de localizao baseadas na sua tecnologia. Esta tecnologia baseia-se no uso de sensores de direccionamento e de altitude que so capazes de detectar para onde o aparelho est a apontar. Tal combinado com GPS que detecta a localizao espacial do aparelho e uma base de dados de informao geogrfica criam um novo tipo de soluo mvel. Enquanto o GPS por si s apenas nos diz o que est nossa volta, o GeoVector transforma o engenho no que essencialmente um rato e onde o mundo real o nosso ambiente de interaco e em que possivel apontar e clicar em qualquer objecto geo-referenciado. A aplicao inicial desenvolvida para este tipo de tecnologia destinada a visitantes da Nova Zelndia chamada Welcome to New Zealand (W2NZ). Soluo Foi implementada uma aplicao utilizando o Visual Studio .NET e o .NET Compact Framework. Os clculos espaciais foram realizados em C#, os dados esto guardados localmente em SQL Server CE e as comunicaes com o servidor principal atravs de HTTP via SQL Server merge replication. Esta aplicao ir permitir aos utilizadores serem guiados atravs da Nova Zelndia, com a diferena em relao s aplicaes j existentes de permitir ao utilizador apontar o seu aparelho a um objecto conhecido e obter informao sobre esse mesmo objecto. Pode tambm apontar numa determinada direco para saber que categorias de objectos existem nesse sentido. Poder perguntar se existem restaurantes numa rua e assim que o utilizador localize um restaurante, um cinema ou outro estabelecimento poder telefonar para esse local ou fazer uma reserva.

117

Uma vez que tenha decidido o destino em que estar interessado, poder facilmente ser guiado no atravs de mapas mas atravs de uma seta que aponta qual o sentido a seguir a partir da sua posio actual. Esta seta manter a direco em relao ao objecto independentemente da direco do PocketPC, graas ao sensor de direccionamento que determina para onde o aparelho est virado. Esta aplicao est destinada a pedrestes, particularmente a turistas e visitantes a um novo local. No vocacionada a navegao de veculos em que necessrio o clculo de um nmero de outras variveis. Neste caso, apenas indicada a direco cabendo ao utilizador determinar o trajecto.

Figura 43 - Informaes sobre um Local

A aplicao permite ao utilizador apontar para os objectos sua volta de modo a obter informaes, como por exemplo: - Monumentos e outros pontos de interesse para saber qual a sua origem e significado; - Apontar para hteis e restaurantes para obter preos de quartos e de mens; - Apontar para um cinema para se informar dos filmes em exibio e reservar bilhetes.

118

Benefcios A utilizao do .NET Compact Framework d um ambiente consistente no desenvolvimento das vrias partes deste projecto. Tambm a combinao SQL Server 2000 e o SQL Server CE facilita o acesso aos dados. A possibilidade de armazenar e processar a informao no prprio aparelho d a vantagem de melhorar a performance da aplicao e reduzir a dependncia face disponibilidade constante um canal de comunicao. Futuro Um dos objectivos delineados para este projecto ser a integrao com o MapPoint da Microsoft para inclui mapas na aplicao. Esta tecnologia extende-se a outros possveis cenrios como por exemplo uma aplicao destinada ao mercado imobilirio ou mesmo num jogo de first person shooter jogado mesmo na primeira pessoa.

119

Concluso

120

APONTAMENTOS FINAIS
Com a realizao deste trabalho, consegui um dos meus objectivos iniciais, que era obter algumas noes no s da programao para PDAs com o .NET Compact Framework, mas tambm iniciar-me na programao .NET em geral. Procurei abranger as vrias vertentes possiveis neste tipo de aplicaes. As reas descritas no capitulo das potencialidades do .NET Compact Framework representam capacidades mais complexas e possveis de serem exploradas. Tendo como base este documento possivel aprofundar as informaes aqui transmitidas. De um modo geral, os objectivos estabelecidos para a realizao deste trabalho foram alcanados. Os conhecimentos aqui obtidos com certeza tero implicaes no prolongamento da minha experincia como programador.

121

REFERNCIA

INFORMAO NA INTERNET
Sendo o .NET Compact Framework de momento uma tecnologia ainda muito recente, em que os programadores ainda esto a explorar todas as capacidades de desenvolvimento da plataforma, a maior parte da informao disponivel encontra-se concentrada nos sites da Microsoft. De facto a maior parte da pesquisa para este trabalho foi realizada no site da Microsoft destinada ao desenvolvimento de aplicaes, o MSDN (Microsoft Development Network) que tem o endereo http://msdn.microsoft.com. Este site dispe de uma gigantesca quantidade de informao. Existem tambm outros sites satlites como o Microsoft Smart Devices Developer Community com o endereo http://smartdevices.microsoftdev.com. Alm da informao disponibilizada pela Microsoft, medida que esta tecnologia vai sendo mais aceite e explorada pela comunidade de programadores, comeam a existir cada vez mais, sites que contm informao ligada ao desenvolvimento de aplicaes para PocketPC utilizando a plataforma .NET. Alguns so exclusivamente dedicados a este tipo, e outros sites de maiores dimenses dispem de uma seco vocacionada a este assunto. Os links seguintes apontam para alguns documentos que serviram como base a este documento. Tambm dispem de informao adicional que permitir aprofundar os assuntos aqui abordados. Como a Internet est em constante mutao, com o decorrer do tempo, os links aqui refernciados perdero validade, restando os temas dos documentos como base.

123

SITES
Microsoft http://www.microsoft.com Site inicial da Microsoft. MSDN: Microsoft Software Development Network

http://msdn.microsoft.com Recursos da Microsoft destinado ao desenvolvimento de aplicaes nas mais variadas linguagens. http://msdn.microsoft.com/vstudio/device/ Desenvolvimento de aplicaes para dispositivos mveis em geral. http://msdn.microsoft.com/vstudio/device/compact.aspx O .NET Compact Framework. Google

http://www.google.com Motor de busca utilizado nas procuras. ZDNet Reviews

http://reviews-zdnet.com.com/Handhelds/4502-3127_16-0.html?tag=ont-poc Comentrios sobre PDAs. CNet Reviews

http://reviews.cnet.com/Handhelds/4502-3127_7-0.html?tag=ont-poc Comentrios sobre PDAs.

124

LearnMobile.net

http://www.learnmobile.net/MobileClient/ Grande quantidade de tutoriais, exemplos de cdigo e ajudas teis sobre o desenvolvimento destinado a engenhos portteis. Open .NET Compact Framework

http://www.opennetcf.org/ Cdigo fonte e Framework.

exemplos

destinado

ao

Compact

JWHedgehog-Developmentor .NET Reference

http://www.develop.com/compactframework/ Possui uma completa referncia de todos os namespaces do Compact Framework com respectivas classes, membros, propriedades, eventos, etc. DevBuzz

http://www.devbuzz.com/content/init_compact_framework.asp Informaes sobre o desenvolvimento para PocketPC DevX

http://www.devx.com/ Enorme quantidade de cdigo fonte em variadas linguagens incluindo Visual Basic.NET e C#.

125

GotDotNet .NET Framework Community

http://www.gotdotnet.com/ Discuso do .NET em geral. CSharp Friends

http://www.csharpfriends.com/ Grande comunidade C#.

126

LIVROS E EBOOKS
Microsoft .NET Compact Framework

autores

Andy Wigley Stephen Wheelwright Mark Sutton

Definitive Guide to the .NET Compact Framework

autores

Larry Roof Dan Fergus

Mastering Visual Basic .NET

autores

Evangelos Petroutsos

127

VB.NET Developer's Guide

autores

Cameron Wakefield Wei Meng

Visual Blueprint for Building C# .Net Applications

autores

Eric Butow Tommy Ryan

C#.Net Web Developer's Guide

autores

Greg Hack Adrian Turtschi Jason Werry Joseph Albahari Wei Meng Lee

128

Applied Microsoft .NET Framework Programming

autores

Jeffrey Richter

O'Reilly .NET Framework Essentials

autores

Thuan L. Thai Hoang Q. Lam

129

DOCUMENTOS
Windows Mobile Hardware http://www.microsoft.com/windowsmobile/buyersguide/compare/emea/pocketpc.mspx Hardware aconselhado pela Microsoft para o PocketPC. The Visual Studio Vision http://www.zdnet.com/filters/printerfriendly/0,6061,2879055-92,00.html Introduo e objectivos do Visual Studio.NET Top 10 reasons to go with .Net http://www.zdnet.com/filters/printerfriendly/0,6061,2901097-92,00.html Vantagens do .NET Developing Applications for Windows Mobile: FAQ http://msdn.microsoft.com/library/en-us/dnppcgen/html/devmobfaq.asp Perguntas mais frequntes no desenvolvimento de aplicaes para dispositivos mveis. Microsoft .NET Compact Framework for Mobile http://www.directionsonmicrosoft.com/sample/DOMIS/update/2003/02feb/0203ncfe.htm Prespectiva geral do .NET Compact Framework Introduction to Development Tools http://msdn.microsoft.com/library/en-us/dnppcgen/html/devtoolsmobileapps.asp Introduo s ferramentas de desenvolvimento. The PC in Your Pocket http://msdn.microsoft.com/library/en-us/dnroad/html/road06272001.asp Caractersticas do PocketPC e debug de aplicaes. Taking Control with C# http://msdn.microsoft.com/library/en-us/dnroad/html/road01082003.asp Alguns dos controls disponveis para o interface das aplicaes, com exemplos em C#. Creating Custom Controls http://msdn.microsoft.com/library/en-us/dnroad/html/road11272002.asp Criao de controls adaptados. Pocket PC 2002 at home in enterprise http://www.zdnet.com/filters/printerfriendly/0,6061,2851704-92,00.html http://www.zdnet.com/filters/printerfriendly/0,6061,2913272-92,00.html A utilizao de PocketPCs nas empresas. 130

Developing Applications Using Web Services http://msdn.microsoft.com/library/default.asp ?url=/library/en-us/dnppcgen/html/connecteddotnetppcapps.asp Aplicaes .NET Compact Framework com a utilizao de XML Web Services. Ways Compact Framework Can Access Databases http://www.directionsonmicrosoft.com/ sample/DOMIS/update/2003/02feb/0203ncfe_illo1.htm Acesso a bases de dados. What's New for Developers in Win Mobile 2003 http://msdn.microsoft.com/library/default.asp?url=/downloads/list/pocket2003.asp Windows Mobile 2003, a mais recente actualizao do SDK para o desenvolvimento destinado a aparelhos mveis. Microsoft Case Studies: Pepsi Bottling Group, The http://www.microsoft.com/resources/casestudies/CaseStudy.asp?casestudyid=13819 Utilizao do Compact Framework pela Pepsi Bottling Group. Microsoft Case Studies: Tesco.com http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=13394 Utilizao do Compact Framework pelos supermercados Tesco. Microsoft Case Studies: GeoVector.com http://www.microsoft.com/sql/ce/productinfo/casestudy.asp?CaseStudyID=13399 Utilizao do Compact Framework no desenvolvimento de uma aplicao de informao posicional. Microsoft Preps New Handheld OS http://zdnet.com.com/2102-1104_2-1015726.html?tag=printthis Prximo Sistema Operativo: PocketPC 2003 ActiveSync 3.6 Download http://www.microsoft.com/mobile/downloads Download do ActiveSync 3.6, necessrio para a ligao de um aparelho fsico.

131

Você também pode gostar