Coletânea de Aplicativos para Windows Phone
Transcrição
Coletânea de Aplicativos para Windows Phone
Coletânea de Aplicativos para Windows Phone Edições Brasil Jundiaí/SP www.edicoesbrasil.com.br [email protected] Faculdade de Tecnologia de Jundiaí CARLOS EDUARDO SCHUSTER CLÁUDIO LUIS VIEIRA OLIVEIRA LUCIANA FERREIRA BAPTISTA ORGANIZADORES AUTORES: Profa. Dra. Viviane Rezi Dobarro Prof. Ms. Carlos Eduardo Schuster Prof. Ms. Cláudio Luís V. Oliveira Profa. Ms. Luciana Ferreira Baptista Profa. Ms. Adaní Cusin Sacilotti Profa. Ms. Ângela Cristina de Oliveira Lühmann Prof. Ms. Benedito Cristiano Aparecido Petroni Amanda Mayara de Araujo George Petz Gustavo da Silva Oliveira João Henrique Felício Barreto Kelly Sabará Rafael de Oliveira Sales Reginaldo Bernardo Antonietti Coletânea de Aplicativos para Windows Phone 1ª Edição Jundiaí/SP Edições Brasil 2013 © Edições Brasil - 2013 Supervisão: Marlene Rodrigues da Silva Aguiar Capa e figuras : Cláudio Luis Vieira Oliveira Editoração Eletrônica: João José Ferreira de Aguiar Revisão ortográfica: Organizadores da Obra Conselho Editorial: Prof. Ms. João José Ferreira de Aguiar Prof. Ms. João Carlos dos Santos Profª Dra. Teresa Helena Buscato Martins Todos os direitos reservados e protegidos pela Lei 5988 de 14/12/1973. Todas as informações contidas nesta obra são de exclusiva responsabilidade dos autores. As figuras deste livro foram produzidas pelo autor Cláudio Luis Vieira Oliveira. Nenhuma parte deste livro poderá ser reproduzida ou transmitida por qualquer tipo de meio empregado (eletrônicos, mecânicos, fotográficos, fotocópias, digitalização, gravação, ou qualquer outro), sem previa autorização por escrito da editora. O mesmo se aplica às características gráficas e à editoração eletrônica desta obra. Alguns nomes de empresas e respectivos produtos e/ou marcas foram citadas apenas para fins didáticos, não havendo qualquer vínculo das mesmas com a obra. Dentro dos códigos de programação, algumas palavras não foram acentuadas por questões técnicas relacionadas ao hardware e/ou softwares utilizados pelos leitores. A editora e os autores acreditam que todas as informações apresentadas nesta obra estão corretas. Contudo, não há qualquer tipo de garantia de que o uso das mesmas resultará no esperado pelo leitor, principalmente por se tratar de linguagem de programação. Caso seja(m) necessária(s), a editora disponibilizará errata(s) em seu site. Dados Internacionais de Catalogação na Publicação (CIP) OL41c Oliveira, Claudio Luis Vieira Coletânea de Aplicativos para Windows Phone / Cláudio Luis Vieira Oliveira, Carlos Eduardo Schuster, Luciana Ferreira Baptista - Jundiaí: Edições Brasil, 2013. 168 p. : il. ISBN: 978-85-65364-17-1 1. Linguagem - Windows Phone. 2. Programação. I. Schuster, Carlos Eduardo. II. Baptista, Luciana Ferreira. III. Título CDD: 005.133 Bibliotecária responsável Marinês de Campos Ribeiro CRB8/7227 Depósito legal na Biblioteca Nacional, conforme Decreto 1.823/1907. Versão eletrônica - e-book [email protected] - www.edicoesbrasil.com.br Coletânea de Aplicativos para Windows Phone Sumário 1. Prefácio........................................................................................... 7 2. A Faculdade de Tecnologia de Jundiaí (FATEC Jundiaí)................... 9 3. Introdução..................................................................................... 11 4. Desenvolvimento para Windows Phone....................................... 13 5. Área Geométrica........................................................................... 19 6. Carrossel........................................................................................ 27 7. Controle de Ciclo Menstrual......................................................... 31 8. Controle de Glicemia..................................................................... 39 9. Conversor de Temperatura........................................................... 51 10. Cronômetro................................................................................. 59 11. Desafios de Lógica........................................................................ 75 12. Diabetes Calculator...................................................................... 83 13. FuelManager................................................................................ 91 14. Jogo da Memória....................................................................... 107 15. RescisãoCLT............................................................................... 117 16. Tabuada..................................................................................... 125 17. Todos os Aplicativos Desenvolvidos e Publicados..................... 133 5 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira 6 Coletânea de Aplicativos para Windows Phone 1.Prefácio Prefácio Prof. Ms. Benedito Cristiano Aparecido Petroni Motivados pelo resultado considerado surpreendente da parceria entre a Faculdade de Tecnologia de Jundiaí (FATEC Jundiaí) e o Instituto Nokia de Tecnologia (INdT), professores e alunos dos Cursos Superiores de Tecnologia em Análise e Desenvolvimento de Sistemas e Gestão da Tecnologia da Informação, elaboraram essa coletânea de aplicativos desenvolvidos como resultado dos dois treinamentos sobre Windows Phone realizados pelo INdT nas dependências da FATEC Jundiaí. Esse curso possibilitou aos participantes da instituição o contato com uma tecnologia cada vez mais crescente na vida das pessoas e no próprio mercado de trabalho. Todos nós sabemos que a comunicação móvel atualmente faz parte da vida de muitas pessoas e está presente em praticamente todos os locais do planeta e em todos os setores. Com isso pode-se afirmar que não se trata apenas de uma invenção bem sucedida – a dos dispositivos móveis, mas de uma revolução sem precedentes no que se destina à suas necessidades de uso que possibilita praticidade e disponibilidade de informações. Dentro deste contexto, esta obra apresenta uma série de aplicativos criados, e que tomaram como referência todos os tópicos técnicos abordados durante os treinamentos. Essa obra apresenta vários aplicativos que podem a princípio parecerem simples, e na verdade são, mas muito úteis no dia-a-dia e em um contexto mais abrangente, observa-se que o aproveitamento do recurso tecnológico por mais simples que pareça, pode fazer a diferença para muitas pessoas. Agradecemos primeiramente a Nokia do Brasil, especficamente o Instituto Nokia de Tecnologia (INdT) pela oferta da capacitação técnica especializada, a Direção da FATEC Jundiaí pela oportunidade da realização, aos professores e principalmente aos alunos, pelo empenho, interesse e dedicação, razão da existência de 7 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira toda a comunidade acadêmica da FATEC Jundiaí. Por último, um agradecimento a Allan Bezerra, Gerente de Projetos no Instituto Nokia de Tecnologia e ao Jackson Feijó, Pesquisador do Instituto Nokia de Tecnologia que ministrou os treinamentos na FATEC Jundiaí. 8 Coletânea de Aplicativos para Windows Phone 2. A Faculdade de Tecnologia de Jundiaí (FATEC Jundiaí) Profa. Dra. Viviane Rezi Dobarro Diretora da Faculdade de Tecnologia de Jundiaí A FATEC Jundiaí é uma faculdade pública paulista vinculada ao Centro Estadual de Educação Tecnológica Paula Souza (CEETEPS), que é uma autarquia do Governo do Estado de São Paulo, estando vinculada à Secretaria de Desenvolvimento Econômico, Ciência e Tecnologia. Foi instalada no ano de 2002 na cidade de Jundiaí e conta atualmente com mais de 1.200 alunos. Atualmente contribui para a formação de mãode-obra qualificada no setor de informática, logística, gestão ambiental e eventos. Como uma instituição pública, o ensino da FATEC Jundiaí é gratuito e o ingresso se dá por meio de concurso público (vestibular) semestral, aberto a qualquer pessoa que tenha concluído ou esteja em vias de concluir o Ensino Médio. Atualmente oferece cinco cursos superiores: (Fonte: http://www.vestibularfatec.com.br/) O Tecnólogo em Análise e Desenvolvimento de Sistemas analisa, projeta, documenta, especifica, testa, implanta e mantém sistemas computacionais de informação. Esse profissional trabalha, também, com ferramentas computacionais, equipamentos de informática e metodologia de projetos na produção de sistemas. Raciocínio lógico, emprego de linguagens de programação e de metodologias de construção de projetos, preocupação com a qualidade, usabilidade, robustez, integridade e segurança de programas computacionais são fundamentais à atuação desse profissional. O Tecnólogo em Eventos atua em instituições de eventos, de turismo e em meios de hospedagem, prestando serviços especializados no planejamento, organização e execução de eventos de negócios, sociais, esportivos, culturais, científicos, artísticos, de lazer e outros. Deve ter o domínio dos códigos funcionais e dos processos de interação dinâmica de todos os agentes integrados ao turismo e os variados aspectos culturais, econômicos e sociais da região em que atua, com consciência crítica acerca das orientações éticas, ambientais 9 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira e legais. O Tecnólogo em Gestão Ambiental planeja, gerencia e executa as atividades de diagnóstico, avaliação de impacto, proposição de medidas mitigadoras - corretivas e preventivas -, recuperação de áreas degradadas, acompanhamento e monitoramento da qualidade ambiental. Regulação do uso, controle, proteção e conservação do meio ambiente, avaliação de conformidade legal, análise de impacto ambiental, elaboração de laudos e pareceres são algumas das atribuições deste profissional, podendo elaborar e implantar ainda políticas e programas de educação ambiental, contribuindo assim para a melhoria da qualidade de vida e a preservação da natureza. O Tecnólogo em Gestão da Tecnologia da Informação atua num segmento da área de informática que abrange a administração dos recursos de infraestrutura física e lógica dos ambientes informatizados. O profissional egresso desse curso define parâmetros de utilização de sistemas, gerencia os recursos humanos envolvidos, implanta e documenta rotinas, controla os níveis de serviço de sistemas operacionais e banco de dados, gerenciando os sistemas implantados. O Tecnólogo em Logística é o profissional especializado em armazenagem, distribuição e transporte. Atuando na área logística de uma organização, planeja e coordena a movimentação física e de informações sobre as operações multimodais e intermodais de transporte, incluindo o gerenciamento de pessoas para proporcionar fluxo otimizado ao longo da cadeia de suprimentos. Ele projeta e gerencia redes de distribuição e unidades logísticas, estabelecendo processos de compras, identificando fornecedores, negociando e estabelecendo padrões de recebimento, armazenamento, movimentação e embalagem de materiais. Ocupa-se ainda do inventário e gerenciamento estratégico de estoques, sistemas de abastecimento, programação, monitoramento do fluxo de pedidos, cálculo de custos de fretes e transbordos, sistemas de tráfego e gerenciamento de transportes urbano de carga e passageiros, que envolvam os modais rodoviário, ferroviário, aeroviário, dutoviário e aquaviário. FATEC Jundiaí Av. União dos Ferroviários, 1760. Centro CEP 13201-160 - Jundiaí/SP Tel/Fax: (11) 4522-7549 / 4523-0092 http://www.fatecjd.edu.br 10 Coletânea de Aplicativos para Windows Phone 3. Introdução Prof. Ms. Carlos Eduardo Schuster Prof. Ms. Cláudio Luís V. Oliveira Profa. Ms. Luciana Ferreira Baptista O Windows Phone é o sistema operacional da Microsoft para smartphones que apresenta novos recursos de usabilidade, muitos recursos de integração com computadores Windows e também com o console de jogos XBOX 360. A presente obra apresenta uma coletânea de aplicativos, para o Windows Phone, desenvolvidos pelos professores e alunos da Faculdade de Tecnologia de Jundiaí (FATEC Jundiaí) durante o segundo semestre de 2012 e primeiro semestre de 2013. Os aplicativos resultam da parceria entre o Instituto Nokia de Tecnologia (INdT) e a FATEC Jundiaí a qual propiciou o treinamento de 8 docentes e cerca de 75 alunos dos cursos de Tecnologia em Análise e Desenvolvimento de Sistemas e Gestão da Tecnologia da Informação. Com treinamentos realizados em novembro de 2012 e abril de 2013, ambos ministrados pelo instrutor Jackson Feijó do INdT. Figura 3.1 - Turma de Abril/2013 11 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Os objetivos principais dos treinamentos ministrados são capacitar o corpo docente e discente no desenvolvimento para Windows Phone, bem como incentivar a criação de aplicativos para esta plataforma, que poderão ser comercializados pelos alunos por meio da loja da Microsoft. Ao todo trinta e um aplicativos foram desenvolvidos e publicados na loja da Microsoft sendo que destes, doze são apresentados em detalhes nesta coletânea. No último capítulo desta obra também se encontram relacionados todos os aplicativos desenvolvidos. 12 Coletânea de Aplicativos para Windows Phone 4. Desenvolvimento para Windows Phone Profa. Ms. Ângela Cristina de Oliveira Lühmann Prof. Ms. Benedito Cristiano Aparecido Petroni Prof. Ms. Cláudio Luís Vieira Oliveira O Windows Phone oferece um conjunto de soluções que facilitam o desenvolvimento de aplicativos para a plataforma. Fundamentado sobre o conceito de desenvolvimento da interface sobre um padrão XML, no caso, o Microsoft Silverlight e utilizando a linguagem de programação C#. Para o desenvolvimento de aplicativos para o Windows Phone é necessário instalar o Visual Studio Express for Windows Phone que encontra-se disponível gratuitamente para download em http://dev. windowsphone.com. A base de funcionamento do Visual Studio é o conceito de projeto. Um Projeto (Project) pode ser entendido como um grupo de classes, formulários e recursos diversos, como arquivos de imagens e sons entre outros, necessários à criação de um programa. Figura 4.1 – Localização do Visual Studio 13 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Desta forma, após abrir o Visual Studio, a primeira etapa na construção de um aplicativo para Windows Phone consiste em realizar a criação de um projeto. Para isso, escolha no menu principal a opção File e depois New Project: Figura 4.2 – Modelos de Aplicativos Nosso primeiro exemplo, que será criado com o intuito de ilustrar o funcionamento básico do Visual Studio, consiste em uma “Windows Phone Application” e será chamada de “Ola”. Em seguida, selecione a plataforma desejada: Figura 4.3 – Definição da Versão do Sistema Operacional 14 Coletânea de Aplicativos para Windows Phone O Visual Studio irá exibir a aplicação criada, a esquerda podemos observar como a mesma será exibida na tela de um smartphone com Windows Phone. A parte central consiste no código fonte da página principal em Silverlight for Windows Phone. Na direita temos a Solution Explorer e a Properties. Figura 4.4 – Janela principal do Visual Studio Quando trabalhamos com o Silverlight for Windows Phone, a base de qualquer aplicativo são as páginas XAML (eXtensible Application Markup Language), que consiste uma linguagem fundamentada sobre XML (eXtensible Markup Language) e permite a especificação do layout e dos componentes da página. Quando criamos uma página a estrutura básica já é apresentada, desta forma, identifique no código fonte da aplicação o seguinte trecho: <!--LayoutRoot is the root grid where all page content is placed--> <Grid x:Name=”LayoutRoot” Background=”Transparent”> <Grid.RowDefinitions> <RowDefinition Height=”Auto”/> <RowDefinition Height=”*”/> </Grid.RowDefinitions> <!--TitlePanel contains the name of the application and page title--> 15 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira <StackPanel x:Name=”TitlePanel” Grid.Row=”0” Margin=”12,17,0,28”> <TextBlock x:Name=”ApplicationTitle” Text=”MY APPLICATION” Style=”{StaticResource PhoneTextNormalStyle}”/> <TextBlock x:Name=”PageTitle” Text=”page name” Margin=”9,-7,0,0” Style=”{StaticResource PhoneTextTitle1Style}”/> </StackPanel> <!--ContentPanel - place additional content here--> <Grid x:Name=”ContentPanel” Grid.Row=”1” Margin=”12,0,12,0”></Grid> </Grid> Este código representa a definição dos gerenciadores de layout que serão adotados, este exemplo, Grid e StackPanel. A área reservada para o título da aplicação e para o título da página utilizarão o elemento TextBlock, o qual permite a exibição de texto estático na página. Altere a propriedade Text do TextBlock chamado ApplicationTitle para “EXEMPLO DE APLICATIVO” e, em seguida modifique a propriedade Text do TexBlock chamado PageName para “olá”. Após concluir as alterações no programa, gravar as alterações realizadas. O passo seguinte consiste em compilar a solução, para isso, podemos utilizar a opção do menu Build e depois Build Solution, também pode-se utilizar a tecla de atalho F6 para realizar o mesmo processo. Após finalizar a construção da aplicação é importante observar na parte inferior da IDE se ocorreram erros ou avisos. Figura 4.5 – Lista de Erros 16 Coletânea de Aplicativos para Windows Phone Quando a compilação não apresentar erros a mesma poderá ser executada através do menu Debug utilizando os itens Start Debugging (F5). O emulador será iniciado e o resultado da execução do programa deverá ser similar ao ilustrado pela Figura 4.6. Figura 4.6 – Emulador Vamos adicionar um novo TextBlock ao ContentPanel, conforme mostrado a seguir. <!--ContentPanel - place additional content here--> <Grid x:Name=”ContentPanel” Grid.Row=”1” Margin=”12,0,12,0”> <TextBlock Text=”Bem-vindo” /> </Grid> Na Figura 4.7 podemos visualizar a execução do aplicativo na tela do emulador, sendo importante observar que todo novo objeto 17 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira da página deve ser colocado dentro do ContentPanel para que seja exibido. Figura 4.7 – Tela do aplicativo 18 Coletânea de Aplicativos para Windows Phone 5. Área Geométrica Gustavo da Silva Oliveira Introdução A proposta deste aplicativo é calcular a área geométrica de algumas figuras. O conceito básico consiste no usuário indicar umas das figuras pré-cadastradas: quadrado, triângulo e trapézio dentre outras também, e suas dimensões como, por exemplo, altura, largura e base. A partir disto, o aplicativo tem informações suficientes para efetuar o cálculo e retornar a área da figura. Projeto O elemento principal da aplicação consiste no usuário selecionar qual figura ele deseja calcular a área. Na aplicação o usuário pode calcular a área das seguintes figuras: Figura 5.1 – Figuras suportadas pelos aplicativos Após selecionar uma das figuras, o usuário é levado à outra página onde informações sobre como o cálculo é feito serão exibidas, podendo assim entender o conceito e indicar as informações necessárias para que a aplicação efetue o devido cálculo. 19 Gustavo da Silva Oliveira Figura 5.2 - Página do Quadrado Figura 5.3 - Página do Quadrado Figura 5.4 - Área do Quadrado Figura 5.5 – Cálculo da Área 20 Coletânea de Aplicativos para Windows Phone Desenvolvimento Condiderando as dimensões reduzidas da tela de um smartphone, será utilizado um controle do tipo Panorama de forma a conseguirmos maximizar a área da aplicação permitindo, desta forma, realizar a disposição das figuras de modo a não ficarmos limitados exclusivamente à área física da tela. No trecho de programa a seguir, é possível observar a implementação de um PanoramaItem dentro da página MainPage.xaml, dentro deste elemento será utilizado o Grid para organizar as figuras. <!--Panorama item one--> <controls:PanoramaItem Header=”selecione”> <Grid> <Image HorizontalAlignment=”Left” Height=”150” VerticalAlignment=”Top” Width=”150” Source=”/Img/Quadrado. png” Stretch=”Fill” Margin=”132,0,0,0” Tap=”Image_Tap_1”/> <Image HorizontalAlignment=”Left” Height=”150” VerticalAlignment=”Top” Width=”400” Source=”/Img/Quadrado. png” Stretch=”Fill” Margin=”10,230,0,0” Tap=”Image_Tap_2”/> <TextBlock HorizontalAlignment=”Left” TextWrapping=”Wrap” Text=”Quadrado” VerticalAlignment=”Top” Margin=”126,155,0,0” FontSize=”35”/> <TextBlock HorizontalAlignment=”Left” TextWrapping=”Wrap” Text=”Retângulo” VerticalAlignment=”Top” Margin=”126,385,0,0” FontSize=”35”/> </Grid> </controls:PanoramaItem> O resultado final da página principal, que pode ser observado nas Figuras 5.6, 5.7, 5.8 e 5.9, consistindo em quatro PanoramaItem contendo, cada um, duas figuras. 21 Gustavo da Silva Oliveira Figura 5.6 - Quadrados e Retângulos Figura 5.8 - Triângulo e Losango Figura 5.7 - Círculo e Anel Figura 5.9 – Trapézio e Paralelograma 22 Coletânea de Aplicativos para Windows Phone Uma nova página da aplicação pode ser aberta através do método Navigate disponível na classe NavigationService. A seguir podemos observar seu uso no desenvolvimento do evento Tap da figura Quadrado: private void imgQuadrado_Tap(object sender, GestureEventArgs e) { NavigationService.Navigate(new Uri(“/Quadrado.xaml”, UriKind.Relative)); } Após desenvolver o layout da página principal, vamos definir o layout das páginas secundárias, onde o cálculo vai ser realizado, seguindo o mesmo padrão da MainPage, com PanoramaItem. <!--Panorama item one--> <controls:PanoramaItem Header=”fórmula”> <Grid> <Image HorizontalAlignment=”Left” Height=”194” VerticalAlignment=”Top” Width=”192” Source=”/Img/Mod/ Quadrado.png”/> <TextBlock HorizontalAlignment=”Left” TextWrapping=”Wrap” VerticalAlignment=”Top” Margin=”207,10,0,0” Height=”178” Width=”213” FontSize=”47”> <Run Text=”A = Área;”/> <LineBreak/> <Run Text=”L = Lado;”/> <LineBreak/> <Run Text=”A = L * L”/> </TextBlock> <TextBox HorizontalAlignment=”Left” Height=”234” TextWrapping=”Wrap” Text=”O Quadrado é uma figura plana que possui quatro lados iguais e quatro ângulos retos (90°).” VerticalAlignment=”Top” Width=”420” Margin=”0,199,0,0” IsReadOnly=”True” FontSize=”33” TextAlignment=”Left”/> </Grid> </controls:PanoramaItem> 23 Gustavo da Silva Oliveira <!--Panorama item two--> <controls:PanoramaItem Header=”calcular”> <Grid> <TextBlock HorizontalAlignment=”Left” TextWrapping=”Wrap” Text=”Insira o valor de L” VerticalAlignment=”Top” FontSize=”40” Margin=”56,10,0,0”/> <TextBox x:Name=”txtL” MaxLength=”6” HorizontalAlignment=”Left” Height=”94” TextWrapping=”Wrap” VerticalAlignment=”Top” Width=”420” Margin=”0,90,0,0” FontSize=”40” TextAlignment=”Center” InputScope=”Number” Tap=”txtL_Tap” TextChanged=”txtL_TextChanged” LostFocus=”txtL_LostFocus”/> <TextBlock x:Name=”txtbRes” HorizontalAlignment=”Left” TextWrapping=”Wrap” Text=”A área é:” VerticalAlignment=”Top” FontSize=”40” Margin=”130,220,0,0”/> <TextBox x:Name=”txtRes” HorizontalAlignment=”Left” Height=”94” TextWrapping=”Wrap” VerticalAlignment=”Top” Width=”420” Margin=”0,298,0,0” FontSize=”40” TextAlignment=”Center” InputScope=”Number” IsReadOnly=”True”/> </Grid> </controls:PanoramaItem> Cada layout está associado a uma classe C# onde podemos programar diretamente. Nas páginas secundárias, o método Calcular é responsável por fazer o cálculo da área. public partial class Quadrado : PhoneApplicationPage { private void calcular() { try { if ((txtL.Text != “”) && (txtL.Text != “.”) && (txtL.Text != “0”) && (txtL.Text != “0.0”)) { txtRes.Text = (Math.Pow((double.Parse( txtL.Text)), 2)).ToString(); 24 Coletânea de Aplicativos para Windows Phone } } catch { txtRes.Text = “Desculpe. Não foi possível Calcular”; } } } Quando o usuário digita os valores necessários ao cálculo, automaticamente o método é chamado e o usuário poderá visualizar o resultado da área do objeto escolhido. private void txtL_TextChanged(object sender, TextChangedEventArgs e) { calcular(); } Considerações Finais A aplicação consiste em uma versão do que aprendemos na escola sobre geometria. Apresenta como principais características, a facilidade e a usabilidade. O uso do recurso Panorama View apresenta novas perspectivas em relação ao layout de aplicações, pois, apresenta uma solução bastante funcional em relação às limitações de tamanho de tela existentes nos smartphones. Após o desenvolvimento a aplicação foi submetida e aprovada para publicação no Windows Phone Marketplace, estando disponível para download no endereço http://www.windowsphone.com/pt-br/ store/app/%C3%A1rea-gemom%C3%A9trica/2419a705-ed19-4cb08db0-d16495bcfe96 Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 15 de agosto de 2013. 25 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira 26 Coletânea de Aplicativos para Windows Phone 6. Carrossel Profa. Ms. Luciana Ferreira Baptista Introdução A proposta deste aplicativo é a apresentação dos personagens da novela Carrossel do SBT, com a possibilidade de ouvir a música tema da novela. Projeto O projeto consiste em apresentar os desenhos dos personagens (Figura 6.1) da novela Carrossel em ordem alfabética (Figura 6.2), com a possibilidade de ouvir a música tema “Carro Céu” quando clicar na imagem da Nota Musical. Figura 6.1 – Tela inicial 27 Luciana Ferreira Baptista Figura 6.2 – Tela de apresentação dos personagens Clicando-se novamente na imagem da Nota Musical, a música é pausada. Desenvolvimento A aplicação foi desenvolvida para a plataforma Windows Phone e utilizando, para isso, o Silverlight para Windows Phone. Devido às dimensões reduzidas da tela de um smartphone, será utilizado um controle do tipo Panorama de forma a conseguirmos maximizar a área da aplicação permitindo, desta forma, realizar a disposição de todos os personagens. No trecho de programa a seguir, podemos observar a implementação de um PanoramaItem dentro da página MainPage.xaml, dentro desta elemento será utilizado o StackPanel com a propriedade Orientation igual a Horizontal para organizar as imagens dos personagens e o botão que contém a imagem da Nota Musical. 28 Coletânea de Aplicativos para Windows Phone <controls:PanoramaItem Header=”Personagens”> <StackPanel Orientation=”Horizontal”> <Image Source=”/Carrossel;component/imagens/persons. jpg” Height=”438” Width=”372” /> <Button Name=”btnSom1” Content=”som” Height=”60” Width=”60” VerticalAlignment=”Bottom” Click=”btnSom_Click”> <Button.Background> <ImageBrush ImageSource=”/Carrossel;component/ imagens/som.jpg” Stretch=”Uniform” /> </Button.Background> </Button> </StackPanel> </controls:PanoramaItem> Ao clicar na imagem da Nota Musical é verificado o estado da música, ou seja, se ela deverá iniciar, se ela já iniciou e está pause (portanto deverá voltar do ponto que parou), ou se ela está tocando e deverá pausar: private void btnSom_Click(object sender, RoutedEventArgs e) { if (MediaPlayer.State == MediaState.Paused) { MediaPlayer.Resume(); } else { if (MediaPlayer.State == MediaState.Playing) { MediaPlayer.Pause(); } else { PlaySound(“/carroceu.mp3”); } } } Para tocar a música pela primeira vez é chamado o método PlaySound, passando a música tema da novela: 29 Luciana Ferreira Baptista public void PlaySound(string pathToMp3) { Song song = Song.FromUri(“nome”, new Uri(pathToMp3, UriKind.Relative)); FrameworkDispatcher.Update(); MediaPlayer.Play(song); } Considerações Finais A aplicação consiste em uma versão simples para visualizar os personagens da novela Carrossel, ouvindo também, se desejar, a música tema da novela. Após o desenvolvimento a aplicação foi submetida e aprovada para publicação no Windows Phone Marketplace, estando disponível para download no endereço http://www.windowsphone.com/pt-br/ store/app/carrossel/e4553915-11d7-4088-80ca-87a4c423045a Melhorias futuras na aplicação consistem em acrescentar a descrição das características de cada personagem. Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 26.ago.2013. SBT. Carrossel. Disponível em <http://www.sbt.com.br/carrossel/ personagens/>. Acesso em 10.mai.2013. 30 Coletânea de Aplicativos para Windows Phone 7. Controle de Ciclo Menstrual Profa. Ms. Adaní Cusin Sacilotti Prof. Ms. Carlos Eduardo Schuster Kelly Sabará Introdução A proposta deste aplicativo é fornecer conforme seu ciclo menstrual, a data aproximada da ovulação e seu período fértil. Embora este método de tabelinha não seja 100% confiável, pode ser utilizado, para se ter uma ideia das datas férteis. Ao ser digitado pelo usuário a data da última menstruação, o aplicativo calcula as datas de início da ovulação, fim da ovulação, dia mais fértil e próxima menstruação. Projeto A aplicação consiste em efetuar cálculos com datas referentes ao período fértil, a partir da data inserida da última menstruação, considerando um ciclo de 28 dias. No campo para inserir a data da última menstruação é oferecido ao usuário um calendário, para que ele selecione o mês, o dia e o ano. Como facilidade para o usuário, é salvo no aplicativo a data da última menstruação. A aplicação possui uma página inicial, contendo as informações do aplicativo, conforme a Figura 7.1. 31 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Figura 7.1 – Tela inicial O usuário ao clicar no botão Acessar, irá para a tela de Cálculo do Ciclo, onde deverá informar a data da última menstruação e clicar no botão Calcular Datas, onde serão exibidos os cálculos de acordo com o ciclo de 28 dias, conforme a Figura 7.2. 32 Coletânea de Aplicativos para Windows Phone Figura 7.2 – Cálculo do Ciclo Ao clicar no campo para atualizar a data da última menstruação, que exibe a data atual extraída do sistema operacional ou a data da última menstruação gravada no aplicativo, é exibido um calendário para o usuário. Com facilidade, podem-se rolar os meses, dias e anos e selecioná-los (Figura 7.3). 33 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Figura 7.3 - Calendário Ao clicar no botão Calcular Datas, em relação à data digitada da última menstruação, a data de início da ovulação é acrescida de 11 dias. A data de fim da ovulação é acrescida de 17 dias. A data do dia mais fértil á crescida de 14 dias, e a data da próxima menstruação é acrescida de 28 dias. Conforme é exibido na Figura 7.4. 34 Coletânea de Aplicativos para Windows Phone Figura 7.4 – Cálculo do Ciclo com os resultados Desenvolvimento A aplicação foi desenvolvida para a plataforma Windows Phone sendo utilizado, para isso, o Silverlight para Windows Phone. Devido aos cálculos efetuados pelo aplicativo com datas, o trecho de programa a seguir exibe a criação da variável dtIni, através do DatePicker e sua formatação. <StackPanel x:Name=”ContentPanel” Grid.Row=”1” Margin=”12,0,12,0”> <TextBlock Text=”Data da última mestruação:”/> <toolkit:DatePicker Name=”dtIni” ValueStringFormat=”{} {0:dd-MM-yyyy}” /> <Button Content=”Calcular Datas” Click=”Button_Click”/> <Grid > <TextBlock Text=”Inicio da Ovulação” Margin=”10,0,142,0” FontSize=”28” /> <TextBlock Name=”txtDtiniO” Height=”38” Margin=”298,0,6,0” TextAlignment=”Right” FontSize=”28” VerticalAlignment=”Top” Foreground=”#FF760000” /> 35 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará <TextBlock FontSize=”28” Margin=”10,46,142,-46” Text=”Fim da Ovulação” /> <TextBlock Name=”txtDtfimO” FontSize=”28” Foreground=”#FF760000” Height=”38” Margin=”298,46,6,0” TextAlignment=”Right” VerticalAlignment=”Top” /> <TextBlock FontSize=”28” Margin=”10,92,142,-46” Text=”Dia mais Fértil “ /> <TextBlock Name=”txtDtfertil” FontSize=”28” Foreground=”#FF760000” Height=”38” Margin=”298,92,6,0” TextAlignment=”Right” VerticalAlignment=”Top” /> <TextBlock FontSize=”28” Margin=”10,138,142,-46” Text=”Próxima Mestruação” /> <TextBlock Name=”txtDtprox” FontSize=”28” Foreground=”#FF760000” Height=”38” Margin=”298,138,6,0” TextAlignment=”Right” VerticalAlignment=”Top” /> </Grid> </StackPanel> Após desenvolver o layout da página principal, vamos definir a classe que irá definir os cálculos efetuados referentes ao ciclo menstrual, o carregamento da data da última menstruação gravada no aplicativo ou a data atual extraída do sistema operacional. namespace ciclo { public partial class calculo : PhoneApplicationPage { public calculo() { InitializeComponent(); string text; if (loadText(“diaM.txt”, out text)) { dtIni.Value = Convert.ToDateTime(text); } } private void Button_Click(object sender, RoutedEventArgs e) 36 Coletânea de Aplicativos para Windows Phone { DateTime dt = Convert.ToDateTime(dtIni.Value); saveText(“diaM.txt”, dt.ToString()); txtDtiniO.Text = dt.AddDays(11).ToString(“dd/MM/yyyy”); txtDtfimO.Text = dt.AddDays(17).ToString(“dd/MM/yyyy”); txtDtfertil.Text = dt.AddDays(14).ToString(“dd/MM/yyyy”); txtDtprox.Text = dt.AddDays(28).ToString(“dd/MM/yyyy”); } private void saveText(string filename, string text) { using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) { using (IsolatedStorageFileStream rawStream = isf.CreateFile(filename)) { StreamWriter writer = new StreamWriter(rawStream); writer.Write(text); writer.Close(); } } } private bool loadText(string filename, out string result) { result = “”; using (IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication()) { if (isf.FileExists(filename)) { try { using (IsolatedStorageFileStream 37 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará rawStream = isf.OpenFile(filename, System.IO.FileMode.Open)) { StreamReader reader = new StreamReader(rawStream); result = reader.ReadToEnd(); reader.Close(); } } catch { return false; } } else { return false; } } return true; } } } Considerações Finais A aplicação consiste em uma versão que funciona para ciclos menstruais de 28 dias. Apresenta como principais características, a possibilidade de alerta e informação ao usuário, e a ampliação dos cálculos para os mais variados ciclos menstruais. Após o desenvolvimento a aplicação foi submetida e aprovada para publicação no Windows Phone Marketplace, estando disponível para download no endereço http://www.windowsphone.com/pt-br/ store/app/ciclo/3652aa54-9a7e-4e20-a306-b70e129de0aa. Melhorias futuras na aplicação consistem em realizar os cálculos para ciclos menstruais diferenciados. Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 15 jun. 2013. 38 Coletânea de Aplicativos para Windows Phone 8. Controle de Glicemia Amanda Mayara de Araujo Introdução O objetivo deste aplicativo é criar um histórico diário com os dados glicêmicos dos usuários que possuem Diabetes Tipo 1 e necessitam estar sempre realizando o teste de glicemia. O usuário informa o valor glicêmico obtido no teste, bem como a data e momento, por exemplo, em jejum e antes do almoço entre outros. Os dados são armazenados em um histórico no qual pode ser visualizado pelo usuário a qualquer momento. Projeto A aplicação apresenta um pequeno questionário, no qual dados serão requisitados aos usuários. Esses dados serão salvos e apresentados em um histórico. Há uma página principal, onde é usado três controles PivotItem, um para captar os dados, outro para o histórico e um terceiro reservado para informações sobre o aplicativo e seu desenvolvedor. Esta página principal (MainPage) pode ser observada na Figura 8.1. Figura 8.1 – Estrutura da aplicação 39 Amanda Mayara de Araujo A página Adicionar Dados possui campos a serem preenchidos pelo usuário, são eles data, valor glicêmico (mg/dL) e o momento em que o teste foi realizado, conforme ilustrado na Figura 8.2. Um botão está disponível para o usuário confirmar, adicionando os dados fornecidos. Também há um botão de criar um novo histórico, caso seja a vontade do usuário. Figura 8.2 - Adicionar Dados Após os dados serem salvos, estes serão apresentados ao usuário na página em que contém o histórico. O usuário poderá visualizar dados recentemente armazenados ao pressionar o botão Atualizar. Também poderá apagar o histórico pelo botão Apagar. Uma ilustração dessa página pode ser observada na Figura 8.3. 40 Coletânea de Aplicativos para Windows Phone Figura 8.3 - Histórico Todos os dados serão armazenados na memória do telefone pelo Isolatedtorage. Desenvolvimento A aplicação foi desenvolvida para a plataforma Windows Phone, versão 7.1, sendo utilizado o SilverLight para Windows Phone. É usado o recurso Pivot, o qual conterá “três páginas em apenas uma”. Este recurso permite utilizar um espaço maior além das dimensões do aparelho e uma navegação mais rápida pelo aplicativo. Neste caso, usamos três controles PivotItem para disponibilizar os conteúdos de “Adicionar Dados”, “Histórico” e “Sobre” em uma única página, a MainPage.xaml. Dentro dessa MainPage.xaml, temos um PivoItem para Adicionar dados. Foi usado um ScrollViewer que permite a rolagem da página. Também foram utilizados dois StackPanel, um para organizar a disposição dos textos e campos e outro para organizar os Radio Buttons, que selecionam o momento escolhido pelo usuário. <controls:PivotItem Header=”Add Dados” FontFamily=”Comic Sans MS” FontSize=”24” Foreground=”White”> <ScrollViewer Visibility=”Visible”> <StackPanel> 41 Amanda Mayara de Araujo <TextBlock Text=”Data” HorizontalAlignment=”Center” Margin=”0,5” FontSize=”28” /> <toolkit:DatePicker x:Name=”Date” Value=”” Background=”#E1DFEEF8” /> <TextBlock Name=”txtDate” Visibility=”Collapsed” /> <TextBlock Text=”Valor Glicêmico (mg/dL)” HorizontalAlignment=”Center” FontSize=”28” /> <TextBox Name=”txtValor” InputScope=”Number” Margin=”0,5” Background=”#E1DFEEF8”/> <TextBlock Text=”Momento do Teste” HorizontalAlignment=”Center” FontSize=”28” /> <StackPanel HorizontalAlignment=”Center” Width=”300” Background=”#43151519”> <RadioButton Name=”rbJejum” Content=”Jejum” HorizontalAlignment=”Left” Foreground=”White” Background=”#C7FFFFFF” /> <RadioButton Name=”rb1” Content=”Depois Café da Manhã” HorizontalAlignment=”Left” Foreground=”White” Background=”#C7FFFFFF” /> <RadioButton Name=”rb2” Content=”Antes do Almoço” HorizontalAlignment=”Left” Foreground=”White” Background=”#C7FFFFFF” /> <RadioButton Name=”rb3” Content=”Depois do Almoço” HorizontalAlignment=”Left” Foreground=”White” Background=”#C7FFFFFF” /> <RadioButton Name=”rb4” Content=”Antes do Jantar” HorizontalAlignment=”Left” Foreground=”White” Background=”#C7FFFFFF” /> <RadioButton Name=”rb5” Content=”Depois do Jantar” HorizontalAlignment=”Left” Foreground=”White” Background=”#C7FFFFFF” /> </StackPanel> <TextBlock Name=”txtMomento” Visibility=”Collapsed” /> <Button Name=”btnAdd” Content=”Adicionar” Click=”btnAdd_Click” Foreground=”White” Background=”#91193D6C” BorderBrush=”White” /> <Button Name=”btnNovo” Content=”Novo Histórico” Click=”btnNovo_Click” Foreground=”White” Background=”#DF8428DE” BorderBrush=”White” /> </StackPanel> </ScrollViewer> </controls:PivotItem> 42 Coletânea de Aplicativos para Windows Phone O resultado deste tópico pode ser observado pela Figura 8.4. Figura 8.4 - Resultado final da página Add Dados Com o ScrowViewer, a página pode ser rolada para que o usuário possa ter acesso a todos os dados e os botões. Um seguno PivotItem foi usado para criar o histórico. <controls:PivotItem Header=”Histórico”> <ScrollViewer Visibility=”Visible” MaxHeight=”100000”> <StackPanel Background=”#81151519” > <StackPanel Orientation=”Horizontal”> <Button Name=”btnAtualizar” Content=”Atualizar” Click=”btnAtualizar_Click” HorizontalContentAlignment=”Center” Width=”150” Background=”#DF8428DE” Foreground=”White” BorderBrush=”White” /> <Button Name=”btnApagar” Content=”Apagar” HorizontalContentAlignment=”Center” Click=”btnApagar_Click” Width=”150” Foreground=”White” Background=”#F9134DA2” BorderBrush=”White” /> </StackPanel> <StackPanel> <TextBlock Name=”txtConteudo” TextWrapping=”Wrap” FontFamily=”Arial” Foreground=”White” FontSize=”24” /> 43 Amanda Mayara de Araujo </StackPanel> </StackPanel> </ScrollViewer> </controls:PivotItem> Neste PivotItem, também foi utilizado um ScrowViewer, assim como um StackPanel com orientação horizontal para organizar os botões de Atualizar e Apagar neste sentido. O resultado pode ser observado pela Figura 8.5. Figura 8.5 - Resultado final do Histórico Após o layout ser definido, vamos implementar as funcionlidades dos botões e o histórico, no MainPage.xaml.cs. O botão Novo histórico irá armazenar os dados fornecidos pelo usuário em um IsolatedStorage. Ao ser pressionado, será criado um novo histórico, substituindo o já existente. private const string fileName = “historico.txt”; private const string folderName = “WP7Files”; private string filePath = System.IO.Path.Combine(folderName, fileName); private void btnNovo_Click(object sender, RoutedEventArgs e) { 44 Coletânea de Aplicativos para Windows Phone StreamResourceInfo streamResourcenInfo = Application.GetResourceStream(new Uri(filePath, UriKind.Relative)); using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { string directoryName = System.IO.Path.GetDirectoryName(filePath); if (!string.IsNullOrEmpty(directoryName) && !myIsolatedStorage.DirectoryExists(directoryName) ) { myIsolatedStorage.CreateDirectory(directoryName); } MessageBoxResult resultado = MessageBox.Show(“Deseja iniciar um novo histórico?”, “Atenção”, MessageBoxButton. OKCancel); if (resultado == MessageBoxResult.OK) { using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(filePath, System.IO.FileMode.Create, System.IO.FileAccess.Write)) { using (StreamWriter writer = new StreamWriter(fileStream)) { DateTime date = Convert.ToDateTime(Date.Value); txtDate.Text = date.ToString(); if (rbJejum.IsChecked == true) txtMomento.Text = rbJejum.Content.ToString(); else if (rb1.IsChecked == true) txtMomento.Text = rb1.Content.ToString(); else if (rb2.IsChecked == true) txtMomento.Text = rb2.Content.ToString(); else if (rb3.IsChecked == true) txtMomento.Text = rb3.Content.ToString(); 45 Amanda Mayara de Araujo else if (rb4.IsChecked == true) txtMomento.Text = rb4.Content.ToString(); else if (rb5.IsChecked == true) txtMomento.Text = rb5.Content.ToString(); string someTextData = “__________________________________ \n\n” + “Dia: “ + txtDate.Text + “\nValor Glicêmico: “ + txtValor.Text + “\nMomento: “ + txtMomento.Text; writer.WriteLine(someTextData); writer.Close(); MessageBox.Show(“Histórico criado com sucesso!”, “Atenção”, MessageBoxButton.OK); } } } else { return; } } Limpar(); } O botão Atualizar também armazenará dados em um IsolatedStorage, gravando-os no histórico existente. private void btnAdd_Click(object sender, RoutedEventArgs e) { using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { if (myIsolatedStorage.FileExists(filePath)) { using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(filePath, FileMode.Open, FileAccess.Write)) { using (StreamWriter writer = 46 Coletânea de Aplicativos para Windows Phone new StreamWriter(fileStream)) { DateTime date = Convert.ToDateTime(Date.Value); txtDate.Text = date.ToString(); if (rbJejum.IsChecked == true) txtMomento.Text = rbJejum.Content.ToString(); else if (rb1.IsChecked == true) txtMomento.Text = rb1.Content.ToString(); else if (rb2.IsChecked == true) txtMomento.Text = rb2.Content.ToString(); else if (rb3.IsChecked == true) txtMomento.Text = rb3.Content.ToString(); else if (rb4.IsChecked == true) txtMomento.Text = rb4.Content.ToString(); else if (rb5.IsChecked == true) txtMomento.Text = rb5.Content.ToString(); string someTextData = “__________________________________ \n\n” + “Dia: “ + txtDate.Text + “\nValor Glicêmico: “ + txtValor.Text + “\nMomento: “ + txtMomento.Text; writer.BaseStream.Seek(0, SeekOrigin.End); writer.WriteLine(someTextData); writer.Close(); MessageBox.Show(“Dados salvos com sucesso!”, “Atenção”, MessageBoxButton.OK); } } } else { MessageBox.Show(“Não há um histórico a ser editado. Crie um novo histórico.”, “Atenção”, MessageBoxButton.OK); } } Limpar(); } 47 Amanda Mayara de Araujo É criado o método Limpar, usado para criar um novo histórico e para atualizar, esse método deverá limpar o campo do Valor Glicêmico e o item que foi selecionado para o Momento. private void Limpar() { rbJejum.IsChecked = false; rb1.IsChecked = false; rb2.IsChecked = false; rb3.IsChecked = false; rb4.IsChecked = false; rb5.IsChecked = false; txtValor.Text = string.Empty; } No controle do Histórico, há o botão atualizar, que ao ser pressionado, deverá mostrar os novos dados que foram armazenados pelo usuário no IsolatedStorage. private void btnAtualizar_Click(object sender, RoutedEventArgs e) { using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { if (myIsolatedStorage.FileExists(filePath)) { using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(filePath, FileMode.Open, FileAccess.Read)) { using (StreamReader reader = new StreamReader(fileStream)) { txtConteudo.Text = reader.ReadToEnd(); } } } else 48 Coletânea de Aplicativos para Windows Phone { MessageBox.Show(“Histórico não encontrado. Crie um novo histórico.”, “Atenção”, MessageBoxButton.OK); } } } Por fim, temos o botão Apagar elimina todos os dados o histórico. private void btnApagar_Click(object sender, RoutedEventArgs e) { MessageBoxResult resultado = MessageBox. Show(“Deseja realmente apagar o histórico?”, “Atenção”, MessageBoxButton.OKCancel); if (resultado == MessageBoxResult.OK) { txtConteudo.Text = string.Empty; using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { if (myIsolatedStorage.FileExists(filePath)) { myIsolatedStorage.DeleteFile(filePath); MessageBox.Show(“Histórico excuído com sucesso”, “Atenção”, MessageBoxButton.OK); } else { MessageBox.Show(“Não há dados a serem apagados.”, “Atenção”, MessageBoxButton.OK); } } } } 49 Amanda Mayara de Araujo Considerações Finais A aplicação foi desenvolvida especialmente para portadores do Diabete Tipo 1, os quais necessitam estar sempre realizando seu teste glicêmico e possuir de maneira organizada os dados desse teste para um melhor controle de sua glicemia e ter uma saúde equilibrada. Foi utilizado o recurso Pivot, para o usuário ter uma maior facilidade no uso e na visualização dos componentes do aplicativo. A aplicação foi submetida e provada, sendo publicada no Windows Phone MarketPlace, estando disponível para download pelo endereço http://www.windowsphone.com/s?appid=b4525d80-eb184875-a177-adbbf03227ab. Há futuras melhorias previstas para esta aplicação, nas quais serão adicionados mais recursos que poderão ser usados, para proporcionar um maior controle aos seus usuários finais. Referências Bibliográficas Microsoft. Pivot control for Windows Phone. Disponível em <http:// msdn.microsoft.com/en-us/library/windowsphone/develop/ ff941098(v=vs.105).aspx >. Acesso em 3.Ago. 2013. Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us> . Acesso em 3.Ago.2013. 50 Coletânea de Aplicativos para Windows Phone 9. Conversor de Temperatura George Petz Introdução O desenvolvimento deste aplicativo tem como principal proposta ser um conversor de temperatura de fácil uso. Seu funcionamento básico inicia com o usuário informando uma temperatura em uma medida e através de cálculos físicos é retornado a mesma temperatura em outra medida. Projeto A princípio, é exibido ao usuário um menu contento todas as opções possíveis de conversão, assim que usuário selecionar uma delas uma nova tela é exibida, essas novas telas, se comparadas, são parecidas, pois a única informação que muda é o nome da unidade de medida (ºC, ºF e K), porém cada uma possui um cálculo diferente. Figura 9.1 - Estrutura do Projeto 51 George Petz O projeto possui ao todo sete telas sendo elas o Menu e uma tela para cada tipo de conversão. Desenvolvimento Para o desenvolvimento do projeto foi utilizado o ambiente de desenvolvimento Microsoft Visual Studio 2010 Express for Windows Phone, com Silverlight para Windows Phone. A linguagem escolhida foi a C#. Como as diversas telas do aplicativo possuem poucas informações ao usuário, foi escolhido para todas as telas o controle do tipo Windows Phone Application, esse tipo de tela funciona como uma simples página. A primeira interface que o usuário utiliza é o menu, os elementos encontrados nessa tela são organizados por um Grid (espécie de tabela). <!--ContentPanel - place additional content here--> <Grid x:Name=”ContentPanel” Grid.Row=”1” Margin=”12,0,12,0”> <Button Content=”ºC to ºF” FontSize=”32” Height=”100” HorizontalAlignment=”Left” Margin=”0,6,0,0” Name=”btnCtoF” VerticalAlignment=”Top” Width=”456” Click=”btnCtoF_Click” /> <Button Content=”ºC to K” FontSize=”32” Height=”100” HorizontalAlignment=”Left” Margin=”0,93,0,0” Name=”btnCtoK” VerticalAlignment=”Top” Width=”456” Click=”btnCtoK_Click” /> <Button Content=”ºF to ºC” FontSize=”32” Height=”100” HorizontalAlignment=”Left” Margin=”0,179,0,0” Name=”btnFtoC” VerticalAlignment=”Top” Width=”456” Click=”btnFtoC_Click” /> <Button Content=”ºF to K” FontSize=”32” Height=”100” HorizontalAlignment=”Left” Margin=”0,268,0,0” Name=”btnFtoK” VerticalAlignment=”Top” Width=”456” Click=”btnFtoK_Click” /> <Button Content=”K to ºC” FontSize=”32” Height=”100” HorizontalAlignment=”Left” Margin=”0,356,0,0” Name=”btnKtoC” VerticalAlignment=”Top” Width=”456” Click=”btnKtoC_Click” /> <Button Content=”K to ºF” FontSize=”32” Height=”100” HorizontalAlignment=”Left” Margin=”0,445,0,0” Name=”btnKtoF” VerticalAlignment=”Top” Width=”456” Click=”btnKtoF_Click” /> </Grid> 52 Coletânea de Aplicativos para Windows Phone O resultado da implementação deste código é esta interface ilustrada pela Figura 9.2: Figura 9.2 – Menu Por trás desta interface existe um código que basicamente utiliza a classe chamada NavigationService, nessa classe há o método chamado Navigate, que possui a funcionalidade de navegar entre páginas. Este método é chamado quando o evento Click de cada botão é disparado. private void btnCtoF_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/CtoF.xaml”, UriKind.Relative)); } private void btnCtoK_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/CtoK.xaml”, UriKind.Relative)); } private void btnFtoC_Click(object sender, RoutedEventArgs e) { 53 George Petz NavigationService.Navigate(new Uri(“/FtoC.xaml”, UriKind.Relative)); } private void btnFtoK_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/FtoK.xaml”, UriKind.Relative)); } private void btnKtoC_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/KtoC.xaml”, UriKind.Relative)); } private void btnKtoF_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/KtoF.xaml”, UriKind.Relative)); } Quando, por exemplo, o botão “btnCtoF” é clicado a tela “CtoF” é carregada e exibida. As interfaces de conversão de temperatura são parecidas, sendo assim, sua organização é feita através de um Grid. Será mostrada como exemplo a tela de conversão ºC para ºF (CtoF.xaml). <Grid x:Name=”ContentPanel” Grid.Row=”1” Margin=”12,0,12,0”> <TextBlock Height=”44” HorizontalAlignment=”Left” Margin=”12,61,0,0” Name=”textBlock1” Text=”ºC :” FontSize=”30” VerticalAlignment=”Top” Width=”92” /> <TextBox InputScope=”Number” Height=”74” Margin=”110,47,89,0” Name=”txtC” Text=”” VerticalAlignment=”Top” Tap=”txtKm_Tap” TextChanged=”txtC_ TextChanged” LostFocus=”txtC_LostFocus” /> <Button Content=”Converter” Height=”99” HorizontalAlignment=”Left” Margin=”0,212,0,0” 54 Coletânea de Aplicativos para Windows Phone Name=”btnConverter” FontSize=”40” VerticalAlignment=”Top” Width=”450” Click=”btnConverter_Click” /> <TextBlock FontSize=”30” Height=”44” HorizontalAlignment=”Left” Margin=”12,365,0,0” Name=”textBlock2” Text=”ºF :” VerticalAlignment=”Top” Width=”92” /> <TextBox Height=”74” Margin=”0,351,89,0” Name=”txtF” VerticalAlignment=”Top” HorizontalAlignment=”Right” Width=”257” IsEnabled=”False” /> <my:AdControl AdUnitId=”10051848” ApplicationId=”a85b90ad-23d2-494e-9b47-e66e4c9e1dc5” Height=”80” HorizontalAlignment=”Left” Margin=”-12,530,0,0” Name=”adControl1” VerticalAlignment=”Top” Width=”480” /> <CheckBox Content=”Negative” Height=”72” HorizontalAlignment=”Left” Margin=”12,134,0,0” Name=”chkNegative” VerticalAlignment=”Top” Width=”355” /> </Grid> Com esse código mostrado é criada a interface ilustrada pela Figura 9.3. 55 George Petz Figura 9.3 - Tela ºC para ºF Nesta tela o usuário informa o valor da temperatura em ºC e clica no botão “Converter”, com isso, o sistema através de cálculos retorna a mesma temperatura na escala ºF. Existe o checkbox Negativo, para que o usuário check caso a temperatura informada seja negativa. O aplicativo ainda contém a prevenção de erros, como por exemplo, efetuar o cálculo com números com mais de uma vírgula. A implementação deste modelo em formato de código é feita da seguinte forma: float C; float F; private void btnConverter_Click(object sender, RoutedEventArgs e) { if (VereficarPonto(txtC.Text) > 1) 56 Coletânea de Aplicativos para Windows Phone { MessageBox.Show(“It can’t calculate a value with more than one point(.)!”, “Attention!”, MessageBoxButton.OK); } else { if (string.IsNullOrEmpty(txtC.Text)) { txtC.Text = “0”; } if (chkNegative.IsChecked == true) { C = float.Parse(“-” + txtC.Text); } else { C = float.Parse(txtC.Text); } F = (float)(C * 1.8 + 32); txtF.Text = Convert.ToString(F); } } private int VereficarPonto(string texto) { int ponto = 0; for (int i = 0; i < texto.Length; i++) { if (texto.ElementAt(i) == ‘.’) { ponto += 1; } } return ponto; } A diferença de maior importância entre as telas de conversão de temperatura é o calculo realizado. A seguir estão relacionados os cálculos para as respectivas conversões: 57 George Petz • • • • • • ºC para ºF à F = (C * 1.8 + 32); ºC para K à K = (C + 273.15); ºF para ºC à C = ((F - 32) / 1.8); ºF para K à K = ((F + 459.67) / 1.8); K para ºC à C = (K - 273.15); K para ºF à F = (K * 1.8 - 459.67); Considerações Finais A escolha de um conversor de temperatura como ideia para o desenvolvimento do aplicativo foi acatada, pois os conversores existentes no Windows Phone Marketplace não são tão simples sendo, que a simplicidade é algo que deve se salientar em um projeto desta natureza. Após o desenvolvimento a aplicação foi submetida e aprovada para publicação, estando disponível para download no endereço: http://www.windowsphone.com/pt-br/store/app/ temperatures/97e7eec7-5973-49a7-87ca-abc8b6fae169 Referências Bibliográficas Microsoft. How to create your first app for Windows Phone. Disponível em: http://msdn.microsoft.com/en-us/library/windowsphone/develop/ ff402526(v=vs.105).aspx Acessado em 24 de Agosto de 2013. 58 Coletânea de Aplicativos para Windows Phone 10. Cronômetro Rafael de Oliveira Sales Introdução A proposta desta aplicação é desenvolver um cronômetro onde o usuário terá as funções iniciar, parar, reiniciar ou zerar o cronômetro. A aplicação consiste em uma ferramenta onde o usuário pode escolher entre dois idiomas: inglês e português. Também é possível salvar os seus resultados, por exemplo, uma volta em certo circuito ou certa distância em uma lista. Projeto O elemento principal é o relógio que é usado para realizar a função de cronômetro e uma lista para armazenar os resultados cronometrados. Os comandos que o usuário pode aplicar são os seguintes: Figura 10.1 - Botões e suas funcionalidades. 59 Rafael de Oliveira Sales Primeiramente o usuário deve selecionar o idioma desejado. A Figura 10.2 mostra a tela de seleção do idioma. Figura 10.2 - Tela de seleção de linguagem Após ter feito a sua escolha o usuário é levado a uma tela contendo o relógio, com a lista e com os seguintes botões: 60 Coletânea de Aplicativos para Windows Phone Figura 10.3 - Tela em português Figura 10.4 - Tela em inglês Quando o usuário “apertar” o botão Começar ou GO!!!, conforme o idioma selecionado, o relógio começa a contagem, neste momento, o botão Começar/GO!!! será escondido, dando lugar ao botão Recomeçar/Resume e habilitará o botão Parar/Stop. 61 Rafael de Oliveira Sales Figura 10.5 - Tela em português do cronômetro rodando Figura 10.6 - Tela em inglês do cronômetro rodando Na tela acima o usuário vai ter as seguintes ações disponíveis: Salvar o tempo ou Parar o relógio. Se o usuário clicar em Salvar Tempo ou Save time o aplicativo vai gravar, em forma de lista, os tempos no momento do clique, como mostram as Figura 10.7 e 10.8: 62 Coletânea de Aplicativos para Windows Phone Figura 10.8 - Tela salvando o tempo em inglês Figura 10.7 - Tela salvando o tempo em português Já se o usuário clicar no botão no botão Parar ou Stop, o relógio pausa o tempo e aguarda uma decisão do usuário entre duas ações possíveis: Recomeçar/Resume que vai continuar o tempo no momento que o usuário clicou no Parar/Stop ou; o botão Zerar/Clear que vai apagar todos os resultados da lista e também vai zerar o relógio e assim retornando a mesma tela da Figura 10.3 ou da Figura 10.4. 63 Rafael de Oliveira Sales Figura 10.10 - Tela do cronômetro pausado em inglês Figura 10.9 - Tela do cronômetro pausado em português Desenvolvimento A aplicação foi desenvolvida para a plataforma Windows Phone e utilizando, para isso, o Silverlight para Windows Phone. Para o desenvolvimento da interface foi utilizado a tela padrão de aplicação para o Windows Phone, chamada de Phone Aplicattion ou Portrait Page. No trecho de programa a seguir, podemos observar o código XAML dentro da página MainPage.xaml, será utilizado o Grid para organizar os botões na tela. <!--ContentPanel - place additional content here--> <Grid x:Name=”ContentPanel” Grid.Row=”1” Margin=”12,0,12,0” Background=”{x:Null}”> <Button Name=”btnComeçar” Content=”Começar” Height=”72” HorizontalAlignment=”Left” Margin=”15,529,0,0” VerticalAlignment=”Top” Width=”206” Click=”btnComeçar_ Click” Foreground=”GreenYellow” /> <Button Name=”btnParar” Content=”Parar” Height=”72” HorizontalAlignment=”Left” Margin=”243,529,0,0” VerticalAlignment=”Top” Width=”206” Click=”button1_Click” Foreground=”GreenYellow” /> 64 Coletânea de Aplicativos para Windows Phone <Button Name=”btnRec” Content=”Recomeçar” Height=”72” HorizontalAlignment=”Left” Margin=”15,529,0,0” VerticalAlignment=”Top” Width=”206” IsEnabled=”True” Click=”btnRec_Click” Visibility=”Visible” Foreground=”GreenYellow” /> <Button Name=”btnVolta” Content=”Salvar tempo” Height=”72” HorizontalAlignment=”Left” Margin=”15,529,0,0” VerticalAlignment=”Top” Width=”206” Click=”btnVolta_Click” Foreground=”GreenYellow” /> <Button Name=”btnZerar” Content=”Zerar” Height=”72” HorizontalAlignment=”Left” Margin=”243,529,0,0” VerticalAlignment=”Top” Width=”206” Click=”btnZerar_Click” Foreground=”GreenYellow” /> <Button Name=”btnResume” Content=”Resume” Height=”72” HorizontalAlignment=”Left” Margin=”15,529,0,0” VerticalAlignment=”Top” Width=”206” Click=”btnResume_Click” Foreground=”GreenYellow” /> <Button Name=”btnPortu” Content=”Português” Height=”72” HorizontalAlignment=”Left” Margin=”146,246,0,0” VerticalAlignment=”Top” Width=”182” Click=”btnPortu_Click” Foreground=”GreenYellow” /> <Button Name=”btnEng” Content=”English” Height=”72” HorizontalAlignment=”Left” Margin=”146,324,0,0” VerticalAlignment=”Top” Width=”182” Click=”btnEng_Click” Foreground=”GreenYellow” /> <TextBlock Name=”txbMin” Height=”129” HorizontalAlignment=”Left” Margin=”182,25,0,0” Text=”00” VerticalAlignment=”Top” Width=”112” FontSize=”100” TextAlignment=”Center” Foreground=”GreenYellow” /> <TextBlock Name=”txbHrs” Height=”129” HorizontalAlignment=”Left” Margin=”61,25,0,0” Text=”00” VerticalAlignment=”Top” FontSize=”100” TextAlignment=”Center” TextWrapping=”NoWrap” FlowDirection=”RightToLeft” Foreground=”GreenYellow” /> <TextBlock Name=”txbP2” Height=”134” HorizontalAlignment=”Left” Margin=”168,20,0,0” Text=”:” VerticalAlignment=”Top” TextAlignment=”Center” FontSize=”100” Foreground=”GreenYellow” /> <TextBlock Name=”txbP1” Height=”127” HorizontalAlignment=”Left” Margin=”283,19,0,0” Text=”:” VerticalAlignment=”Top” Width=”32” FontSize=”100” TextAlignment=”Center” Foreground=”GreenYellow” /> 65 Rafael de Oliveira Sales <TextBlock Name=”txbVolta” Text=”” Height=”30” HorizontalAlignment=”Left” Margin=”15,172,0,0” VerticalAlignment=”Top” Width=”128” Foreground=”GreenYellow” /> <TextBlock Name=”txbLingua” Text=”Escolha o idioma/ Choose Language” Height=”30” HorizontalAlignment=”Left” Margin=”80,208,0,0” VerticalAlignment=”Top” Foreground=”GreenYellow” /> <TextBlock Name=”txbCro” HorizontalAlignment=”Center” Margin=”300,25,44,0” Text=”00” Width=”112” FontSize=”100” VerticalAlignment=”Top” TextAlignment=”Center” Height=”121” Foreground=”GreenYellow” /> <TextBlock Name=”txbtempo” Text=”” Height=”30” HorizontalAlignment=”Left” Margin=”35,25,0,0” VerticalAlignment=”Top” /> <TextBlock Name=”txbDias” Text=”” Height=”30” HorizontalAlignment=”Right” Margin=”0,23,261,0” VerticalAlignment=”Top” /> <ListBox Name=”ltbVolta” Height=”271” HorizontalAlignment=”Right” Margin=”0,208,5,0” VerticalAlignment=”Top” Width=”437” Background=”Black” ItemsSource=”{Binding}” TabNavigation=”Local” FontSize=”30” UseLayoutRounding=”False” Foreground=”#FFF51F1F”></ListBox> </Grid> </Grid> O resultado final da página principal, que pode ser observado na Figura 10.10, sendo que os outros botões, a lista e as outras mensagens ficam ocultos até que ocorra a escolha do idioma. 66 Coletânea de Aplicativos para Windows Phone Figura 10.11 - Resultado Final Após desenvolver o layout da página principal, vamos ocultar os botões, a lista e os textos e também declarar uma variável do tipo TimeSpan e definir o seu intervalo. btnRec.Visibility = Visibility.Collapsed; btnVolta.Visibility = Visibility.Collapsed; btnZerar.Visibility = Visibility.Collapsed; btnParar.IsEnabled = false; btnRec.IsEnabled = false; btnResume.IsEnabled = false; tempo.Interval = new TimeSpan(0, 0, 0, 1); btnComeçar.Visibility = Visibility.Collapsed; btnParar.Visibility = Visibility.Collapsed; txbCro.Visibility = Visibility.Collapsed; txbHrs.Visibility = Visibility.Collapsed; txbMin.Visibility = Visibility.Collapsed; txbP1.Visibility = Visibility.Collapsed; txbP2.Visibility = Visibility.Collapsed; txbVolta.Visibility = Visibility.Collapsed; ltbVolta.Visibility = Visibility.Collapsed; btnResume.Visibility = Visibility.Collapsed; 67 Rafael de Oliveira Sales Agora vamos definir o código do botão Começar ou Go!!!, conforme podemos observar a seguir: private void btnComeçar_Click(object sender, RoutedEventArgs e) { tempo.Start(); tempo.Tick += delegate { seg++; if (seg < 10) { txbCro.Text = “0” + seg.ToString(); } if (seg >= 10) { txbCro.Text = seg.ToString(); } if (seg == 60) { seg = 0; min++; txbCro.Text = “00”; if (min < 10) { txbMin.Text = “0” + min.ToString(); } if (min > 10) { txbMin.Text = min.ToString(); } if (min == 60) { min = 0; hrs++; txbMin.Text = “00”; if (hrs < 10) { txbHrs.Text = “0” + hrs.ToString(); } 68 Coletânea de Aplicativos para Windows Phone if (hrs >= 10) { txbHrs.Text = hrs.ToString(); } if (hrs == 24) { hrs = 0; dia++; txbHrs.Text = “00”; if(btnEng.IsEnabled==true) { if (dia == 1) { txbDias.Text = dia.ToString() } if (dia > 1) { txbDias.Text = dia.ToString() } } if (btnPortu.IsEnabled==true) { if (dia == 1) { txbDias.Text = dia.ToString() } if (dia > 1) { txbDias.Text = dia.ToString() } } } + “day”; + “days”; + “ dia”; + “ dias”; } } }; btnComeçar.Visibility = Visibility.Collapsed; btnVolta.Visibility = Visibility.Visible; btnParar.IsEnabled = true; } 69 Rafael de Oliveira Sales No cófigo-fonte a seguir temos a programação para o evento click do botão Parar/Stop que faz com que a contagem de tempo pare, além de ocultar e deixar visível alguns botões. private void button1_Click(object sender, RoutedEventArgs e) { tempo.Stop(); btnParar.Visibility = System.Windows.Visibility.Collapsed; if (btnRec.IsEnabled == true) { btnRec.Visibility = System.Windows.Visibility.Visible; } if (btnResume.IsEnabled == true) { btnResume.Visibility = Visibility.Visible; } btnVolta.Visibility = Visibility.Collapsed; btnZerar.Visibility = Visibility.Visible; } O botão Recomeçar/Resume volta a iniciar a variável tempo e deixa visível os botões Parar/Recomeçar e oculta o próprio botão Recomeçar e o botão Zerar/Clear. private void btnRec_Click(object sender, RoutedEventArgs e) { tempo.Start(); btnRec.Visibility = System.Windows.Visibility.Collapsed; btnParar.Visibility = System.Windows.Visibility.Visible; btnZerar.Visibility = Visibility.Collapsed; btnVolta.Visibility = Visibility.Visible; btnParar.IsEnabled = true; btnRec.Content = “Recomeçar”; } 70 Coletânea de Aplicativos para Windows Phone private void btnResume_Click(object sender, RoutedEventArgs e) { tempo.Start(); btnResume.Visibility = System.Windows.Visibility.Collapsed; btnParar.Visibility = System.Windows.Visibility.Visible; btnZerar.Visibility = Visibility.Collapsed; btnVolta.Visibility = Visibility.Visible; btnParar.IsEnabled = true; btnResume.Content = “Resume”; } O botão Salvar Tempo/Save Time adiciona o tempo atual do relógio na lista. private void btnVolta_Click(object sender, RoutedEventArgs e) { i++; ltbVolta.Items.Add(“ “ + i + “: “ + txbHrs.Text + “:” + txbMin.Text + “:” + txbCro.Text); } O botão Zerar/Clear limpa todas as variáveis e a lista. private void btnZerar_Click(object sender, RoutedEventArgs e) { i = 0; seg = 0; min = 0; hrs = 0; ltbVolta.Items.Clear(); txbCro.Text = “00”; txbMin.Text = “00”; 71 Rafael de Oliveira Sales txbHrs.Text = “00”; if (btnRec.IsEnabled == true) { btnRec.Content = “Começar”; } if (btnResume.IsEnabled == true) { btnResume.Content = “Go!!!”; } btnParar.Visibility=Visibility.Visible; btnZerar.Visibility = Visibility.Collapsed; btnParar.IsEnabled = false; } A seguir podemos observar os códigos de atribuição dos textos nos botões e nos campos textos também de acordo com o idioma escolhido. private void btnPortu_Click(object sender, RoutedEventArgs e) { PageTitle.Text = “cronômetro”; btnComeçar.Visibility = Visibility.Visible; btnParar.Visibility = Visibility.Visible; txbCro.Visibility = Visibility.Visible; txbHrs.Visibility = Visibility.Visible; txbMin.Visibility = Visibility.Visible; txbP1.Visibility = Visibility.Visible; txbP2.Visibility = Visibility.Visible; txbVolta.Visibility = Visibility.Visible; ltbVolta.Visibility = Visibility.Visible; btnEng.Visibility = Visibility.Collapsed; btnPortu.Visibility = Visibility.Collapsed; txbLingua.Visibility = Visibility.Collapsed; 72 Coletânea de Aplicativos para Windows Phone btnRec.IsEnabled = true; btnEng.IsEnabled = false; txbVolta.Text = “Tempo Salvo”; } private void btnEng_Click(object sender, RoutedEventArgs e) { PageTitle.Text = “chronometer”; txbCro.Visibility = Visibility.Visible; txbHrs.Visibility = Visibility.Visible; txbMin.Visibility = Visibility.Visible; txbP1.Visibility = Visibility.Visible; txbP2.Visibility = Visibility.Visible; txbVolta.Visibility = Visibility.Visible; ltbVolta.Visibility = Visibility.Visible; btnComeçar.Visibility = Visibility.Visible; btnParar.Visibility = Visibility.Visible; btnEng.Visibility = Visibility.Collapsed; btnPortu.Visibility = Visibility.Collapsed; txbLingua.Visibility = Visibility.Collapsed; btnResume.IsEnabled = true; btnPortu.IsEnabled = false; txbVolta.Text = “Time saved”; btnComeçar.Content = “Go!!!”; btnParar.Content = “Stop”; btnZerar.Content = “Clear”; btnVolta.Content = “Save time”; } Considerações Finais A aplicação consiste em cronometrar o tempo e suas principais características é que qualquer usuário, independentemente do seu nível de conhecimento, vai conseguir usar o aplicativo, pois, o mesmo foi desenvolvido de forma simples e objetiva. 73 Rafael de Oliveira Sales Após o desenvolvimento a aplicação foi submetida e aprovada para publicação no Windows Phone Marketplace, estando disponível para download no endereço http://www.windowsphone.com/pt-br/ store/app/cronometro/fc52ee24-1e9a-4742-a67f-c390fcfb81e2 Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 21 de agosto de 2013. 74 Coletânea de Aplicativos para Windows Phone 11. Desafios de Lógica Profa. Ms. Adaní Cusin Sacilotti Prof. Ms. Carlos Eduardo Schuster Kelly Sabará Introdução A proposta deste aplicativo é o desenvolvimento de um teste de raciocínio e lógica com níveis de dificuldade. O conceito básico consiste em mostrar uma determinada questão e as opções de resposta em relação ao nível de dificuldade selecionado. Após o usuário clicar sobre alguma opção de resposta, ele tem a possibilidade de verificar qual é a resposta correta. O aplicativo indica se a opção selecionada está correta ou não, caso a resposta assinalada esteja incorreta, ele exibe a mensagem de Resposta Incorreta - tente novamente, oferecendo a oportunidade ao usuário de tentar solucionar o problema novamente. Projeto A aplicação consiste em um conjunto de três desafios de lógica para cada nível de dificuldade (fácil, médio, difícil). As questões são exibidas de acordo com o nível de dificuldade selecionado e o usuário pode selecionar qual desafio responder. As opções de respostas, logo abaixo de cada questão, estão no formato de teste. O usuário a qualquer momento poderá escolher o nível de dificuldade e a questão a ser respondida. Quando o usuário selecionar uma opção de resposta correta, o aplicativo exibe a mensagem de Resposta Correta, seguida de uma breve explicação sobre a solução da questão. A aplicação possui uma página inicial, contendo os objetivos do aplicativo, conforme a Figura 11.1. 75 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Figura 11.1 – Tela inicial Cada nível de dificuldade dos Desafios de Lógica será exibido em um PivotItem. Cada PivotItem irá exibir três desafios (questões), conforme ilustrado na Figura 11.2: 76 Coletânea de Aplicativos para Windows Phone Figura 11.2 - Nível de dificuldade fácil Os níveis médio e difícil apresentam o mesmo modelo apresentado no nível fácil (Figura 11.2). São exibidos três desafios (desafio1, desafio2, desafio3). O usuário, ao clicar no desafio escolhido, tem a visão da questão com as opções de resposta no formato teste. Ao clicar na opção desejada, o usuário pode checar se a sua resposta está correta, clicando no botão Verificar Resposta (Figura 11.3). 77 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Figura 11.3 - Nível de dificuldade fácil, primeiro desafio Se a resposta estiver correta, é exibida uma mensagem de Resposta Correta e, uma breve explicação sobre a resolução (Figura 11.4). Se a reposta estiver errada, será exibida uma mensagem alertando o usuário. 78 Coletânea de Aplicativos para Windows Phone Figura 11.4 – Verificar Resposta do primeiro desafio Desenvolvimento A aplicação foi desenvolvida para a plataforma Windows Phone e utilizado, para isso, o Silverlight para Windows Phone. Devido às dimensões reduzidas da tela de um smartphone, em algumas páginas que apresentavam textos longos, foi utilizado um controle de rolagem vertical de tela. No trecho de programa a seguir, podemos observar a implementação VerticalScrollBarVisibility em um ScrollViewer, dentro da página referente a questão de texto longo, onde o elemento utilizado é o StackPanel para organizar as linhas. <StackPanel x:Name=”ContentPanel” Grid.Row=”1” Margin=”12,0,12,0”> <ScrollViewer MaxHeight=”600” VerticalScrollBarVisibility=”Visible”> <StackPanel> 79 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Após desenvolver o layout da página principal, vamos definir a classe que irá definir o nível de dificuldade e a questão escolhida para responder: public partial class niveis: PhoneApplicationPage { public niveis() { InitializeComponent(); } private void StackPanel_Tap(object sender, GestureEventArgs e) { if (sender == f1) NavigationService.Navigate(new Uri(“/desafios/f1.xaml”, UriKind.Relative)); if (sender == f2) NavigationService.Navigate(new Uri(“/desafios/f2.xaml”, UriKind.Relative)); if (sender == f3) NavigationService.Navigate(new Uri(“/desafios/f3.xaml”, UriKind.Relative)); if (sender == m1) NavigationService.Navigate(new Uri(“/desafios/m1.xaml”, UriKind.Relative)); if (sender == m2) NavigationService.Navigate(new Uri(“/desafios/m2.xaml”, UriKind.Relative)); if (sender == m3) NavigationService.Navigate(new Uri(“/desafios/m3.xaml”, UriKind.Relative)); if (sender == d1) NavigationService.Navigate(new Uri(“/desafios/d1.xaml”, UriKind.Relative)); if (sender == d2) NavigationService.Navigate(new Uri(“/desafios/d2.xaml”, UriKind.Relative)); if (sender == d3) NavigationService.Navigate(new Uri(“/desafios/d3.xaml”, UriKind.Relative)); } } Outra classe que foi desenvolvida, de acordo com o desafio escolhido, checa a opção de resposta selecionada e exibe mensagem ao usuário. 80 Coletânea de Aplicativos para Windows Phone public partial class d1 : PhoneApplicationPage { public d1() { InitializeComponent(); } private void btnResposta_Click(object sender, RoutedEventArgs e) { int indice = -1; for (int i = 0; i < stackradios.Children.Count; i++) { RadioButton rb = stackradios.Children.ElementAt(i) as RadioButton; if (rb.IsChecked == true) indice = i; } if (indice == 0) { txtCertoErrado.Text = “Resposta Correta”; txtResp.Text = “A sequência correta é: Rafael, Jorge, Anderson, Cláudio e Humberto”; txtResp1.Text = “”; } else { txtCertoErrado.Text = “Resposta Incorreta”; txtResp.Text = “”; txtResp1.Text = “Tente Novamente”; } } } Na MainPage será carregada a página com os níveis de dificuldade dos desafios de lógica. 81 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará public partial class MainPage : PhoneApplicationPage { // Constructor public MainPage() { InitializeComponent(); } private void bt1_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/niveis.xaml”, UriKind.Relative)); } } Considerações Finais A aplicação consiste em uma versão bem simples de testes de lógica encontrados em livros e revistas de lógica, olimpíadas de matemática e concursos públicos. Apresenta como principais características, a possibilidade de customização de vários temas e questões como também a seleção de diferentes níveis de dificuldades, que possam ser implementados. Após o desenvolvimento a aplicação foi submetida e aprovada para publicação no Windows Phone Marketplace, estando disponível para download no endereço http://www.windowsphone.com/pt-br/ store/app/desafios/1f6d3254-b2bb-40b9-957e-f175c7cad167 . Melhorias futuras na aplicação consistem em realizar a randomização de questões, temas e níveis de dificuldade. Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 15 jun. 2013. 82 Coletânea de Aplicativos para Windows Phone 12. Diabetes Calculator Profa. Ms. Adaní Cusin Sacilotti Prof. Ms. Carlos Eduardo Schuster Kelly Sabará Introdução O objetivo deste aplicativo é auxiliar as pessoas com diabetes, em especial a Diabetes Mellitus Tipo 1 (DM1) - insulino dependentes, e que seguem a dieta baseada na contagem de carboidratos (CHO) ingeridos. Basicamente o aplicativo funciona como uma calculadora especificamente projetada para calcular a quantidade de unidades de insulina que deve ser aplicada de acordo com a quantidade de CHO ingerida pela pessoa com diabetes. Resumidamente, o dia-a-dia de um diabético (DM1) que utiliza a técnica de contagem de carboidratos é, antes de cada refeição do dia, 1) realizar a medição de sua glicemia de jejum por meio de dispositivo próprio; 2) alimentar-se, tomando o cuidado de verificar a quantidade de carboidratos de cada alimento ou bebida; 3) transformar essa quantidade de carboidratos em valor glicêmico, pois estes se transformarão em glicose no corpo; 4) somar com a glicemia medida antes dessa refeição; 5) subtrair este valor da glicemia final desejada e 6) converter este resultado em unidades de insulina a ser aplicada em seguida. Lembramos que esta é uma das técnicas comuns, existem outras com maior ou menor variação. Projeto O aplicativo pode ser dividido em 5 módulos principais: Figura 12.1 – Módulos do Aplicativo Por se tratar de um aplicativo que lida com a saúde das pessoas a primeira preocupação é alertar o usuário a respeito de seu uso em 83 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará relação às indicações médicas, portanto, a primeira vez que o aplicativo é iniciado, a seguinte mensagem aparece: “O uso deste aplicativo não substitui em hipótese alguma as orientações de seu médico, trata-se apenas de uma ferramenta que automatiza o processo matemático que envolve a técnica de contagem de carboidratos. Consulte seu médico antes de utilizar este aplicativo”, juntamente com sua tradução para o inglês: “Take careful: not in any way replace your doctor orientation, it’s just a system that automates the mathematical process from Carb Counting technique. Consult your doctor before using this aplication.”. O Módulo Configuração consiste no cadastro e armazenamento de 4 variáveis: 1) a Razão Insulina UI / CHO que significa quantas gramas de carboidrato são reduzidas aplicandose uma unidade de insulina rápida. 2) o Fator de Sensibilidade nos informa quanto uma unidade de insulina rápida ou ultrarrápida reduz a glicemia. 3) a Meta Glicêmica Mínima indica o mínimo valor de glicemia aceitável e 4) a Meta Glicêmica Ideal corresponde ao valor máximo desejável. Lembrando que tais variáveis devem provir de orientação médica. A Figura 12.2 resume as 4 variáveis com alguns valores comumente utilizados. Figura 12.2 – Variáveis necessárias para o cálculo O Módulo Calculadora permite que o usuário insira até 8 valores diferentes de quantidades em gramas de carboidratos ingeridos. Supostamente o usuário poderia então lançar os valores de até 8 alimentos diferentes, como por exemplo, a quantidade de CHO de um suco de laranja, de duas colheres de arroz, uma colher de farofa temperada e uma colher de feijão, resultando 4 valores diferentes. O sistema fará a somatória e a exibirá. 84 Coletânea de Aplicativos para Windows Phone Além da possibilidade de inserção dos carboidratos ingeridos o usuário poderá inserir o valor atual de sua glicemia em mg/dl. O aplicativo, de posse do valor da glicemia e quantidades de CHO inseridos e, de acordo com os parâmetros registrados no módulo “Configuração”, poderá calcular a quantidade de insulina a ser aplicada. Como normalmente as unidades de insulinas são números inteiros, o aplicativo deverá exibir o valor inteiro mais próximo acima e abaixo do resultado e respectivo valor glicêmico final. Figura 12.3 ilustra o cálculo. Figura 12.3 – Cálculos Realizados O Módulo Regra de 3 é útil quando consumimos alimentos ou bebidas cuja informação nutricional não informa o valor total de carboidratos do produto ou quando é consumido apenas uma parte do mesmo. Para exemplificar, vamos supor que um “pacote de salgadinho” de 55g informa que a cada 25g consumidas contém 14g de carboidrato, logo um cálculo simples de regra de 3 deve ser realizado para se calcular o total de carboidratos do pacote todo, supondo o consumo total do mesmo. Este valor calculado pode ser transportado para um dos campos de consumo de carboidrato do módulo calculadora. 85 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará O Módulo Ajuda tem a intenção apenas de esclarecer e exemplificar os módulos citados anteriormente para que não fiquem dúvidas em como proceder em relação à entrada dos dados e forma de cálculo. O Módulo Idioma permite alternar todo o aplicativo para o idioma Inglês ou Português. Optou-se pela interface também em inglês para que o aplicativo possa abranger um público maior. Desenvolvimento Este aplicativo foi desenvolvido especificamente para o dispositivo Windows Phone OS 7.1 utilizando-se a IDE Microsoft Visual Studio 2010 Express juntamente com Microsoft Expression Blend 4. Um dos desafios deste aplicativo seria em como proceder quanto à tradução para o idioma inglês. Como o sistema não é considerado muito grande e complexo optou-se por, após finalizado a versão para publicação, criar uma cópia exata do sistema em uma pasta específica denominada “english” e em cada interface trocar as palavras do português para o inglês, incluindo o módulo de ajuda. Figura 12.4 – Pasta ‘english’ contendo o sistema traduzido para o idioma inglês 86 Coletânea de Aplicativos para Windows Phone A primeira vez que o aplicativo é executado o usuário escolhe o idioma, imediatamente uma variável é salva como IsolatedStorage, assim, sempre que executar o aplicativo o idioma selecionado será o padrão. Em seguida é realizado o redirecionamento para a página principal do idioma selecionado. private void ptVersion(object sender, System.Windows.Input.GestureEventArgs e) { saveText(“idioma”, “pt”); NavigationService.Navigate(new Uri(string.Format(“/MainPage1.xaml”), UriKind.Relative)); } private void enVersion(object sender, System.Windows.Input.GestureEventArgs e) { saveText(“idioma”, “en”); NavigationService.Navigate(new Uri(string.Format(“/english/MainPage_en.xaml”), UriKind.Relative)); } Figura 12.5 – Tela inicial de escolha do idioma Uma vez selecionado o idioma nesta tela inicial, ela não mais abrirá. O aplicativo redireciona para a tela inicial de um dos dois idiomas. 87 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Para tal verificação inicial no code-behind de App.xaml acrescentou-se a verificação do idioma escolhido. void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e) { if (e.Uri.ToString().Contains(“/MainPage.xaml”) != true) return; e.Cancel = true; RootFrame.Dispatcher.BeginInvoke(delegate { string text; loadText(“idioma”, out text); if (text == “pt”) RootFrame.Navigate(new Uri(“/MainPage1.xaml”, UriKind.Relative)); if (text == “en”) RootFrame.Navigate(new Uri(“/english/MainPage_en.xaml”, UriKind.Relative)); if (text != “pt” && text != “en”) RootFrame. Navigate(new Uri(“/entrada.xaml”, UriKind.Relative)); }); } No Módulo Calculadora, todos os campos são possuem o seu InputScope setado para “Number”. Ainda assim foi necessário uma rotina para impedir o uso do caracter “.” (ponto) para inserção de casas decimais. Para tal criou-se um método para cada campo que faz a verificação dos caracteres pressionados e se for um “ponto” o mesmo será trocado por um texto de tamanho zero. 88 Coletânea de Aplicativos para Windows Phone private void KeyUp(object sender, System.Windows.Input. KeyEventArgs e) { TextBox txt = (TextBox)sender; if (txt.Text.Contains(‘.’)) { txt.Text = txt.Text.Replace(“.”, “”); txt.SelectionStart = txt.Text.Length; } } Figura 12.6 – Tela da calculadora Considerações Finais Normalmente no cotidiano de um diabético infantil, principalmente, os cuidados em relação à dieta baseada na contagem de carboidratos ocorrem dentro de sua casa, com a supervisão de seus pais que utilizam, normalmente, uma calculadora para auxiliar nos cálculos. Quando não se está em casa e, principalmente quando não há a calculadora disponível, o uso do aplicativo se torna muito prático. Figura 12.7 – Ícone e Avaliação do Aplicativo 89 Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Este aplicativo está disponível no Windows Phone Marketplace, pelo endereço http://www.windowsphone.com/pt-br/store/app/ diabetes-calculator/5c4f803a-8965-42ad-a86d-99968f8a1e92. Pode-se também digitar a palavra “diabetes” no campo de busca por aplicativos do site para retornar o aplicativo. Até o momento este sistema tem aparecido como um dos primeiros em relação à relevância de procura. Isto demonstra a necessidade e até mesmo a oportunidade de se publicar mais apps em relação ao assunto. Futuras implementações podem ser realizadas tais como o registro diário das medições e consumo de carboidratos. Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 10.mar.2013. 90 Coletânea de Aplicativos para Windows Phone 13. FuelManager João Henrique Felício Barreto Introdução A proposta deste aplicativo é o desenvolvimento de um aplicativo para o gerenciamento de combustível. O conceito básico consiste em selecionar a opção desejada: verificar combustível, verificar consumo ou fazer histórico e, posteriormente, fazer os cálculos ou as anotações segundo o parecer do usuário. Projeto O projeto será baseado em quatro “paginas”, sendo elas o “Menu” que será a pagina principal; “Verificar”, onde ocorrera o calculo referente ao melhor combustível a ser abastecido, considerando seu custo/beneficio; “Consumo”, onde será feito o calculo do consumo do carro a partir da quantidade de litros pela distancia percorrida; “Dados”, onde será dada ao usuário a opção de fazer um histórico dos dados dos abastecimentos realizados. Portanto, estará dividida em duas por uma pagina “Pivot”. Sendo assim, uma será destinada para o preenchimento dos dados e a outra para o salvamento dos mesmos, assim como na Figura 13.1. 91 João Henrique Felício Barreto Figura 13.1 - Estrutura do Aplicativo Desenvolvimento A aplicação foi desenvolvida para a plataforma Windows Phone e utilizando, para isso, o Silverlight para Windows Phone. Na pagina principal, foi utilizado o “Windows Phone Application” para criar o menu. No código a seguir, são definidas as configurações dos elementos contidos no “TitlePanel”, ou seja, o topo da página. <!--TitlePanel contains the name of the application and page title--> <StackPanel x:Name=”TitlePanel” Grid.Row=”0” Margin=”12,17,0,28” Background=”{x:Null}”> <TextBlock x:Name=”ApplicationTitle” Text=”Fuel Manager” Style=”{StaticResource PhoneTextNormalStyle}”/> <TextBlock x:Name=”PageTitle” Text=”Menu” Margin=”9,-7,0,0” Style=”{StaticResource PhoneTextTitle1Style}” Foreground=”White” /> </StackPanel> 92 Coletânea de Aplicativos para Windows Phone Aqui, se inicia a parte de organização da página. Nela existem dois “StackPanel” onde podemos formatar melhor a pagina e um “Grid. Background” onde é definida a imagem de fundo do aplicativo. <!--ContentPanel - place additional content here--> <StackPanel x:Name=”ContentPanel” Grid.Row=”1” Margin=”12,0,12,0”> <StackPanel.Background> <ImageBrush/> </StackPanel.Background> </StackPanel> <StackPanel Orientation=”Vertical” VerticalAlignment=”Center” Margin=”12,50,12,297” Grid. Row=”1”> <Button Name=”btn1” Content=”Vantagem” Width=”250” Click=”btn1_Click” /> <Button Name=”btn4” Content=”Consumo” Width=”250” Click=”btn4_Click”/> <Button Name=”btn3” Content=”Dados” Width=”250” Click=”btn3_Click” /> </StackPanel> <Grid.Background> <ImageBrush ImageSource=”/App1;component/road.jpg” Stretch=”UniformToFill” /> </Grid.Background> O resultado final da página principal, que pode ser observado na Figura 13.2, irá consistir em um Windows Form Application contendo três botões. 93 João Henrique Felício Barreto Figura 13.2 - Resultado Final Para cada botão, é necessário fazer uma referencia para a página desejada dentro do evento “Click” do respectivo botão. Isso pode ser feito através do método Navigate disponível na classe NavigationService. Para chegar ao evento do botão pode ser usado a tecla de atalho F7 ou clique com o botão direito do mouse em Click=”btn1_Click” e selecione “Navigate to event handler”. private void btn1_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/Verificar.xaml”, UriKind.Relative)); } Após isso, será desenvolvida a página “Verificar”, onde será realizado o cálculo do combustível mais vantajoso. Para isso, criase outro Windows Form Application, onde mudaremos apenas o ContentPanel. As configurações do TitlePanel são as mesmas. Nesta página serão criados alguns “TextBlock”, para identificação, organização e resposta, e dois “TextBox” para a entrada 94 Coletânea de Aplicativos para Windows Phone de dados. Alem disso, serão criados ainda dois botões, um para apagar os valores e outro para realizar o cálculo. <StackPanel x:Name=”ContentPanel” Grid.Row=”1” Margin=”12,0,12,0”> <!—TextBlock e TextBox 1 --> <TextBlock Text=”Informe o preço do álcool:” HorizontalAlignment=”Center”/> <StackPanel Orientation=”Horizontal” HorizontalAlignment=”Center”> <TextBlock Text=”R$” FontSize=”40”/> <TextBox Name=”Valor1” Width=”200” InputScope=”Number” TextChanged=”Valor2_TextChanged”/> </StackPanel> <!—TextBlock e TextBox 2 --> <TextBlock Text=”Informe o preço da gasolina:” HorizontalAlignment=”Center”/> <StackPanel Orientation=”Horizontal” HorizontalAlignment=”Center”> <TextBlock Text=”R$” FontSize=”40”/> <TextBox Name=”Valor2” Width=”200” InputScope=”Number” TextChanged=”Valor2_TextChanged”/> </StackPanel> <!—Botoes--> <StackPanel Orientation=”Horizontal” HorizontalAlignment=”Center”> <Button Name=”btn3” Width=”200” Content=”Novo” Click=”btn3_Click” IsEnabled=”False”/> <Button Name=”btn2” Width=”200” Content=”Resultado” Click=”btn2_Click” IsEnabled=”False”/> </StackPanel> <!—Apresentacao do resultado --> <TextBlock Name=”txtresultado” Text = “É melhor colocar Álcool” HorizontalAlignment=”Center” Foreground=”#FF1AEA20” FontSize=”32” OpacityMask=”#FFF2C0C0” Margin=”0,60,0,0” Visibility=”Collapsed”/> <TextBlock Name=”txtresultado2” HorizontalAlignment=”Center” Foreground=”#FFF5E516” FontSize=”32” OpacityMask=”#FFDBCDCD” Margin=”0,60,0,0” 95 João Henrique Felício Barreto Text = “É melhor colocar Gasolina” Visibility=”Collapsed”/> </StackPanel> <Grid.Background> <ImageBrush ImageSource=”/App1;component/Images/road.png” Stretch=”UniformToFill” /> </Grid.Background> Agora, será desenvolvida a ação dos botões, “Novo” e “Resultado”, dentro do evento “Click” dos respectivos botões. O cálculo é feito dividindo o preço do álcool pelo da gasolina. Se o resultado for igual ou maior que 0,70 o álcool é mais vantajoso, senão é a gasolina. private void { double X = double Y = double Z = btn2_Click(object sender, RoutedEventArgs e) Convert.ToDouble(Valor1.Text); Convert.ToDouble(Valor2.Text); X / Y; if (Z <= 0.7) { txtresultado.Visibility = Visibility.Visible; txtresultado2.Visibility = Visibility.Collapsed; } else { txtresultado2.Visibility = Visibility.Visible; txtresultado.Visibility = Visibility.Collapsed; } btn3.IsEnabled = Valor1.Text.Length > 0 && Valor2.Text.Length > 0; } No código acima, primeiramente, é preciso converter os valores informados para “double]” e depois realizar o cálculo. A apresentação dos resultados é feita através dos “txtresultado” e “txtresultado2” que são os nomes dos “TextBlock” definidos na pagina Verificar.xaml. A propriedade “Visibility” controla qual estará visível dependendo do resultado da condição. Na Figura 13.3, o resultado após o termino do desenvolvimento desta função do aplicativo. 96 Coletânea de Aplicativos para Windows Phone Figura 13.3 - Resultado da pagina Verificar O próximo passo é criar a função de verificação do consumo do carro. Então, cria-se outra página Windows Form Application e adicionamos os Texblock e Textbox para o design da interface e entrada de dados e adicionamos também os botões para o cálculo do resultado e limpar os textos, assim como anteriormente. <TextBlock Margin=”0,50,0,0” Text=”Informe a quantidade de litros:” HorizontalAlignment=”Center”/> <TextBox Name=”txtLitros” InputScope=”Number” Width=”200” TextChanged=”txtQuant_TextChanged” /> <TextBlock Text=”Quantidade de Km rodados:” HorizontalAlignment=”Center”/> <TextBox Name=”txtQuant” InputScope=”Number” Width=”200” TextChanged=”txtQuant_TextChanged”/> <StackPanel Orientation=”Horizontal” HorizontalAlignment=”Center”> <Button Name=”btnVerificar” Content=”Verificar” Click=”btnVerificar_Click” Width=”200” IsEnabled=”False”/> <Button Name=”btnNovo” Content=”Novo” Click=”btnNovo_ 97 João Henrique Felício Barreto Click” Width=”200” IsEnabled=”False” /> </StackPanel> <TextBlock Name=”txtresultado” FontSize=”32” Foreground=”#FFE6F803” /> </StackPanel> <Grid.Background> <ImageBrush ImageSource=”/App1;component/road.jpg” Stretch=”UniformToFill” /> </Grid.Background> Agora, novamente, devemos criar a ação dos botões. Para limpar, deve-se simplesmente preencher os campos com uma string “vazia”. private void btnNovo_Click(object sender, RoutedEventArgs e) { txtLitros.Text = “”; txtQuant.Text = “”; txtresultado.Text = “”; btnNovo.IsEnabled = false; } Para o botão de resultado, precisamos apenas dividir a quantidade de quilometros percorridos pela quantidade de litros abastecidos. private void btnVerificar_Click(object sender, RoutedEventArgs e) { double Litros = Convert.ToDouble(txtLitros.Text); double km = Convert.ToDouble(txtQuant.Text); double consumo = km / Litros; double numeroRedondo = Math.Round(consumo,2); txtresultado.Text = “Media de consumo: “ + numeroRedondo + “Km/L”; btnNovo.IsEnabled = txtLitros.Text.Length > 0 && txtQuant.Text.Length > 0; } 98 Coletânea de Aplicativos para Windows Phone No código acima, depois de converter as variáveis, é necessário limitar as casas decimais através do método Round da classe Math. Depois de apresentar o resultado e se os TextBox estiverem vazios, o botão irá ficar desabilitado através do IsEnabled. Na Figura 13.4, temos o resultado da página. Figura 13.4 - Resultado da pagina Consumo Por ultimo, será desenvolvida a página Dados. Nesta página, será utilizado outro recurso chamado Pivot. O Pivot é um controle de navegação que existe no Windows Phone que facilita o gerenciamento e exibição de dados para os usuários utilizando o toque e arraste para esquerda ou direita. O item 1 do Pivot será destinado ao preenchimento das informações. 99 João Henrique Felício Barreto <!--Pivot item one--> <controls:PivotItem Header=”Dados”> <StackPanel> <TextBlock Text=”Data do Abastecimento” HorizontalAlignment=”Center”/> <toolkit:DatePicker x:Name=”datePicker” Value=””/> <TextBlock Text=”Horário” HorizontalAlignment=”Center”/> <toolkit:TimePicker x:Name=”timePicker” Value=””/> <TextBlock Name=”txtdatepicker”/> <StackPanel Orientation=”Horizontal”> <StackPanel HorizontalAlignment=”Center”> <TextBlock Text=”Litros” Margin=”75,0,0,0”/> <TextBox Name=”txtLitros” Width=”200” InputScope=”Number” /> </StackPanel> <StackPanel Margin=”20,0,0,0”> <TextBlock Text=”Valor Gasto” Margin=”90,0,0,0”/> <StackPanel Orientation=”Horizontal”> <TextBlock Text=”R$” Width=”32” FontSize=”30” Height=”40” /> <TextBox Name=”txtValorGasto” InputScope=”Number” Width =”200” Margin=”5,0,0,0”/> </StackPanel> </StackPanel> </StackPanel> <TextBlock Text=”KM na hora do abastecimento:” HorizontalAlignment=”Center”/> <TextBox Name=”txtKMabastecimento” Width=”200” InputScope=”Number”/> <Button Name=”btnSalvar” Content=”Criar novo Historico” Width=”400” Click=”btnSalvar_Click”/> <StackPanel Orientation=”Horizontal” HorizontalAlignment=”Center”> <Button Name=”btnEditar” Width=”200” Content=”Adicionar” Click=”Editar_Click”/> <Button Content=”Limpar” Height=”72” HorizontalAlignment=”Center” Name=”Apagar” VerticalAlignment=”Top” Width=”200” Click=”Apagar_Click”/> </StackPanel> </StackPanel> </controls:PivotItem> 100 Coletânea de Aplicativos para Windows Phone Nesta página foi adicionado um toolkit para a data e horário. Para ele funcionar é necessário primeiramente, baixar. Depois adicionar a referencia para o projeto e adicionar ainda o código a seguir no topo da pagina. xmlns:toolkit=”clr-namespace:Microsoft.Phone. Controls;assembly=Microsoft.Phone.Controls.Toolkit” Agora, será feito a gravação e criação do histórico. O armazenamento acontecerá no botão Criar novo histórico e para isto será usado o IsolatedStorage. private void btnSalvar_Click(object sender, RoutedEventArgs e) { MessageBoxResult resultado = MessageBox.Show(“Deseja criar novo historico?”, “Mensagem”, MessageBoxButton.OKCancel); if (resultado == MessageBoxResult.Cancel) { return; } else { StreamResourceInfo streamResourceInfo = Application.GetResourceStream(new Uri(filePath, UriKind.Relative)); using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { string directoryName = System.IO.Path.GetDirectoryName(filePath); if (!string.IsNullOrEmpty(directoryName) && !myIsolatedStorage.DirectoryExists( directoryName)) { myIsolatedStorage.CreateDirectory( directoryName); } 101 João Henrique Felício Barreto using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(filePath, System.IO.FileMode.Create, System.IO.FileAccess.Write)) { using (StreamWriter writer = new StreamWriter(fileStream)) { DateTime dt = Convert.ToDateTime(datePicker.Value); txtdatepicker.Text = dt.ToString(); string someTextData = “Data e Horario : “ + txtdatepicker.Text + “ Litros:” + txtLitros.Text + “L” + “ \n KM: “ + txtKMabastecimento.Text + “ Valor Gasto: R$ “ + txtValorGasto.Text; writer.WriteLine(someTextData); MessageBox.Show(“Novo historico criado com sucesso”, “Atenção”, MessageBoxButton.OK); } } } } } O histórico será feito na pagina Pivot 2. Para isso, antes é necessário usar um método para verificar se um histórico já foi criado. Isto acontecerá ao clicar no botão Atualizar. private void Ler_Click(object sender, RoutedEventArgs e) { txtLeituraArquivo.Text = string.Empty; using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { if (myIsolatedStorage.FileExists(filePath)) { using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(filePath, FileMode.Open, 102 Coletânea de Aplicativos para Windows Phone FileAccess.Read)) { using (StreamReader reader = new StreamReader(fileStream)) { txtLeituraArquivo.Text = reader.ReadToEnd(); } } } else { MessageBox.Show(“Arquivo não encontrado”, “Atenção”, MessageBoxButton.OK); } } } Para o botão Apagar, basta apenas preencher as variáveis como vazio. Assim como já realizado anteriormente. Por ultimo, mostrar os dados na pagina ao clicar no botão Adicionar. private void Editar_Click(object sender, RoutedEventArgs e) { txtLeituraArquivo.Text = string.Empty; using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { if (myIsolatedStorage.FileExists(filePath)) { using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(filePath, FileMode.Open, FileAccess.Write)) { using (StreamWriter writer = new StreamWriter(fileStream)) { DateTime dt = Convert.ToDateTime(datePicker.Value); txtdatepicker.Text = dt.ToString(); 103 João Henrique Felício Barreto string someTextData = “Data e Horario : “ + txtdatepicker.Text + “ Litros:” + txtLitros.Text + “L” + “ \n KM: “ + txtKMabastecimento.Text + “ Valor Gasto: R$ “ + txtValorGasto.Text; writer.BaseStream.Seek(0, SeekOrigin.End); writer.WriteLine(someTextData); writer.Close(); MessageBox.Show(“Arquivo salvo com sucesso”, “Atenção”, MessageBoxButton.OK); } } } else { MessageBox.Show(“Não existe arquivo para ser editado”, “Atenção”, MessageBoxButton.OK); } } } Na Figura 13.5 temos o resultado da página ao final do processo de desenvolvimento. 104 Coletânea de Aplicativos para Windows Phone Figura 13.5 - Resultado da página Dados Considerações Finais A aplicação consiste em um gerenciador de combustível e, tem como principal característica, a possibilidade de criação de um histórico detalhado do abastecimento. No entanto, apresenta funções bastante úteis no dia-a-dia do usuário. O uso dos recursos Windows Form Application e principalmente o Pivot Control apresentam novas perspectivas em relação ao layout de aplicações, pois, apresentam soluções bastante eficazes no design de interfaces. Após o desenvolvimento a aplicação foi submetida e aprovada para publicação no Windows Phone Marketplace, estando disponível para download no endereço http://www.windowsphone.com/pt-br/ store/app/fuelmanager/45891be0-2555-4c3b-bf91-45e5689eb3ec Esta é a segunda versão do aplicativo e está sujeita a melhorias futuras, como correção de texto e melhorias no seu design. 105 João Henrique Felício Barreto Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 20.jun.2013. 106 Coletânea de Aplicativos para Windows Phone 14. Jogo da Memória Prof. Ms. Benedito Cristiano Aparecido Petroni Prof. Ms. Cláudio Luís Vieira Oliveira Introdução A proposta deste aplicativo é o desenvolvimento de um jogo de memória com elementos associativos. O conceito básico consiste em mostrar um determinado número de peças em relação ao nível de dificuldade selecionado e, após escondê-las, o usuário deverá clicar sobre as peças desejadas. Ao formar o par correto as peças ficarão visíveis, caso contrário, o par é escondido novamente. Projeto O elemento principal da aplicação consiste em um conjunto de peças, cada uma contendo um valor distinto, conforme o tema que foi escolhido pelo usuário. Estas peças terão o seu conteúdo exibido por padrão, de modo a permitir que o usuário consiga memoriza-las. O usuário a qualquer momento poderá iniciar um novo jogo, quando isso ocorrer o progresso atual do jogo será descartado, voltando ao início. Os demais requisitos da aplicação estão relacionados ao número de peças, o qual irá determinar o nível de dificuldade, podendo ser 8, 16 ou 24 peças. Também deve ser permitido ao usuário habilitar ou não os efeitos sonoros e também realizar a troca do tema. A aplicação também possui, conforme ilustrado na Figura 14.1, uma página para ajuste das configurações do jogo (Setup) e também outra página que exibe informações sobre o jogo e os autores (About). 107 Benedito Petroni e Cláudio Oliveira Figura 14.1 - O jogo O nível de dificuldade do jogo também é determinado pela quantidade de PanoramaItem que serão exibidos, ou seja, no nível fácil serão mostradas 8 peças em apenas um PanoramaItem, conforme ilustrado na Figura 14.2: Figura 14.2 - Nível de dificuldade fácil No nível médio temos dois PanoramaItem sendo exibidos, conforme pode ser observado na Figura 14.3. No nível difícil os três 108 Coletânea de Aplicativos para Windows Phone PanoramaItem são exibidos. Figura 14.3 - Nível de dificuldade médio O diagrama de classes, mostrado na Figura 14.4, mostra como as páginas MainPage, About e Setup encontram-se implementadas. Além da classe Peca que tem a função de realizar a associação entre duas peças na área do jogo, a classe Tema carrega as informações das peças com base no tema que foi selecionado pelo usuário. O armazenamento das peças correspondentes a cada tema é realizado localmente. Figura 14.4 - Diagrama de Classes 109 Benedito Petroni e Cláudio Oliveira Cada par é armazenado considerando o valor de cada peça e as respectivas cores, sendo todos os elementos separados por ponto-evírgula, por exemplo: Water;#00FF00;Glass;#00FF00; A pontuação, na aplicação, é calculada com base no critério de que cada acerto irá adicionar 10 pontos e a cada erro subtrai 10 pontos. O jogo tem início com o usuário começando com zero ponto. Desenvolvimento A aplicação foi desenvolvida para a plataforma Windows Phone e utilizando, para isso, o Silverlight para Windows Phone. Devido às dimensões reduzidas da tela de um smartphone, na página principal, foi utilizado um controle do tipo Panorama de forma a conseguirmos maximizar a área da aplicação permitindo, desta forma, realizar a disposição das peças do jogo de modo a não ficarmos limitados exclusivamente à área física da tela. No trecho de programa a seguir, podemos observar a implementação de um PanoramaItem dentro da página MainPage.xaml, dentro desta elemento foi utilizado o StackPanel para organizar os botões em linhas e outro StackPanel com a propriedade Orientation igual a Horizontal para as colunas. <controls:PanoramaItem Header=”first page”> <!--Double line list with text wrapping--> <StackPanel> <StackPanel Orientation=”Horizontal”> <Button Name=”btnPeca00” Content=”1” Width=”215” Height=”85” Background=”Red” BorderThickness=”0” Click=”Jogar_Click” /> <Button Name=”btnPeca01” Content=”2” Width=”215” Background=”Red” BorderThickness=”0” Click=”Jogar_Click” /> </StackPanel> <StackPanel Orientation=”Horizontal”> <Button Name=”btnPeca02” Content=”3” Width=”215” Height=”85” Background=”Red” BorderThickness=”0” Click=”Jogar_Click” /> <Button Name=”btnPeca03” Content=”4” Width=”215” 110 Coletânea de Aplicativos para Windows Phone Background=”Red” BorderThickness=”0” Click=”Jogar_Click” /> </StackPanel> <!-- Demais elementos a serem implementados--> </StackPanel> </controls:PanoramaItem> O resultado final da página principal, que pode ser observado na Figura 14.5 consiste em três PanoramaItem contendo, cada um, 8 botões. A primeiro PanoramaItem possui também os botões New, Start, Setup e About além de um espaço reservado para publicidade no rodapé. Figura 14.5 - Resultado final Uma nova página da aplicação pode ser aberta através do método Navigate disponível na classe NavigationService. A seguir podemos observar seu uso no desenvolvimento do evento click do botão About: private void btnAbout_Click(object sender, RoutedEventArgs e) { NavigationService.Navigate(new Uri(“/About.xaml”, UriKind.Relative)); } 111 Benedito Petroni e Cláudio Oliveira Após desenvolver o layout da página principal, vamos definir a classe Peca que define o conteúdo dos pares, a respectiva posição na área do jogo e também se o usuário já descobriu o local do par: public class Peca { public int Posicao1 { set; get; } public string Conteudo1 { set; get; } public int Posicao2 { set; get; } public string Conteudo2 { set; get; } public bool Acerto { set; get; } } A outra classe desenvolvida obtém as peças associadas a determinado tema. O método criar armazena em um IsolatedStorage um conjunto de dados pré-definidos exemplificando um tema. public class Tema { private const string fileName = “ThemeData.txt”; private const string folderName = “MemoryGame”; private string filePath = System.IO.Path.Combine(folderName, fileName); public void Criar() { StreamResourceInfo streamResourceInfo = Application.GetResourceStream(new Uri(filePath, UriKind.Relative)); using (var myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { string directoryName = System.IO.Path.GetDirectoryName(filePath); if (!string.IsNullOrEmpty(directoryName) && !myIsolatedStorage.DirectoryExists( directoryName)) { myIsolatedStorage.CreateDirectory( 112 Coletânea de Aplicativos para Windows Phone directoryName); } using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(filePath, FileMode.Create, FileAccess.Write)) { using (StreamWriter writer = new StreamWriter(fileStream)) { string someTextData = “Water;#00FF00;Glass;#00FF00;” + “Penguin;#00FF00;Antarctica;#00FF00;” + “Cat;#00FF00;Dog;#00FF00;” + “Feather;#00FF00;Bird;#00FF00;” + “Student;#00FF00;Teacher;#00FF00;” + “Mathematics ;#00FF00;Science;#00FF00;” + “Relativity;#00FF00;Einstein;#00FF00;” + “Catholic;#00FF00;Francisco;#00FF00”; writer.WriteLine(someTextData); } } } } public string Ler() { string conteudo = string.Empty; using (IsolatedStorageFile myIsolatedStorage = IsolatedStorageFile.GetUserStoreForApplication()) { if (myIsolatedStorage.FileExists(filePath)) { using (IsolatedStorageFileStream fileStream = myIsolatedStorage.OpenFile(filePath, FileMode.Open, FileAccess.Read)) { using (StreamReader reader = new StreamReader(fileStream)) { conteudo = reader.ReadToEnd(); } 113 Benedito Petroni e Cláudio Oliveira } } else { MessageBox.Show(“O arquivo não existe!”, “Atenção”, MessageBoxButton.OK); } } return (conteudo); } } O método Ler, desta mesma classe, deve retornar o conteúdo armazenado no IsolatedStorage em uma string. Em seguida, passamos para o desenvolvimento da MainPage. O primeiro passo consiste em definir os atributos desta classe: private private private private private Peca[] peca; bool iniciar = false; bool verificar = false; bool efeitoSom = true; int[] par = { -1, -1 }; Agora no método construtor da MainPage a classe Tema deve ser instanciada. O método Carregar armazena o conteúdo no vetor de objetos da classe Peca enquanto, o método Embaralhar, deve misturar as peças na área do jogo. public MainPage() { InitializeComponent(); DataContext = App.ViewModel; this.Loaded += new RoutedEventHandler(MainPage_Loaded); Tema tema = new Tema(); tema.Criar(); Carregar(tema.Ler()); Embaralhar(); } 114 Coletânea de Aplicativos para Windows Phone O botão Start deve, através do método AtualizarPecas, esconder as peças de modo a dar início ao jogo: private void btnStart_Click(object sender, RoutedEventArgs e) { AtualizarPecas(); verificar = false; iniciar = true; } Quando o usuário pressiona um dos botões que corresponde a uma das peças, o atributo verificar define se é a primeira peça do par que o usuário está exibindo ou não. Quando é a segunda peça que está sendo exibida, deve ser realizada a verificação se houve o acerto do par, neste caso, as peças devem ficar visíveis, caso contrário, devem ser escondidas novamente. private void Jogar_Click(object sender, RoutedEventArgs e) { if (iniciar) { Button btnTmpPeca = (Button)sender; btnTmpPeca.Foreground = new SolidColorBrush(Colors.White); if (!verificar) RegistrarJogada(0, btnTmpPeca); else { RegistrarJogada(1, btnTmpPeca); VerificarJogada(); iniciar = !VerificarFimJogo(); } verificar = !verificar; } else MessageBox.Show(“Please, press the START Button!”, “Attention”, MessageBoxButton.OK); } 115 Benedito Petroni e Cláudio Oliveira O método VerificarFimJogo é chamado sempre após a verificação do par escolhido pelo usuário e irá indicar se existem ou não peças a serem exibidas. Considerações Finais A aplicação consiste em uma versão do popular jogo de memória e, apresenta como principais características, a possibilidade de customização de vários temas e também a seleção de diferentes níveis de dificuldade. O uso do recurso Panorama View apresenta novas perspectivas em relação ao layout de aplicações, pois, apresenta uma solução bastante funcional em relação as limitações de tamanho de tela existentes nos smartphones. Após o desenvolvimento a aplicação foi submetida e aprovada para publicação no Windows Phone Marketplace, estando disponível para download no endereço http://www.windowsphone.com/pt-br/ store/app/memory-game/5d57d42d-1884-423a-9719-9f89c64ed251 Melhorias futuras na aplicação consistem em realizar a atualização automática do conjunto de temas através do acesso a rede. Outra melhoria prevista é a utilização de imagens nas peças. Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 6.jun.2013. 116 Coletânea de Aplicativos para Windows Phone 15. RescisãoCLT Reginaldo Bernardo Antonietti Introdução A proposta deste aplicativo móvel, chamado “RescisãoCLT”, é dar ao trabalhador brasileiro a chance de saber antecipadamente, quanto irá receber de seus direitos trabalhista, em uma eventual rescisão de contrato de trabalho. O aplicativo na sua versão 1.x é voltado a pessoas físicas e fornece além dos cálculos, acesso as tabelas oficiais do Brasil do INSS, IR (Imposto de Renda Pessoa Física) e Seguro-Desemprego. Esta APP tem seus cálculos centrados na CLT Brasileira, ou seja, a Consolidação das Leis do Trabalho 2013. Projeto O aplicativo nasceu dentro do curso de Windows Phone ministrado pela FATEC Jundiaí (Faculdade de Tecnologia de Jundiaí) em parceria com o INdT (Insituto Nokia de Tecnologia) em abril de 2013. Sendo assim, este aplicativo foi desenvolvido para dispositivos móveis que executam o Sistema Operacional Windows Phone 7.1 em diante. O curso foi ministrado pelo excelente instrutor Jackson da Nokia, que não deixou margem de dúvidas ao seu conhecimento e também ao passar para nós, alunos. Durante o trajeto do curso, cada aluno tinha que desenvolver algum aplicativo, demonstrando com isso o aprendizado obtido e obviamente fazendo jus ao certificado de conclusão do mesmo. Este meu aplicativo obviamente não teve sua conclusão completa dentro do curso, pois acabou se tornando um projeto que demorou aproximadamente quase dois meses após o fim do mesmo, devido às inúmeras rotinas de cálculos que são necessárias para se chegar ao valor bruto e líquido do valor da rescisão a receber, bem os descontos por lei. Também as inúmeras telas e homologação por parte de um Contador profissional da área de Recursos Humanos (RH) foram 117 Reginaldo Bernardo Antonietti necessárias, causando a demora na publicação. Ufa, confesso que não imaginava que minha ideia iria se estender tanto. A aplicação possui conforme ilustrado na Figura 15.1, a tela principal onde se pode ver além do título, três botões que dão acesso as telas de cálculo, as tabelas INSS, IR e Seguro-Desemprego e aos créditos da APP. Nota-se também um aviso dizendo que a APP é de uso exclusivo para a CLT do Brasil e o ano vigente. Figura 15.1 – Tela Principal Ao clicar no botão “Mensalista” e estando o dispositivo móvel configurado para a região do Brasil, a tela do “Cálculo Mensalista” abrirá para o devido cálculo da rescisão para trabalhadores que percebem salários fixos que podem ser MENSAIS, QUINZENAIS ou SEMANAIS, conforme a Figura 15.2: 118 Coletânea de Aplicativos para Windows Phone Figura 15.2 – Tela de Cálculo para Salário Fixo Excetuando os campos das HORAS EXTRAS, o resto é OBRIGATÓRIO. Após o preenchimento dos campos, dá-se um Tap (clique) no botão “Calcular” para que o aplicativo faça o cálculo da rescisão. Uma tela de “Resultados” conforme a Figura 15.3 se apresentará automaticamente após o cálculo concluído. 119 Reginaldo Bernardo Antonietti Figura 15.3 – Resultado da Rescisão Este aplicativo tem no botão “Calcular” seu principal evento. Segue um trecho do código como são realizados os cálculos após o usuário clicar no respectivo botão. public void rb_Calcula_Rescisao_Click(object sender, RoutedEventArgs e) { // Inicializa as variáveis TOTALIZADORAS (Application.Current as App).v_valor_bruto = 0; (Application.Current as App).v_valor_liq = 0; . . . // CONSISTÊNCIAS (Application.Current as App).v_ult_salario = Single.Parse(ed_UltSalario.Text); 120 Coletânea de Aplicativos para Windows Phone (Application.Current as App).v_num_dependentes = byte.Parse(ed_NumDependentes.Text); (Application.Current as App).v_qtde_ferias_vencidas = byte.Parse(ed_NumFeriasVencidas.Text); (Application.Current as App).dt_admissao = String.Format(“{0:dd/MM/yyyy}”, datePicker1.Value); (Application.Current as App).dt_admissao = (Application.Current as App).dt_admissao.Substring( 0, 10); (Application.Current as App).dt_demissao = String.Format(“{0:dd/MM/yyyy}”, datePicker2.Value); (Application.Current as App).dt_demissao = (Application.Current as App).dt_demissao.Substring( 0, 10); // Separa a DATA DE ADMISSÃO em dia, mês e ano (Application.Current as App).v_dia_admissao = Convert.ToInt16((Application.Current as App).dt_admissao.Substring(0, 2)); (Application.Current as App).v_mes_admissao = Convert.ToInt16((Application.Current as App).dt_admissao.Substring(3, 2)); (Application.Current as App).v_ano_admissao = Convert.ToInt16((Application.Current as App).dt_admissao.Substring(6, 4)); // Separa a DATA DE DEMISSÃO em dia, mês e ano (Application.Current as App).v_dia_demissao = Convert.ToInt16((Application.Current as App).dt_demissao.Substring(0, 2)); (Application.Current as App).v_mes_demissao = Convert.ToInt16((Application.Current as App).dt_demissao.Substring(3, 2)); (Application.Current as App).v_ano_demissao = Convert.ToInt16((Application.Current as App).dt_demissao.Substring(6, 4)); // ANOS TRABALHADOS para cálculo dos dias do AVISO // PRÉVIO que prevê 3 dias a mais a partir do 2º ano // de trabalho 121 Reginaldo Bernardo Antonietti (Application.Current as App).v_anos_trabalhados = (Application.Current as App).v_ano_demissao – (Application.Current as App).v_ano_admissao; // CÁLCULO DA RESCISÃO - MENSALISTA // SALDO DE SALÁRIO (dias trabalhados no mês da // rescisão) (Application.Current as App).v_saldo_salario = 0; (Application.Current as App).v_saldo_salario = ((Application.Current as App).v_ult_salario / 30) * (Application.Current as App).v_dia_demissao; // HORAS EXTRAS (Se existirem) - Base 220 Horas // Mensais (Application.Current as App).v_total_horas_extras = 0; // HORA EXTRA 50 % (Application.Current as App).v_hora_extra50 = 0; (Application.Current as App).v_qtde_Hr_Extras50 = 0; (Application.Current as App).v_total_hora_extra50 = 0; if (cb_HoraExtra_50.IsChecked == true) { // Acha o valor da HORA EXTRA com 50% de acréscimo (Application.Current as App).v_hora_extra50 = (((Application.Current as App).v_ult_salario / 220) * 1.50); // Valor TOTAL das HORAS EXTRAS trabalhadas (Application.Current as App).v_qtde_Hr_Extras50 = Convert.ToDouble(ed_Horas_50.Text); (Application.Current as App).v_total_hora_extra50 = (Application.Current as App).v_qtde_Hr_Extras50 * (Application.Current as App).v_hora_extra50; } // HORA EXTRA 100 % (Application.Current as App).v_hora_extra100 = 0; (Application.Current as App).v_qtde_Hr_Extras100 = 0; 122 Coletânea de Aplicativos para Windows Phone (Application.Current as App).v_total_hora_extra100 = 0; if (cb_HoraExtra_100.IsChecked == true) { // Acha o valor da HORA EXTRA com 100% de acréscimo (Application.Current as App).v_hora_extra100 = (((Application.Current as App).v_ult_salario / 220) * 2.00); // Valor TOTAL das HORAS EXTRAS trabalhadas (Application.Current as App).v_qtde_Hr_Extras100 = Convert.ToDouble(ed_Horas_100.Text); (Application.Current as App).v_total_hora_extra100 = (Application.Current as App).v_qtde_Hr_Extras100 * (Application.Current as App).v_hora_extra100; } // Soma das HORAS EXTRAS trabalhadas (Application.Current as App).v_total_horas_extras = (Application.Current as App).v_total_hora_extra50 + (Application.Current as App).v_total_hora_extra100; . . . } Desenvolvimento A aplicação foi desenvolvida para a plataforma Windows Phone como já mencionado e utilizando, portanto, o Silverlight para Windows Phone. Devido às dimensões reduzidas da tela de um smartphone, procurei arranjar os componentes da melhor forma que fosse possível sua operação bem como sua leitura por parte dos usuários. Também foi dada uma atenção no que diz respeito a usar o mínimo de componentes possível para que a tela não ficasse sobrecarregada bem como a disposição em uma ordem natural na entrada de dados. 123 Reginaldo Bernardo Antonietti Considerações Finais A aplicação consiste em dar uma ferramenta para o usuário que está debaixo das regras da CLT do Brasil. Seja ele trabalhador, profissionais da área de RH, sindicatos, advogados trabalhistas ou quem mais precisar do cálculo de uma rescisão de contrato de trabalho CLT. É um aplicativo que não precisou de recursos avançados de animação e imagem, mas que em uma versão mais completa poderá vir a utilizar. Outros recursos tais como listboxes e gráficos de apresentação de resultados serão com o tempo acrescido, tornando mais rico a apresentação do cálculo e mais atraente para sua leitura. O uso do recurso Panorama View em futuras versões será utilizado para dar novas perspectivas em relação ao layout de aplicações, pois, apresenta uma solução bastante funcional em relação às limitações de tamanho de tela existentes nos smartphones. Após o desenvolvimento a aplicação foi submetida e aprovada para publicação no Windows Phone Marketplace, estando disponível para download no endereço http://www.windowsphone.com/pt-br/ store/app/rescis%C3%A3oclt/4ad1ea8a-f518-4ed0-aea5-6932ffc142b7 Melhorias futuras no aplicativo podem consistir, por exemplo, em realizar o cálculo baseado nos outros tipos de dispensa do trabalho e também para cálculo de trabalhadores horistas. Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 17.ago.2013. 124 Coletânea de Aplicativos para Windows Phone 16. Tabuada Profa. Ms. Luciana Ferreira Baptista Introdução A proposta deste aplicativo é a apresentação da tabuada de um número. O conceito básico consiste em solicitar o número e apresentar o resultado da tabuada desse número, iniciando-a do número 1 até o número 10. Projeto O elemento principal da aplicação consiste em solicitar um número ao usuário e apresentar a tabuada desse número. A aplicação inicia com a escolha do idioma: inglês (default), português ou espanhol, o qual será utilizado para mensagens que poderão ser apresentadas ao usuário (Figura 16.1). Figura 16.1 – Tela inicial: escolha do idioma Ao clicar no botão Continue é apresentada a tela para o usuário digitar o número que deseja visualizar a tabuada (Figura 16.2). 125 Luciana Ferreira Baptista Figura 16.2 – Tela para digitação do número para o cálculo de sua tabuada O resultado da tabuada é apresentado logo abaixo da digitação do número desejado (Figura 16.3). Figura 16.3 – Apresentação da tabuada de acordo com o número digitado 126 Coletânea de Aplicativos para Windows Phone Desenvolvimento A aplicação foi desenvolvida para a plataforma Windows Phone e utilizando, para isso, o Silverlight para Windows Phone. Foram desenvolvidas duas páginas, a MainPage.xaml, onde o usuário escolhe o idioma por meio do RadioButton, o qual já vem selecionado no idioma inglês. Após clicar em Continue, é chamada a página Tabuada.xaml, passando como parâmetro o idioma selecionado no evento Click do RadioButton: private void btnContinuar_Click(object sender, RoutedEventArgs e) { var queryData = string.Format(“?idioma={0}”, idioma, “ Maestro”); NavigationService.Navigate(new Uri(“/Tabuada.xaml” + queryData, UriKind.Relative)); } private void rbIngles_Click(object sender, RoutedEventArgs e) { idioma = “I”; } private void rbPortugues_Click(object sender, RoutedEventArgs e) { idioma = “P”; } private void rbEspanhol_Click(object sender, RoutedEventArgs e) { idioma = “S”; } Na página seguinte (Tabuada.xaml) é recuperado o parâmetro idioma: 127 Luciana Ferreira Baptista public string idioma { get; set; } Os textos são apresentados na página de acordo com o idioma selecionado: protected override void OnNavigatedTo( System.Windows. Navigation.NavigationEventArgs e) { var data = this.NavigationContext.QueryString; //Verifica se existe a Chave idioma if (data.ContainsKey(“idioma”)) idioma = data[“idioma”]; switch (idioma) { case “I”: ApplicationTitle.Text = “MULTIPLICATION TABLE”; txbNumero.Text = “Number”; txbResultado.Text = “Result”; erroMensagem = “Enter a number”; erroTitulo = “Attention”; break; case “P”: ApplicationTitle.Text = “TABUADA”; txbNumero.Text = “Número”; txbResultado.Text = “Resultado”; erroMensagem = “Entre um número”; erroTitulo = “Atenção”; break; case “S”: ApplicationTitle.Text = “TABUADA”; txbNumero.Text = “Número”; txbResultado.Text = “Resultar”; erroMensagem = “Entre un número”; erroTitulo = “¡Atención”; } base.OnNavigatedTo(e); } 128 Coletânea de Aplicativos para Windows Phone Ao clicar no botão OK, o resultado da tabuada é apresentado. Mas se o número digitado contiver ponto, o resultado da tabuada é formatado para apresentação de somente dois dígitos após o ponto (Figura 16.4), além da apresentação da vírgula para a separação de milhares de acordo com o padrão americano (Figura 16.5). private void btnOk_Click(object sender, RoutedEventArgs e) { double resp; int encontrar; string respFormat; try { lstResultado.Items.Clear(); for (int i = 1; i <= 10; i++) { resp = i * double.Parse(txtNumero.Text); encontrar = txtNumero.Text.IndexOf(“.”); if (encontrar >= 0) respFormat = resp.ToString(“###,##0.00”); else respFormat = resp.ToString(“###,##0”); lstResultado.Items.Add(i + “ X “ + txtNumero.Text + “ = “ + respFormat); } } catch (Exception) { MessageBox.Show(erroMensagem, erroTitulo, MessageBoxButton.OK); } } A seguir podemos visualizar as Figuras 16.4 e 16.5 que ilustram a formatação dos números. 129 Luciana Ferreira Baptista Figura 16.4 – Apresentação do resultado com ponto flutuante Figura 16.5 – Resultado da tabuada com separação de milhares Porém, caso o usuário digite um número inválido, uma 130 Coletânea de Aplicativos para Windows Phone mensagem é apresentada (Figura 16.6) de acordo com o idioma selecionado. Figura 16.6 – Mensagem para número inválido Considerações Finais A aplicação consiste em uma versão simples para visualizar a tabuada de qualquer número. Sendo que os textos na página são apresentados de acordo com um dos três idiomas selecionados inicialmente. Após o desenvolvimento a aplicação foi submetida e aprovada para publicação no Windows Phone Marketplace, estando disponível para download no endereço http://www.windowsphone.com/ pt-br/store/app/multiplicationtable/28b3e480-1231-46b6-88a4c9f4898dde45 Melhorias futuras na aplicação consistem em acrescentar outros idiomas, a fim de que qualquer pessoa do mundo possa ler os textos que são apresentados e consequentemente fazer melhor uso do produto. 131 Luciana Ferreira Baptista Referências Bibliográficas Microsoft. Windows Phone Dev Center. Disponível em <http://dev. windowsphone.com/en-us>. Acesso em 26.ago.2013. 132 Coletânea de Aplicativos para Windows Phone 17. Todos os Aplicativos Desenvolvidos e Publicados Prof. Ms. Carlos Eduardo Schuster Prof. Ms. Cláudio Luís Vieira Oliveira Profa. Ms. Luciana Ferreira Baptista Muitos projetos ainda estão sendo desenvolvidos pelos professores e alunos da FATEC Jundiaí. E poderão ser baixados no Windows Phone Marketplace. Para ajudar a encontrá-los, o Quadro 17.1 contém a identificação dos autores, que apresentaram os seus projetos de forma detalhada nesta obra, como distribuidores no site do Windows Phone Marketplace, bem como o endereço para sua localização. Autor – Identificação no Windows Phone Marketplace Endereço Amanda Mayara de Araujo - Amanda Mayara http://www.windowsphone.com/pt-BR/store/publishers?publisherId=Aman da%2BMayara&appId=b4525d80-eb18-4875-a177-adbbf03227ab Benedito Cristiano Aparecido Petroni Cláudio Luís Vieira Oliveira – clvoliveira http://www.windowsphone.com/pt-BR/store/publishers?publisherId=clvoli veira&appId=fc52ee24-1e9a-4742-a67f-c390fcfb81e2 George Petz – George Petz http://www.windowsphone.com/pt-BR/store/publishers?publisherId=Georg e%2BPetz&appId=97e7eec7-5973-49a7-87ca-abc8b6fae169 Gustavo da Silva Oliveira – Gustavo Silva http://www.windowsphone.com/pt-BR/store/publishers?publisherId=Gusta vo%2BSilva&appId=bbf5c243-90a6-49b8-9211-ffdb0d948a97 133 Carlos Schuster, Cláudio Oliveira e Luciana Baptista Autor – Identificação no Windows Phone Marketplace Endereço João Henrique Felício Barreto - JoaoHenrique http://www.windowsphone.com/pt-BR/store/publishers?publisherId=Joao Henrique&appId=fc52ee24-1e9a-4742-a67f-c390fcfb81e2 Adaní Cusin Sacilotti Carlos Eduardo Schuster Kelly Sabará – KSA, ASK e S&S Systems http://www.windowsphone.com/pt-BR/store/publishers?publisherId=KSA& appId=995b1b69-3adc-450b-9442-6c8ee4fb6913 (KSA) http://www.windowsphone.com/pt-BR/store/publishers?publisherId=ask& appId=fc52ee24-1e9a-4742-a67f-c390fcfb81e2 (ASK) Luciana Ferreira Batpista – lubap http://www.windowsphone.com/pt-BR/store/publishers?publisherId=lubap &appId=400c49e6-45a4-4043-a8d2-65e1acce0ca6 Rafael de Oliveira Sales – Rafael Sales http://www.windowsphone.com/pt-BR/store/publishers?publisherId=Rafae l%2BSales&appId=fc52ee24-1e9a-4742-a67f-c390fcfb81e2 Reginaldo Bernardo Antonietti – Reginaldo Antonietti http://www.windowsphone.com/pt-BR/store/ publishers?publisherId=Reginaldo%20Antonietti&appId=995b1b69-3adc450b-9442-6c8ee4fb6913 Quadro 17.1 – Localização dos projetos por autores A seguir se encontram relacionados alguns dos aplicativos desenvolvidos e que são frutos da parceria entre a FATEC Jundiaí e o Insituto Nokia de Tecnologia (INdT). 134 Coletânea de Aplicativos para Windows Phone Álcool no Sangue Autor: Gustavo Silva Calcule a Concentração de Álcool no seu Sangue com este aplicativo fácil e intuitivo. Figura 17.1 – Álcool no Sangue Download: http://www.windowsphone.com/pt-br/store/app/%C3%A1lcool-no-sangue/ bbf5c243-90a6-49b8-9211-ffdb0d948a97 135 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Animais Raros Autora: Giovanna Schiavi Visualize figuras de animais raros e extintos em seu celular! Figura 17.2 – Animais Raros Download: http://www.windowsphone.com/pt-br/store/app/animais-raros/3df04c20b842-4906-838c-18b5e9afd18c 136 Coletânea de Aplicativos para Windows Phone Área Geométrica Autor: Gustavo Silva Aplicativo ótimo pra quem precisa realizar cálculos de áreas geométricas sem perder tempo calculando no papel. Figura 17.3 – Área Geométrica Download: h t t p : / / w w w. w i n d o w s p h o n e . c o m / p t - b r / s t o r e / a p p / % C 3 % A 1 r e a gemom%C3%A9trica/2419a705-ed19-4cb0-8db0-d16495bcfe96 137 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Book List Autora: Mayara Thuany Alves do Livramento Book List é um aplicativo para listar quais livros você já leu, quais você deseja ler e quais estão pendentes na sua estante. Tudo de forma simples. Figura 17.4 – Book List Download: http://www.windowsphone.com/pt-br/store/app/book-list/e82bcd00-ebdb4662-8ad7-0a1cc1eb1c0e 138 Coletânea de Aplicativos para Windows Phone Cálculo do Patrimônio Líquido Autor: Rafael de Oliveira Sales Faça o calculo do seu patrimônio líquido com essa ferramenta como auxilio, basta colocar o seu Ativo (bens e direitos) e seu Passivo (obrigações, contas e dívidas). Figura 17.5 – Cálculo do Patrimônio Líquido Download: http://www.windowsphone.com/pt-br/store/app/c%C3%A1lculo-dopl/81554ca8-5938-441e-9348-02e64c46b9f6 139 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Cálculo do Seguro Desemprego Autor: Rafael de Oliveira Sales Esta ferramenta vai te auxiliar na hora de calcular o benefício do seguro desemprego, basta colocar os seus 3 últimos salários que software vai calcular os seu benefício, de acordo com a tabela disponibilizada pelo Mte 01/12. Figura 17.6 – Cálculo do Seguro Desemprego Download: http://www.windowsphone.com/pt-br/store/app/c%C3%A1lculo-do-segurodesemprego/82283612-a21f-4fb1-ad8d-1cdef8b75af4 140 Coletânea de Aplicativos para Windows Phone Cálculos Trabalhistas Autor: Ricardo Alves Calcule os seus direitos trabalhistas e direitos de Seguro Desemprego com essa simples APP. Figura 17.7 – Cálculos Trabalhistas Download: h t t p : / / w w w. w i n d o w s p h o n e . c o m / p t - b r / s t o r e / a p p / c a l c u l o s trabalhistas/8e90393f-7421-4ae5-aac5-5cb254d01818 141 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Carrossel Autora: Luciana Ferreira Baptista Aplicativo que mostra os personagens da novela Carrossel do SBT, com a música tema ao fundo. Figura 17.8 – Carrossel Download: http://www.windowsphone.com/pt-br/store/app/carrossel/e4553915-11d74088-80ca-87a4c423045a 142 Coletânea de Aplicativos para Windows Phone Ciclo Autores: Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Esse aplicativo fornece, conforme seu ciclo, a data aproximada da ovulação e seu período fértil considerando um ciclo de 28 dias. Figura 17.9 – Ciclo Download: http://www.windowsphone.com/pt-br/store/app/ciclo/3652aa54-9a7e-4e20a306-b70e129de0aa 143 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Controle de Glicemia Autora: Amanda Mayara de Araujo Este aplicativo foi desenvolvido especialmente para portadores da Diabete Tipo 1, criando um histórico com dados obtidos a partir do teste glicêmico que é feito com frequência, proporcionando um maior controle de seus resultados. Figura 17.10 – Controle de Glicemia Download: http://www.windowsphone.com/pt-br/store/app/controledeglicemia/ b4525d80-eb18-4875-a177-adbbf03227ab 144 Coletânea de Aplicativos para Windows Phone Crazy Fingers Autor: André Luiz Carletti How fast are you? play it and find out! Crazy Fingers is a funny game that you are supposed to touch the spiral before it disappear. With four different levels, this game is perfect for everyone. Challenge your friends, reach the top of the highscores. Be the fast one. Figura 17.11 – Crazy Fingers Download: http://www.windowsphone.com/en-us/store/app/crazy-fingers/b0c7f4a4-b0e145bc-b0ad-2d39483eb730 145 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Cronômetro Autor: Rafael de Oliveira Sales Esta ferramenta é simples e de fácil manuseio, exatidão na hora de cronometrar é seu ponto forte. Figura 17.12 – Cronômetro Download: http://www.windowsphone.com/pt-br/store/app/cronometro/fc52ee24-1e9a4742-a67f-c390fcfb81e2 146 Coletânea de Aplicativos para Windows Phone Desafios Autores: Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Desafie seu cérebro com esse aplicativo de desenvolvimento lógico, com perguntas que ajudarão a melhorar seu raciocínio. Figura 17.13 – Desafios Download: http://www.windowsphone.com/pt-br/store/app/desafios/1f6d3254-b2bb40b9-957e-f175c7cad167 147 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Diabetes Calculator Autores: Adaní Cusin Sacilotti, Carlos Eduardo Schuster e Kelly Sabará Calculadora auxiliar para contagem de carboidratos. O objetivo deste aplicativo é auxiliar as pessoas com Diabetes Tipo 1 (DM1) insulino dependentes, e que seguem a dieta baseada na contagem de carboidratos (CHO) ingeridos. Lembramos que este aplicativo não substitui em hipótese alguma as orientações de seu médico, trata-se apenas de uma ferramenta que automatiza o processo matemático que envolve a técnica de contagem de carboidratos. Consulte seu médico antes de utilizar este aplicativo. Figura 17.14 – Diabetes Calculator Download: http://www.windowsphone.com/pt-br/store/app/diabetes-calculator/5c4f803a8965-42ad-a86d-99968f8a1e92 148 Coletânea de Aplicativos para Windows Phone Donc Autor: Edih Araújo Através deste simples simulador o usuário será capaz de obter informações como o valor pago pra cada km rodado, ou ainda, quantos km o veículo pode rodar com dada quantidade de combustível e também o consumo médio de combustível. Figura 17.15 – Donc Download: http://www.windowsphone.com/pt-br/store/app/donc/806860a4-cd9b-451b9ec1-3225e05b527e 149 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira FuelManager Autor: João Henrique Felício Barreto Este aplicativo ajuda a ver qual combustível vale mais a pena abastecer, calcula o consumo do carro e permite fazer um histórico dos abastecimentos para um melhor controle do gasto e do consumo. Figura 17.16 – FuelManager Download: http://www.windowsphone.com/pt-br/store/app/fuelmanager/45891be0-25554c3b-bf91-45e5689eb3ec 150 Coletânea de Aplicativos para Windows Phone Gloo RSS Autor: Ricardo Alves Gloo Rss é um leitor de rss de ótima qualidade vale a penas experimentar está versão free. Nesta versão você poderá visualizar alguns Feeds pré definidos e alterar algumas configurações. Notas da versão: Agora você pode adicionar ou remover novos feeds. Figura 17.17 – Gloo RSS Download: http://www.windowsphone.com/pt-br/store/app/gloo-rss/0f8a9f60-b422-4d04b5b6-bb5165612ee7 151 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Guitar Scale Pro Autor: Ricardo Alves Este App vai auxiliar você em relação com escalas e acordes de cada tom, é um simples app que pode te ajudar muito na hora de mudar o tom de uma musica. Recomendado principalmente para iniciantes com música. Figura 17.18 – Guitar Scale Pro Download: http://www.windowsphone.com/pt-br/store/app/guitar-scale-pro/36020230bde0-444f-bf51-406383089f4d 152 Coletânea de Aplicativos para Windows Phone HarryPotterMania Autora: Amanda Mayara de Araujo Aplicativo para fãs de Harry Potter, com galeria de fotos, notícias e um teste seletor para as quatro casas de Hogwarts. Figura 17.19 – HarryPotterMania Download: http://www.windowsphone.com/pt-br/store/app/harrypottermania/8b0b5e4d5170-4861-a397-d2cf322b1f9d 153 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Lendas Urbanas Autora: Giovanna Schiavi O aplicativo reúne contos e lendas urbanas mais tradicionais, folclóricas, nacionais e internacionais. Figura 17.20 – Lendas Urbanas Download: http://www.windowsphone.com/pt-br/store/app/lendas-urbanas/5e446cd9e088-4842-94a9-a04f7f4c9e9a 154 Coletânea de Aplicativos para Windows Phone Max Steel Autora: Luciana Ferreira Baptista Max Steel - Toys. Figura 17.21 – Max Steel Download: http://www.windowsphone.com/pt-br/store/app/max-steel/d6191690-32d04f6b-9f9c-945beae61e5d 155 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Memory Game Autores: Benedito Cristiano Aparecido Petroni e Cláudio Luís Vieira Oliveira Simple memory game with associative elements. Stay tuned for new updates! Figura 17.22 – Memory Game Download: http://www.windowsphone.com/pt-br/store/app/memory-game/5d57d42d1884-423a-9719-9f89c64ed251 156 Coletânea de Aplicativos para Windows Phone Monster High Autora: Luciana Ferreira Baptista Monster High Students. Figura 17.23 – Monster High Download: http://www.windowsphone.com/pt-br/store/app/monster-high/a6ad4ab6377a-4d14-aff9-ddd3d77c4d9c 157 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Multiplication Table Autora: Luciana Ferreira Baptista Application to display the multiplication table of a number entered. Figura 17.24 – Multiplication Table Download: http://w w w.windowsphone.com/pt-br/store/app/ multiplicationtable/28b3e480-1231-46b6-88a4-c9f4898dde45 158 Coletânea de Aplicativos para Windows Phone Qual é o Filme? Autores: Gustavo Silva Oliveira e Rafael de Oliveira Sales Qual é o Filme? BETA é um Game onde você escuta um trecho de 10 segundos da trilha sonora de um filme e tenta adivinhar o nome deste filme. Figura 17.25 – Qual é o Filme? Download: http://www.windowsphone.com/pt-br/store/app/qual-%C3%A9-o-filme/ a41eaabc-0516-4a09-b4e3-1e4c65a61158 159 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Quiz Placas de Trânsito Autor: Allan Massaretto Você está preparado para fazer o exame teórico de trânsito do DETRAN? Este aplicativo irá auxilia-lo a estudar as placas de trânsito de uma forma divertida. Primeiramente estude as placas através da opção Treinar e quando estiver preparado teste seus conhecimentos através de um Quiz de perguntas e respostas. Novidades da versão 1.3: As perguntas do quiz em um game só se repetirão, caso a quantidade de perguntas escolhidas na tela “Opções” for maior que a quantidade de placas dos grupos de placas escolhidos, em outras palavras, se todas as placas dos grupos de placas escolhidos pelo jogador se esgotarem em um game, todas as placas voltarão a ser sorteadas. Figura 17.26 – Quiz Placas de Trânsito Download: http://www.windowsphone.com/pt-br/store/app/quiz-tr%C3%A2nsito/ d677844a-967e-44ec-8a3f-195bcc37a261 160 Coletânea de Aplicativos para Windows Phone RecisãoCLT Autor: Reginaldo Antonietti Trabalhador saiba com antecedência quanto você irá receber de seus direitos trabalhistas. Os cálculos estão centrados na CLT brasileira, ou seja, a Consolidação das Leis do Trabalho. Nesta versão FREE temos 2 opções: PEDIDO DE DEMISSÃO por parte do trabalhador e DEMISSÃO SEM JUSTA CAUSA por parte do empregador e cálculo do SEGURO-DESEMPREGO caso o trabalhador faça jus. A APP também contém as tabelas oficiais do INSS, SEGURO-DESEMPREGO e IR (Imposto de Renda). Novas versões estarão disponíveis quando houver melhorias, correções OU NOVAS TABELAS de cálculos oficiais do governo. Figura 17.27 – RescisãoCLT Download: http://www.windowsphone.com/pt-br/store/app/rescisaoclt/4ad1ea8a-f5184ed0-aea5-6932ffc142b7 161 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Speed Converter Autor: George Petz Simple speed converter. Figura 17.28 – Speed Converter Download: http://www.windowsphone.com/pt-br/store/app/speed-converter/e50bdcf4e2a3-4221-9ea7-14dcfae9065d 162 Coletânea de Aplicativos para Windows Phone Tabuada Autor: Gustavo Silva Aplicativo para aqueles que precisam da tabuada na palma da mão, mas não querem/podem calculá-la no momento. Figura 17.29 – Tabuada Download: http://www.windowsphone.com/pt-br/store/app/tabuada/1d854a43-a9d040e6-8241-3b99a51634c1 163 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira Temperatures Autor: George Petz Simple temperature converter for easy use. Version 1.1: negative values implemented e values with two or more points corrected. Figura 17.30 – Temperatures Download: http://www.windowsphone.com/pt-br/store/app/temperatures/97e7eec75973-49a7-87ca-abc8b6fae169 164 Coletânea de Aplicativos para Windows Phone Visualizador de Notas Antigas Autora: Giovanna Schiavi Visualize as notas antigas que saíram de circulação e que hoje fazem parte da história. Figura 17.31 – Visualizador de Notas Antigas Download: http://www.windowsphone.com/pt-br/store/app/visualizador-de-notas-antigas/ c95554d2-2d0a-4df1-8417-7a56e6a6bb8a 165 Ângela Lühmann, Benedito Petroni e Cláudio Oliveira 166 Coletânea de Aplicativos para Windows Phone Edições Brasil www.edicoesbrasil.com.br 167 Carlos Schuster, Cláudio Oliveira e Luciana Baptista 168