FastReport no Delphi. TConexao: Android. As principais mudanças Delphi XE4. Editorial. Índice. Autor: Luciano Pimenta. Autor: Hamden Vogel

Tamanho: px
Começar a partir da página:

Download "FastReport no Delphi. TConexao: Android. As principais mudanças Delphi XE4. Editorial. Índice. Autor: Luciano Pimenta. Autor: Hamden Vogel"

Transcrição

1

2

3 04 FastReport no Delphi 05 Editorial Autor: Luciano Pimenta TConexao: 11 Gerenciando seu projeto em ambientes Multi-Plataforma parte 1 Autor: Hamden Vogel Android Trabalhando com o TouchScreen 19 Índice Autor: Thiago C. Montebugnoli As principais mudanças Delphi XE4 27 Autor: José Antonio P. M. de Paula 03

4 Editorial Av. Profº Celso Ferreira da Silva, 190 Jd. Europa - Avaré - SP - CEP Informações e Suporte: (14) Caro Leitor! É sempre com muita alegria e satisfação que finalizamos mais uma revista aos senhores. Aproveito também para agradecer às pessoas que vem acessando o conteúdo de nosso site, portanto a cada dia que passa estamos adquirindo mais acessos e cadastros. Que continuemos assim! Para este mês, nosso consultor técnico José Antonio nos trouxe direto do forno as principais novidades do Delphi XE4 com o intuito de sempre mantê-los bem informados com as últimas tecnologias lançadas no mercado. Nosso colunista mensal Luciano Pimenta aborda o uso do gerador de relatórios FastReport, uma boa opção para quem trabalha com o Delphi. Podemos considerar esta ferramenta como a opção oficial para quem utiliza as novas versões do Delphi. Já nosso colaborador Hamden Voguel desenvolveu um componente próprio para gerenciar projetos em ambientes Multi-Plataforma, o TConexao. Nesta primeira parte ele irá nos auxiliar na gerência de Projetos utilizando diversos tipos de Banco de Dados. Importante salientar que este componente está disponível gratuitamente em nosso site. Eu continuo apresentando recursos do Sistema Android, sendo que neste mês ensino a trabalhar com o TouchScreen, descrevendo suas principais classes e métodos para realizar esta tarefa. Recomendo a leitura deste artigo para quem está começando a desenvolver aplicativos e para quem deseja aprimorar seus conceitos em relação a este artifício. Um forte abraço e até o mês que vem! Internet Cadastro: Suporte: Informações: Skype Cadastro: theclub_cadastro Skype Suporte: theclub_linha1 theclub_linha2 theclub_linha3 Copyright The Club Diretor Técnico Marcos César Silva Diagramação Vitor M. Rodrigues Design Vitor M. Rodrigues Revisão Drielly Cristini Patrinhani Colunistas João Marcos Sakalauska José Antonio P. M. de Paula Lucas de Oliveira Luciano Pimenta Thiago Cavalheiro Montebugnoli Juninho Jeferson Silva de Lima Impressão e acabamento: GRIL - Gráfica e Editora Taquarituba-SP - Tel. (14) Thiago Montebugnoli - Editor Chefe Reprodução A utilização, reprodução, apropriação, armazenamento em banco de dados, sob qualquer forma ou meio, de textos, fotos e outras criações intelectuais em cada publicação da revista The Club Megazine são terminantemente proibidos sem autorização escrita dos titulares dos direitos autorais. Delphi é marca registrada da Borland International, as demais marcas citadas são registradas pelos seus respectivos proprietários. 04

5 FastReport no Delphi FastReport é um gerador de relatórios presente no Delphi desde a sua versão 4. A partir da versão XE2, passou a ser a ferramenta de relatórios oficial do Delphi. Com o FastReport podemos criar poderosos relatórios pra nossas aplicações Win32 e FireMonkey com Delphi. Trabalharemos para criar relatórios simples, usando dois componentes: o frxreport e o frxdbdataset. O primeiro é o editor de relatórios, onde basta dar um duplo clique que teremos o ambiente de criação dos relatórios (Figura 2). O segundo faz a ponte, entre os dados e o relatório. A ferramenta ainda possui suporte (adquirido separadamente) para.net, Mono e Lazarus. Possui ainda uma ferramenta chamada FastCube para análise de dados e construção de relatórios e gráficos (OLAP), uma ferramenta de scripts (FastScript) e o FastQueryBuilder, construtor visual de consultas SQL. Para ver exemplos e outras informações sobre essas ferramentas, acesse: Nesse artigo, vamos conhecer a versão do FastReport que acompanha o Delphi XE4, aprendendo a criar relatórios simples, agrupados, formatações e muitos outros exemplos. Conhecendo a ferramenta Ao abrir o Delphi e criar um projeto VCL Foms, podemos visualizar a aba FastReport 4.0 (Figura 1). Figura 2. Ambiente de desenvolvimento de relatórios (fonte: FastReport User s Manual) Baseado na Figura 2, destacamos a seguir as principais janelas e editores. Figura 1. Aba do Fast Report no Delphi 1. Report designer: local onde vamos adicionar as bandas e os objetos para o relatório; 2. Barra de menus; 3. Barra de ferramentas: botões com as opções de carregar relatórios, criar novos, salvar etc; 4. Barra de ferramentas do objeto: objetos que podem ser adicionados ao relatório; 5. Report page tabs: abas para configuração da página do relatório; 6. Report tree: janela onde podemos visualizar as bandas e objetos inseridos no relatório; 7. Object Inspector: janela para definição das propriedades dos objetos do relatório; 8. Data tree: janela com os objetos de dados do relatório. Podemos 05

6 arrastar facilmente um campo para o relatório; 9. Régua; 10. Status line: semelhante a uma barra de status, com informações sobre o objeto selecionado no relatório. Primeiro exemplo Volte ao Delphi e adicione um frxdbdataset (um frxreport também deve estar no formulário). Crie uma conexão com o banco de dados de sua preferencia (usarei no artigo, o Firebird). Usarei no artigo um Data Module para conter os componentes de conexão com o banco, pois usaremos vários exemplos. Adicione os tipos: Page Header, Page Footer e Master Data. O Master Data, abre um editor, solicitando o respectivo DataSet da aba. Selecione frxdbdataset1. Existem duas maneiras de adicionar os campos na banda Master Data para exibir os dados. Arraste os campos da janela Data tree para o relatório. Note que após inserir os campos, ao passar o mouse, é mostrado uma seta, onde podemos clicar e será exibido um menu com os campos do DataSet, assim fica fácil modificar o objeto para outro campo da consulta (Figura 5). Vincule o frxdbdataset com o DataSet que retorna os dados da sua consulta. Dê um duplo clique no frxreport para abrir o editor. Primeiramente, vamos vincular o frxdbdataset com o nosso relatório, acessando o menu Report>Data. No editor que abrir, escolha o respectivo controle de dados (Figura 3). Figura 5. Mudando o campo do objeto facilmente Figura 3. Vinculando o componente de dados com o relatório Vamos agora, adicionar as bandas do relatório. Clique no botão Insert Band na barra de ferramentas de objetos. Conforme vemos na Figura 4 é mostrado um menu suspenso que todas as opções de banda. Outra maneira de adicionar os campos no relatório é escolhendo um Text object na barra de ferramentas e adicionando o mesmo no relatório. Será aberto um editor com alguns botões (Figura 6). Figura 6. Editor do Text Object No editor, temos abas onde vamos configurar o formato do campo, formatações de fonte etc. o primeiro botão da aba Text, acessa outro editor, onde podemos escolher os campos da consulta, variáveis do relatório, funções, etc (Figura 7). Figura 4. Adicionando bandas ao relatório 06

7 Formatação de objetos Como podemos ver no relatório que criamos, o campo Salary, esta como texto, sem a devida formatação. Para ajustar isso, abra o relatório e dê um duplo clique no campo. No editor, acesse a aba Format e configure, conforme a Figura 10, onde indicamos o tipo de formatação e o separador decimal (vírgula) do formato. Figura 7. Editor de expressões do relatório Podemos usar o editor do Text Object para apenas adicionar rótulos (textos) no relatório, onde basta digitar o texto desejado na aba Text. Na barra de ferramentas temos as funcionalidades necessárias para formatar os textos digitados nesse objeto. Note que ao adicionarmos um Text Object ou mesmo adicionar um campo usando a janela Data tree, existem linhas que nos auxiliam para que os controles fiquem alinhados tanto horizontalmente, como verticalmente (Figura 8). Figura 8. Alinhando os componentes do relatório Feche o relatório. No Delphi, adicione um botão e adicione o seguinte código em seu evento OnClick: frxreport1.showreport(); Figura 10. Relatório de listagem em execução Nem precisamos executa o projeto novamente, basta acessar o botão de preview no próprio ambiente do relatório para visualizar as modificações. E se precisássemos modificar a formatação de um objeto (fonte, cor etc) de acordo com algum parâmetro que existisse, como faríamos? É bastante simples. Acesse o objeto que deseja modificar a formatação. Dê um duplo clique para acessar o editor e a aba Highlight. Na opção Condition, digite: <frxdbdataset1. SALARY > > Marque em Font a opção Bold. O botão Color, indica a cor do texto quando a condição do objeto for verdadeira. Você também pode usar o botão para acessar o editor de expressões para montar a mesma manualmente. De acordo com o configurado antes, o campo Salary do relatório deve aparecer em vermelho quando o valor desde for maior que ,00. Veja na Figura 11 nosso exemplo em execução. Execute a aplicação e visualize o relatório em funcionamento (Figura 9). Figura 11. Formatação condicional do relatório Caso você deseje mudar a formatação de todo a linha, para que não precise fazer manualmente a configuração de cada objeto, basta selecionar todos os objetos e acessar a propriedade HighLight>Condition e fazer a mesma configuração anterior. Figura 9. Relatório de listagem em execução Outra formatação bastante usada é a de indicar a quantidade de páginas e 07

8 a página atual do relatório. O FastReport possui variáveis que retornam essas informações e que são fáceis de serem utilizadas. Acesse a aba Variables do Data tree e arraste para o formulário um Date e um TotalPages. Para customizar esses variáveis, basta dar um duplo clique e digitar o texto que deseja. Veja na Figura 12 o rodapé do relatório (modifiquei o mesmo para mostrar mais de uma página). Figura 12. Formatação do rodapé do relatório Código 02 select EMPLOYEE.first_name, EMPLOYEE.last_name, employee.salary, DEPARTMENT. department from EMPLOYEE inner join DEPARTMENT on DEPARTMENT.dept_no = EMPLOYEE. dept_no order by DEPARTMENT.department Nota: Para adicionar um texto, basta digitá-lo no editor, tomando o cuidado de não remover a variável. Arquivos de relatórios Para você que estava acostumado com o Rave Reports, vai notar uma diferença interessante no FastReport. Cada relatório é um arquivo FR3. No Rave, o arquivo RAV era de projeto e dentro poderíamos ter vários relatórios. No FastReport, cada FR3, é apenas um relatório. Salve o arquivo e modifique o código do botão para o seguinte código: Crie um novo frxreport (se desejar, em outro formulário). Caso seja carregado o relatório anterior, crie um novo. Não esqueça de modificar o Data do relatório. Caso tenha criado um novo formulário, atende para o nome do formulário no editor de seleção de DataSets (Figura 3). De um duplo clique no Master Data e vincule com o DbDataSet. Adicione uma banda Group Header. Um editor é aberto para configurarmos a banda do grupo. Vamos indicar que o agrupamento se dará pelo campo Department. Podemos ainda indicar uma expressão para o agrupamento. Nas opções de agrupamento, podemos configurar para que a cada grupo, seja mostrado em uma nova página ou drill-down, onde clicamos sobre o grupo para mostrar os dados. Código 01 frxreport1. LoadFromFile( Listagem.fr3 ); frxreport1.showreport(); Dica: caso você escolha a opção drill-down ao executar o relatório, apenas os grupos serão mostrados. É necessário clicar em cima do mesmo para exibir os registros. Nota: caso o FastReport não encontre o arquivo, nenhum erro é mostrado, apenas o relatório não exibe nenhum registro. Arraste a banda para que fique acima da Master Data. Veja na Figura 13 o relatório agrupado em execução. Usamos o método LoadFromFile para carregar o arquivo de relatório no frxreport. Isso nos dá a facilidade de termos apenas um controle e vários relatórios, sendo carregados de acordo com a nossa necessidade. Agrupamento Outro exemplo muito usado em relatórios é o de agrupamento de dados. Neste exemplo, vamos fazer a mesma listagem anterior, com a diferença que vamos retornar todos os empregados, agrupados pelo seu departamento. Veja o SQL da consulta: 08 Figura 13. Relatório agrupado

9 Somatório Sempre que usamos agrupamento de dados em um relatório, precisamos somar um determinado campo ou contar a quantidade de registros. Vamos aproveitar esse relatório para fazer esse exemplo. Adicione uma banda GroupFooter no relatório. Adicione um Text Object e acesse o botão Insert Aggregate da aba Text. No editor, vamos configurar um campo que terá seu valor somado, que no caso é Salary. Veja na Figura 14 como ficou a configuração. Master/detail Outro exemplo muito comum em relatório e de mostrar os dados master e os details. Exemplo clássico: nota fiscal, os dados referente ao cliente (comprador) podemos considerar o master, e as informações dos produtos da nota, são o detail. Essas duas fontes de dados, precisam ter um relacionamento. Primeiro, teremos duas consultas separadas, uma para a master e outra para detail. Nesse exemplo, estou pesquisando os empregados (Employee) e o histórico de salários (Salary_History). Precisaremos, portanto de dois frxdbdataset (um para cada consulta). O relacionamento, faremos nos componentes de consulta, o que é bastante simples. Adicione um DataSource e faça a ligação com a consulta master. No componente (ClientDataSet, Query, Table etc) com os dados da consulta detail, acesse a propriedade MasterSource e escolha o DataSet anterior. Em MasterFields, acesse o editor e configure o campo de relacionamento (nesse caso Emp_no). Crie um novo relatório e adicione as seguintes bandas: Page Header, Master Data, Detail Data e Page Footer. Na Master Data você deve configurar o frxdbdataset que tem os dados do máster (no exemplo, Employee) e consequentemente, para o Detail Data, os dados do detail (Salary_History). Veja na Figura 16 a disposição dos campos nas duas bandas. Figura 14. Configurando o somatório do grupo Faça a formatação no campo, semelhante ao campo Salary. Rode o relatório e note que temos o somatório por grupo. Mas e se quisermos o valor total no final do relatório? Basta adicionar uma banda ReportSummary e fazer a mesma configuração anterior. Veja na Figura 15 o relatório com somatório do grupo e somatório total. Figura 16. Relatório master/detail Execute o relatório e veja que os dados estão agrupados de acordo com o nome do empregado. Exportação de relatórios Uma característica interessante que observei no FastReport é a quantidade de opções de tipos de exportações para os relatórios. Veja na Figura 17 a aba de exportações do FastReport. Figura 15. Somatórios no relatório Dica: temos uma opção bem interessante na configuração do somatório. Caso precisássemos mostrar um somatório acumulado por grupos, basta marcar a opção Running total na janela Insert Agreggate (Figura 14). Assim, a cada final de grupo, teríamos um somatório acumulado. Figura 17. Tipos de exportações do FastReport 09

10 Para exportar, por exemplo, um relatório para HMTL, basta adicionar no formulário um frxhtmlexport. Acesse a IDE de desenvolvimento e execute o preview do relatório. Note que um botão foi adicionado para exportar o relatório. Para cada tipo de exportação, um item de menu será adicionado no preview do relatório (Figura 18). Figura 19. Editor para envio por do relatório Figura 18. Opções de exportação no preview do relatório Na versão comercial do FastReport, diferente da versão que acompanha o Delphi, existe a opção de envio do relatório por . Ao clicar no componente, um editor será mostrado. Nele, na aba configuramos para quem o relatório será enviado, assunto, corpo do e escolhendo o formato desejado (Figura 19). Na aba Account, configuramos o de envio, ou seja, as nossas configurações de para o envio do mesmo. Conclusões Vimos nesse artigo como trabalhar com o FastReport, a nova ferramenta para gerar relatórios no Delphi. Existem muitas outras possibilidades para criarmos relatórios profissionais para suas aplicações Delphi, assim, no próximo artigo veremos como criar gráficos, cross-tab, trabalhar com templates (semelhante à herança) etc. Um grande abraço a todos e até a próxima! Sobre o autor Luciano Pimenta Luciano Pimenta (NOVO DOMINIO: é desenvolvedor Delphi/C# para aplicações Web com ASP.NET, Windows com Win32 e Windows Forms com.net. Palestrante da 4ª edição da Borland Conference (BorCon) e da 1ª Delphi Conference. É MVP Embarcadero, grupo de profissionais que ajudam a divulgar o Delphi no mundo. Atualmente é desenvolvedor da SoftDesign fábrica de softwares em Porto Alegre-RS. Autor de mais de 90 artigos e de mais de 600 vídeos aulas publicadas em revistas e sites especializados, além de treinamentos presenciais e multimídias. É consultor da FP2 Tecnologia (www.fp2.com.br) onde ministra cursos de programação e banco de dados. 10

11 TConexao: Gerenciando seu projeto em ambientes Multi- Plataforma parte 1 Imagino que muitos desenvolvedores já experimentaram a situação de avaliar um protótipo em mais de um ambiente, talvez ao mesmo tempo (homologação em um ambiente em uma máquina local e entrega em outro ambiente através de uma build ). Nestes casos, pode um mesmo Banco de Dados satisfazer tais requisitos de performance e regras negociais exigidas, executando comumente um CRUD sem comprometer a rapidez do tráfego de dados atualizando de forma imperceptível os controles projetados na camada de apresentação do seu aplicativo até aí tudo bem mas e se houver a necessidade negocial de evolutivamente abstrair a camada de dados? O seu aplicativo decide qual base ele irá rodar e sem prejuízo de instabilidade este processo será transparente para o usuário final. Porque não implantar uma forma otimizada de se obter eficientemente esta característica de multiplataforma? O Framework Itil já dizia: As Empresas buscam inovar seus processos para se tornarem mais eficientes e competitivas. Inovações que dão certo transformam-se em melhores práticas. Esta implementação já foi devidamente testada, é livre, tem uma boa resposta de execução, é acessível a todos e por isso justifica-se em uma boa prática de serviço. Ambiciosamente podemos entregar este valor em potencial levando ao aumento dos resultados desejados dos clientes. Em suma, mais do que funciona. O cliente tem uma exigência que é crescente; nós devemos estar sempre preparados para prontamente atendê-las; podemos no caso de um entrega rodá-la localmente em um pen-drive ou em seu próprio HD com um baixo volume de dados utilizando um arquivo XML (apenas para verificar basicamente seu funcionamento e sem muitos requisitos de software), ou executá-la em um ambiente de desenvolvimento cliente-servidor exigindo todos os requisitos implementados até o momento, simulando realmente sua performance e demais quesitos (disponibilidade, confiabilidade, sustentabilidade, etc) escalando qual dataset ele irá acessar e em tempo de execução! Portanto, imagine um software ser independente do seu banco de dados - e aqui é referido de forma abstrata valendo-se tanto de um mero arquivo XML (construí um parser para isso), tanto para um Sistema baseado em Arquivos ou um Sistema Gerenciador de Banco de Dados: tem para estas três finalidades - e finalmente o sistema está independente de tudo: nasce a classe Tconexao. Nós temos a seguinte missão de fazer todo o meio-de-campo entre a camada de apresentação e a de negócio: enquanto as telas do cliente fazem as chamadas para as classes de negócio, elas por sua vez vão se comunicar com a nossa classe de conexão para chamar o banco de dados desejado, processando a chamada (select, update, etc) e finalmente a retornando (um dataset, stringlist, etc) - conforme pode ser entendido pela figura abaixo: Figura 01 - Como as camadas se comunicam com a classe TConexao. Enquanto que uma camada chama, outra sempre a escuta e resolve. Esta funcionalidade é interessante pela praticidade, como dito anteriormente, pois o aplicativo fica livre de implementações distintas de acesso aos dados; apenas a nossa classe de conexões fará este trabalho de carregamento e alteração deles toda visualização é produzida pelo carregamento do componente TClientDataSet ele sempre será alimentado pela nossa classe portanto eles sempre andarão juntos um sempre se comunicando com o outro e consequentemente a base em que ele acessará será sempre desligada, esperando algum evento do usuário ou sistema, como por exemplo de comitar um update ou carregar uma lista (para inicialização de uma tela ou um refresh ). Abaixo pode ser visualizado o diagrama de sequência do componente, a fim de exemplificar o seu funcionamento na prática; não é complicado perceber sua idéia básica de funcionamento. Figura 02 - Diagrama de Sequência do componente TConexao. 11

12 Agora, finalmente, o processo completo de funcionamento de acordo com a orientação a objetos juntamente com a nossa classe: nem tampouco as camadas de negócio (nosso exemplo o TUsuario) acessem quaisquer parâmetros de banco de dados ou sequer se comuniquem com ele: tudo isso é dever EXCLUSIVO da classe TConexao. Portanto, basicamente o processo de criação para um novo banco finaliza- -se aqui; não é difícil estendê-lo. Figura 03 - Explicação da operacionalização do funcionamento das camadas juntamente com as regras negociais e com a classe TConexao. Primeiros Passos com a classe TConexao: O primeiro passo a seguir é criar um data-módulo contendo a conexão com o banco; pelo menos nesta versão o nosso projeto não tem suporte a metadados; pretendo em uma próxima versão automatizar a criação e detecção de banco de dados em tempo de execução, onde os bancos são reconhecidos e listados mas apenas com um TDataModule ele será criado e destruído a cada alteração de solicitação de bases mas isso é tema para outra release deste componente. Por agora, devemos estar atentos de que nenhuma conexão deverá estar pré-configurada porque isso é o dever da classe de conexão realizar e tampouco este data-módulo recém-criado deverá estar associado ao projeto - ele deve ser removido dele. Lembre-se sempre de que a aplicação (referindo-se às telas da camada de apresentação e às classes negociais) não conhece o banco de dados a ser chamado - a classe cria o data-módulo dinamicamente, executa as operações desejadas retornando ou não o seu processamento e após sua utilização ela é destruída: e como ficam os acessos data-aware, que eram utilizados para acessar diretamente um banco de dados qualquer, editando informações até mesmo de dentro de uma célula de um TDBGrid e consequentemente gravando e comitando a transação tudo de uma vez só? A resposta agora é o TClientDataSet - ele vai representar em memória nosso DataSet e exibir com qualquer componente data-aware desejado - sem impactar diretamente uma transação com o banco de dados - qualquer transação será feita agora pela classe TConexao, pois através dela solicitará as transações com o banco de dados, cuidando totalmente de sua persistência. Continuando, o segundo passo é acrescentar neste data-módulo um ClientDataSet para cada classe que será utilizada e persistida na aplicação: como a classe de conexão e as demais utilizam a abordagem orientada a objetos, cada ator no sistema será realmente um objeto negocial; no nosso exemplo existe um ator usuário, portanto foi criada uma classe TUsuario para ele, e assim por diante. O terceiro e último passo são os métodos (personalizados) que deverão ser criados para manipulação total de seu novo acesso ao banco de dados: deverão ser implementadas chamadas de configuração, dll s necessárias (que deverão ser levadas juntas ao executável e mais o client do banco, se for o caso) e demais arquivos necessários para o seu gerenciamento, agora encapsulado pela nossa classe TConexao. Algumas recomendações: Não utilizar arquivos arquivos de conexão. Fazer diretamente de dentro da classe; Não utilizar ODBC: Fazer diretamente de dentro da classe; Não permitir que a aplicação (telas da camada de apresentação) e O importante sempre é criar um banco de dados primeiro e depois suas implementações, sempre estendendo a classe TConexao, criando uma nova subclasse que irá sobreescrever os métodos BancoExiste, FecharBanco, CarregarBanco, RecordCount, RetornaDataSet e ObterDataSet cruciais para operações básicas de funcionamento consulta, inclusão, alteração e exclusão além de outros métodos descendentes de TDataSet (recordcount). A seguir, um trecho do código-fonte do método CarregarBanco de uma conexão para o Firebird: Código 01 function TConexaoFirebird. CarregarBanco(const cdiretorio: string): Boolean; Result := True; if (cdiretorio = EmptyStr) then fvendorlib := FMyGDSVendorLib; flibraryname := FMyDBXExpress FirebirdLibraryName; fpathdatabase := FUsuariosFDB; end else if (cdiretorio = default ) then fvendorlib := FMyGDSVendorLib; flibraryname := ExtractFilePath(Application. ExeName) + IncludeTrailingPathDelimiter ( BD\FIREBIRD ) + FMyDBXExpressFire birdlibraryname; fpathdatabase := ExtractFilePath (Application.ExeName) + IncludeTrailingPathDelimiter ( BD\FIREBIRD ) + fpathdatabase; end else fvendorlib := cdiretorio + FMyGDSVendorLib; 12

13 flibraryname := cdiretorio + FMyDBXExpress FirebirdLibraryName; fpathdatabase := cdiretorio + fpathdatabase; Result := ( (DirectoryExists (fpathdatabase)) and (FileExists (flibraryname)) ); if not Result then Exit; dmfirebird := TdmFirebird. Create(nil); try try with dmfirebird. SQLConnection do Connected := False; VendorLib := dbvendorlib; LibraryName := dblibraryname; Params. Values[ Database ] := fpathdatabase + FUsuariosFDB; finally dmfirebird.sqlconnection. Connected := True; dmfirebird.sqlquery.open; except on E: Exception do Raise EInvalidDataBase. Create (EErroGeralBancoDeDados + #13#10 + E.Message); Result := False; Nossa classe tem 3 bancos pré-definidos e configurados que já podem ser prontamente utilizados em qualquer aplicação, dando início a um desenvolvimento de código mais facilitado graças a esta abstração de conexões, porque não será mais necessário criar outras conexões para o mesmo banco em diferentes forms ou um criar um data-módulo e associá-lo à aplicação, pois como isso tudo já foi feito, basta apenas chamar a classe de negócio (no nosso caso de exemplo, a TUsuario). São os Bancos: Código 02 XML DBISAM FIREBIRD Segue também para distribuição o DDL da tabela: CREATE TABLE USUARIOS ( CD_USUARIO INTEGER, NOME VARCHAR(200), DATANASCIMENTO DATE, ENDERECO VARCHAR(200), CIDADE VARCHAR(10), ESTADO VARCHAR(3), CEP VARCHAR(20), CARGO VARCHAR(200), SETOR VARCHAR(200), TELEFONE VARCHAR(20), FOTO BLOB SUB_ TYPE 0 SEGMENT SIZE 500, VLR_SALARIO FLOAT, NR_MATRICULA INTEGER ); No nosso projeto foram criados campos dos tipos String, Integer, Float e Blob. Todos os tipos serão validados de acordo com o formato suportado pelo banco isto é nem todos possuem as mesmas validações para data, ponto flutuante, etc. Um ponto importante a ser mencionado é que todos os setters são do tipo String isso facilita os testes de validação de tipo de dados antes de sua conversão para o seu formato original. Alguns campos são obrigatórios, requeridos nos setters e retornando um campos de mensagens de retorno (FCodigoMensagem e FMensagem). Uma amostra do fonte da propriedade da data de nascimento (método write): procedure TUsuario. setdatanascimento(const Value: String); //obrigatório var AuxDia, AuxMes, AuxAno, fvalue: string; fvalue := Value; fvalue := Conexao. GetDateFormat(Value); if not (Biblioteca. EmptyDate(fValue)) then 13

14 if not Biblioteca. IsValidDate(fValue) then FCodigoMensagem := CodMensagemCampoInvalido; FMensagem := Campo Data Nascimento Inválido! ; FDataNascimento := ; end else FCodigoMensagem := CodMensagemNormal; FMensagem := EmptyStr; FDataNascimento := Conexao. FormatDefaultDate(fValue); // Trim(Value); end else FDataNascimento := fvalue; FCodigoMensagem := CodMensagemCampoEmBranco; FMensagem := Campo Data Nascimento em Branco! ; Alterou := False; Agora, um exemplo do código-fonte padrão para verificar se existe um registro e em caso positivo atualizá-lo: Código 03 Query := SELECT * FROM USUARIOS WHERE NOME = + QuotedStr(Nome); if Conexao.RecordCount(Query) > 0 then //atualiza Query := UPDATE USUARIOS SET ENDERECO = + QuotedStr(Endereco) +, DATANASCIMENTO = + QuotedStr(Conexao. FormatDate(DataNascimento)) +, CIDADE = + QuotedStr(Cidade) +, ESTADO = + QuotedStr(Estado) +, CEP = + QuotedStr(CEP) +, CARGO = + QuotedStr(Cargo) +, SETOR = + QuotedStr(Setor) +, TELEFONE = + QuotedStr(Telefone) +, VLR_SALARIO = + (Conexao. FormatFloat(Salario)) +, NR_MATRICULA = + (Conexao. FormatInteger(Matricula)) + WHERE NOME = + QuotedStr(Nome); Conexao.Executar(Query); end Explicação: A classe TConexao, através de GetConexao, e utilizando o type tbdconexao (type tbdconexao = (bdconexaoxml, bdconexaodbisam, bdconexaofirebird) fará a instanciação com a subclasse desejada de acesso ao banco, e a melhor de todas as coisas é que em runtime os bancos podem ser trocados selecionando, alterando, etc com a maior versatilidade! Em suma, toda vez que uma classe quiser acessar um banco, ela na verdade acessa uma instância da classe de conexão (TConexao), onde esta por sua vez referenciará-lo em memória. Toda a interface de comunicação e operacionalização será realizada somente através dela, estando disponível até ser destruída. Abaixo, uma seleção de alguns métodos importantes utilizados na classe TConexao - detalhe para os métodos ObterDataSet, CarregarFoto e GetConexao (sintaxe: Conexao := Conexao.GetConexao(fbdConexao)) - que são os métodos mais importantes do processo de comunicação entre os objetos de negócio e dados. Código 04 procedure TConexao. ObterDataSet(const mydataset: TDataSet; var myclientdataset: TClientDataSet); var fdataset: TDataSet; i {, k}: integer; FName: string; if not Assigned(myDataSet) then Exit; if not Self.BancoInstanciado then Application.MessageBox(PCha r(format(ebanconaoinstanciado, [FUsuariosFDB])), ETituloErro, MB_OK + MB_ICONERROR); 14

15 Abort; fdataset := TClientDataSet(myDataSet); fdataset.first; if not myclientdataset.active then myclientdataset. CreateDataSet else myclientdataset. EmptyDataSet; myclientdataset. DisableControls; try while not fdataset.eof do myclientdataset.insert; for i := 0 to fdataset. FieldCount - 1 do // myclientdataset. Fields[i].Assign(fDataSet. Fields[i]); myclientdataset. FieldDefs.Items[i].DataType := (fdataset.fielddefs.items[i]. DataType); myclientdataset. FieldDefs.Items[i].DisplayName := (fdataset.fielddefs. Items[i].DisplayName); case myclientdataset. FieldDefs.Items[i].DataType of ftstring: myclientdataset.fields[i]. AsString := Self. DefaultDateFormat2(fDataSet. Fields[i].AsString); ftdate: myclientdataset.fields[i]. AsString := Self. DefaultDateFormat2(fDataSet. Fields[i].AsString); ftfloat: myclientdataset.fields[i]. AsFloat := Biblioteca. ArredondaComDecimais( fdataset. Fields[i].AsFloat, 2); else myclientdataset. Fields[i].AsString := fdataset.fields[i].asstring; myclientdataset.post; fdataset.next; finally myclientdataset. EnableControls; procedure TConexao. ObterDataSet(const mydataset: TDataSet; var mystringlist: TStringList); var fdataset: TDataSet; i: integer; if not Assigned(myDataSet) then Exit; fdataset := TClientDataSet(myDataSet); fdataset.first; if not Assigned(myStringList) then mystringlist := TStringList.Create; while not fdataset.eof do mystringlist.add(fdataset. Fields[0].AsString); fdataset.next; function TConexao. RecordCount(Query: String): integer; if Self is TConexaoDBISAM then Result := TConexaoDBISAM(Self). RecordCount(Query) else if Self is TConexaoXML then Result := TConexaoXML(Self). RecordCount(Query) else if Self is TConexaoFirebird then Result := TConexaoFirebird(Self). RecordCount(Query); function TConexao. 15

16 RecordCount(const mydataset: TDataSet): integer; Result := (TDataSet(myDataSet). RecordCount); function TConexao. RetornaDataSet(Query: String): TDataSet; if Self is TConexaoDBISAM then Result := TConexaoDBISAM(Self). RetornaDataSet(Query) else if Self is TConexaoXML then Result := TConexaoXML(Self). ExecutaSelect(Query) else if Self is TConexaoFirebird then Result := TConexaoFirebird(Self). RetornaDataSet(Query); function TConexao. CarregarFoto(const MyFile: string; const mydataset: TDataSet; const MyFieldName: string = FOTO ): Boolean; function GetTableNameFromXMLSyntax(const mysqlxml: string): string; if System. Pos(AnsiUpperCase( where ), AnsiUpperCase(mySQLXML)) > 0 then Result := trim(before(af ter(ansiuppercase(mysqlxml), FROM ), WHERE )); var S: TFileStream; fclientdataset: TClientDataSet; auxtablename: string; auxfilterfields: string; if Self is TConexaoXML then if (Self.FiltroXML = ) then Exit; auxtablename := GetTableNameFromXMLSyntax(Self. FiltroXML); auxtablename := auxtablename +.xml ; fclientdataset := TConexaoXML(Self). CarregarBanco(auxTableName); auxfilterfields := Before(after(AnsiUpperCase(Self. FiltroXML), WHERE ), ORDER ); fclientdataset.filter := auxfilterfields; fclientdataset.filtered := True; try fclientdataset.close; fclientdataset.open; if not (fclientdataset. state in dseditmodes) then fclientdataset.edit; TBlobField(fClientDataSet. FieldByName(MyFieldName)). LoadFromFile(MyFile); fclientdataset.post; fclientdataset. SaveToFile(TConexaoXML(Self). CaminhoXMLAtual, dfxml); except on E: Exception do Raise EInvalidDataBase. Create(EErroGeralBancoDeDados + #13#10 + E.Message); Result := False; end else if Self is TConexaoDBISAM then S := TFileStream. Create(MyFile,fmOpenRead); with (mydataset) do try try Edit; TBlobField(Fie 16

17 ldbyname(myfieldname)). LoadFromStream(S); Post; except on E: Exception do Raise EInvalidDataBase. Create(EErroGeralBancoDeDados + #13#10 + E.Message); Result := False; finally S.Free; end else if Self is TConexaoFirebird then fclientdataset := dmfirebird.clusuario; try fclientdataset.close; fclientdataset.open; fclientdataset.refresh; if not (fclientdataset. state in dseditmodes) then fclientdataset.edit; TBlobField(fClientDataSet. FieldByName(MyFieldName)). LoadFromFile(MyFile); fclientdataset.post; fclientdataset. ApplyUpdates(0); except on E: Exception do Raise EInvalidDataBase. Create(EErroGeralBancoDeDados + #13#10 + E.Message); Result := False; function TConexao. GetConexao(const typeconexao: tbdconexao): TConexao; if Assigned(Result) then closeconexao; case typeconexao of bdconexaodbisam: Result := TConexaoDBISAM.create; bdconexaoxml: Result := TConexaoXML.create; bdconexaofirebird: Result := TConexaoFirebird.create; Nós só precisamos também criar uma classe negocial no nosso caso a classe de usuários TUsuario que fará a ponte entre a camada de apresentação com ela, provendo por meio do encapsulamento funcionalidades básicas negociais disponíveis para os módulos de apresentação requeridos não é interessante modularizar? Alterações em apenas um lugar e todas as chamadas automaticamente atualizadas abstração gera produtividade se bem empregada, como demonstra esta nossa construção. Abrir um conjunto de dados (select) agora ficou mais simples de escrever - somente uma chamada de método (no caso, AbreTabelaUsuarios ) é necessária. Evoluindo o processo, temos inúmeras vantagens: Implementação da Orientação a Objetos: como citado acima, é a facilidade em reutilização de código em módulos, outros sistemas, etc; Abstração realizada pelas classes de conexão: não é preciso (e nem deve) executar quaisquer comandos SQL ou acessar quaisquer base de dados diretamente na camada de apresentação; Encapsulamento de DataSets: essa nossa infraestrutura padronizou a nomenclatura básica de execução de SQL s, onde cada sentença é uma constante passada como parâmetro em um método de obter dataset do objeto TConexao. Logo abaixo segue um exemplo destacado deste item: Código 05 function TUsuario. AbreTabelaUsuarios: TDataSet; Result := Conexao.RetornaData Set(sqlSelectAllFieldsOrderByNo me); Abaixo é mostrado o método SetDataBase, onde é solicitada a troca de um banco. Note que o nome dos bancos fazem parte 17

18 de um tipo chamado tbdconexao, como citado acima, que é referenciado como um parâmetro constante: type tbdconexao = (bdconexaoxml, bdconexaodbisam, bdconexaofirebird); procedure TForm1. cbselecionabdchange(sender: TObject); case cbselecionabd.itemindex of 0: Usuario. SetDataBase(bdConexaoXML); 1: Usuario. SetDataBase(bdConexaoDBISAM); 2: Usuario. SetDataBase(bdConexaoFirebird); Usuario. CarregaUsuarios(ClUsuario); mskcarreganomes.text := ClUsuarioNome.AsString; mskcarreganomesexit(self); Nossa classe TConexao também possui métodos de formatação específicos nossos próprios FormatDate, FormatFloat, dentre outros. Isso porque o Firebird aceita o formato yyyy-mm-dd enquanto que o XML, por exemplo, aceita somente o formato dd/mm/yyyy. Já o FormatInteger formata o XML para o formato (com aspas simples) meu número enquanto que o Firebird aceita tanto o número puro (sem aspas) quanto com aspas simples. Já o banco DBISAM aceita o formato numérico somente sem aspas. Portanto, a classe fará o intercâmbio de formatos distintos de acordo com a instância apropriada. Uma coisa interessante é o método GetNextId: ele tem a finalidade de recuperar o próximo valor de um código, por exemplo, para inseri-lo como uma chave-primária, ou apenas um valor normal, etc; são várias as possibilidades de utilização. Ele faz o select de um Max(coluna)+1, para retornar sempre o próximo item sequencial de um registro. Um detalhe especial é como o processo é feito para o nosso banco XML ele faz um Max em um campo agregado de um TClientDataSet em criado em tempo de execução! Código 06 function TConexaoFirebird. GetNextId(const ffieldname: string; const ftable: string): string; var fid: string; fid := TCustomSQLDataSet(Self.Retorna DataSet(Format(sqlMaxIndexFrom FieldNameFormat1, [ffieldname, ftable]))).fields[0].asstring; if (fid = ) then fid := 1 ; Result := fid; Finalmente, o método CarregaUsuarios alimenta um objeto TClientData- Set de retorno, onde como já mencionado anteriormente armazenará dados apenas read-only : a aplicação jamais sensibilizará-los diretamente na base de dados. Todo este acesso somente a classe TConexao realizará e de forma abstrata. E isso é um dos pontos mais interessantes deste projeto: imagina trocar um banco de dados com sua aplicação rodando, ou enviá-la ao cliente em uma demonstração do produto com algumas funcionalidades disponíveis e na versão paga alterar o banco de dados para uma nova base de dados mais robusta e profissional; esta funcionalidade tornará sem dúvida sua aplicação isenta de implementações amarradas de dentro da camada de apresentação (método tradicional de programação), trazendo mais produtividade em termos de manutenção e desenvolvimento, e consequentemente mais agilidade e praticidade durante todo o ciclo de vida da aplicação. Com isso, finaliza-se a primeira parte deste artigo. Na próxima revista falaremos sobre a implementação de um parser SQL para XML, utilização do componente de minha autoria para visualização e validação de dados, interagindo por debaixo dos panos o TMaskeditHV (explicado em edições anteriores), explicação sobre importantes métodos da nossa classe e finalmente o desenvolvimento de nosso programa de exemplo utilizando esta nossa classe, em uma simulação real de sua implementação, obtendo e alternando bases de dados distintas em tempo de execução. Até a próxima, e boa leitura! Sobre o autor Hamden Vogel Analista de Sistemas pós-graduado em Engenharia de Software pela UPIS e Programador Delphi com larga experiência desde 2000, tem desenvolvido e vendido softwares em Delphi para a África e Estados Unidos, além do mercado nacional. Colaborou com dicas e componentes para sites especializados em Delphi. Também desenvolve em outras linguagens como C/C++, ASP, PHP e.net. 18

19 Android Trabalhando com o TouchScreen Um dos recursos mais poderosos e fascinantes no desenvolvimento utilizando o sistema android é a possibilidade de poder interceptar eventos na tela com o toque do dedo, o TouchScreen. Temos classes específicas para este trabalho, a minha idéia neste mês é descrever as principais funcionalidades destas classes junto com seus métodos criando exemplos didáticos e de grande utilidade no dia-a-dia. Eventos de Entrada ( Input Events ) Existem várias maneiras de interceptar os eventos de interação do usuário com o aplicativo. Ao considerar eventos dentro de sua interface de usuário, a abordagem é capturar os eventos dentro da região denominada View, fornecendo os meios para fazê-lo. Quando compomos um layout, fazemos o uso de quantas Views forem necessárias, neste caso, podemos observar vários métodos de retorno de chamada pública que parecem úteis para os denominados eventos de InPut(entrada) e OutPut(saída). Esses métodos são chamados pelo Android quando a respectiva ação ocorre no objeto em questão. Por exemplo, quando um componente (um botão) é tocado, o método ontouchevent() é acionado no objeto. No entanto, a fim de interceptar isso, você deve estender a classe e substituir o método. No entanto, ampliando cada objeto View, a fim de lidar com um evento como esse não seria prático. É por isso que a classe View também contém uma coleção de interfaces aninhadas com retornos de chamada que poderemos utilizar com uma maior facilidade. Estas interfaces, chamadas de Listeners ( ouvintes ), são o seu bilhete para capturar a interação do usuário com a interface do aplicativo. Temos a possibilidade de estender uma classe View, a fim de construir por exemplo um componente personalizado. Outra situação é estender a classe Button para fazer algo mais sofisticado. Neste caso, poderemos definir os comportamentos de eventos padrão para sua classe usando os manipuladores de eventos, os ( Event Handlers ) para serem implementados, sendo: onkeydown (int, KeyEvent) - Chamado quando apertamos alguma tecla. onkeyup (int, KeyEvent) - Chamado quando soltamos alguma tecla. ontrackballevent (MotionEvent) - Chamado quando ocorre um evento de movimento. ontouchevent (MotionEvent) - Chamado quando ocorre um evento de movimento da tela com o toque do dedo. onfocuschanged (boolean, int, Rect) - Chamado quando recebemos ou perdemos o foco. Demonstrei os métodos acima a fim de apresentar os manipuladores existentes. Daremos importância ao evento OnTouchEvent. Entendendo a classe MotionEvent A classe base para suporte TouchScreen é a classe MotionEvent onde é passado para as Views através do método ontouchevent () (abordado anteriormente) podendo também ser sobrecarregado. Vejamos na Imagem 01 a hierarquia desta classe para maiores informações. Manipuladores de Eventos ( Event Handlers ) De acordo com a própria documentação do Android, quando estamos construindo um componente a partir da classe View teremos vários métodos Figura 01: Estrutura da classe MotionEvent. A classe MotionEvent contém inúmeros métodos e constantes como 19

20 por exemplo: informações das coordenadas X, Y e capturas de movimentos. Principais métodos e constantes - GetAction(): Este método recebe a ação que foi executada, fornecendo as seguintes constantes para determinar a ação. ACTION_DOWN: Ação que ocorre quando um toque foi iniciado contendo o local de partida inicial do movimento. ACTION_UP: Esta constante é acionada quando um gesto pressionado tenha terminado, contendo a localização final, bem como todos os pontos intermediários desde o último movimento. ACTION_MOVE: Ação que ocorre entre as constantes ACTION_DOWN e ACTION_UP. (A movimentação em si) Todas as constantes abordadas acima retornam um valor inteiro. - GetY(): Este método retorna um valor do tipo Float das coordenadas Y (linha vertical). Este valor pode ser transformado para inteiro. - GetX():Este método retorna um valor do tipo Float das coordenadas X (Linha horizontal). Este valor pode ser transformado para inteiro. Como foi discutido anteriormente, devemos utilizar a classe View para implementarmos o método OnTouchEvent(). Classe CriarImagem.java Antes de iniciarmos a codificação desta classe será necessário adicionar uma imagem qualquer em nosso aplicativo. Basta copiar e colar no diretório res/drawable-hdpi. Ver Imagem 03. Exemplo 1 - Movimentando uma Imagem com o toque do dedo Nos exemplos deste artigo iremos envolver todos os conceitos aprendidos anteriormente sendo que neste primeiro criaremos uma imagem dinamicamente. Esta imagem será movimentada com o dedo e usando o TouchScreen na tela do dispositivo. Para isto descreverei todos os passos daqui pra frente. Inicie uma aplicação do Zero clicando em File/New/Android Project... criando uma classe para estender (extends) para a interface View. Clique sobre o pacote e com o botão direito escolha New/Class. É nesta classe onde criaremos todos os métodos responsáveis pela movimentação da Imagem em questão. Ver Figura 02. Figura 03: Imagem adicionada no projeto. Observação Importante: Esta imagem deverá ser do tipo.png ou jpg possuindo o nome escrito especificamente em caixa baixa para assim evitar problemas de compilação. Logo em seguida importaremos as bibliotecas que serão utilizadas ao decorrer do desenvolvimento. Código 01 package pct.android_ OnTouchEvent; Figura 02: Criando a classe CriarImagem.java. import android.content.context; import android.graphics.canvas; import android.graphics. drawable.drawable; import android.util. AttributeSet; import android.view.motionevent; 20

Microsoft Visual Studio Express 2012 for Windows Desktop

Microsoft Visual Studio Express 2012 for Windows Desktop Microsoft Visual Studio Express 2012 for Windows Desktop Apresentação da ferramenta Professor: Danilo Giacobo Página pessoal: www.danilogiacobo.eti.br E-mail: danilogiacobo@gmail.com 1 Introdução Visual

Leia mais

Fortes Report Parte 1 Desenvolvendo o Primeiro Relatório

Fortes Report Parte 1 Desenvolvendo o Primeiro Relatório Fortes Report Parte 1 1 Fortes Report Parte 1 Desenvolvendo o Primeiro Relatório Amigos, fazer relatórios é o famoso mal necessário, que particularmente eu não me incomodo em desenvolver, até porque, geralmente

Leia mais

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Trabalhando com conexão ao banco de dados MySQL no Lazarus. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011 Trabalhando com conexão ao banco de dados MySQL no Lazarus Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011 Edição 4 O Componente Trabalhando com conexão ao banco de dados MySQL no Lazarus Ano: 03/2011

Leia mais

Programação para Android. Aula 08: Persistência de dados SQL

Programação para Android. Aula 08: Persistência de dados SQL Programação para Android Aula 08: Persistência de dados SQL Persistência de dados Na maioria das aplicações precisamos ter algum tipo de persistência de dados. Para guardar informações de forma persistente

Leia mais

Programação para Dispositivos Móveis

Programação para Dispositivos Móveis Programação para Dispositivos Móveis Fatec Ipiranga Análise e Desenvolvimento de Sistemas Aula 05 Programando formularios, activities e intents. Dalton Martins dmartins@gmail.com São Paulo, Março, 2012

Leia mais

Conhecendo o Visual FoxPro 8.0 Parte 2

Conhecendo o Visual FoxPro 8.0 Parte 2 AULA Conhecendo o Visual FoxPro 8.0 Parte 2 Na aula anterior, vimos sobre: a) Janela de comando b) Gerenciador de Projetos c) Database Designer e Table Designer Prosseguiremos então a conhecer as ferramentas

Leia mais

GERADOR DE RELATÓRIOS WINREPORT VERSÃO 2.0. Conteúdo

GERADOR DE RELATÓRIOS WINREPORT VERSÃO 2.0. Conteúdo GERADOR DE RELATÓRIOS WINREPORT VERSÃO 2.0 Este manual foi desenvolvido com o objetivo de documentar as principais funcionalidades do Gerador de Relatórios WinReport versão 2.0. Conteúdo 1. Tela Principal...

Leia mais

Manual de utilização GDS Touch PAINEL TOUCH-SCREEN CONTROLE RESIDENCIAL INTERATIVO. Versão: 1.0 Direitos reservados.

Manual de utilização GDS Touch PAINEL TOUCH-SCREEN CONTROLE RESIDENCIAL INTERATIVO. Versão: 1.0 Direitos reservados. Bem Vindo GDS TOUCH Manual de utilização GDS Touch PAINEL TOUCH-SCREEN CONTROLE RESIDENCIAL INTERATIVO O GDS Touch é um painel wireless touchscreen de controle residencial, com design totalmente 3D, interativo

Leia mais

Android Binding. Implementando o padrão de projeto MVVM com MVVM_. Saiba como criar um projeto utilizando o padrão de projeto MVVM no Android

Android Binding. Implementando o padrão de projeto MVVM com MVVM_. Saiba como criar um projeto utilizando o padrão de projeto MVVM no Android MVVM_ Implementando o padrão de projeto MVVM com Android Binding Saiba como criar um projeto utilizando o padrão de projeto MVVM no Android O padrão de projeto MVVM O MVVM (Model-View-ViewModel) foi divulgado

Leia mais

Microsoft Excel 2010

Microsoft Excel 2010 Microsoft Excel 2010 Feito por Gustavo Stor com base na apostila desenvolvida por Marcos Paulo Furlan para o capacitação promovido pelo PET. 1 2 O Excel é uma das melhores planilhas existentes no mercado.

Leia mais

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL.

Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL. Listando itens em ComboBox e gravando os dados no Banco de Dados MySQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2012 Edição 7 Listando e Gravando Listando itens em ComboBox e gravando os dados no

Leia mais

Índice. Tutorial para Desenvolvimento de Conduits em Delphi

Índice. Tutorial para Desenvolvimento de Conduits em Delphi Índice Índice...1 Desenvolvendo Conduits...2 (Passo a Passo)...2 Criando um Arquivo.mdb... 2 Arquivos...6 Instalando os componentes... 7 Recompilando os Comonentes do Delphi...13 Configurando a Conexão

Leia mais

Iniciando o MySQL Query Brower

Iniciando o MySQL Query Brower MySQL Query Brower O MySQL Query Browser é uma ferramenta gráfica fornecida pela MySQL AB para criar, executar e otimizar solicitações SQL em um ambiente gráfico. Assim como o MySQL Administrator foi criado

Leia mais

Interface para Regras de Negócios em Multi-Banco

Interface para Regras de Negócios em Multi-Banco 1 Interface para Regras de Negócios em Multi-Banco MARCELO JALOTO (marcelo@jaloto.net) é graduado no curso superior Projetos e Gestão de Redes de Computadores e formado no curso Técnico em Processamento

Leia mais

Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@turing.unicamp.br) Sumário

Centro de Computação - Unicamp Gerência de Atendimento ao Cliente (e-mail:apoio@turing.unicamp.br) Sumário Sumário Conceitos Microsoft Access 97... 01 Inicialização do Access... 02 Convertendo um Banco de Dados... 03 Criando uma Tabela... 06 Estrutura da Tabela... 07 Propriedades do Campo... 08 Chave Primária...

Leia mais

Desenvolvimento para Android Prá3ca 3. Prof. Markus Endler

Desenvolvimento para Android Prá3ca 3. Prof. Markus Endler Desenvolvimento para Android Prá3ca 3 Prof. Markus Endler Exercício 3.1 Solicitando permissão para abrir uma página Web ü Criaremos uma Ac.vity com um EditText (para entrada de uma URL), um Bu?on e uma

Leia mais

Revisando sintaxes SQL e criando programa de pesquisa. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011

Revisando sintaxes SQL e criando programa de pesquisa. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011 Revisando sintaxes SQL e criando programa de pesquisa. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011 Edição 5 SELECT * FROM Minha_memoria Revisando Sintaxes SQL e Criando programa de Pesquisa Ano:

Leia mais

Novas Funcionalidades do MyABCM v.4.0

Novas Funcionalidades do MyABCM v.4.0 Novas Funcionalidades do MyABCM v.4.0 Seguem abaixo as novas funcionalidades e melhorias do MyABCM e um resumo de como utilizar essas funcionalidades. 1. Nova funcionalidade para aplicação de fatores de

Leia mais

Conhecendo o Visual FoxPro 8.0 Parte 3

Conhecendo o Visual FoxPro 8.0 Parte 3 AULA Conhecendo o Visual FoxPro 8.0 Parte 3 Continuando nossa saga pelas ferramentas do Visual FoxPro 8.0, hoje vamos conhecer mais algumas. A Ferramenta Class Designer A Class Designer é a ferramenta

Leia mais

Usando o evento OnFilterRecord para filtrar ClientDataSets

Usando o evento OnFilterRecord para filtrar ClientDataSets Usando o evento OnFilterRecord para filtrar ClientDataSets O objetivo mais importante no desenvolvimento de um programa é fornecer ao cliente maior liberdade para usar as interfaces e ao mesmo tempo tornar

Leia mais

( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO DISPOSITIVOS MOVEIS ANDROID STUDIO

( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO DISPOSITIVOS MOVEIS ANDROID STUDIO Serviço Nacional de Aprendizagem Comercial E.E.P. Senac Pelotas Centro Histórico Programa Nacional de Acesso ao Ensino Técnico e Emprego Curso Técnico em Informática ( TIAGO DOS SANTOS MENDES ) PROGRAMAÇÃO

Leia mais

Desenvolvimento com Android Studio. Aula 02 Widgets, Manipulação de Dados e Programação de Eventos

Desenvolvimento com Android Studio. Aula 02 Widgets, Manipulação de Dados e Programação de Eventos Desenvolvimento com Android Studio Aula 02 Widgets, Manipulação de Dados e Programação de Eventos Widgets TextView O Widget TextView é utilizado para apresentar um texto não editável na tela. Qualquer

Leia mais

Android Core. Felipe Silveira felipesilveira.com.br. Aula 6

Android Core. Felipe Silveira felipesilveira.com.br. Aula 6 Android Core Felipe Silveira felipesilveira.com.br Aula 6 Aplicações I Desenvolvimento de Aplicações Android SDK SDK https://developer.android.com/sdk Android SDK Android SDK: Eclipse + ADT plugin + Android

Leia mais

Desenvolvimento Android. http://www.larback.com.br

Desenvolvimento Android. http://www.larback.com.br Desenvolvimento Android http://www.larback.com.br Introdução ao Android O Android é a resposta da Google ao mercado crescente de dispositivos móveis. É uma nova plataforma de desenvolvimento baseado no

Leia mais

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS

PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS Componentes Visuais Gerenciadores de Layouts Professor: Danilo Giacobo OBJETIVOS DA AULA Apresentar os conceitos básicos da programação de interfaces visuais para Android

Leia mais

Desenvolvimento com Android Studio Aula 01 Instalação e Configuração do Ambiente de Desenvolvimento, Estrutura de um projeto Android

Desenvolvimento com Android Studio Aula 01 Instalação e Configuração do Ambiente de Desenvolvimento, Estrutura de um projeto Android Desenvolvimento com Android Studio Aula 01 Instalação e Configuração do Ambiente de Desenvolvimento, Estrutura de um projeto Android Instalação e Configuração do Ambiente de Desenvolvimento Instalação

Leia mais

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Display de 7. PdP. Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos TUTORIAL Display de 7 Segmentos Autor: Tiago Lone Nível: Básico Criação: 16/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

AVISO. O conteúdo deste documento é de propriedade intelectual exclusiva da GVDA- SA Sistemas e está sujeito a alterações sem aviso prévio.

AVISO. O conteúdo deste documento é de propriedade intelectual exclusiva da GVDA- SA Sistemas e está sujeito a alterações sem aviso prévio. AVISO O conteúdo deste documento é de propriedade intelectual exclusiva da GVDA- SA Sistemas e está sujeito a alterações sem aviso prévio. Nenhuma parte desta publicação pode ser reproduzida nem transmitida

Leia mais

Aula Extra Conexão ODBC para aplicações Delphi 7 que usam SQL Server 2005

Aula Extra Conexão ODBC para aplicações Delphi 7 que usam SQL Server 2005 Nome Número: Série Aula Extra Conexão ODBC para aplicações Delphi 7 que usam SQL Server 2005 Proposta do projeto: Competências: Compreender a orientação a objetos e arquitetura cliente-servidor, aplicando-as

Leia mais

Microsoft Visual Studio 2010 C# Volume II

Microsoft Visual Studio 2010 C# Volume II Microsoft Visual Studio 2010 C# Volume II Apostila desenvolvida pelos Professores Ricardo Santos de Jesus e Rovilson de Freitas, para as Disciplinas de Desenvolvimento de Software I e II, nas Etecs de

Leia mais

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI FORMULÁRIO COM ABAS E BUSCAS DE REGISTROS

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI FORMULÁRIO COM ABAS E BUSCAS DE REGISTROS ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI FORMULÁRIO COM ABAS E BUSCAS DE REGISTROS FORMULÁRIOS COM ABAS Trabalhar com abas (ou guias) é um recurso

Leia mais

Dando um passeio no ASP.NET

Dando um passeio no ASP.NET Dando um passeio no ASP.NET Por Mauro Sant Anna (mas_mauro@hotmail.com). Mauro é um MSDN Regional Director, consultor e instrutor. O principal objetivo da arquitetura.net é permitir ao usuário o fácil

Leia mais

Excel 2010 Modulo II

Excel 2010 Modulo II Excel 2010 Modulo II Sumário Nomeando intervalos de células... 1 Classificação e filtro de dados... 3 Subtotais... 6 Validação e auditoria de dados... 8 Validação e auditoria de dados... 9 Cenários...

Leia mais

CRIAÇÃO DE RELATÓRIOS EM DELPHI

CRIAÇÃO DE RELATÓRIOS EM DELPHI PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO CRIAÇÃO DE RELATÓRIOS EM DELPHI Relatórios são tão importantes quanto as consultas, com a vantagem de poder imprimir os valores armazenados nos Bancos

Leia mais

Avançado. Visão geral do ambiente do VBA Retornar à planilha Excel

Avançado. Visão geral do ambiente do VBA Retornar à planilha Excel Avançado Trabalhando com VBA Descubra a linguagem de programação do Microsoft Office e torne-se um expert no desenvolvimento de funções, macros e planilhas eletrônicas Nas edições anteriores da revista

Leia mais

Microsoft Office Excel

Microsoft Office Excel 1 Microsoft Office Excel Introdução ao Excel Um dos programas mais úteis em um escritório é, sem dúvida, o Microsoft Excel. Ele é uma planilha eletrônica que permite tabelar dados, organizar formulários,

Leia mais

Desenvolvendo Aplicações Web com NetBeans

Desenvolvendo Aplicações Web com NetBeans Desenvolvendo Aplicações Web com NetBeans Aula 3 Cap. 4 Trabalhando com Banco de Dados Prof.: Marcelo Ferreira Ortega Introdução O trabalho com banco de dados utilizando o NetBeans se desenvolveu ao longo

Leia mais

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos

Memória Flash. PdP. Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006. Pesquisa e Desenvolvimento de Produtos TUTORIAL Memória Flash Autor: Tiago Lone Nível: Básico Criação: 11/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

ÍNDICE. Sobre o SabeTelemarketing 03. Contato. Ícones comuns à várias telas de gerenciamento. Verificar registros 09. Tela de relatórios 09

ÍNDICE. Sobre o SabeTelemarketing 03. Contato. Ícones comuns à várias telas de gerenciamento. Verificar registros 09. Tela de relatórios 09 ÍNDICE Sobre o SabeTelemarketing 03 Ícones comuns à várias telas de gerenciamento Contato Verificar registros 09 Telas de cadastro e consultas 03 Menu Atalho Nova pessoa Incluir um novo cliente 06 Novo

Leia mais

Programa de Dispositivos Móveis

Programa de Dispositivos Móveis Aula 02 Programa de Dispositivos Móveis A Classe Activity A classe Actvity é similar a classe JFrame do Swing representa basicamente uma tela. Quase todas as atividades interagem com o usuário, então ela

Leia mais

Projeto Supermercado - Produtos

Projeto Supermercado - Produtos OBJETIVO: Este projeto possibilitará fazer a manutenção dos dados da tabela de Produtos. Didaticamente, ele permite ao programador iniciante ter os primeiros contatos com os objetos de visualização individual

Leia mais

Relatórios com Quickreport

Relatórios com Quickreport C A P Í T U L O 6 Relatórios com Quickreport O QuickReport permite a criação de relatórios que podem ser impressos diretamente a partir do Delphi. Ele elimina alguns problemas verificados em ferramentas

Leia mais

DESENVOLVENDO SOLUÇÕES COM VISUAL FOXPRO 8 E 9

DESENVOLVENDO SOLUÇÕES COM VISUAL FOXPRO 8 E 9 DESENVOLVENDO SOLUÇÕES COM VISUAL FOXPRO 8 E 9 Í N D I C E Capítulo 1 - O Início de Tudo 1 Reunindo todas as informações necessárias 2 Instalando o Visual FoxPro 2 Configurando o Visual FoxPro 7 Capítulo

Leia mais

Parte I Introdução ActionScript_30_01.indd 1 5/11/2010 08:29:29

Parte I Introdução ActionScript_30_01.indd 1 5/11/2010 08:29:29 Parte I Introdução ActionScript_30_01.indd 1 5/11/2010 08:29:29 ActionScript_30_01.indd 2 5/11/2010 08:29:34 Aprendendo uma nova linguagem... ActionScript é uma linguagem e, como um novo idioma ou a linguagem

Leia mais

AVISO. Treinamento GVcollege Módulo Ficha Complementar

AVISO. Treinamento GVcollege Módulo Ficha Complementar AVISO O conteúdo deste documento é de propriedade intelectual exclusiva da GVDASA Sistemas e está sujeito a alterações sem aviso prévio. Nenhuma parte desta publicação pode ser reproduzida nem transmitida

Leia mais

manual Versão 0.3 Português do Brasil (Brazilian Portuguese) FunTester 0.7c

manual Versão 0.3 Português do Brasil (Brazilian Portuguese) FunTester 0.7c manual Versão 0.3 Português do Brasil (Brazilian Portuguese) FunTester 0.7c Versões deste documento 0.3 Melhoria da Introdução; Descritos detalhes sobre Instalação e Extensões de Arquivos; Descritos tópicos

Leia mais

Servidores REST usando TMS Aurelius e DataSnap

Servidores REST usando TMS Aurelius e DataSnap Servidores REST usando TMS Aurelius e DataSnap Introdução Em artigo anterior a framework na Active Delphi, apresentados o TMS Aurelius, uma framework para mapeamento objeto-relacional (ORM) e mostramos

Leia mais

Conhecendo o Visual FoxPro 8.0 Parte 1

Conhecendo o Visual FoxPro 8.0 Parte 1 AULA Conhecendo o Visual FoxPro 8.0 Parte 1 Em qualquer profissão é importante que se conheça bem as ferramentas que serão usadas para executar o trabalho proposto. No desenvolvimento de software não é

Leia mais

MVREP- Manual do Gerador de Relatórios. ÍNDICE

MVREP- Manual do Gerador de Relatórios. ÍNDICE ÍNDICE ÍNDICE... 1 CAPÍTULO 01 PREPARAÇÃO DO AMBIENTE... 2 1.1 IMPORTAÇÃO DO DICIONÁRIO DE DADOS... 2 CAPÍTULO 02 CADASTRO E CONFIGURAÇÃO DE RELATÓRIOS... 4 2.1 CADASTRO DE RELATÓRIOS... 4 2.2 SELEÇÃO

Leia mais

Android e Bancos de Dados

Android e Bancos de Dados (Usando o SQLite) Programação de Dispositivos Móveis Mauro Lopes Carvalho Silva Professor EBTT DAI Departamento de Informática Campus Monte Castelo Instituto Federal de Educação Ciência e Tecnologia do

Leia mais

Criação Visual de Consultas. Curso: Técnico em Informática (Integrado) Disciplina: Banco de Dados Prof. Abrahão Lopes abrahao.lopes@ifrn.edu.

Criação Visual de Consultas. Curso: Técnico em Informática (Integrado) Disciplina: Banco de Dados Prof. Abrahão Lopes abrahao.lopes@ifrn.edu. Criação Visual de Consultas Curso: Técnico em Informática (Integrado) Disciplina: Banco de Dados Prof. Abrahão Lopes abrahao.lopes@ifrn.edu.br Introdução A complexidade dos sistemas informatizados atuais

Leia mais

Guia de Consulta Rápida. PHP com XML. Juliano Niederauer. Terceira Edição. Novatec

Guia de Consulta Rápida. PHP com XML. Juliano Niederauer. Terceira Edição. Novatec Guia de Consulta Rápida PHP com XML Juliano Niederauer Terceira Edição Novatec Copyright 2002 da Novatec Editora Ltda. Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. É proibida

Leia mais

4 Criação de macros e introdução à linguagem VBA

4 Criação de macros e introdução à linguagem VBA 4 Criação de macros e introdução à linguagem VBA Vinicius A. de Souza va.vinicius@gmail.com São José dos Campos, 2011. 1 Sumário Tópicos em Microsoft Excel 2007 Introdução à criação de macros...3 Gravação

Leia mais

PL/SQL Developer. Solução para Ambiente de Desenvolvimento Integrado Oracle

PL/SQL Developer. Solução para Ambiente de Desenvolvimento Integrado Oracle Solução para Ambiente de Desenvolvimento Integrado Oracle PL/SQL Developer é um ambiente de desenvolvimento integrado (IDE) que foi especialmente destinado ao desenvolvimento de programas armazenados em

Leia mais

Impressão de Relatórios com Data Report Professor Sérgio Furgeri. A figura seguinte ilustra a geração de um relatório a partir de uma tabela de...

Impressão de Relatórios com Data Report Professor Sérgio Furgeri. A figura seguinte ilustra a geração de um relatório a partir de uma tabela de... OBJETIVOS DA AULA: Demonstrar a utilização da ferramenta Data Report do Visual Basic para a geração de relatórios. Apresentar os procedimentos para a criação de um relatório simples a partir dos dados

Leia mais

Relatórios com Rave Reports

Relatórios com Rave Reports Relatórios com Rave Reports Neste tutorial, você aprenderá: Relatório Simples Relatório com quebra de grupo Totalizações Preparando a Aplicação Tomando como base a nossa aplicação final, vamos selecionar

Leia mais

( JUDE Community 5.1 2006/2007 ) Por Denize Terra Pimenta Outubro/2007

( JUDE Community 5.1 2006/2007 ) Por Denize Terra Pimenta Outubro/2007 Tutorial JUDE ( JUDE Community 5.1 2006/2007 ) Por Denize Terra Pimenta Outubro/2007 Ferramenta CASE UML Índice Introdução... 2 Download e Instalação... 2 Apresentação da Ferramenta... 2 Salvando o Projeto...

Leia mais

Microsoft Excel 2003

Microsoft Excel 2003 Associação Educacional Dom Bosco Faculdades de Engenharia de Resende Microsoft Excel 2003 Professores: Eduardo Arbex Mônica Mara Tathiana da Silva Resende 2010 INICIANDO O EXCEL Para abrir o programa Excel,

Leia mais

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA

UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA UNIVERSIDADE FEDERAL DO RIO GRANDE DO NORTE ESCOLA AGRÍCOLA DE JUNDIAÍ EAJ - PRONATEC / REDE etec MÓDULO III DESENVOLVIMENTO PROFESSOR ADDSON COSTA RESUMO DE AULA CRIAÇÃO E MANIPULAÇÃO DO BANCO DE DADOS

Leia mais

SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela

SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela SQL Server Triggers Aprenda a utilizar triggers em views e auditar as colunas atualizadas em uma tabela Certamente você já ouviu falar muito sobre triggers. Mas o quê são triggers? Quando e como utilizá-las?

Leia mais

Introdução a Banco de Dados em Delphi

Introdução a Banco de Dados em Delphi Introdução a Banco de Dados em Delphi Daniela Caio André Gomes Roberto Scalco 2013 3 Sumário CAPÍTULO 1 ELEMENTOS DE UM BANCO DE DADOS... 4 1. O ARQUIVO DADOS... 4 2. CONCEITOS BÁSICOS DE BANCOS DE DADOS...

Leia mais

Programação de Dispositivos Móveis

Programação de Dispositivos Móveis Aula 04 Programação de Dispositivos Móveis A Classe Activity É obrigatório que cada activity do projeto esteja declarada no arquivo AndroidManisfest.xml, caso contrário não é possível utilizá-la. Para

Leia mais

Introdução Microsoft PowerPoint 2013 apresentações Office PowerPoint 2013 Microsoft PowerPoint 2013 textos planilhas Excel Word

Introdução Microsoft PowerPoint 2013 apresentações Office PowerPoint 2013 Microsoft PowerPoint 2013 textos planilhas Excel Word PowerPoint 2013 Sumário Introdução... 1 Iniciando o PowerPoint 2013... 2 Criando Nova Apresentação... 10 Inserindo Novo Slide... 13 Formatando Slides... 15 Inserindo Imagem e Clip-art... 16 Inserindo Formas...

Leia mais

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho.

AMBIENTE. FORMULÁRIO: é a janela do aplicativo apresentada ao usuário. Considere o formulário como a sua prancheta de trabalho. DELPHI BÁSICO VANTAGENS Ambiente de desenvolvimento fácil de usar; 1. Grande Biblioteca de Componentes Visuais (VCL - Visual Component Library), que são botões, campos, gráficos, caixas de diálogo e acesso

Leia mais

MÓDULO - I Manual Prático Microsoft Excel 2007

MÓDULO - I Manual Prático Microsoft Excel 2007 MÓDULO - I Manual Prático Microsoft Excel 2007 MÓDULO - I APRESENTAÇÃO... 1 AMBIENTE DE TRABALHO... 2 A folha de cálculo... 2 O ambiente de trabalho do Excel... 3 Faixas de Opções do Excel... 4 - Guia

Leia mais

MICROSOFT WORD 2007. George Gomes Cabral

MICROSOFT WORD 2007. George Gomes Cabral MICROSOFT WORD 2007 George Gomes Cabral AMBIENTE DE TRABALHO 1. Barra de título 2. Aba (agrupa as antigas barras de menus e barra de ferramentas) 3. Botão do Office 4. Botão salvar 5. Botão de acesso à

Leia mais

Centro Universitário do Triângulo Introdução ao Ambiente Delphi

Centro Universitário do Triângulo Introdução ao Ambiente Delphi Centro Universitário do Triângulo Introdução ao Ambiente Delphi A figura abaixo mostra a tela inicial do Delphi 7 e nos dá uma visão geral de seu ambiente de desenvolvimento, composto de múltiplas janelas

Leia mais

Entradas Digitais. PdP. Autores: Luís Fernando Patsko e Tiago Lone Nível: Intermediário Criação: 27/12/2005 Última versão: 18/12/2006

Entradas Digitais. PdP. Autores: Luís Fernando Patsko e Tiago Lone Nível: Intermediário Criação: 27/12/2005 Última versão: 18/12/2006 TUTORIAL Entradas Digitais Autores: Luís Fernando Patsko e Tiago Lone Nível: Intermediário Criação: 27/12/2005 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br

Leia mais

Programa de Dispositivos Móveis

Programa de Dispositivos Móveis Aula 02 - Exercício Programa de Dispositivos Móveis PDM - Aula02 - Exercício- Ver 02-04/06/2014 08:56 Criando Aplicação Android (BasicView) Vamos continuar a criar interfaces gráficas (UI) básicas com

Leia mais

MANUAL GDS TOUCH. Versão: 1.0 Direitos reservados.

MANUAL GDS TOUCH. Versão: 1.0 Direitos reservados. MANUAL GDS TOUCH Versão: 1.0 Direitos reservados. GDS TOUCH PAINEL TOUCH-SCREEN CONTROLE RESIDENCIAL INTERATIVO O GDS Touch é um painel wireless touch-screen de controle residencial, com design totalmente

Leia mais

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO

ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES II PROFESSOR RAFAEL BARRETO DELPHI CRIANDO UMA AUTENTICAÇÃO DE USUÁRIO UTILIZANDO O COMPONENTE QUERY A autenticação de usuários serve para

Leia mais

ÍNDICE... 2 INTRODUÇÃO... 3. A série... 3

ÍNDICE... 2 INTRODUÇÃO... 3. A série... 3 WORD 2007 E 2010 ÍNDICE ÍNDICE... 2 INTRODUÇÃO... 3 A série... 3 01 CAPTURAS DE TELA WORD 2010... 3 02 IMAGENS 2007/2010... 5 03 NOTAS DE RODAPÉ... 13 04 NUMERAÇÃO DE PÁGINAS... 15 05 CONTAR PALAVRAS...

Leia mais

Universidade Federal do Rio de Janeiro NCE/PGTIAE. Tutorial SweetHome3D

Universidade Federal do Rio de Janeiro NCE/PGTIAE. Tutorial SweetHome3D Universidade Federal do Rio de Janeiro NCE/PGTIAE Tutorial SweetHome3D Trabalho apresentado ao Prof. Carlo na Disciplina de Software Livre no curso Pós Graduação em Tecnologia da Informação Aplicada a

Leia mais

Inserindo Dados no Banco de Dados Paradox.

Inserindo Dados no Banco de Dados Paradox. Inserindo Dados no Banco de Dados Paradox. - Construção do Banco de Dados: Para podermos inserir algo em um banco precisaremos de um Banco de Dados, para isto iremos montar um utilizando o Programa Database

Leia mais

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR 8VDQGRSDUkPHWURV

8VDQGR5HSRUW0DQDJHUFRP&ODULRQH3RVWJUH64/ -XOLR&HVDU3HGURVR 8VDQGRSDUkPHWURV 8VDQGRSDUkPHWURV O envio de parâmetros para um relatório é uma das funções mais úteis do Report Manager, com eles você pode: Permitir que o usuário final altere palavras ou sentenças de um relatório; Atribuir

Leia mais

Criando uma agenda simples com NetBeans 6.5

Criando uma agenda simples com NetBeans 6.5 Criando uma agenda simples com NetBeans 6.5 (Swing application framework e Beansbinding) Já faz algum tempo que escrevi uma agenda simples usando o Eclipse com o Visual Class Editor. Demorei em torno de

Leia mais

Noções de Informática

Noções de Informática Noções de Informática 2º Caderno Conteúdo Microsoft Excel 2010 - estrutura básica das planilhas; manipulação de células, linhas e colunas; elaboração de tabelas e gráficos; inserção de objetos; campos

Leia mais

PROGRAMANDO ANDROID NA IDE ECLIPSE GABRIEL NUNES, JEAN CARVALHO TURMA TI7

PROGRAMANDO ANDROID NA IDE ECLIPSE GABRIEL NUNES, JEAN CARVALHO TURMA TI7 Serviço Nacional de Aprendizagem Comercial do Rio Grande do Sul Informação e Comunicação: Habilitação Técnica de Nível Médio Técnico em Informática Programação Android na IDE Eclipse PROGRAMANDO ANDROID

Leia mais

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP

Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP Programação Orientada a Objetos Prof. Rone Ilídio UFSJ/CAP 1) Introdução Programação Orientada a Objetos é um paradigma de programação bastante antigo. Entretanto somente nos últimos anos foi aceito realmente

Leia mais

Introdução a relatórios Crosstab com ireport/jasperreports

Introdução a relatórios Crosstab com ireport/jasperreports Introdução a relatórios Crosstab com ireport/jasperreports 1. Introdução O objetivo deste tutorial é mostrar como montar um relatório crosstab, também conhecido como relatório de referência cruzada, usando

Leia mais

Prof. Omero, pág. 63. Banco de Dados InterBase.

Prof. Omero, pág. 63. Banco de Dados InterBase. Prof. Omero, pág. 63 O que é o InterBase? O InterBase é um SGBDR - Sistema Gerenciador de Banco de Dados Cliente/Servidor Relacional 1 que está baseado no padrão SQL ANSI-9, de alta performance, independente

Leia mais

Clique no menu Iniciar > Todos os Programas> Microsoft Office > Publisher 2010.

Clique no menu Iniciar > Todos os Programas> Microsoft Office > Publisher 2010. 1 Publisher 2010 O Publisher 2010 é uma versão atualizada para o desenvolvimento e manipulação de publicações. Juntamente com ele você irá criar desde cartões de convite, de mensagens, cartazes e calendários.

Leia mais

Início Rápido Web. 2015 Release 1 Xojo, Inc.

Início Rápido Web. 2015 Release 1 Xojo, Inc. Início Rápido Web 2015 Release 1 Xojo, Inc. Capítulo 1 Introdução Bem-vindo ao Xojo, O jeito mais fácil de criar aplicativos multi-plataforma para Desktop e Web. Seção 1 Sobre o Início Rápido Web INICIANDO

Leia mais

Veja abaixo um exemplo de como os dados são mostrados quando usamos o

Veja abaixo um exemplo de como os dados são mostrados quando usamos o Objeto DataGridView O controle DataGridView é um dos objetos utilizados para exibir dados de tabelas de um banco de dados. Ele está disponível na guia de objetos Data na janela de objetos do vb.net. Será

Leia mais

Unidade 1: O Painel de Controle do Excel *

Unidade 1: O Painel de Controle do Excel * Unidade 1: O Painel de Controle do Excel * material do 2010* 1.0 Introdução O Excel nos ajuda a compreender melhor os dados graças à sua organização em células (organizadas em linhas e colunas) e ao uso

Leia mais

Para que o NSBASIC funcione corretamente em seu computador, você deve garantir que o mesmo tenha as seguintes características:

Para que o NSBASIC funcione corretamente em seu computador, você deve garantir que o mesmo tenha as seguintes características: Cerne Tecnologia www.cerne-tec.com.br Conhecendo o NSBASIC para Palm Vitor Amadeu Vitor@cerne-tec.com.br 1. Introdução Iremos neste artigo abordar a programação em BASIC para o Palm OS. Para isso, precisaremos

Leia mais

Centro Federal de Educação Tecnológica da Bahia Curso Excel Avançado Índice

Centro Federal de Educação Tecnológica da Bahia Curso Excel Avançado Índice Índice Apresentação...2 Barra de Título...2 Barra de Menus...2 Barra de Ferramentas Padrão...2 Barra de Ferramentas de Formatação...3 Barra de Fórmulas e Caixa de Nomes...3 Criando um atalho de teclado

Leia mais

Programação para Android. Aula 05: Estilos e temas; galeria de imagens

Programação para Android. Aula 05: Estilos e temas; galeria de imagens Programação para Android Aula 05: Estilos e temas; galeria de imagens Objetivos Aplicar estilos e temas Criar uma galeria de imagens com o widget Gallery Parte 01: Estilos e temas Interface de Usuários

Leia mais

Programação Visual. ireport Introdução. Prof. Edwar Saliba Júnior Novembro de 2012. Unidade 07 ireport - Introdução

Programação Visual. ireport Introdução. Prof. Edwar Saliba Júnior Novembro de 2012. Unidade 07 ireport - Introdução ireport Introdução Prof. Edwar Saliba Júnior Novembro de 2012 1 O que é o ireport? O ireport é um gerador de relatórios gratuito feito para a linguagem Java. Criado pela empresa Jaspersoft Corporation.

Leia mais

WecDB - 1 - WecDB Consulta Web Facilitada ao Banco de Dados

WecDB - 1 - WecDB Consulta Web Facilitada ao Banco de Dados WecDB - 1 - WecDB Consulta Web Facilitada ao Banco de Dados WecDB (Web Easy Consultation Database) é uma ferramenta para criação e disponibilização de consultas à Bancos de Dados na Internet. É composto

Leia mais

SGCD 2.0 Sistema Gerenciador de Conteúdo Dinâmico

SGCD 2.0 Sistema Gerenciador de Conteúdo Dinâmico Sistema Gerenciador de Conteúdo Dinâmico Atualizado em 24/08/2011 No final de 2007, o Serviço Técnico de Informática da UNESP Marília, disponibilizou para a comunidade acadêmica e administrativa o Sistema

Leia mais

Prof. Esp. Adriano Carvalho

Prof. Esp. Adriano Carvalho Prof. Esp. Adriano Carvalho Um arquivo contendo uma sequência de comandos em uma linguagem de programação especifica Esses comandosrespeitam regras de como serem escritos e quais são as palavras que podem

Leia mais

Display de Cristal Líquido

Display de Cristal Líquido TUTORIAL Display de Cristal Líquido Autor: Tiago Lone Nível: Básico Criação: 09/03/2006 Última versão: 18/12/2006 PdP Pesquisa e Desenvolvimento de Produtos http://www.maxwellbohr.com.br contato@maxwellbohr.com.br

Leia mais

Apostila Curso Inclusão Digital na Terceira Idade Módulo Avançado Unicruz 2015/1. João David G. Prevedello

Apostila Curso Inclusão Digital na Terceira Idade Módulo Avançado Unicruz 2015/1. João David G. Prevedello Apostila Curso Inclusão Digital na Terceira Idade Módulo Avançado Unicruz 2015/1 João David G. Prevedello Básico Teclado e Mouse Um teclado tem mais de 100 teclas, existem de várias cores, formatos, cabos,

Leia mais

BrOffice Impress Módulo 06 ÍNDICE

BrOffice Impress Módulo 06 ÍNDICE ÍNDICE VÍDEO 1 Trabalhando com o BrOffice.org Impress VÍDEO 2 Conhecendo o BrOffice.org Impress VÍDEO 3 Criando uma nova apresentação VÍDEO 4 Estrutura de tópicos VÍDEO 5 Layout VÍDEO 6 Trabalhando com

Leia mais

Criação de Applets com o JBuilder Professor Sérgio Furgeri

Criação de Applets com o JBuilder Professor Sérgio Furgeri OBJETIVOS DA AULA: Apresentar o processo de criação em uma interface gráfica para a Internet; Fornecer subsídios para que o aluno possa compreender onde aplicar Applets; Demonstrar a criação de uma Applet

Leia mais

PROCEDIMENTOS ARMAZENADOS (Stored Procedures)

PROCEDIMENTOS ARMAZENADOS (Stored Procedures) PROCEDIMENTOS ARMAZENADOS (Stored Procedures) 1. Introdução Stored Procedure é um conjunto de comandos, ao qual é atribuído um nome. Este conjunto fica armazenado no Banco de Dados e pode ser chamado a

Leia mais

SGCD 2.2. Sistema Gerenciador de Conteúdo Dinâmico

SGCD 2.2. Sistema Gerenciador de Conteúdo Dinâmico Atualizado em 13/AGO/2012 Sistema Gerenciador de Conteúdo Dinâmico No final de 2007, o Serviço Técnico de Informática da UNESP Marília, disponibilizou para a comunidade acadêmica e administrativa o Sistema

Leia mais

Construtor Iron Web. Manual do Usuário. Iron Web Todos os direitos reservados

Construtor Iron Web. Manual do Usuário. Iron Web Todos os direitos reservados Construtor Iron Web Manual do Usuário Iron Web Todos os direitos reservados A distribuição ou cópia deste documento, ou trabalho derivado deste é proibida, requerendo, para isso, autorização por escrito

Leia mais

Guia de Início Rápido

Guia de Início Rápido Guia de Início Rápido O Microsoft PowerPoint 2013 parece diferente das versões anteriores, por isso criamos este guia para ajudar você a minimizar a curva de aprendizado. Encontre o que você precisa Clique

Leia mais