no - dei.isep.ipp.ptpaf/proj/set2003/pdas.net.pdf · noottaass inniicciiaaiiss este trabalho...

131

Upload: truongnhan

Post on 08-Nov-2018

225 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada
Page 2: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

2

NNNOOOTTTAAASSS IIINNNIIICCCIIIAAAIIISSS Este trabalho destina-se à cadeira de Projecto, do

segundo semestre do quinto ano, do curso de Engenharia Informática, ramo de Computadores e Sistemas, leccionada no Instituto Superior de Engenharia do Porto. Tem como tema o Desenvolvimento de Aplicações destinadas a PDAs, utilizando como ferramenta a plataforma .NET da Microsoft.

Inicialmente, o tema proposto tinha sido o

desenvolvimento de aplicações para PDAs em geral, mas devido ao interesse de mais do que um aluno nesse tema e talvez pela imergente importância do .NET neste domínio, 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 razões que me levaram a optar por este projecto.

A evolução dos PDAs, cada vez com maior capacidade

de processamento, de armazenamento e comunicação, a iminente fusão com os telemóveis e consequente massificação, terão progressivamente uma maior implicação 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 aplicações de que necessitamos. Assim, na escolha deste tema foi também minha intenção me familiarizar com a plataforma .NET, da qual só tinha algumas ideias. Esta será a ferramenta primordial utilizada para desenvolver a maior parte das aplicações nos próximos anos a nível mundial.

Julgo assim que esta combinação, a dos PDAs com o

.NET é algo de muito importante e com grandes potencialidades. Espero que os conhecimentos obtidos na realização deste trabalho me venham a ser úteis como programador e sirvam como base para desenvolver aplicações deste género na minha vida profissional.

Page 3: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

3

DDDEEESSSCCCRRRIIIÇÇÇÃÃÃOOO DDDOOO TTTRRRAAABBBAAALLLHHHOOO Inicialmente irei comparar as diferenças existentes na

plataforma .NET em relação às ferramentas que existiam anteriormente, e indicar quais as vantagens na sua utilização.

Mostrarei as ferramentas existentes e como criar um

simples Hello World. Achei importante dar uma amostra do hardware disponível neste momento para correr este tipo de aplicações.

De seguida, irei descrever os controls mais comuns

para criar o interface de uma aplicação, as suas propriedades mais utilizadas, juntamente com imagens e amostras de código para dar uma ideia de como são e como funcionam.

Indicarei quais os principios gerais a ter na construção

de uma aplicação e como definir alguns parâmetros. Darei uma descrição geral e uma pequena introdução a temas mais avançados, capazes de tornar a aplicação mais poderosa e com mais capacidades. Por fim dou alguns exemplos de aplicações destas tecnologias no mundo empresarial, a sua implementação e beneficios.

Este trabalho tem incluido em toda a sua extenção uma

linguagem muito técnica, sendo necessário alguns conhecimentos de informática e programação para facilitar a sua compreenção.

A maior partes dos exemplos dados ao nivel do código

fonte estão escritos na linguagem C#. Esta linguagem e o Visual Basic .NET são neste momento as únicas linguagens utilizadas neste tipo de programação.

Grande parte da informação recolhida para a realização

deste trabalho foi retirada de sites pertencentes à Microsoft. Em Portugal a documentação relacionada com este tema neste momento é praticamente inexistente.

Estas foram as ferramentas e o hardware utilizado na

realização 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

Page 4: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

IIINNNDDDEEEXXX

Page 5: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

5

002 Notas Iniciais 003 Descrição do Trabalho

IIINNNDDDEEEXXX 005 Index

IIINNNTTTRRROOODDDUUUÇÇÇÃÃÃOOO

012 Introdução 013 Requisitos de Sistema:

014 A Plataforma .NET 014 Antes do .NET 016 Servidor HelloWorld em .NET 018 Conclusão das Vantagens do .NET 018 .NET Compact Framework 019 SQL Server CE 020 ASP.NET Mobile Controls 020 Mobile Information Server 021 Plataformas para o .NET Compact Framework 021 Plataformas Não Suportadas

022 Hardware 023 Hewlett-Packard iPAQ h5550 024 Compaq iPAQ 3955 025 Asus MyPal A600 026 Toshiba e740 027 ViewSonic PocketPC V36 028 Siemens SX56 (PocketPC Phone Edition) 029 Proximus Qtek 1010 (PocketPC Phone Edition)

FFFEEERRRRRRAAAMMMEEENNNTTTAAASSS DDDEEE

DDDEEESSSEEENNNVVVOOOLLLVVVIIIMMMEEENNNTTTOOO 031 Ferramentas 031 Visual Studio .NET 2003 032 eMbedded Visual Tools Version 3 032 eMbedded C++ Version 4 032 O Visual Studio .NET Para Aparelhos Móveis

033 Ambiente de Desenvolvimento 033 Como Criar um Projecto 034 Smart Device Application Wizard 035 Diferenças entre Projectos de Desktop e de Device 035 Gerir o Projecto 037 Sistema de Ajuda 037 Aplicação Hello World

Page 6: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

6

040 O Emulador e As Comunicações 040 Utilização do Emulador 041 Desenvolvimento de Aplicações numa Rede 041 Utilizando o Emulador PocketPC 042 Especificidades dos Aparelhos Móveis 042 Transferência de Dados 042 XML Web Services 042 SQL Server CE 043 Dispositivos Com Recursos Limitados 043 Implicações a Nível da Segurança

CCCOOONNNTTTRRROOOLLLSSS DDDAAA WWWIIINNNDDDOOOWWWSSS FFFOOORRRMMMSSS

045 Windows Forms 045 Criação de Controls 046 Membros dos Controls 046 Propriedades 046 Métodos 046 Eventos

047 Controls 047 Button 048 CheckBox 049 ComboBox 050 ContextMenu 050 DataGrid 052 DomainUpDown 054 HScrollBar e VScrollBar 054 ImageList 056 Label 056 ListBox 057 ListView 058 MainMenu 059 NumericUpDown 060 OpenFileDialog / SaveFileDialog 061 Panel 062 PictureBox 062 ProgressBar 064 RadioButton 064 StatusBar 065 TabControl 066 TextBox 067 Timer 067 Toolbar 069 TrackBar 070 TreeView

Page 7: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

7

CCCOOONNNSSSTTTRRRUUUIIIRRR AAAPPPLLLIIICCCAAAÇÇÇÕÕÕEEESSS

PPPAAARRRAAA PPPOOOCCCKKKEEETTTPPPCCC 073 A Class Form 073 Propriedades de uma Form

075 Controls da Aplicação 075 Respeitando as Normas Gerais 075 Criação de Caixas de Diálogo 078 Utilização das Caixas de Diálogo do Sistema 078 O Control InputPanel 079 O Control MainMenu 081 O Control ToolBar 083 Activação e Desactivação de uma Form 084 O Activate e Deactivate 084 Fechar Aplicações 085 Evento Tap-And-Hold 086 Teclas de Hardware de um PocketPC 086 Finalizar o Desenvolvimento da Aplicação

088 Normas Recomendadas 090 Teste e Debug 090 Utilizar o Debugger 090 O Modo Break 091 Criar um BreakPoint 091 Watch Window 092 Utilizar o Debug

PPPOOOTTTEEENNNCCCIIIAAALLLIIIDDDAAADDDEEESSS 094 Colecções de Objectos 094 Classes de Colecções em System.Collections 095 Namespace System.Collections.Specialized 095 Arrays Multidimensionais 096 ArrayList

097 Strings e Datas 099 XML 099 Exemplo Prático 099 Utilização do XML no .NET Compact Framework

100 Input e Output 100 Classe Stream 101 Classes BinaryTrade e BinaryWriter 101 Classes StreamReader e StreamWriter

102 Comunicação em Rede 102 Namespace System.Net

103 Segurança 103 O Básico ao Nível da Segurança 104 Recomendações de Segurança

105 ADO.NET

Page 8: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

8

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

107 XML Web Services 107 Arquitectura do XML Web Services

108 SQL Server CE 108 Utilização do SQL Server CE

109 Controls Personalizados 110 Globalização e Localização 110 Globalização 110 Localização

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

113 Gráficos 113 GDI+

UUUTTTIIILLLIIIZZZAAAÇÇÇÃÃÃOOO EEEMMM CCCAAASSSOOOSSS RRREEEAAAIIISSS

115 Tesco 115 Introdução 115 Situação 115 Solução 116 Beneficios 117 Teste

118 GeoVector 118 Solução 120 Benefícios 120 Futuro

122 Apontamentos Finais

Page 9: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

9

RRREEEFFFEEERRRÊÊÊNNNCCCIIIAAA 124 Informação na Internet 125 Sites 125 Microsoft 125 MSDN: Microsoft Software Development Network 125 Google 125 ZDNet Reviews 125 CNet Reviews 126 LearnMobile.net 126 Open .NET Compact Framework 126 JWHedgehog-Developmentor .NET Reference 126 DevBuzz 126 DevX 127 GotDotNet .NET Framework Community 127 CSharp Friends

128 Livros e eBooks 128 Microsoft .NET Compact Framework 128 Definitive Guide to the .NET Compact Framework 128 Mastering Visual Basic .NET 129 VB.NET Developer's Guide 129 Visual Blueprint for Building C# .Net Applications 129 C#.Net Web Developer's Guide 130 Applied Microsoft .NET Framework Programming 130 O'Reilly .NET Framework Essentials

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

Page 10: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

10

Introdução

Page 11: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

11

IIINNNTTTRRROOODDDUUUÇÇÇÃÃÃOOO A utilização de PDAs e de outros aparelhos de pequeno

porte tem vindo a aumentar com o avanço das tecnologias. Uma das razões desta massificação têm a ver com o contínuo decréscimo do seu custo. A crescente competição entre fabricantes tem provocado preços mais atractivos para os consumidores. Assim, as empresas mais do que nunca, têm em consideração aplicar investimentos nesta área, tendo em vista a utilização destes aparelhos a um número cada vez maior dos seus empregados.

Além disso, os aparelhos têm-se tornado mais

poderosos. A velocidade de processamento é cada vez maior, possuem mais memória e capacidades gráficas. Incorporam diferentes tecnologias a nível de comunicação, como o Bluetooth, Wi-Fi, 802.11, ou mesmo PDAs híbridos com telefone que estão aptos a usar operadores móveis através de GPRS (General Packet Radio Service) ou CDMA2000 (Comunicações de Dados por Pacotes).

Outro factor impulsionador da utilização dos PDAs é a

melhoria na arquitectura do software. Um exemplo disso é o .NET Compact Framework. Este motor de execução é responsável pela gestão das aplicações .NET em dispositivos portáteis. Algumas das vantagens são a inter-operabilidade entre linguagens, a melhoria ao nível de tratamento de erros e a melhoria ao nível da gestão de memória.

O .NET Compact Framework também implementa um

conjunto de librarias de classes unificadas, orientadas ao objecto, hierarquizadas, extensíveis e que podem ser chamadas por qualquer aplicação escrita em qualquer linguagem .NET.

O benefício mais significativo no .NET Compact

Framework é o facto do modelo de programação ser idêntico ao utilizado pelos programadores que usam o .NET para criar aplicações que se destinam aos PCs de desktop ou a servidores. O .NET Compact Framework implementa um sub-conjunto compatível com o abrangente .NET Framework. Deste modo, os criadores utilizam as mesmas técnicas para conseguir resultados semelhantes usando as mesmas ferramentas, tal como o Visual Studio .NET.

Antes do .NET o desenvolvimento de aplicações para o

Windows CE necessitava de um conjunto diferente de ferramentas, com técnicas similares às necessárias na programação Win32 nos desktops, mas suficientemente diferente para que muitas empresas não se interessassem pelo desenvolvimento deste tipo de aplicações.

Page 12: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

12

Agora, os programadores de desktop podem facilmente

transferir os seus conhecimentos e técnicas para o desenvolvimento de aplicações destinadas a dispositivos portáteis, reduzindo os custos de formação.

O .NET torna mais fácil fazer coisas simples mas

também facilita fazer coisas complexas, tais como aceder a serviços Web ou construir componentes. Desta forma, sobra mais tempo para criar soluções inovadoras.

Uma implementação poderá ser a utilização de

sistemas distribuídos construídos com aplicações nos aparelhos móveis 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 aplicações empresariais e não só.

Requisitos de Sistema: É necessário o seguinte software para desenvolver

aplicações para .NET Compact Framework: - Microsoft Visual Studio .NET 2003; - Microsoft Windows 2000, Microsoft Windows XP ou

Microsoft .NET Server. O hardware mínimo necessário é o seguinte: - Pentium2 450 MHz; - Memória RAM: 128MB (Win2000) ou 256MB

(Windows XP ou .NET Server); - 5GB de espaço livre no disco. O Visual Studio .NET 2003 inclui um emulador de

Windows CE .NET e do PocketPC 2003, de forma que não é essencial ter um equipamento real. No entanto, para testar num engenho verdadeiro, é necessário 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 sincronização Serial/USB.

Page 13: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

13

AAA PPPLLLAAATTTAAAFFFOOORRRMMMAAA ...NNNEEETTT Antes do .NET Para mostrar as diferenças do .NET em relação aos

modelos de programação anteriores, o código 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;

};

};

Page 14: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

14

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 IDispatchImpl<IHelloWorld, &IID_IHelloWorld,

&LIBID_HELLOWORLDPROVIDERLib>

{

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_

Além destes, o Wizard gera um grande número de

outros ficheiros necessários para a implementação do COM. Os clientes, apesar de mais simples, também necessitam de código adicional no caso do Visual C++.

Page 15: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

15

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 código para os mesmos servidores e clientes

em .NET. No eMbedded Visual Tools não era possível criar um servidor COM utilizando o Visual Basic, mas aqui o código 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

Page 16: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

16

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 benefício do .NET foi ilustrado neste

exemplo, e é a sua simplicidade. É possível escrever componentes em qualquer linguagem suportada pelo .NET e é muito simples escrever um componente que pode ser utilizado por qualquer outra linguagem compatível com o .NET.

Tal é possível porque todas estas linguagens são

construídas tendo como base o mesmo sistema. A baixo nível, os tipos de objecto de cada linguagem são exactamente os mesmos.

Page 17: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

17

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, não é necessário aprender todo um novo conjunto de funções de runtime.

Neste exemplo, fica-se com a ideia de que o COM é

apenas um modo de desenvolver componentes em múltiplas linguagens, no entanto é mais do que isso. O Distributed COM (DCOM) permite ter acesso a COMs através de qualquer tipo de rede. O .NET introduz o .Net Remoting que representa um avanço substancial em relação ao DCOM.

Conclusão das Vantagens do .NET O .NET não tem somente a vantagem de implementar

componentes facilmente. Um dos seus grandes atributos é a fiabilidade do código gerado. As aplicações contruídas com o .NET quando executadas são controladas pelo Common Language Runtime (CLR). O CLR compila todo o código em runtime, com a utilização do Just-In-Time (JIT). Aloca memória quando se cria novos objectos e faz o garbage collection dos objectos que não são mais necessários, libertando automaticamente a memória.

Como o CLR compila todo o código no momento de

execução, implementa medidas restritas na verificação de tipo de dados. Assim, não é possível surgirem erros tais como, o de castings inseguros de um objecto para outro, o endereçamento de um array fora dos seus limites ou escrever para além do fim de um buffer. O CLR também faz a gestão ao nível da segurança, exercendo um controlo das funções que são permitidas executar e os recursos a que pode ter acesso um pedaço de código.

.NET Compact Framework O .NET Compact Framework é uma versão mais

compacta da abrangente versão .NET Framework para os desktops. Inclui um sub-conjunto compatível das classes base do .NET Framework. Também engloba algumas novas classes especialmente destinadas a aparelhos móveis.

Compreende ainda uma nova implementação do

Common Language Runtime (CLR), concebido de raiz para correr eficazmente em hardware de pequenas dimensões, com restrições de memória e processamento, e com limitações no consumo de bateria.

Page 18: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

18

O primeiro lançamento 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 telecomunicações e de transmissão

de dados, poderão fornecer as suas próprias librarias, permitindo aos criadores de software desenvolver aplicações direccionadas à especificidade dos serviços que oferecem.

O .NET Compact Framework foi desenvolvido com uma

ideia de portabilidade. Assim é possível, que de futuro, esteja disponível também em outros sistemas operativos não pertencentes à Microsoft.

O Visual Studio .NET 2003 inclui o software e

ferramentas necessárias para criar aplicações que correm em aparelhos que tenham o .NET Compact Framework instalado. Na sua instalação também são copiados os componentes indispensáveis para instalar o .NET Compact Framework num aparelho portátil.

Tal como o .NET Compact Framework, o ASP.NET

Mobile Controls, anteriormente denominado Microsoft Mobile Internet Toolkit (MMIT), permite igualmente criar aplicações que podem ser utilizadas em aparelhos móveis. No entanto, as aplicações do .NET Compact Framework correm no aparelho como clientes com mais potencialidade, com acesso aos recursos da máquina, tal como armazenamento e outros componentes de hardware.

Nas aplicações de ASP.NET, o único software em

execução no aparelho é um Browser de Internet. SQL Server CE O SQL Server CE é uma versão compacta de uma base

de dados relacional que corre em aparelhos equipados com o Windows CE. É compatível com o SQL Server através da utilização de tipos de dados compatíveis. Ocupa apenas 800KB num processador ARM, que é adequado para aparelhos fisicamente limitados.

A segunda versão do SQL Server CE suporta ainda

mais funções intrínsecas que a versão anterior. Funções tais como ABS, Log, Pi, Substring e atributos tais como queries e unions parametrizados. No entanto, a característica mais importante é o namespace System.Data.SqlServerCe, que permite que uma base de dados SQL Server CE seja manipulada a partir de aplicações .NET Compact Framework.

Page 19: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

19

As suas classes dão acesso directo à informação armazenada na base de dados e permitem a utilização do Remote Data Access (RDA) e de Merge Replication, que são duas técnicas 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 aplicações.

ASP.NET Mobile Controls O ASP.NET Mobile Controls permite utilizar o Visual

Studio .NET para desenvolver aplicações destinadas a aparelhos móveis 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 lançados no mesmo dia que o Visual Studio .NET 2002. Estavam disponíveis para download em separado a partir da página do MSDN da Microsoft como um componente Add-On do Visual Studio.

Com o lançamento do Visual Studio .NET 2003, o

desenvolvimento de aplicações Web Mobile tornou-se uma parte totalmente integrante do IDE (Integrated Development Environment) e não mais um produto separado.

As aplicações são executadas num IIS Web Server que

tem instalado o .NET Compact Framework, mas não é necessário o .NET nos dispositivos de pequeno porte. As aplicações MMIT funcionam perfeitamente com o Pocket Internet Explorer que se encontra no PocketPC e em outros equipamentos com o Windows CE. Mas, ao contrário das aplicações .NET Compact Framework, nenhum código é executado na máquina.

Mobile Information Server Existem duas versões do Mobile Information Server

(MIS), o Carrier Edition e o Enterprise Edition. O MIS permite aos utilizadores móveis com o PocketPC ou telefones com WAP, sincronizar com um Microsoft Exchange Server, recebendo e-mails e outras mensagens. Também oferece capacidades de autenticação 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).

Page 20: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

20

Plataformas para o .NET Compact Framework A primeira versão do .NET Compact Framework suporta

os sistemas Power PC, assim como soluções integradas, construídas 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 versão 4.1 e seguintes Plataformas Não Suportadas O .NET Compact Framework não é suportado pelas

seguintes plataformas: - Windows CE versão 3 e anteriores - Handheld PC 2000 e anteriores - Microsoft SmartPhone 2002

Page 21: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

21

HHHAAARRRDDDWWWAAARRREEE Há um constante aperfeiçoamento do hardware capaz

de correr aplicações baseadas na plataforma .NET. Neste momento, Setembro de 2003, as especificações mais comuns neste tipo de aparelhos são processadores Intel Xscale de 400MHz, com 64MB de RAM, ecrãs de 240 pixeis de largura e 320 de altura e 64 mil cores. Equipados com capacidades wireless 802.11 e BlueTooth.

Estas características certamente que em alguns meses

se encontrarão ultrapassadas e em poucos anos completamente obsoletas. Os avanços tecnológicos irão dotar estas máquinas de mais e melhores capacidades, capazes de realizar funções mais complexas e abrangentes com maior rapidez e qualidade.

Estes são alguns dos dispositivos disponíveis nos

mercados mundiais de momento. São descritos a marca, o modelo e as especificações mais importantes, tais como o tipo e velocidade do processador, quantidade de memória, características do ecrã, capacidades na transferência de dados, etc.

Page 22: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

22

Hewlett-Packard iPAQ h5550

Processador

Intel XScale Processor 400 MHz Memória RAM: 128MB ROM: 48MB Ecrã 3.8" Retro-Iluminado; Sensível ao toque 65000 Cores; Resolução: 240x320 Dimensões / Peso 13,5 x 8,2 x 1,5 inches; 207 gramas Bateria Removable Lithium-Ion Expansibilidade Slot SD Integrados Comunicação BlueTooth; 802.11b; IRDA; USB

Page 23: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

23

Compaq iPAQ 3955

Processador

Intel XScale Processor 400 MHz Memória RAM: 64MB ROM: 32MB Ecrã 3.5" Retro-Iluminado 65000 Cores; Resolução: 240x320 Dimensões 12,2 x 7,6 x 1,0cm; 130 gramas Bateria 12 horas Expansibilidade Compact Flash Integrado Comunicação BlueTooth

Page 24: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

24

Asus MyPal A600

Processador Intel XScale Processor 400 MHz Memória

RAM: 64MB ROM: 32MB Ecrã 3.5" Reflexivo 65000 Cores; Resolução: 240x320 Dimensões

12,5 x 7,5 x 1,2cm; 138 gramas Bateria 15 horas; Rechargeable Lithium Polymer Expansibilidade Slot SD Integrado

Page 25: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

25

Toshiba e740

Processador

Intel XScale Processor 400 MHz Memória RAM: 64MB ROM: 32MB Ecrã 3.5" Sensível ao toque 65000 Cores; Resolução: 240x320 Dimensões / Peso 12,2 x 7,7 x 1,5cm; 173 gramas Bateria Advanced Lithium-Ion Expansibilidade Slot SD Integrados Comunicação BlueTooth; WiFi Opcional; IRDA; USB

Page 26: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

26

ViewSonic PocketPC V36

Processador

Intel XScale Processor 300 MHz Memória RAM: 64MB ROM: 32MB Ecrã 3.5" Retro-Iluminado TFT; Sensível ao toque 65000 Cores; Resolução: 240x320 Dimensões 12,2 x 7,6 x 1,0cm; 130 gramas Bateria 10 horas; Advanced Lithium-Ion Expansibilidade Slot SD/MMCard Integrados Comunicação BlueTooth; WiFi Opcional; IRDA; USB

Page 27: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

27

Siemens SX56 (PocketPC Phone Edition)

Processador Intel StrongARM 32-bit 206MHz Memória

RAM: 32MB ROM: 32MB Ecrã 3.5" Retro-Iluminado; Sensível ao Toque 4096 Cores; Resolução: 240x320 Dimensões

12,5 x 7,0 x 1,7cm; 193 gramas Bateria 15 horas; Lithium Ion Expansibilidade Slot SD Integrado Comunicação GPRS; GSM; IRDA

Page 28: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

28

Proximus Qtek 1010 (PocketPC Phone Edition)

Processador

Intel StrongARM 32-bit 206MHz Memória RAM: 32MB ROM: 32MB Ecrã 3.5" Reflexivo 4096 Cores; Resolução: 240x320 Dimensões 12,9 x 7,3 x 1,8cm; 200 gramas Bateria 15 horas; Rechargeable Lithium Polymer Expansibilidade Slot SD/MMCard Integrados Comunicação GPRS; GSM; IRDA; USB

Page 29: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

FFFEEERRRRRRAAAMMMEEENNNTTTAAASSS

DDDEEE

DDDEEESSSEEENNNVVVOOOLLLVVVIIIMMMEEE

NNNTTTOOO

Page 30: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

30

FFFEEERRRRRRAAAMMMEEENNNTTTAAASSS Há actualmente três ferramentas distintas para o

desenvolvimento de aplicações para o PocketPC e Windows CE.

Visual Studio .NET 2003 O Visual Studio .NET 2003 inclui capacidades que

possibilitam escrever código e fazer o debug de aplicações para o .NET Compact Framework. Estas ferramentas e as técnicas utilizadas são exactamente as mesmas que são usadas no desenvolvimento de aplicações para o abrangente .NET Framework. Todavia, utiliza-se as librarias das classes de base do .NET Compact Framework que são um sub-conjunto das do .NET Framework geral.

Quando se testa uma aplicação em desenvolvimento,

os resultados são exibidos ou num dispositivo móvel 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 abstracção 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 especialização da programação. Agora é possível para tarefas similares, a utilização das mesmas ferramentas que no desenvolvimento das aplicações para desktop. Assim, esta área torna-se mais atractiva economicamente para as empresas, já que diminuíram os gastos dispendidos na formação de pessoal para este tipo de projectos.

No entanto, existem algumas particularidades que

requerem técnicas especiais. Quer devido às dimensões físicas do ecrã, quer às técnicas de enviar e retirar dados do aparelho ou implicações ao nível da segurança. Também é preciso adoptar soluções que protejam os dados sensíveis pertencentes à empresa e que podem ser interceptados numa comunicação ou facilmente perdidos ou roubados juntamente com o aparelho.

Page 31: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

31

Existem situações que podem levar o programador que desenvolve a aplicação a precisar trabalhar fora do ambiente .NET Compact Framework, como por exemplo nos casos em que é necessário:

- Ter acesso directo à API Win32 de modo a executar funções não disponíveis nas librarias do .NET Compact Framework.

- Aceder a objectos COM. No .NET Compact Framework não é possível aceder directamente a objectos COM. É necessário utilizar o eMbedded Visual C++ para criar um invólucro que permita executar chamadas às funções do objecto.

- Interagir com DLLs fornecidas por fabricantes de periféricos. Quando os fabricantes disponibilizarem librarias .NET, estes periféricos já poderão ser directamente controlados.

eMbedded Visual Tools Version 3 É um ambiente de desenvolvimento que funciona por si

só, ou seja, não 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

aplicações que o .NET Compact Framework não suporta. Também se deve ter esta ferramenta em consideração, quando se pretende desenvolver código com melhor performance ou quando se pretende controlar o hardware directamente ou os serviços 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 versão 4 do eMbedded C++ tal como o seu

antecessor é um IDE que permite desenvolver aplicações nativas utilizando o Win32 API, o Microsoft Foundation Classes (MFC) e ATL. No entanto, a versão 4 apenas funciona com o Windows CE .NET.

O Visual Studio .NET Para Aparelhos Móveis Utiliza-se o Visual Studio .NET 2003 para desenvolver

aplicações para o .NET Compact Framework. Esta possibilidade apenas foi incluida nesta versão do Visual Studio, dando a vantagem de permitir aos programadores já ambientados com a plataforma .NET, de desenvolver aplicações para aparelhos móveis.

Page 32: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

32

AAAMMMBBBIIIEEENNNTTTEEE DDDEEE

DDDEEESSSEEENNNVVVOOOLLLVVVIIIMMMEEENNNTTTOOO Como Criar um Projecto A maneira de criar um projecto para uma aplicação

para PocketPC é a mesma que para criar uma aplicação de desktop. A principal diferença é 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 aplicação Smart Devices,

indo ao menu File e seleccionando New e em seguida Project.

Figura 1 - Janela de Novo Projecto

Aparece a janela de diálogo de novo projecto.

Selecciona-se então a linguagem que se vai utilizar no projecto a partir do painel do lado esquerdo. O painel do lado direito lista os templates disponíveis da linguagem seleccionada.

Escolhe-se então o template Smart Device Application

para criar um projecto para aparelhos móveis. O Visual Studio .NET 2003 suporta as linguagens Visual Basic .NET e o C#. Digita-se o nome para o projecto e a localização dos seus ficheiros.

Page 33: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

33

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 aplicação com o Smart Device Application Wizard.

Figura 2 - Wizard para o Projecto

A secção superior lista as plataformas disponíveis e o

lado direito, os dispositivos instalados no sistema que são capazes de correr as aplicações para esse tipo de plataforma. A parte de baixo lista os tipos de projecto disponíveis para a plataforma seleccionada.

Tipos de Projecto para uma aplicação de aparelhos

móveis (Smart Device Application): Windows Application Cria uma aplicação com o Windows Forms que permita

a entrada e visualização de informação. Class Library Cria uma libraria de classes de modo a ser usado pelos

programadores nos seus projectos. Non-Graphical Application (apenas PocketPC) Cria um projecto sem elementos gráficos que pode ser

utilizado numa tarefa que corra em background, e que não tenha necessidade de interacção com o utilizador.

Console Application (apenas Windows CE) Cria um projecto sem elementos gráficos e que pode

ser chamado a partir da consola de comandos do Windows CE.

Empty Project Cria um projecto que não tem ficheiros.

Page 34: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

34

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

Figura 3 - Ambiente de Trabalho

Diferenças entre os Projectos de Desktop e de

Device Algumas funcionalidades que estão acessíveis para as

aplicações de desktop, não se encontram disponíveis para os projectos de Smart Devices. As principais diferenças são:

- O Input/Output de ficheiros no Visual Basic .NET: - Os projectos de Device apenas suportam o .NET

System.IO namespace, não sendo suportado o .NET Microsoft.VisualBasic.FileSystem namespace;

- Não é suportado o COM interop; - Não é 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 aplicação para desktop. No entanto, o SDE (Smart Devices Environment) não dispõe de acesso a todos os controls disponíveis para o desktop.

Page 35: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

35

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 não suporta todos os membros destes controls.

Page 36: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

36

Sistema de Ajuda É possível encontrar documentação e ajuda sobre os

controls e aspectos do Visual Studio na janela do Dynamic Help. Ou então, através da tecnologia IntelliSense que mostra a síntaxe 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á disponível tanto no Contents, como no Index e nas Search pages.

Figura 5 - Dynamic Help

Aplicação 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 aplicação, executa-se o Visual Studio .NET e cria-se um novo projecto em File/New/Project. Na janela de diálogo selecciona-se Visual C# Projects e Smart Devices Application.

Page 37: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

37

Figura 6 - Criação do Projecto HelloWorld

Como nome do projecto coloca-se “HelloWorld” e faz-se

a escolha da localização dos ficheiros do projecto. Após 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”.

Page 38: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

38

Figura 8 - Form da Aplicação HelloWorld

Ao fazer duplo clique no Button1 é criado um

procedimento click-event. Coloca-se então o código seguinte que atribui o texto “Hello World” à propriedade Text da Label1.

Label1.Text = “Hello World”;

Figura 9 - Código da Aplicação

Grava-se o ficheiro para depois testar a aplicação

utilizando o Emulador.

Page 39: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

39

OOO EEEMMMUUULLLAAADDDOOORRR EEE

AAASSS CCCOOOMMMUUUNNNIIICCCAAAÇÇÇÕÕÕEEESSS Utilização do Emulador Para testar uma aplicação, pode-se fazer uso de um

aparelho directamente ligado ao computador em que se está a desenvolver ou através de uma ligação em rede. Caso não tenha acesso a um aparelho pode-se utilizar o emulador incluído no Visual Studio .NET 2003.

O emulador simula um dispositivo com o PocketPC ou

Windows CE .NET. Mesmo assim, após terminada, a aplicação deve ser sempre testada num dispositivo real antes de ser entregue ao cliente.

Figura 10 - Emulador PocketPC 2002

Page 40: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

40

Desenvolvimento de Aplicações numa Rede Para que a aplicação seja colocada no emulador, o

computador de desenvolvimento tem de ter uma conexão activa. Caso contrário, ou por não ter um cartão de rede ou por não estar ligado a uma rede, é necessário instalar o Microsoft Loopback Adapter para simular a ligação.

O emulador é um PocketPC real que corre como um

processo na máquina. Logicamente, é um aparelho separado em que o Visual Studio .NET e o PocketPC comunicam através de protocolos de rede.

Utilizando o Emulador PocketPC Para testar a aplicação Hello World no Emulador do

PocketPC selecciona-se Start a partir do menu de Debug. Na janela de Deploy são listados os dispositivos que suportam o tipo de projecto corrente.

Selecciona-se o PocketPC Device e clica-se no botão de

Deploy. O Visual Studio irá fazer o build da aplicação e iniciar a aplicação no Emulador. Ao clicar no botão “HelloWorld” irá aparecer na Label a mensagem “Hello World”.

Figura 11 - Aplicação HelloWorld em Execução

Page 41: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

41

Especificidades dos Aparelhos Móveis O .NET Compact Framework possibilita um maior

acesso ao desenvolvimento para dispositivos móveis a um maior número de programadores, em virtude da sua consistência em relação ao modelo de programação destinado aos desktops. No entanto, restam algumas considerações a ter face ao desenvolvimento e concepção para aparelhos móveis.

Transferência de Dados Os equipamentos portáteis como os PocketPC oferecem

gestão e sincronização de dados pessoais que dão acessos móveis a e-mails, agendas e calendários. Todavia, num dispositivo com uma boa conectividade, a capacidade de transferência de dados de e para o aparelho proporciona grandes potencialidades às aplicações.

No entanto, existem alguns factores a ter em conta no

que diz respeito às aplicações móveis, como a frequência em que os dados são transferidos de e para o dispositivo, por exemplo se é diário ou está permanentemente ligado a uma rede. Também se deve ter em atenção se a conectividade à rede é fiável, pois em caso contrário será necessário guardar os dados na cache do aparelho, para serem transmitidos assim que possível.

XML Web Services XML Web Services redefinem o modo como os sistemas

informáticos funcionam. Construído sobre linguagens standard de XML e HTTP, o XML Web Service proporciona um modelo simples de oferecer serviços através da rede. Assim, permite que servidores de diferentes plataformas se liguem a serviços em qualquer lugar da rede.

Com o alargamento do XML Web Services também aos

dispositivos móveis, desde que estes tenham uma ligação à Web, as aplicações nos aparelhos terão acesso a uma multiplicidade de serviços e dados. Para além disso, permite enviar dados de volta para os servidores de uma empresa.

SQL Server CE Enquanto o XML Web Services possibilita solucionar a

transferência de dados, o SQL Server CE permite fazer uso das classes disponíveis no System.Data.SqlServerCE, aceder a dados em servidores SQL remotos, descarregá-los para o dispositivo, proceder a consultas e alterações

Page 42: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

42

enquanto desconectado e possibilitando o posterior envio e actualização das alterações efectuadas.

Dispositivos Com Recursos Limitados Devido às especificidades próprias dos PDAs e

dispositivos móveis, estes são aparelhos pequenos, possuindo uma área de visualização diminuta, e com memória reduzida. Dependem de bateria com uma duração limitada, que deverá prolongar-se no máximo período de tempo possível.

Tem que se ter em conta que, a não ser nos casos em

que a aplicação corra num hardware com um teclado, na maioria das vezes a interacção é feita através de uma caneta.

Estas características únicas trazem implicações ao nível

de concepção no que diz respeito ao desenvolvimento do interface. Assim, fazem-se uso de técnicas de selecção fácil, tal como listas de drop-down, e um interface que limite a quantidade de introdução de texto por parte do utilizador.

É aconselhável ter sempre em consideração a utilização

de memória por parte da aplicação. E se for necessário manter objectos de grandes dimensões em memória, deve-os libertar assim que possível. No PocketPC não existe um botão de saída da aplicação e esta tende a correr continuamente, a janela da aplicação fica em background enquanto as outras estão a correr.

Implicações a Nível da Segurança É particularmente importante ter em atenção a

segurança no que concerne as aplicações para aparelhos móveis, pois existem muitas possiveis falhas de segurança nestes dispositivos. Por isso, é imperativo que esta ideia esteja presente desde a primeira fase do projecto de modo a evitar estas situações.

Os dados podem ter que ser encriptados quando

transferidos de e para o aparelho através do XML Web Services e os dados poderão ter que estar encriptados no aparelho e protegidos por password ou com métodos biométricos tal como leitura de impressões digitais.

Os clientes deverão de ser autenticados quando

acedem a dados confidenciais em IIS ou SQL Server.

Page 43: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

43

CCCOOONNNTTTRRROOOLLLSSS DDDAAA

WWWIIINNNDDDOOOWWWSSS

FFFOOORRRMMMSSS

Page 44: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

44

WWWIIINNNDDDOOOWWWSSS FFFOOORRRMMMSSS O interface de uma aplicação é um aspecto importante

no desenvolvimento de um software. Quer num sistema desktop quer num PocketPC, a aplicação deve dar ao utilizador uma experiência 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 botões e caixas de texto até controls mais

complexos como o TreeView e TabControl, assim como caixas de diálogo frequentemente utilizadas para abrir ou gravar documentos.

Todos os controls são baseados numa arquitectura

hierárquica comum, que permite desenvolver mais facilmente controls próprios ou acrescentar funcionalidades aos já existentes.

As classes do Windows Forms assumem uma

importância ainda maior, já que são 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 código para quando se despoleta um evento. Tudo isto da mesma forma que têm vindo a fazer desde há anos no Visual Studio.

Criação de Controls O Forms Designer permite arrastar e largar controls

desde a ToolBox directamente para uma Form. Então, é possível alterar o tamanho, posição e outras propriedades desses controls. È também possível instanciar controls em runtime através de código.

O exemplo seguinte mostra como criar um botão em

runtime, definindo a sua posição em relação à form, e adicionando-a à colecção de Controls da Form.

System.Windows.Form.Button submitButton = new Button();

submitButton.Location = new Pount(100,100);

submitButton.Text = “Submit”;

this.Controls.Add(submitButton);

Page 45: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

45

Membros dos Controls Como os controls do .NET Compact Framework são um

sub-conjunto dos controls no .NET Framework, grande parte das propriedades, eventos e métodos são idênticos na sua utilização.

Mas, algumas das funcionalidades foram excluídas do

.NET Compact Framework devido à limitação ao nível de recursos ou porque tal funcionalidade não é aplicável para o desenvolvimento de aplicações para PocketPC.

Propriedades É possível definir as propriedades de um control

utilizando a janela de propriedades durante o design-time ou através de código 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.

Métodos Cada control tem um conjunto de métodos pré-

definidos que possibilitam exercer as funcionalidades próprias a cada um. Existem métodos comuns a vários controls, estes métodos desempenham a mesma função mas de acordo com o control em causa.

Eventos Para tratar de um determinado evento cria-se um

método contendo o código a ser executado quando esse evento ocorre, interligando depois esse método ao evento. Também é possível criar o método do evento de um control ao fazer um duplo-clique sobre o control no Forms Designer. Esta acção cria o método correspondente ao evento primário de um control. Ou seja, o evento mais provável de ser utilizado no control. Por exemplo, no caso de um Button, o evento mais provável

Page 46: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

46

CCCOOONNNTTTRRROOOLLLSSS Descrição e exemplos de códigos dos controls

disponíveis de base no .NET Compact Framework. Button O control button é um dos mais utilizados numa

aplicação de Windows. Um button pode ser clicado com o rato ou com o stylus. Tal acção faz com que o control despolete o evento Click.

Figura 12 - Button

Page 47: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

47

CheckBox O control CheckBox é normalmente utilizado para

apresentar uma opção de Verdadeiro/Falso ou de Sim/Não. 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 através dos valores CheckState.Unchecked e CheckState.Check. Mas há ainda um terceiro estado para esta propriedade, o CheckState.Indeterminate que fica disponível 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;

Page 48: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

48

ComboBox O ComboBox é uma boa maneira de proporcionar

várias escolhas ao utilizador enquanto conserva espaço de visionamento. Quando o utilizador clica no control é listado um conjunto de opções.

Figura 14 - ComboBox

É possível adicionar itens à ComboBox em design-time

através da propriedade Itens na janela de propriedades. Ou então, no código através do método Add da colecção 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 código, o item aparecerá seleccionado. Se nenhum item estiver seleccionado esta propriedade retorna -1. A propriedade SelectedItem é similar mas retorna uma referência ao item seleccionado.

// Item seleccionado com SelectedIndex

label1.Text =

(string)comboBox1.Items[comboBox1.SelectedIndex];

// Item seleccionado com SelectedItem

label2.Text = (string)comboBox1.SelectedItem;

Page 49: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

49

ContextMenu O ContextMenu permite construir menus de pop-up

associados a um control, que são activados no PocketPC por tap-and-hold.

Figura 15 - ContextMenu

Exemplo da criação de uma ContextMenu e a sua

atribuição 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 colecção. O programador pode seleccionar quais as colunas a visualizar da tabela de dados, definir a largura da coluna e o texto do cabeçalho. Pode controlar os eventos que são despoletados quando o utilizador selecciona uma linha ou uma célula.

Page 50: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

50

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 então podem seleccionar uma só célula.

É possível detectar quando um utilizador carrega em

qualquer parte do control através do evento MouseUp. São passadas as coordenadas X e Y de onde o utilizador carregou. O método HitTest retorna o objecto HitTestInfo que tem as propriedades Type, Row e Column que, por sua vez, retornam informação acerca da célula 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());

}

}

CurrentCell Permite obter ou então estabelecer a célula que está

seleccionada. Só é possível utilizar esta propriedade em runtime. O DataGrid posiciona-se de forma a mostrar a célula caso esta não esteja visível.

Page 51: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

51

// Set focus to cell 3,5

myGrid.CurrentCell = new DataGridCell(3,5);

BackColor, ForeColor, GridLineColor, HeaderBackColor,

HeaderForColor, SelectionBackColor, SelectionForColor

Formatam as cores do control. ColumnHeadersVisible, RowHeadersVisible Determinam se os cabeçalhos das colunas e os

indicadores de linha estarão visíveis. Para definir as propriedades de cada uma das colunas,

tais como o título e a largura, é necessário criar uma instância da classe DataGridTableStyle e adicionar a instância 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 espaço, o que é ideal para aplicações PocketPC. Permite ao utilizador fazer uma selecção a partir de uma lista de objectos.

O control chama o método ToString para cada objecto,

de modo a retornar o texto que exibe. Visualmente, é parecido com uma TextBox com um par de botões para mover num e noutro sentido da lista. A desvantagem em relação à ComboBox e à ListBox é o facto de o utilizador não poder visualizar todos os itens da lista.

Page 52: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

52

Figura 16 - DomainUpDown

ReadOnly Se estiver True, apenas os itens da lista podem ser

seleccionados. Se estiver False o utilizador pode introduzir texto que não está na lista.

SelectedIndex 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();

}

Page 53: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

53

HScrollBar e VScrollBar Muitos controls já possuem barras de deslocamento

quando o seu conteúdo excede as dimensões do control. No entanto, quando se pretende obter o mesmo efeito utilizando outros controls é necessário utilizar o HScrollBar e o VScrollBar.

HScrollBar.Minimum e LScrollBar.Minimum

Define a posição quando a caixa de deslocamento está no extremo esquerdo (HScrollBar) ou no topo (VScrollBar) do control.

HScrollBar.Maximum e LScrollBar.Maximum

Atribui o extremo máximo da barra de deslocamento. HScrollBar.SmallChange e LScrollBar.Maximum Ajusta o incremento a usar quando o utilizador

pressiona uma das setas da barra. HScrollBar.LargeChange e LScrollBar.Maximum 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 É accionado quando a barra de deslocamento é

utilizada. Com a propriedade Value é possível obter a posição corrente.

ImageList O control ImageList é um componente que funciona

como recipiente de imagens. Em design-time é possível adicionar imagens ao control através da janela Image Collection Editor. Em runtime é possível adicionar imagens utilizando o método ImageList.Images.Add.

Todas as imagens por defeito têm o mesmo tamanho

(16, 16). É possível 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 constrói uma nova instância da

classe ImageList e adiciona-lhe imagens. São incluídos itens a uma ListView e direccionada a propriedade ImageIndex para o índex da instância ImageList.

using System;

using System.Drawing;

using System.Collections;

using System.Windows.Forms;

using System.Reflection;

Page 54: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

54

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

Page 55: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

55

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 número de itens exceder a área de visualização, será apresentada uma barra de deslocamento vertical.

As propriedades e métodos da ListBox são muito

idênticos aos da ComboBox. As principais diferenças 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 número de itens possível para o tamanho que lhe foi atribuido.

Figura 18 - ListBox

O método Add adiciona itens à ListBox, sendo possível

remover um item individualmente com Remove ou todos os itens com o método Clear.

Page 56: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

56

É possível 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 referência ao item seleccionado.

É possível fazer o bind da ListBox a uma colecção,

direccionando a propriedade DataSource à colecção 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 através de subitens. A primeira coluna exibe o texto do Item, a segunda, terceira e subsequêntes 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 números 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("João");

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", -2,

HorizontalAlignment.Center);

Page 57: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

57

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)

{

// operações 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 aplicação de PocketPC por defeito contém um

control MainMenu. Os menus são colocados no fundo da form. Apesar de reduzir o espaço de área disponivel, é de uma maneira geral, um modo eficiente de apresentar múltiplas opções ao utilizador.

É possivel adicionar itens a um menu, tanto na janela

de desenvolvimento, como também no próprio código.

Page 58: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

58

Exemplo da criação 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 números 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 botões Up e Down.

NumericUpDown.Value Retorna o valor seleccionado. NumericUpDown.ReadOnly Se estiver a True, o utilizador está limitado aos valores

apresentados. Se False, pode introduzir qualquer valor além dos que são dados.

Figura 20 - NumericUpDown

Page 59: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

59

OpenFileDialog / SaveFileDialog Estes dois controls são componentes, por isso quando

são colocados numa form aparecem na área destinada aos componentes.

OpenFileDialog.ShowDialog e SaveFileDialog.ShowDialog Torna visivel a caixa de diálogo, retornando a

enumeração DialogResult que indica se o utilizador colocou um nome de ficheiro válido, ou se pressionou o botão para cancelar.

OpenFileDialog.FileName e SaveFileDialog.FileName Obtem-se o caminho e o nome do ficheiro. OpenFileDialog.Filter e SaveFileDialog.Filter Estabelece os tipos de ficheiro e extensões que serão

válidos para as caixas de diálogo.

// filtra os nomes da caixa de diálogo a ficheiros de imagem

saveFileDialog1.Filter =

“Jpeg image|*.jpg|Bitmap image|*.bmp|GIF image|*.gif”

OpenFileDialog.InitialDirectory

SaveFileDialog.InitialDirectory Especifica o directório que por defeito será apresentado

na caixa de diálogo.

Figura 21 - SaveFileDialog

O exemplo seguinte cria um directório, mostra o

control saveFileDialog e grava num ficheiro com o nome especificado pelo utilizador, o conteúdo de uma TextBox.

Page 60: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

60

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 também.

Panel.BackColor Define a cor de fundo do Panel.

Figura 22 - Panel

Page 61: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

61

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. É então possivel posicionar a imagem num local desejado ou redimensioná-la 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 necessário redimensionar uma imagem

utilizam-se métodos das classes System.Drawing.

Figura 23 - PictureBox

ProgressBar Permite transmitir visualmente ao utilizador, através de

uma barra de progressão, a proporção do tratamento de uma tarefa. Deste modo, o utilizador terá uma noção de que algo está a ser processado em background e evitar que confunda um longo período de inactividade com um qualquer bloqueio de sistema.

Page 62: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

62

ProgressBar.Minimum e ProgressBar.Maximum Definem os valores mínimos e máximos da barra de

progressão. ProgressBar.Value

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

Page 63: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

63

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 São normalmente utilizados quando é necessário fazer

exclusões múltiplas de opções. Caso seja necessário dois ou mais grupos de RadioButtons, utiliza-se o control Panel. Quando um utilizador clica num qualquer RadioButton, todos os RadioButtons do mesmo grupo serão desseleccionados.

RadioButton.Checked Define se um RadioButton está seleccionado se o valor

for True ou se não está seleccionado caso o valor seja False.

Evento CheckedChanged

Dispara sempre que a propriedade Checked é alterada. StatusBar É uma área onde se coloca informação no fundo da

janela. Permite exibir uma linha de texto, sendo uma boa alternativa ao ProgressBar.

Page 64: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

64

Figura 26 - StatusBar

TabControl Permite mostrar múltiplas vistas numa mesma área. É

um control muito útil em dispositivos móveis 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 não possui qualquer tab. É necessário adicionar ou remover tabs de acordo com os objectivos pretendidos. É possivel então adicionar outros controls à TabControl tal como no Form ou no Panel.

TabControl.SelectedIndex Define qual o Tab a ser exibido. Evento SelectedIndexChanged Dispara quando o utilizador activa um dos Tabs que

estão em background.

Page 65: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

65

Figura 27 - TabControl

TextBox É utilizado para introdução de texto. TextBox.BackColor e TextBox.ForeColor Estabelece a côr de fundo e a côr do texto presente na

TextBox. Eventos KeyPress, KeyUp e KeyDown Detecta a introdução de texto no control. O código seguinte converte o texto introduzido numa

TextBox para maiúsculas.

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;

}

}

}

Page 66: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

66

Timer Permite que seja executado determinado código

repetidamente entre um intervalo de tempo definido. Existem outros temporizadores disponíveis no namespace System.Threading que devem ser utilizados quando o código é executado fora da form, em processos multi-thread.

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; Timer. Interval 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 método tick é chamado

timer1.Interval = 100;

timer1.Enabled = true;

}

private void timer1_Tick(object sender, System.EventArgs e)

{

if (continuarTick())

{

// código a executar entre período de tempo

}

else

// pára o temporizador

timer1.Enabled = false;

}

Toolbar Uma Toolbar contém botões que normalmente são

utilizados como atalhos para itens de menus. É assim, uma forma mais rápida de aceder às funcionalidades mais utilizadas. Consiste em botões gráficos, não sendo possivel colocar texto nestes botões. É associado um control ImageList para aceder às imagens a utilizar. Por defeito, o Toolbar aparece na parte inferior do ecrã, ao lado direito das opções de menu.

Page 67: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

67

Para utilizar o Toolbar adiciona-se uma ImageList e através do “Image Collection Editor” acrescenta-se imagens a esse control. Esta ImageList é direccionada como sendo a fonte das imagens utilizadas na Toolbar através da propriedade ImageList. Com o “ToolBarButton Collection Editor” é possivel adicionar as imagens para os botões necessários.

Figura 28 - ToolBar

ToolBar.Style Define os quatro tipos de botões possíveis: - 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 não está pressionado"

End If

End If

End If

End Sub

Page 68: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

68

É necessário definir em cada botão através 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 botão que foi pressionado.

TrackBar Este control funciona como uma barra de ajuste

através da qual o utilizador pode escolher um valor entre um limite estabelecido. Uma utilização comum é a selecção de opções de configuração, tais como um valor de timeout ou de refrescamento.

Figura 29 - TrackBar

TrackBar.Minimum e TrackBar.Maximum

Define os limites mínimos e máximos do valor que a barra pode assumir.

TrackBar.TickFrequency Define a distância entre as marcas na parte inferior da

barra. TrackBar.SmallChange Define o incremento a utilizar quando o utilizador

pressiona uma das teclas de navegação.

Page 69: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

69

TrackBar.LargeChange 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 colecção de

objectos. A propriedade Nodes da TreeView é uma colecção de objectos TreeNode. É possivel adicionar um ou mais Nodes (ramos) a esta colecção. Estes Nodes são 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.

Figura 30 - TreeView

TreeView.ShowRootLines Define se são desenhadas linhas entre os ramos da raiz

da árvore. TreeView.ShowLines Define se são desenhadas linhas entre cada ramo. TreeView.ShowPlusMinus Define se são desenhados os botões “+” e “-“ junto dos

ramos que têm filhos, permitindo expandir ou contrair os sub-ramos.

Page 70: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

70

TreeView.ImageList Inclui ícons que poderão 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.

TreeView.SelectedNodeIndex Indica o índex do icon que será mostrado quando um

ramo é seleccionado. Apenas é possivel seleccionar um Node de cada vez.

TreeView.CheckBoxes Define se é mostrada uma CheckBox junto a cada

folha. A propriedade Checked do TreeNode indica se um Node em particular está ou não com a caixa seleccionada através dos valores True ou False, respectivamente.

Evento AfterCheck

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.

Page 71: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

CCCOOONNNSSSTTTRRRUUUIIIRRR

AAAPPPLLLIIICCCAAAÇÇÇÕÕÕEEESSS

PPPAAARRRAAA

PPPOOOCCCKKKEEETTTPPPCCC

Page 72: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

72

AAA CCCLLLAAASSSSSS FFFOOORRRMMM Apesar de termos constatado que elaborar uma form

do Windows e o seu respectivo código 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 introdução de dados é realizada através do uso de um stylus. Isto significa que quando se elabora o design de uma aplicação para o PocketPC (ou qualquer outro engenho com limitado tamanho de ecrâ), em cada uma das forms deve-se planear o número, o tamanho e a disposição 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 botões de fechar, minimizar e maximizar também são 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 através da janela de Propriedades ou em runtime através de código. A definição 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 através de código. 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 definições: FormWindowState.Normal ou FormWindowsState.Maximized. Não existe nesta propriedade nenhuma opção para minimizar a janela. O FormWindowState.Normal fará com que a aplicação 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).

Page 73: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

73

Form.ControlBox A Propriedade ControlBox pode ser atribuida com True

para que seja exibida a ControlBox da form ou com False para prevenir que esta apareça. Numa form de PocketPC, a ControlBox contém somente um botão, que pode ser o botão de minimizar ou o que fecha a aplicação.

Form.MinimizeBox A propriedade MinimizeBox define o tipo de botão da

ControlBox. Se True será atribuido o botão de Minimizar (sob a forma de um X), se especificado como False terá um botão de encerramento da aplicação (sob a forma de um botão OK). A propriedade MaximizeBox não tem efeito numa aplicação para PocketPC já que estes não possuem um botão 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 colocação da form no ecrã, através da

utilização 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.

Page 74: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

74

CCCOOONNNTTTRRROOOLLLSSS DDDAAA AAAPPPLLLIIICCCAAAÇÇÇÃÃÃOOO Respeitando as Normas Gerais É recomendado que as forms de uma aplicação de

PocketPC sejam do tamanho da área do desktop. No entanto, é possivel criar uma form de menores dimensões de forma a se ajustar a determinadas situações. 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 visível).

Criação de Caixas de Diálogo Em certas situações é útil criar as nossas próprias

caixas de diálogo. O método ShowDialog é usado para mostrar a caixa de diálogo. Este método desactiva a form principal enquanto a caixa de diálogo estiver visivel. Quando é encerrada retorna um resultado à form que a chamou. Todavia, os membros públicos da caixa de diálogo estarão disponiveis à form principal mesmo após o retorno do ShowDialog.

AddDVDForm addForm = new AddDVDForm();

// se a caixa de diálogo retornar OK

if (addForm.ShowDialog() == DialogResult.OK)

{

// prosseguir programa

}

Caso necessário, é possivel utilizar as propriedades

FormBorderStyle e Size da form da caixa de diálogo para que esta seja mais pequena que o tamanho do ecrã do aparelho. Neste caso, convém a utilização da propriedade Location para posicionar a caixa de diálogo no ecrã da forma que for mais conveniente.

Uma aplicação que utiliza dados sensíveis deve ter

mecanismos de segurança que proteja esses dados. Uma forma de segurança será a validação do utilizador. Este poderá ter que fazer um logon antes de poder aceder aos dados. Uma utilização possível para uma caixa de dialógo mais pequena poderá ser uma caixa de diálogo log-on no topo da form principal. Esta será chamada assim que a aplicação for iniciada.

Page 75: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

75

Figura 31 - Caixa de Diálogo para Autenticação

Este é um dos casos em que convém fazer uso de uma

caixa de diálogo em vez da form principal, pois uma vez feita a validação, a caixa de diálogo poderá ser encerrada para libertar recursos. Tal não é possivel na form principal porque ao fechá-la encerraria toda a aplicação. Assim, é a form principal que chama a form de log-on da caixa de diálogo e dependendo do resultado desta, a aplicação continua ou é terminada.

Figura 32 - Form Principal

Page 76: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

76

O código seguinte é o handler do evento de carregamento da form principal (Main Form). Neste Event Handler precisamos criar uma nova instância do objecto LogonForm e chamá-lo como uma caixa de diálogo. Esta form para log-on retorna DialogResult.OK ou DialogResult.Cancel, dependendo se o utilizador digitou um nome de utilizador válido ou se simplesmente fechou a form. Se os dados do utilizador forem válidos, a form principal irá continuar com o seu processamento normal. Se o utilizador fechar a form de log-on sem ter introduzido um nome válido, a aplicação 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 botão

Logon da form de log-on verifica se o nome do utilizador introduzido é válido. A função CheckUser recebe o texto com o nome e retorna verdadeiro ou falso caso seja ou não um utilizador válido.

Se o utilizador introduzir um nome de utlilizador válido,

a caixa de diálogo 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");

}

}

Page 77: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

77

No caso do utilizador encerrar a form sem digitar um nome de utilizador válido, o handler do evento CancelButton_Click fará com que a caixa de diálogo retorne o valor DialogResult.Cancel à form principal. Tal fará com que a aplicação seja encerrada.

private void CancelButton_Click(object sender,

System.EventArgs e)

{

this.DialogResult = DialogResult.Cancel;

}

Utilização das Caixas de Diálogo 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 têm uma propriedade de filtro que lhes permite especificar o tipo de ficheiro que irá ser exibido na lista de ficheiros da caixa de diálogo.

Tal como as caixas de diálogo desenvolvidas pelo

utilizador, estas retornam o valor DialogResult para especificar se o resultado da caixa de diálogo foi ou não 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

informação textual usando um teclado virtual ou um dispositivo de reconhecimento de escrita. O InputPanel aparece no fundo de uma form, sempre que a form contém um control MainMenu ou um control ToolBar.

Quando o control InputPanel está disponivel para uso

do utilizador, é importante esquematizar a form para que este não sobreponha qualquer outro control importante, principalmente os controls que requerem introdução de

Page 78: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

78

texto. É importante colocar este tipo de controls numa posição superior à do InputPanel.

Outra opção será possibilitar a movimentação dos

controls com barras de deslocamento de modo a obter espaço para o InputPanel, assim será possivel ter acesso ao mesmo tempo a todos os controls da form tendo o InputPanel disponivel.

O código 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 solução, será colocar os controls de

introdução de texto dentro de um Panel. Quando é detectada a activação do InputPanel, este Panel será reposicionado no topo do ecrã para possibilitar a sua visualização. Quando o InputPanel for baixado, o Panel será movido para a sua posição 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 aplicação PocketPC, mas terá que o fazer manualmente às forms adicionais. Numa aplicação 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.

Page 79: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

79

Figura 33 - Itens do MainMenu

Para acrescentar itens ao menu MainMenu utiliza-se o

Windows Form Design.

Figura 34 - Edição do MainMenu

Page 80: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

80

É possivel criar menus em cascata mas tendo o cuidado de não sobrecarregar o ecrã. Deve conter as funções necessárias para o uso da aplicação, tais como abrir ou gravar ficheiros. As funções que serão mais frequentemente utilizadas deverão ser colocadas no ToolBar. Numa aplicação PocketPC não devem ser colocadas as mesmas funções em controls distintos devido ao espaço limitado disponivel para a aplicação.

O Control ToolBar O ToolBar é um modo útil de adicionar tarefas que são

mais usadas. Funciona como um recipiente de botões que o utilizador pode clicar para realizar uma função.

Cada botão possui uma imagem associada a um

ImageList que ajuda a identificar a sua função. É possivel definir ainda o estilo de cada botão. 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 através de código:

// cria um objecto ImageList para ser utilizado no ToolBar

ToolBar DVDToolbar = new ToolBar();

ImageList imageList = new ImageList();

Page 81: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

81

// 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 botões à 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 botões da ToolBar

DVDToolbar.ButtonClick += new ToolBarButtonClickEventHandler(

this.DVDToolbar_ButtonClick);

É criado um objecto ImageList e carregadas três

imagens que irão ser utilizadas para mostrar três botões na ToolBar. É associada uma rotina que trata do evento relacionado com a acção de clicar num dos botões da ToolBar. O código seguinte mostra uma mensagem especificando qual dos botões foi pressionado.

Page 82: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

82

protected void DVDToolbar_ButtonClick(

object sender, ToolBarButtonClickEventArgs e)

{

switch(DVDToolbar.Buttons.IndexOf(e.Button))

{

case 0:

MessageBox.Show("Pressionado o Botão Acrecescentar")

break;

case 1:

MessageBox.Show("Pressionado o Botão Editar")

break;

case 2:

MessageBox.Show("Pressionado o Botão Apagar")

break;

}

}

O parâmetro ToolBarButtonClickEventArgs inclui uma

referência para o botão em causa e o método IndexOf retorna o índex desse botão.

Figura 36 - Exemplo de uma ToolBar

Activação e Desactivação de uma Form As normas gerais de interface para aplicações de

PocketPC foram criadas de modo a assegurar que estas tivessem boa ergonomia e se comportassem de modo consistente.

Uma das recomendações mais importantes que diferem

das aplicações para o Windows de desktop é que apenas deve existir uma ocorrência de uma aplicação de cada vez. Se uma aplicação é executada havendo já uma ocorrência

Page 83: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

83

a correr, esta é reactivada. Caso contrário, uma nova cópia é iniciada. O próprio runtime do .NET Compact Framework assegura automaticamente esta restrição.

Outra recomendação importante é que, uma vez

iniciada uma aplicação, não pode ser encerrada pelo utilizador. Quando o utilizador alterna para outra aplicação, esta encobre a aplicação anterior, que é desactivada. Quando o utilizador volta a seleccioná-la, a aplicação é reactivada.

O Activate e Deactivate Quando uma aplicação é desactivada, deve libertar

todos os recursos que for possivel, de modo a conservar os recursos limitados do aparelho. O próprio .NET Compact Framework lança automaticamente um processo de Garbage-Collection para libertar os recursos de que a aplicação já não necessita.

O Garbage-Collection do .NET Compact Framework está

optimizado para conseguir um baixo uso de memória do aparelho, ao contrário do completo .NET Framework mais focado na velocidade e na escalonabilidade.

Todas as alocações de memória são feitas a partir da

mesma zona, sendo fácil libertar recursos da memória se necessário. Mesmo assim, é ainda necessário especificar a libertação de alguns recursos, tais como ligações a bases de dados, ligações a portas COM ou grandes objectos na memória como datasets.

Existem os seguintes eventos na form que permitem

detectar quando uma aplicação é posta em background e quando é restaurada.

private void Form1_Activate(

object sender, System.EventArgs e)

{

// código para restaurar comunicações ou acessos a BD’s

}

private void Form1_Deactivate(

object sender, System.EventArgs e)

{

// código para libertar recursos

}

Fechar Aplicações De acordo com as normas de interface do PocketPC não

deve ser possivel ao utilizador encerrar a aplicação, apenas minimiza-la.

Page 84: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

84

A propriedade MinimizeBox deve ter o valor de True

para ter o botão de minimizar (icon X) ou False para o botão de encerrar (icon OK). Enquanto que a form principal não deve ser encerrada, as caixas de diálogo devem ter o botão de fechar de modo a voltar à form principal.

Se os recursos começarem a escassear, o sistema

operativo começa a encerrar aplicações que estão a correr em background. Sendo assim, é aconselhável guardar os dados da aplicação logo após o evento Deactivate, pois a aplicação corre o risco de ser fechada enquanto está minimizada.

Evento Tap-And-Hold Como os dispositivos PocketPC não possuem rato, os

utilizadores não podem clicar com o botão do lado direito sobre um control. Em alternativa devem pressionar o control com o stylus e mantê-lo nessa posição até surgir um menu de contexto.

Para dotar a aplicação de outras funcionalidades para

além de menus de contexto associados à função de tap-and-hold num dos controls, é necessário desenvolver código específico.

Para tal, é necessário criar um control Timer que define

o intervalo de tempo que o utilizador deve manter a pressionar até ser lançada a acção. 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 código pretendido.

O código seguinte demonstra um evento personalizado

do tap-and-hold:

private void timer1_Tick(

object sender, System.EventArgs e)

{

// código 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;

}

Page 85: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

85

Teclas de Hardware de um PocketPC Um PocketPC não possui um teclado, sendo uma

grande parte da interacção feita com um stylus e com o SIP. No entanto, existem algumas teclas de hardware que podem ser úteis em certas situações.

É possivel capturar estas teclas através 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 Aplicação Após terminada a introdução de código e de todas as

funcionalidades, será útil dotar a aplicação de um icon e colocar um atalho da aplicação no Start Menu do PocketPC.

Para associar um icon a uma aplicação, utiliza-se a

caixa de diálogo das propriedades do projecto. Na secção “General”, introduz-se no campo “Aplication Icon”, o caminho até ao ficheiro do icon que se quer utilizar.

Page 86: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

86

Figura 37 - Propriedades do Projecto

Um atalho irá permitir ao utilizador executar a

aplicação 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 contrução do ficheiro

CAB, irá definir o atalho a criar no momento de instalação da aplicação.

Page 87: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

87

NNNOOORRRMMMAAASSS RRREEECCCOOOMMMEEENNNDDDAAADDDAAASSS Existem um certificado aprovado pela Microsoft que

identifica as aplicações que cumprem um conjunto de regras no seu desenvolvimento. Estas recebem um logótipo “Designed For Windows For PocketPC”. Para tal, existem regras e requisitos sobre icons, menus, ToolBar, InputPanel, etc. Um documento com estas especificações está disponível 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 através 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 informação 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 Inserção de uma Task

Também é necessário ter em atenção que o utilizador

está a usar um stylus e não um rato para seleccionar os itens da form. Por isso, é aconselhável fazer os controls suficientemente grandes para evitar que se falhe o alvo. O tamanho recomendado é de 5mm (21x21 pixels) para o

Page 88: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

88

alvo de um stylus e de 9mm (38x38 pixels) para o alvo de um dedo.

Deve-se igualmente deixar espaço suficiente entre

controls para reduzir o risco de engano. Tal é importante em tarefas relacionadas, como por exemplo nas funções de cortar, copiar, colar.

A distância entre os controls mais utilizados e tarefas

na form deve ser minimizada. Os controls que estão 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 funções mais comuns da aplicação.

Deve ser considerado o modo como o utilizador pega

no aparelho. A informação mais frequente e mais utilizada deve estar posicionada de modo a não ser tapada pelas mãos quando estão a ser introduzidos dados ou a seleccionar itens.

Num dispositivo de PocketPC, ao contrário de um

Windows normal, a altura do ecrã é maior do que a sua largura. É preciso ter atenção que a área de visualização é estreita, por isso os controls devem ser dispostos verticalmente e não 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 visualização sem necessidade de deslocamento. Se tal não for possivel, os controls mais importantes deverão aparecer primeiro e os menos importantes exibidos com a ajuda de barras de deslocamento. Deve-se ao máximo evitar sobrepôr comandos e forms.

O utilizador deve ter um feedback das acções que vai

executanto, quer através de sons ou pela mudança da aparência dos controls ou da form.

Page 89: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

89

TTTEEESSSTTTEEE EEE DDDEEEBBBUUUGGG Qualquer programador ao desenvolver uma aplicação

comete falhas. Apesar dos compiladores tentarem encontrar o maior número de erros, não é possivel solucionar todos eles. Os erros mais fáceis de resolver são os de síntaxe, que ocorrem quando o programador escreve código que não é válido na linguagem que está a utilizar. Estes são encontrados na fase de compilação e são normalmente fáceis de resolver.

Outro tipo de erros ocorrem quando uma aplicação

compila com sucesso mas não funciona como esperado. A aplicação poderá dar resultados incorrectos ou de ínicio funcionar correctamente, mas numa dada utilização abortar com uma mensagem de erro. Estes erros podem ser erros de runtime, erros semânticos ou erros lógicos. Além dos erros do programador, o ambiente em que a aplicação está a ser executada também pode causar problemas.

Apesar de não 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

código ou numa condição; - Correr a aplicação passo a passo ou até um novo

breakpoint; - Examinar qual o valor de expressões ou modificar o

conteúdo de variáveis; - Alterar a sequência de execução do programa. O Modo Break Quando uma aplicação está a operar em modo de

debug está num de dois estados: ou está a correr ou está em break mode. Neste último, a execução está suspensa sendo possivel examinar o estado da aplicação.

Uma aplicação entra em modo suspenso quando: - É encontrada uma excepção; - Se chega a um breakpoint; - O utilizador força a paragem de execução (com

CTRL+ALT+Break)

Page 90: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

90

Criar um BreakPoint Quando a execução de uma aplicação chega a uma

linha de código que contém um breakpoint, a execução é 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 Aplicação

Watch Window Em break mode é possivel verificar qual o valor de

variáveis e de expressões nesse momento. Para tal utiliza-se a janela QuickWatch.

Também, ao colocar o cursor sobre uma variável na

janela de edição de código, exibe o seu valor.

Page 91: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

91

Figura 40 - QuickWatch

Utilizar o Debug No menu de Debug é possivel aceder às seguintes

opções: Start (F5) Corre a aplicação utilizando o Debbuger. O programa

será interrompido imediatamente antes da execução da primeira linha que contiver um breakpoint.

Step Over (F10)

Executa uma linha completa de código. Os métodos são executados por completo.

Step Into (F11) É similar ao Step Over mas se a linha contém um

método, o debug continua no código desse método até retornar ao ponto em que esse método foi chamado, continuando o debug a partir daí.

Step Out (Shift+F11) Executa o método até ao fim, e só então retorna ao

break mode. Continue (F5) Retoma a execução do programa saindo do break

mode. Stop Debugging (Shift+F5) Força a paragem do programa e descarrega-o da

memória.

Page 92: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

PPPOOOTTTEEENNNCCCIIIAAALLLIIIDDDAAA

DDDEEESSS

Page 93: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

93

CCCOOOLLLEEECCCÇÇÇÕÕÕEEESSS DDDEEE OOOBBBJJJEEECCCTTTOOOSSS O Compact Framework inclui um número de classes

que permitem ao programador trabalhar com colecções de objectos. A maior parte das aplicações necessitam de trabalhar com Arrays ou colecções de objectos mais complexos. A plataforma .NET inclui funcionalidades especificamente destinadas a aceder a esses objectos. A maior parte destas classes estão nos namespaces System.Collections e System.Collections.Specialized.

Classes de Colecções em System.Collections Array Dispõe de métodos para criar, manipular, procurar e

ordenar arrays e é a classe base para todos os arrays da Common Language Runtime.

ArrayList É um array de objectos cujo tamanho é dinamicamente

ajustado de acordo com as necessidades. BitArray Controla um array de bits de tamanho fixo,

representados por valores booleanos. CaseInsensitiveComparer Compara dois objectos e indica se são equivalentes,

ignorando a capitalização das letras nas strings. CaseInsensitiveHashCodeProvider Fornece um hash code para um objecto ignorando a

capitalização das letras nas strings. CollectionBase Esta é uma classe abstracta, o que significa que é

necessário derivar esta classe para se a poder usar. Permite aos programadores criar e implementar colecções personalizadas.

Comparer Compara dois objectos e indica se são equivalentes,

tendo em conta a capitalização das letras nas strings. DictionaryEntry Define o par chave/valor de um item que é

armazenado num colecção do tipo dicionário, tais como o Hashtable ou ListDictionary.

Hashtable Uma colecção de pares chave/valor que estão

organizados tendo como base o hash da chave. Stack Uma colecção de objectos do tipo pilha (Last In, First

Out). O último a entrar é o primeiro a sair.

Page 94: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

94

Namespace System.Collections.Specialized HybridDictionary Representa uma colecção eficiente com uma estrutura

do tipo dicionário. Tem a designação de híbrido porque enquanto o seu tamanho é pequeno deriva a partir do ListDictionary mas quando a dimensão da colecção se torna maior altera para uma Hashtable.

ListDictionary Representa uma classe dicionário destinada a albergar

um número pequeno de objectos, normalmente com 10 ou menos itens.

NameObjectCollectionBase Representa uma classe abstracta para servir como base

a uma colecção de chaves do tipo String e objectos que podem ser acedidos pelo valor da chave ou por um índex númerico.

NameValueCollection Representa uma colecção ordenada de itens com uma

chave do tipo String e valores também do tipo String. Esta classe herda a partir do NameObjectCollectionBase.

Arrays Multidimensionais Em certas situações é necessário criar arrays com mais

do que uma dimensão. No exemplo seguinte é demonstrado como se cria um array de arrays. É declarado o limite superior da primeira dimensão e inicializado cada elemento. O nível superior é constituido por quatro elementos, cada um é um array de short integers. O primeiro elemento contém seis elementos e o segundo de três elementos. O terceiro e quarto não estão 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;

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;

Page 95: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

95

ArrayList A colecção ArrayList ajusta dinamicamente o seu

tamanho em runtime à medida que novos itens são adicionados.

using Sistem.Collections;

// inicializa o Array

ArrayList myArrayList = new ArrayList();

// insere elementos no Array

myArrayList.Add("Portugal");

myArrayList.Add("Espanha");

myArrayList.Add("Itália");

// ordena alfabeticamente o Array

myArrayList.Sort;

// retorna o número de elementos

int conta = myArrayList.Count;

Page 96: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

96

SSSTTTRRRIIINNNGGGSSS EEE DDDAAATTTAAASSS A classe String permite criar e realizar modicações em

strings. É possivel fazer uso de expressões regulares para produzir procuras e alterações mais complexas em strings. Também estão disponiveis funções para a conversão de e para outros tipos de dados através de formatação e parsing de strings.

Strings representam sequências de caracteres Unicode

e são imutáveis. Ou seja, sempre que é instanciado um novo valor a uma String, é criado um novo objecto com a destruição do objecto antigo.

Um exemplo da criação e comparação 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: String s1 = s2 Cria uma nova String que aponta para o mesmo

objecto. String.Copy Cria uma nova cópia independente da String. SubString Retira uma substring da String. Join

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 divisão de uma String em determinados pontos onde foram encontrados caracteres especificados.

Existem vários métodos que permitem procurar

substrings ou caracteres numa determinada String: IndexOf Retorna a primeira posição de uma substring. IndexOfAny Executa a mesma operação que o IndexOf mas procura

por qualquer elemento num Array de Chars. LastIndexOf e LastIndexOfAny

Fazem as mesmas operações que o IndexOf e o IndexOfAny mas realizam a procura a partir do final da String.

Page 97: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

97

StartsWith e EndsWith Procuram as substrings no inicio ou no final da string. Métodos que permitem fazer determinadas

modificações numa String: Insert Insere numa String uma outra instância de uma String

numa posição especifica. Remove

Retira um número indicado de caracteres de uma determinada posição.

Replace Substitui uma substring por outra substring. Também é

possivel fazer a substituição de todas as ocorrências de uma substring por outra.

Outros métodos úteis para a manipulação de Strings: Equals Compara uma String a outra. Clone Retorna a referência da instância de uma String. ToLower e ToUpper Altera a String para maiúsculas ou minúsculas. Trim, TrimStart e TrimEnd

Remove espaços ou caracteres indesejados. PadLeft e PadRight Insere espaços à esquerda ou à direita da String.

Page 98: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

98

XXXMMMLLL 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 aplicação distribuida, entre diferentes aplicações na mesma empresa ou mesmo entre empresas diferentes.

Como o XML é uma tecnologia standard, em que os

dados estão representados em forma de texto, as diferenças entre distintas plataformas de hardware, de sistema operativo ou de linguagens de programação podem ser facilmente contornadas. É assim possivel, construir soluções integradas utilizando componentes que interagem entre si a partir de sistemas diferentes.

Exemplo Prático Por exemplo, uma solução distribuida em que um

catálogo de produtos de um revendedor é retirado de um sistema ERP (Enterprise Resource Planning). As aplicações clientes poderão utilizar o Web Service para fazer o download dos dados de produtos e realizar as operações necessárias localmente. Um vendedor com um PocketPC pode retirar os dados de um produto a partir do Web Service ainda no escritório 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 catálogo, os dados podem facilmente ser trocados entre o sistema ERP, o servidor de Web e o PocketPC.

Utilização 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 então através da classe XmlDocument que implementa o DOM (Document Object Model). Esta classe constrói em memória, um documento em modo de árvore permitindo a modificação dos dados e sua navegação em qualquer direcção. Este método requer uma elevada quantidade de memória para grandes documentos, enquanto que o XmlReader o XmlWriter são mais rápidos e mais eficientes a nivel de memória, mas apenas permitem uma navegação unidireccional.

Page 99: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

99

IIINNNPPPUUUTTT EEE OOOUUUTTTPPPUUUTTT É possivel ler e escrever todo o tipo de ficheiros, desde

simples ficheiros de texto até puros ficheiros binários. Existem funcionalidades para mover o apontador através 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 não é um ficheiro mas um simples Stream de bytes em memória, num socket ou outra ligação de rede. É possivel ler e escrever Streams de um modo sincrono ou assincrono.

São suportadas operações 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 dispõe de funcionalidades

para ler ou escrever vários tipos de dados em bytes. Estes dados podem estar num ficheiro local ou de rede, ou em algo similar a um ficheiro em memória. O importante a reter na classe Stream é que trabalha em forma de bytes.

O objecto FileStream dispõe dos seguintes métodos: FileMode.Open Abre um dado ficheiro. Retorna uma excepção se o

ficheiro não existir. FileMode.Create

Cria um novo ficheiro ou reescreve o ficheiro se já existir.

FileMode.OpenOrCreate Cria um novo ficheiro apenas se o ficheiro não existir.

Caso contrário, abre o ficheiro existente. FileMode.Append

Abre ou cria um ficheiro, mas procura pelo final do ficheiro antes das operações de escrita ou de leitura.

try

{

FileStream myFileStream = new FileStream

("\\myFile.txt", FileMode.Open);

}

catch (System.IO.FileNotFoundException fnfE)

{

// mensagem de erro de leitura

}

Page 100: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

100

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 conversão de caracteres. Os ficheiros binários podem poupar muito espaço quando comparados com os ficheiros de texto. Também poupam a necessidade de conversão dos caracteres.

// recebe de uma caixa de diálogo 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 binária

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 através de uma stream com uma codificação 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;

Page 101: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

101

CCCOOOMMMUUUNNNIIICCCAAAÇÇÇÃÃÃOOO EEEMMM RRREEEDDDEEE Um dos melhores métodos de aceder a recursos a

partir de um dispositivo móvel é através do XML Web Services. No entanto, se em certas situações esta não for a solução apropriada para aceder a recursos de rede, é possivel utilizar o protocolo HTTP (Hypertext Transfer Protocol) através das classes System.Net.WebRequest e System.Net.WebResponse. Mas se for necessário ter controlo directo sobre a ligação TCP/IP (Transmission Control Protocol) ou UDP/IP (User Datagram Protocol), utiliza-se a classe System.Net.Sockets.Socket. Além destas, também existem classes para comunicações por infra-vermelhos ou comunicações de série com outros aparelhos portáteis.

Namespace System.Net Contém classes para aceder a recursos na Internet. O

endereço para cada conteúdo na internet é dado pelo URI (Uniform Resource Identifies) e é composto pelo protócolo, o nome do host e o nome do ficheiro. Para aceder a um recurso é necessário enviar um pedido de comunicação utiizando o método WebRequest.Create, passando o endereço do recurso que se pretende aceder. Se o protócolo está na forma “http://” ou “https://” é retornada uma instância da classe HttpWebRequest correspondente ao protócolo especificado. É então retornada a instância 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();

Page 102: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

102

SSSEEEGGGUUURRRAAANNNÇÇÇAAA A função de estabelecer uma solução ao nível da

segurança num projecto deve ser pensada desde o primeiro momento. Ignorar preocupações de segurança na fase de design, pode mais tarde resultar numa grande reformulação. Escrever código seguro é apenas uma parte da implementação de uma solução segura.

O nível de segurança alcançado numa aplicação é tão

boa quanto o seu ponto mais fraco, logo não vale a pena escrever código avançado, por exemplo na encriptação dos dados no envio para o servidor se depois esse servidor não tem protecção suficiente, podendo um hacker ter acesso à informação protegida.

A segurança é das principais preocupações das

empresas quando se considera desenvolver aplicações para aparelhos portáteis. Pela sua própria natureza, estes dispositivos são levados para fora do escritório, operam sobre redes sem fios fora das firewalls das empresas e sendo pequenos podem são facilmente perdidos ou roubados.

O responsável da empresa terá questões sobre de que

modo os dados estão protegidos. Se o equipamento for parar a mãos alheias. Ou no caso de um aparelho que está a retirar informação dos servidores, como sabemos que é um funcionário e não alguém que tenha roubado o dispositivo? Como estão protegidas as redes sem fios de modo que os dados não sejam interceptados por um hacker?

O Básico ao Nível da Segurança Antes de começar a pensar nos requisitos de uma

aplicação específica, deve-se considerar em criar uma política de segurança, de modo a definir as responsabilidades de cada utilizador. É essencial a autenticação do utilizador, antes de qualquer tipo de interacção com o aparelho, se possivel logo após 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.

Page 103: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

103

Recomendações de Segurança Existem vários pontos a ter em atenção quando se

trata de segurança: - Utilização de um anti-virus para prevenir uma

infecção através da Internet ou de um e-mail; - Aconselhada a utilização de firewalls para aparelhos

que estejam ligados em rede por extensos periodos de tempo;

- Utilização de VPNs (Virtual Private Networking) encriptando os dados e criando um túnel na autenticação e ligação de utilizadores dentro ou fora de uma rede privada;

- Utilização de SSL para encriptar dados até 128bits; - Prevenir o spoofing, equipando o servidor de um

certificado que permita identificá-lo como a máquina verdadeira;

- Autenticação dos clientes e definir as autorizações do que eles podem fazer;

- Proteger os dados dos XML Web Services; - Criação de segurança nas conexões com o SQL

Server; - Autenticação do utilizador através de uma password,

de uma impressão digital, de um cartão de segurança.

Page 104: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

104

AAADDDOOO...NNNEEETTT A maior parte das aplicações permitem armazenar,

extrair e alterar dados. As classes ADO.NET permitem realizar essas operações com um servidor SQL através de uma ligação 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 aplicação necessita.

Connectionless do ADO.NET O ADO.NET é connectionless, ou seja, não necessita de

ter ligações activas a uma fonte de dados, o que é bastante útil no caso de aparelhos móveis, uma vez que as ligações podem estar ocasionalmente indisponíveis 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 necessário para fazer o download dos dados pretendidos e então desligar para editá-los off-line. Quando o processamento realizado localmente está finalizado é restabelecida a ligação e os dados actualizados.

Um exemplo de uma aplicação real: Um técnico que de

manhã faz a ligação à base de dados central de onde retira a agenda dos trabalhos a realizar durante o dia. Durante o seu trabalho, o técnico utiliza o aparelho para recolher relatórios e observações, mas devido à própria natureza do seu trabalho não é possivel ligar à base de dados central durante esse periodo. No fim do dia, é necessário fazer a actualização para que os clientes sejam cobrados e a agenda calculada para o próximo dia.

ADO.NET e XML O XML é reconhecido como sendo uma linguagem de

troca de dados. Tem como base informação textual, por isso não contém informação binária. Assim, pode passar por firewalls que geralmente bloqueiam dados binários, tais como executáveis e objectos COM, permitindo os objectos ADO.NET comunicar através da Internet utilizando HTTP.

Page 105: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

105

Outra grande vantagem em guardar informação no formato XML é a facilidade de troca de dados entre aplicações instaladas em máquinas ou linguagens diferentes. Os objectos ADO.NET podem também escrever o seu conteúdo para um ficheiro de texto ou para um mecanismo de transmissão como um objecto Stream.

Binding de Controls O ADO.NET permite também fazer o binding de dados,

ou seja, fornecer dados a controls do interface do utilizador. Podem também receber alterações que sejam realizadas nesses controls, o que significa que o programador não tem de programar mecanismos para exibir e alterar dados, permitindo uma maior rapidez no desenvolvimento de aplicações que tenham manipulação de dados.

Page 106: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

106

XXXMMMLLL WWWEEEBBB SSSEEERRRVVVIIICCCEEESSS Permitem o acesso a dados e a funções ao nivel da

empresa ou remotamente num aparelho móvel. Utilizam standards de Web para aceder a funcionalidades num servidor. É transmitida através de HTTP numa Intranet ou na Internet.

Só é necessária uma ligação ao servidor que

disponibiliza o Web Service quando uma função está a ser chamada ou quando está a ser dada resposta ao dispositivo móvel. O XML Web Service pode ser facilmente configurado através de uma firewall, pois os dados estão em forma de texto e não em formato binário. E o seu acesso, integrado na segurança do Windows ao configurar a autenticação com um nome de utilizador e password. Uma aplicação de um cliente móvel 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 aplicação pode aceder ao menu mostrando o nivel dos stocks, as recomendações 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 estão num

formato neutro. As operações suportadas por um XML Web Service descrevem-se a si próprias utilizando igualmente um formato próprio em XML. Os dados são retirados do dispositivo mas escondendo os detalhes de como a ligação à base de dados é realizada e como os objectos da base de dados são utilizados pela aplicação cliente.

Um XML Web Service utiliza o ASP.NET e corre no IIS

(Microsoft Internet Information Service). A aplicação cliente tem que criar um objecto proxy capaz de ligar ao Web Service e invocar os seus métodos.

Page 107: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

107

SSSQQQLLL SSSEEERRRVVVEEERRR CCCEEE O SQL Server CE é uma pequena implementação 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 encriptação tanto durante o seu armazenamento no aparelho como na transmissão para um servidor central.

A utilização do SQL Server CE possibilita ao

programador um ambiente familiar, com a utilização de técnicas similares às usadas na programação de uma aplicação 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 versão 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 máximo da base de dados depende do espaço local disponivel e pode ter até 2GB.

Numa utilização possivel, um motorista pode usar uma

aplicação 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 armazém 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 actualização também pode ser feita durante o período de entregas através de uma rede sem fios de modo a dar aos clientes informação actual sobre a localização da encomenda.

Utilização do SQL Server CE Ao programar com o SQL Server CE existem três fases

de desenvolvimento: - Criação da base de dados localmente. - Actualização dos dados no aparelho. - Actualização dos dados localmente alterados para a

base de dados central. Esta actualização pode ser feita utilizando a

arquitectura RDA ou então a arquitectura Merge Replication. Esta última, apesar de mais poderosa e simples de usar é mais complexa de instalar, sobretudo nas configurações de segurança. Todavia, caso não seja necessário o suporte de base de dados anteriores ao SQL Server 2000, vale a pena investir neste esforço inicial extra, com dividendos futuros aquando o crescimento da complexidade da aplicação.

Page 108: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

108

CCCOOONNNTTTRRROOOLLLSSS PPPEEERRRSSSOOONNNAAALLLIIIZZZAAADDDOOOSSS Os controls fornecidos pelo .NET Compact Framework

contêm funcionalidades bastante úteis para o interface da aplicação que se pretende desenvolver. No entanto, uma facilidade dada pela plataforma, é a capacidade de criar versões alteradas desses controls com adaptações a necessidades próprias, promovendo assim a reutilização de código.

Controls que são reutilizados na mesma aplicação,

podem reduzir o tamanho dos ficheiros e as necessidades de memória. Ao modularizar o código deste modo, ajuda a asegurar a consistência de design pois são utilizados no interface os mesmos componentes relativos aos controls.

O suporte dado pelo .NET à herança de objectos,

permite construir facilmente um control próprio que seja substancialmente parecido com um control já existente, particularmente quando se pretende aperfeiçoar o comportamento desse control.

Por exemplo, se se considerar um control de texto que

apenas deva permitir caracteres numéricos. Neste caso, cria-se uma classe que herda as propriedades da classe TextBox. Com esta nova classe, uma nova versão do OnKeyPress é criada e alterado o tratamento que controla os caracteres que vão sendo teclados, sobrecarregando este método para apenas aceitar números e o BackSpace. Todos os restantes comportamentos são 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);

}

}

}

Page 109: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

109

GGGLLLOOOBBBAAALLLIIIZZZAAAÇÇÇÃÃÃOOO EEE

LLLOOOCCCAAALLLIIIZZZAAAÇÇÇÃÃÃOOO Em alguns casos, é necessário desenvolver uma

aplicação que irá ser utilizada internacionalmente, por pessoas com culturas e línguas diferentes. O planeamento necessário no desenvolvimento de uma aplicação deste tipo pode ser bem mais complicado. Mas, este esforço na fase de planeamento pode ter os seus dividendos, pois é muito mais difícil a introdução de consciência cultural a uma aplicação já finalizada.

Globalização Por globalização entende-se que no design da aplicação

a sua lógica de funcionamento não deve ser um factor que impeça a sua utilização por múltiplas culturas. Uma aplicação deve utilizar um formato de data neutro e separar recursos que devem ser traduzidos para diferentes culturas. Uma aplicação em que os formatos de datas e moedas estejam implicitos no código, ou em que o interface tenha uma determinada lógica local, será muito complicada utilizar internacionalmente.

Localização A localização consiste em especificar uma aplicação

para uma determinada cultura, normalmente traduzindo o texto do interface e assegurando que os formatos de datas e números apresentados se ajustam às definições locais.

Page 110: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

110

TTTHHHRRREEEAAADDDSSS A utilização de threads múltiplas numa aplicação

significa dividir o processamento de uma determinada função em duas ou mais tarefas. Deste modo, o processamento pode ser realizado mais rapidamente do que se cada tarefa estivesse a ser processada em série. Esta performance extra pode fazer uma grande diferença em aplicações num dispositivo com capacidades limitadas, já que não possuem o mesmo poder de processamento que uma máquina desktop.

Capacidade de Resposta e Escalonabilidade Como resultado, é possivel tornar a aplicação mais

escalonável e com melhores capacidades de resposta. É escalonável 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 aplicação 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 aplicação desempenhar mais do que uma tarefa de cada vez. Em contraste com este conceito está o multiprocessamento, em que uma máquina pode correr diversas aplicações ao mesmo tempo. Neste caso, cada aplicação corre num processo diferente em espaços de memória isolados uns dos outros. O sistema operativo faz com que pareçam estar a correr simultaneamente ao alternar entre eles várias vezes por segundo.

Com multithreading, são criadas múltiplas tarefas de

processamento para cada aplicação. O sistema operativo é capaz de organizar as threads individuais de cada aplicação de modo a parecer que está a executar simultaneamente tarefas distintas.

Page 111: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

111

Vantagens do Multithreading Numa aplicação com uma única thread tudo tem de ser

executado numa ordem pré-definida. Por exemplo, uma aplicação que tem de desempenhar duas tarefas, receber introdução de dados e utilizar esses dados para realizar uma longa operação de procura numa base de dados. Se a aplicação 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 aplicação em duas threads, uma para a

introdução de dados e outra para realizar a procura, melhorava o desempenho da aplicação ao nível do tempo de resposta. Assim que o utilizador dava inicio a uma procura, a thread que trata da introdução dos dados transmitia-os à thread responsável pela procura, e imediatamente ficaria disponivel ao utilizador enquanto que decorria a procura. O utilizador podia introduzir várias procuras sem ter que esperar que alguma terminasse.

Multithreading pode igualmente melhorar o

desempenho de algumas aplicações ao rentabilizar a utilização do processador. Torna-se mais transparente no ponto de vista de concepção, se houver threads múltiplas, cada uma com a sua responsabilidade, do que uma única thread que faça tudo. Threads múltiplas também 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.

Page 112: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

112

GGGRRRÁÁÁFFFIIICCCOOOSSS Existem várias classes que podem ser utilizadas em

programação gráfica. 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 são ideais para

aplicações empresariais, os programadores de jogos necessitam do máximo de processamento e de flexibilidade a nível gráfico. Para o desenvolvimento de aplicações gráficas mais complexas o .NET Compact Framework dispõe de um conjunto de librarias chamadas GDI+ que permitem desenhar e controlar imagens.

Page 113: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

UUUTTTIIILLLIIIZZZAAAÇÇÇÃÃÃOOO

EEEMMM CCCAAASSSOOOSSS

RRREEEAAAIIISSS

Page 114: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

114

TTTEEESSSCCCOOO www.tesco.com

Introdução O Tesco PLC é maior cadeia de supermercados

alimentares do Reino Unido. Com 270 lojas e uma loja on-line, procurou melhorar a eficiência do seu processo de entregas ao domicílio.

Situação Quando o site tesco.com e os supermercados Tesco

quiseram abranger a sua infra-estrutura de automatização de processos às suas carrinhas de entrega de produtos, procuraram uma solução 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 aplicação em C# capaz de realizar

o download das listas de encomendas dos clientes, definir a rota para os destinos pretendidos, receber rejeições de clientes aos produtos substituidos, anotar a assinatura do cliente junto com a hora e o local, além de registar todo o percurso efectuado pela carrinha.

Solução A solução protótipo foi desenvolvida por um único

programador em 8 semanas. A aplicação substitui toda a papelada utilizada pelo serviço de entregas.

Aquando na loja, a aplicação carrega as encomendas a

ser processadas pela carrinha, através de uma ligação wireless 802.11b. A lista de encomendas inclui a localização dos clientes e uma lista dos produtos substituidos (certos produtos são substituidos por estarem esgotados, cabendo ao cliente aceitar a substituição).

Page 115: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

115

Figura 41 - Lista de Clientes e Horas das Entregas

A carrinha dispõe 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 aplicação 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 então a este aceitar aceitar ou rejeitar alguma substiuição de um produto. O aparelho grava a assinatura do cliente, assim como a hora e posição 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 posição.

Entre curtos espaços de tempo, é também registado

todo o percurso efectuado assim como a hora. Esta informação é retornada ao programa de mapas e delineação de rotas, permitindo melhorar os percursos e a precisão dos tempos de entrega.

Page 116: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

116

Figura 42 - Mapa do Percurso

Teste O sistema foi testado num supermercado da cidade de

Basingstoke com quatro carrinhas. De três em três semanas foram ouvidas os comentários dos condutores acerca do programa e realizadas as alterações necessárias.

Este é um bom exemplo de como este tipo de aplicação

pode ajudar a prestar um melhor serviço e com menores custos, quer para a empresa quer para os clientes.

Page 117: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

117

GGGEEEOOOVVVEEECCCTTTOOORRR www.geovector.com

A Geovector Corporation é uma empresa norte-

americana que estabeleceu um laboratório de desenvolvimento em Auckland na Nova Zelândia, destinado a desenvolver aplicações de localização baseadas na sua tecnologia.

Esta tecnologia baseia-se no uso de sensores de

direccionamento e de altitude que são capazes de detectar para onde o aparelho está a apontar. Tal combinado com GPS que detecta a localização espacial do aparelho e uma base de dados de informação geográfica criam um novo tipo de solução móvel.

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 interacção e em que é possivel apontar e clicar em qualquer objecto geo-referenciado.

A aplicação inicial desenvolvida para este tipo de

tecnologia é destinada a visitantes da Nova Zelândia chamada Welcome to New Zealand (W2NZ).

Solução Foi implementada uma aplicação utilizando o Visual

Studio .NET e o .NET Compact Framework. Os cálculos espaciais foram realizados em C#, os dados estão guardados localmente em SQL Server CE e as comunicações com o servidor principal através de HTTP via SQL Server merge replication.

Esta aplicação irá permitir aos utilizadores serem

guiados através da Nova Zelândia, com a diferença em relação às aplicações já existentes de permitir ao utilizador apontar o seu aparelho a um objecto conhecido e obter informação sobre esse mesmo objecto. Pode também apontar numa determinada direcção 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.

Page 118: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

118

Uma vez que tenha decidido o destino em que estará interessado, poderá facilmente ser guiado não através de mapas mas através de uma seta que aponta qual o sentido a seguir a partir da sua posição actual. Esta seta manterá a direcção em relação ao objecto independentemente da direcção do PocketPC, graças ao sensor de direccionamento que determina para onde o aparelho está virado.

Esta aplicação está destinada a pedrestes,

particularmente a turistas e visitantes a um novo local. Não é vocacionada a navegação de veículos em que é necessário o cálculo de um número de outras variáveis. Neste caso, apenas é indicada a direcção cabendo ao utilizador determinar o trajecto.

Figura 43 - Informações sobre um Local

A aplicação permite ao utilizador apontar para os

objectos à sua volta de modo a obter informações, como por exemplo:

- Monumentos e outros pontos de interesse para saber qual a sua origem e significado;

- Apontar para hóteis e restaurantes para obter preços de quartos e de menús;

- Apontar para um cinema para se informar dos filmes em exibição e reservar bilhetes.

Page 119: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

119

Benefícios A utilização do .NET Compact Framework dá um

ambiente consistente no desenvolvimento das várias partes deste projecto. Também a combinação SQL Server 2000 e o SQL Server CE facilita o acesso aos dados. A possibilidade de armazenar e processar a informação no próprio aparelho dá a vantagem de melhorar a performance da aplicação e reduzir a dependência face à disponibilidade constante um canal de comunicação.

Futuro Um dos objectivos delineados para este projecto será a

integração com o MapPoint da Microsoft para inclui mapas na aplicação. Esta tecnologia extende-se a outros possíveis cenários como por exemplo uma aplicação destinada ao mercado imobiliário ou mesmo num jogo de first person shooter jogado mesmo na primeira pessoa.

Page 120: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

120

Conclusão

Page 121: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

121

AAAPPPOOONNNTTTAAAMMMEEENNNTTTOOOSSS FFFIIINNNAAAIIISSS Com a realização deste trabalho, consegui um dos

meus objectivos iniciais, que era obter algumas noções não só da programação para PDAs com o .NET Compact Framework, mas também iniciar-me na programação .NET em geral.

Procurei abranger as várias vertentes possiveis neste

tipo de aplicações. As áreas descritas no capitulo das potencialidades do .NET Compact Framework representam capacidades mais complexas e possíveis de serem exploradas. Tendo como base este documento é possivel aprofundar as informações aqui transmitidas.

De um modo geral, os objectivos estabelecidos para a

realização deste trabalho foram alcançados. Os conhecimentos aqui obtidos com certeza terão implicações no prolongamento da minha experiência como programador.

Page 122: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

RRREEEFFFEEERRRÊÊÊNNNCCCIIIAAA

Page 123: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

123

IIINNNFFFOOORRRMMMAAAÇÇÇÃÃÃOOO NNNAAA IIINNNTTTEEERRRNNNEEETTT Sendo o .NET Compact Framework de momento uma

tecnologia ainda muito recente, em que os programadores ainda estão a explorar todas as capacidades de desenvolvimento da plataforma, a maior parte da informação 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 aplicações, o MSDN (Microsoft Development Network) que tem o endereço http://msdn.microsoft.com. Este site dispõe de uma gigantesca quantidade de informação. Existem também outros sites satélites como o Microsoft Smart Devices Developer Community com o endereço http://smartdevices.microsoftdev.com.

Além da informação disponibilizada pela Microsoft, à

medida que esta tecnologia vai sendo mais aceite e explorada pela comunidade de programadores, começam a existir cada vez mais, sites que contêm informação ligada ao desenvolvimento de aplicações para PocketPC utilizando a plataforma .NET. Alguns são exclusivamente dedicados a este tipo, e outros sites de maiores dimensões dispõem de uma secção vocacionada a este assunto.

Os links seguintes apontam para alguns documentos

que serviram como base a este documento. Também dispõem de informação adicional que permitirá aprofundar os assuntos aqui abordados. Como a Internet está em constante mutação, com o decorrer do tempo, os links aqui referênciados perderão validade, restando os temas dos documentos como base.

Page 124: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

124

SSSIIITTTEEESSS 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 aplicações nas mais variadas linguagens. http://msdn.microsoft.com/vstudio/device/ Desenvolvimento de aplicações para dispositivos móveis 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 Comentários sobre PDAs. CNet Reviews

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

Page 125: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

125

LearnMobile.net

http://www.learnmobile.net/MobileClient/ Grande quantidade de tutoriais, exemplos de código e ajudas úteis sobre o desenvolvimento destinado a engenhos portáteis. Open .NET Compact Framework

http://www.opennetcf.org/ Código fonte e exemplos destinado ao Compact Framework. JWHedgehog-Developmentor .NET Reference

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

http://www.devbuzz.com/content/init_compact_framework.asp Informações sobre o desenvolvimento para PocketPC DevX

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

Page 126: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

126

GotDotNet .NET Framework Community

http://www.gotdotnet.com/ Discusão do .NET em geral. CSharp Friends

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

Page 127: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

127

LLLIIIVVVRRROOOSSS EEE EEEBBBOOOOOOKKKSSS 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

Page 128: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

128

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

Page 129: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

129

Applied Microsoft .NET Framework Programming

autores Jeffrey Richter O'Reilly .NET Framework Essentials

autores Thuan L. Thai Hoang Q. Lam

Page 130: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

130

DDDOOOCCCUUUMMMEEENNNTTTOOOSSS 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 Introdução 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 frequêntes no desenvolvimento de aplicações para dispositivos móveis. 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 Introdução às ferramentas de desenvolvimento. The PC in Your Pocket http://msdn.microsoft.com/library/en-us/dnroad/html/road06272001.asp Características do PocketPC e debug de aplicações. Taking Control with C# http://msdn.microsoft.com/library/en-us/dnroad/html/road01082003.asp Alguns dos controls disponíveis para o interface das aplicações, com exemplos em C#. Creating Custom Controls http://msdn.microsoft.com/library/en-us/dnroad/html/road11272002.asp Criação 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 utilização de PocketPCs nas empresas.

Page 131: NO - dei.isep.ipp.ptpaf/proj/Set2003/PDAs.NET.pdf · NOOTTAASS INNIICCIIAAIISS Este trabalho destina-se à cadeira de Projecto, do ... ramo de Computadores e Sistemas, leccionada

131

Developing Applications Using Web Services http://msdn.microsoft.com/library/default.asp ?url=/library/en-us/dnppcgen/html/connecteddotnetppcapps.asp Aplicações .NET Compact Framework com a utilização 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 actualização do SDK para o desenvolvimento destinado a aparelhos móveis. Microsoft Case Studies: Pepsi Bottling Group, The http://www.microsoft.com/resources/casestudies/CaseStudy.asp?casestudyid=13819 Utilização do Compact Framework pela Pepsi Bottling Group. Microsoft Case Studies: Tesco.com http://www.microsoft.com/resources/casestudies/CaseStudy.asp?CaseStudyID=13394 Utilização do Compact Framework pelos supermercados Tesco. Microsoft Case Studies: GeoVector.com http://www.microsoft.com/sql/ce/productinfo/casestudy.asp?CaseStudyID=13399 Utilização do Compact Framework no desenvolvimento de uma aplicação de informação posicional. Microsoft Preps New Handheld OS http://zdnet.com.com/2102-1104_2-1015726.html?tag=printthis Próximo Sistema Operativo: PocketPC 2003 ActiveSync 3.6 Download http://www.microsoft.com/mobile/downloads Download do ActiveSync 3.6, necessário para a ligação de um aparelho físico.