Delphi XE5 Leitura de Arquivos
|
|
- Aníbal da Silva Anjos
- 8 Há anos
- Visualizações:
Transcrição
1
2
3 04 Delphi XE5 Leitura de Arquivos 05 Editorial Autor: Jeferson Silva de Lima Android Studio - Parte V 11 Autor: Luciano Pimenta Versionamentos de Arquivos o THVCheckVersion Parte 3 19 Índice Autor: Hamden Vogel 28 Dicas The Club 03
4 Editorial Av. Profº Celso Ferreira da Silva, 190 Jd. Europa - Avaré - SP - CEP Informações e Suporte: (14) Olá amigo, Estamos quase no final de mais um ano e o The Club continua como sempre cada vez mais empenhado em auxiliá-los com dicas, truques e novidades neste tão imenso mundo da programação. Ao longo deste período, tivemos o privilégio de proporcionar assuntos de diversas linguagens de programação, procurando sempre agradar o nosso público alvo que é você, caro leitor! Saliento que nossos consultores e colunistas estão sempre abertos a sugestões para poder melhor satisfazê-los. Neste mês, nosso consultor técnico Jeferson Silva de Lima escreveu o artigo Delphi XE5 - Leitura de Arquivos, abordando diversos tipos, como por exemplo: Imagens, textos e oriundos de Banco de Dados. Esta prática é muito comum em todos os projetos que desenvolvemos, neste caso para dispositivos móveis. Já nosso colaborador Hamden Vogel, escreveu a parte final do artigo Versionamentos de Arquivos o THVCheckVersion. Nesta terceira parte teremos como escopo principal a utilização da classe TLogClass que implementará o controle de Logs renderizando tudo em um Dbgrid personalizado. Para finalizar, nosso colunista Luciano Pimenta escreveu a quinta parte da série de artigos relacionados ao Android Studio. Recomendo a leitura para quem deseja aprimorar os conhecimentos sobre controle de telas, ListView agrupado, ExpandableView e o SearchView, ambos úteis para desenvolvimento de aplicativos móveis. Não podemos esquecer de nossa seção clássica de Dicas Delphi. Nós do The Club desejamos a todos uma boa leitura e um abraço! Thiago Montebugnoli - Editor Chefe thiago@theclub.com.br Internet Cadastro: cadastro@theclub.com.br Suporte: suporte@theclub.com.br Informações: info@theclub.com.br Skype Cadastro: theclub_cadastro Skype Suporte: theclub_linha1 theclub_linha2 theclub_linha3 Copyright The Club 2013 Diretor Técnico Marcos César Silva Diagramação Vitor M. Rodrigues Design Vitor M. Rodrigues Revisão Denise Blair Colunistas Hamden Vogel Jeferson Silva de Lima Luciano Pimenta Lucas Vieira de Oliveira Thiago Cavalheiro Montebugnoli Impressão e acabamento: GRIL - Gráfica e Editora Taquarituba-SP - Tel. (14) 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 Delphi XE5 Leitura de Arquivos Olá amigos, continuamos com nossa série de artigos Delphi XE5 mais especificamente com a plataforma Android, anteriormente vimos à utilização dos Intents e como customizar nossos aplicativos, já neste artigo vamos tratar um assunto mais comum e muito utilizado no Windows o que não poderia ser deixado de fora no Android que trata-se da leitura de arquivos através do Delphi (Imagens,.TXT e Bancos de dados). Aplicação Em nosso exemplo vamos simular a seguinte situação: Nossos arquivos serão colocados em uma pasta chamada THECLUB no Path padrão que utilizamos nosso banco de dados (.\assets\internal\). Juntamente com os arquivos que vamos trabalhar teremos também um arquivo de configuração chamado CONEXAO.txt, nele terá a seção responsável por gravar a informação da Pasta na qual nossos arquivos devem ficar. Diante desses fatores iniciais vamos começar com a criação do exemplo: Adicione um TabControl ao seu projeto e crie 2 TabItens para que possamos separar as funcionalidades em duas etapas. No primeiro Item precisaremos de 2 ListView para exibir as informações do banco de dados e de nosso arquivo de Imagem, adicione também um Memo para exibir os dados do arquivo de Texto e 3 Buttons que irão chamar cada arquivo separadamente e por fim adicione 1 Edit e 1 Label para exibirmos o Path atual que estivermos manipulando os dados. Sua tela deve ficar parecida com a imagem abaixo: Veja a Imagem 1 Tab 1. Na imagem acima já posicionamos e renomeamos os componentes de acordo com suas funções (Para que nenhum botão fique oculto em sua tela o ideal é adicionar um ScrollBox assim será possível mover a tela para exibir Imagem 1 Tab 1. 05
6 os itens mais abaixo). Será necessário adicionar 1 SQLConnection, 1 SQLDataSet para buscarmos os dados de nosso banco de dados (THECLUB.db) as configurações serão as mesmas que vimos em artigos anteriores, portanto, vincule seu SQLDataSet ao SQLConnection e utilize a seguinte consulta SQL: Para que o campo Item.Bitmap seja exibido deve-se alterar a propriedade ItemAppearance de seu ListView2 conforme imagem abaixo: Listagem 2 DDL Tabela de Pessoas. SELECT * FROM PESSOAS Listagem 1 SQL Pessoas. CREATE TABLE [PESSOAS]( [ID_PESSOA] INTEGER, [NOME] VARCHAR(30)); Crie também um ClientDataSet para que possamos carregar o arquivo de imagem (THECLUB.jpg) em memória, portanto, em seu ClientDataSet crie um campo do Tipo Blob e clique na propriedade CreateDateSet. Imagem 4 ListView. Antes de prosseguir adicione todos os arquivos ao seu Deployment THE- CLUB.jpg, THECLUB.txt, THECLUB.db e CONEXAO.txt o local de destino no Android será padrão para todos (.\assets\internal\theclub) com exceção do arquivo CONEXAO.txt que deve ficar em um local fixo (.\assets\internal). Veja exemplo conforme imagem abaixo: Com as conexões criadas vincule cada componente em um ListView diferente, ou seja, em seu Listview1 vincule o campo NOME ao Item.Text. Imagem 5 Deployment. Adicione também as seguintes Uses ao seu projeto: Listagem 3 Uses. System.IniFiles, System. IOUtils Imagem 2 BindSource 1. No ListView2 vincule seu campo Blob criado anteriormente ao Item.Bitmap. Nosso arquivo CONEXAO.txt irá conter a seguinte seção: Listagem 4 Arquivo de Conexão. [CONEXAO] PASTA=THECLUB Por padrão vamos manter a PASTA com o nome de THECLUB para que possamos manipular os dados nela localizados. Agora vamos por a mão na massa, no evento OnCreate de seu formulário insira o seguinte comando: Listagem 5 - OnCreate. Imagem 3 BindSource procedure FormCreate(Sender: TObject);
7 Var Arq: TIniFile; S: String; Try S:= TPath.GetDocumentsPath + /CONEXAO.txt ; If FileExists(S) then Begin Arq:= TIniFile.Create(S); Pasta:= Arq.ReadString( C ONEXAO, PASTA, ); End; Finally Arq.Free; End; // Por padrão a pasta TheClub é Criada If not DirectoryExists(TPath. GetDocumentsPath + /THECLUB ) Then CreateDir(TPath. GetDocumentsPath + /THECLUB ); Edit1.Text:= TPath. GetDocumentsPath + / + Pasta; Ler Arquivo (Fará a leitura do arquivo de Texto); Imagem (Irá exibir a imagem em um ListView); Banco de Dados (irá apresentar os dados contidos na tabela de Pessoas). No botão Ler Arquivo insira o seguinte comando: Listagem 7 Botão Ler Arquivo. procedure Button1Click(Sender: TObject); Var S: String; Memo1.Lines.Clear; S:= TPath.GetDocumentsPath + / + Pasta + / + InputBox( Indique o Arquivo, Nome, ) +.txt ; Memo1.Lines.LoadFromFile(S); Na listagem acima utilizamos a função InputBox para indicarmos o nome do arquivo que desejamos ler. Veja que armazenamos o valor lido no arquivo em nossa variável Pasta, ou seja, crie essa variável global do tipo String em seguida é criada a pasta THECLUB (CreateDir(TPath.GetDocumentsPath + /THECLUB )) que por padrão vamos utilizar no processo inicial de nosso exemplo. A conexão com o banco de dados segue os padrões de nossos artigos anteriores a única diferença é que indicamos a Pasta onde o arquivo está, veja conforme exemplo abaixo: Listagem 6 BeforeConnect. procedure ConexãoBeforeConnect(Sender: TObject); Conexão.Params. Values[ Database ] := TPath.Combine(TPath. GetDocumentsPath + / + Pasta, THECLUB.db ); End; Próximo passo é inserir os comandos em cada um dos botões que criamos anteriormente, são eles: Imagem 6 InputBox. 07
8 Logo abaixo temos o comando para a leitura da imagem: Listagem 8 Botão Imagem. procedure Button2Click(Sender: TObject); Var S: String; Stream: TFileStream; Try S:= TPath.GetDocumentsPath + / + Pasta + / + InputBox( Indique o Arquivo, Nome, ) +.jpg ; If FileExists(S) Then Begin Stream:= TFileStream. Create(S,fmOpenReadWrite); Stream.Position:= 0; cdsimagem.app cdsimagemimagem. LoadFromStream(Stream); cdsimagem.post; cdsimagem.close; cdsimagem.open; End; Finally Stream.Free; End; Neste trecho armazenamos a imagem em uma variável do tipo TFileStream e logo em seguida carregamos a mesma no campo IMAGEM de nosso ClientDataSet. Imagem 7 Tab 1. A segunda etapa do exemplo é a manipulação dos arquivos em si, ou seja, vamos movê-los entre pastas e ainda sim realizar a leitura dos mesmos. Na segunda aba de seu TabControl insira os seguintes componentes: Edit; Label; 2 Buttons. Poderá ajusta-los conforme imagem abaixo: No botão Banco de dados vamos apenas abrir o DataSet para exibir os dados. Listagem 9 Botão Banco de dados. procedure Button3Click(Sender: TObject); sdspessoas.open; Após finalizarmos essas primeiras configurações a tela deve ficar parecida com a imagem abaixo: 08 Imagem 8 Tab 2.
9 O primeiro passo é indicar o nome da nova pasta em seu Edit e ao clicar no botão Criar Pasta vamos adicionar uma nova pasta na raiz que estamos trabalhando, portanto, insira o seguinte comando no botão: Listagem 10 Botão Criar Pasta. procedure Button5Click(Sender: TObject); Var S: String; Edit2.Enabled:= False; If Edit2.Text <> then Begin S:= TPath.GetDocumentsPath + / + Edit2.Text; If not DirectoryExists(S) Then Begin CreateDir(S); Pasta:= Edit2.Text; End; End; A criação é simples apenas com o comando CreateDir já temos nossa nova pasta, porém, note que ao final do comando temos o seguinte trecho: Pasta:= Edit2.Text; Neste momento estamos indicando que nossos arquivos devem ser buscados em nossa nova pasta, porém, eles ainda não estão gravados neste local, portanto, vamos utilizar o comando do nosso botão Mover Arquivos, veja listagem abaixo: Listagem 11 Botão Mover Arquivos. procedure Button4Click(Sender: TObject); Var aarquivo, S: String; I: Integer; If DirectoryExists(TPath. GetDocumentsPath + / + Edit2. Text) And (Edit2.Text <> ) Then Begin FileCopy(TPath. GetDocumentsPath + /THECLUB/ THECLUB.txt, TPath. GetDocumentsPath + / + Pasta + /THECLUB.txt ); DeleteFile(TPath. GetDocumentsPath + /THECLUB/ THECLUB.txt ); FileCopy(TPath. GetDocumentsPath + /THECLUB/ THECLUB.jpg, TPath. GetDocumentsPath + / + Pasta + /THECLUB.jpg ); DeleteFile(TPath. GetDocumentsPath + /THECLUB/ THECLUB.jpg ); FileCopy(TPath. GetDocumentsPath + /THECLUB/ THECLUB.db, TPath. GetDocumentsPath + / + Pasta + /THECLUB.db ); DeleteFile(TPath. GetDocumentsPath + /THECLUB/ THECLUB.db ); Edit2.Enabled:= True; Altera_Connect(Pasta); End; Neste momento movemos todos os arquivos encontrados na pasta THECLUB para a nova pasta indicada em seu Edit através do procedimento FileCopy, abaixo temos a sintaxe do comando: Listagem 12 Procedure FileCopy. procedure FileCopy(const FOrigem, FDestino: String); var sstream, dstream: TFileStream; sstream := TFileStream. Create(FOrigem, fmopenread); Try dstream := TFileStream. Create(FDestino, fmcreate); 09
10 Try dstream.copyfrom(sstream, 0); Finally dstream.free; Finally sstream.free; Arq.Free; End; Ao iniciar o aplicativo poderá ver que o Path foi alterado de acordo com sua nova pasta. Por fim alteramos a seção de nosso arquivo CONNECT.txt através do procedimento Altera_Connect, veja sintaxe abaixo: Listagem 13 Procedure Altera Connect. procedure Altera_Connect(Pasta: String); Var Arq: TIniFile; S: String; Try S:= TPath.GetDocumentsPath + /CONEXAO.txt ; If FileExists(S) then Begin Arq:= TIniFile.Create(S); Arq.WriteString( CONEXAO, PASTA,Pasta); End; Finally Imagem 9 Path. Conclusão Vimos neste artigo um exemplo de como trabalhar com arquivos no Android, movendo e lendo os dados em locais diferentes. Este exemplo pode ser melhorado de acordo com suas necessidades. Espero que tenham gostado desta dica, até a próxima! Sobre o autor Jeferson Silva de Lima Consultor The Club. suporte@theclub.com.br 10
11 Android Studio Parte V Nessa última parte da série de Android (continuaremos com mais artigos sobre o assunto, mas com assuntos específicos), vamos continuar conhecendo controles de telas, com exemplos de ListView agrupado, ExpandableView e SearchView. ListView agrupado Temos um controle especifico para isso (ExpandableListView), que veremos mais adiante. Mas quero mostrar aqui, uma maneira diferente para simular um agrupamento de ListView. Crie um novo layout e adicione um ListView. Vamos criar o layout que será a indicação que temos um novo grupo na lista de itens. Crie um novo layout com o nome de layout_header_listview. xml. Adicione o seguinte código: <RelativeLayout android:layout_height= wrap_ content android:layout_width= fill_ parent android:orientation= vertical xmlns:android= schemas.android.com/apk/res/ android > <ImageView thumbnail android:layout_ width= 25dip android:layout_ height= 25dip ic_action_group android:scaletype= fitxy /> <TextView group android:layout_ width= fill_parent android:layout_ height= wrap_content android:layout_ android:layout_ android:text= Nome do grupo android:textstyle= bold android:textsize= 15dip android:paddingleft= 5dp /> </RelativeLayout> Adicionamos um ImageView e um TextView. A imagem já esta configurada, precisamos apenas mudar o nome do grupo quando estivermos preenchendo o ListView (no adapter). Vamos criar um novo Model, para configurarmos o grupo que desejamos. Para não fazer o trabalho massante de criar a classe, podemos copiá-la com o mesmo conteúdo e nome diferente. Clique com o botão direito na classe Item e escolha Refactor>Copy. Digite ItemGroup. Uma nova classe é criada com o mesmo conteúdo da Item. Vamos criar mais dois atributos: private boolean bgrupo; private String snmgrupo; Para gerar o get e set, use a mesma técnica mostrada anteriormente. Não esqueça de modificar o construtor para receber os dois novos atributos. Agora a parte mais importante, precisamos criar um novo adapter, é nele que 11
12 vamos configurar o grupo. Você pode fazer a mesma técnica de copiar a classe ListItem, dando o nome de ListItemGroup. Não esqueça de modificar a variável data para receber uma lista de ItemGroup, assim como o parâmetro do construtor. No getitemid, também devemos mudar o tipo do objeto (ItemGroup). Vamos modificar o getview com o seguinte código: Pegamos o dado e verificamos se é um grupo, assim, chamamos o respectivo layout e configuramos o controle para mostrar o nome do grupo. Se não, configuramos normalmente os itens de tela (repliquei o layout do item do ListView). No código para preencher a lista de itens, precisamos apenas configurar o grupo e seus itens: View vi = convertview; ItemGroup item = data. get(position); if (item.isbgrupo()){ //é um grupo vi = inflater.inflate(r. layout.layout_header_listview, null); vi.setonclicklistener(null); vi.setonlongclicklistener(nu ll); vi.setlongclickable(false); TextView groupname = (TextView) vi.findviewbyid(r. id.name_group); groupname.settext(item. getsnmgrupo()); else{ //não é grupo vi = inflater.inflate(r. layout.single_item_listview_ group, null); ImageView imagem = (ImageView)vi.findViewById(R. id.thumbnail); TextView name = (TextView) vi.findviewbyid(r.id.item); TextView description = (TextView)vi.findViewById(R. id.descrption); name.settext(item. getsnmitem()); description.settext(item. getsdsitem()); imagem.setimageresource(item. getilogo()); return vi; else if (mitem.id == 4 ){ rootview = inflater.inflate(r. layout.layout_listview_group, container, false); //ListView agrupado ListView lview = (ListView) rootview.findviewbyid(r. id.listview); List<ItemGroup> lista = new ArrayList<ItemGroup>(); lista.add(new ItemGroup(1,, true, Controles de tela,, 0)); lista.add(new ItemGroup(2, ProgressBar, false,, Controle para mostrar uma barra de progresso, R.drawable.ic_action_ progressbar)); lista.add(new ItemGroup(3, TextView, false,, Controle para mostrar um texto, R.drawable.ic_action_ textview)); lista.add(new ItemGroup(4, ImageView, false,, Controle para mostrar uma imagem, R.drawable.ic_action_ imageview)); lista.add(new ItemGroup(5,, true, Containers,, 0)); lista.add(new ItemGroup(6, TabHost, false,, Controle para mostrar abas, R.drawable.ic_action_ tabhost)); lista.add(new ItemGroup(7, ListView, false,, Controle para mostrar dados em forma de lista, R.drawable.ic_action_ listview)); lview.setadapter(new ListItemGroup(getActivity(), lista)); 12
13 Indicamos em cada item, se o mesmo é grupo ou não (terceiro parâmetro). Executa a aplicação e veja o resultado na Figura 1. private Activity activity; private static LayoutInflater inflater = null; private HashMap<String, List<Item>> list; private List<String> listgroup; Para o grupo, temos uma lista de strings. Para os dados, temos um Hash- Map, que nada mais é do que um conjunto de chave valor. Assim, teremos como chave, o nome do grupo e o valor, serão os itens. Assim, podemos associar (retornar) a lista de grupos com a lista de dados. Crie o construtor com o seguinte código: Figura 1. Agrupamento com ListView Para deixar os controles dos itens um pouco para a direita, coloquei o seguinte código na imagem do single_item_listview_group (layout replicado): public ListExpandable(Activity activity, HashMap<String, List<Item>> data, List<String> groups) { this.activity = activity; this.list = data; this.listgroup = groups; inflater = (LayoutInflater) activity.getsystemservice( Context.LAYOUT_INFLATER_ SERVICE); android:layout_marginleft= 20dp Esse exemplo é bom para quando você precisa que o grupo fique sempre visível. Talvez não seja a melhor opção, mas valeu a pena aprender. Para que você tenha grupos que possam ser expandidos e recolhidos, veremos como funciona com o ExpandableListView. ExpandableListView Esse controle, cria grupos no ListView. Crie um novo layout ( layout_expandable_listview.xml ) e adicione esse controle. Precisamos criar um adapter, que herda de BaseExpandableListAdapter. Crie uma nova classe na pasta ListAdapter com o nome de ListExpandable. Herde de BaseExpandableListAdapter e usando o editor, crie os métodos (semelhante ao que já fizemos). Note que vários métodos foram adicionados. Temos que passar para esse adapter, uma lista com os grupos e uma lista com o nome do grupo e seus itens. Declare as seguintes variáveis: Semelhante ao criado em adapters anteriores, única diferença que temos duas listas agora. Os métodos que retornam a quantidade do grupo e itens, é de fácil implementação. O getchild, que devemos implementar com o seguinte código: return list.get(listgroup. get(groupposition)). get(childposition); Passamos o código do grupo e do item para retornar o objeto. Agora, temos dois getview: getgroupview e getchildview, um para cada tipo. Vamos usar o mesmo layout usado no exemplo anterior, para os itens. Para o grupo, faça uma cópia de layout_header_listview.xml (dei o nome de layout_header_expandablelistview.xml ) e remova a imagem do grupo. O ExpandableListView possui uma imagem. Para o getgroupview, vamos usar o seguinte código: HolderGroup holder; 13
14 if(convertview == null){ convertview = inflater. inflate( R.layout.layout_header_ expandablelistview, null); holder = new HolderGroup(); convertview.settag(holder); holder.name = (TextView) convertview.findviewbyid(r. id.name_group); else{ holder = (HolderGroup) convertview.gettag(); holder.name.settext(listgroup. get(groupposition)); return convertview; HolderGroup é apenas uma classe, que contém os controles de tela que vamos preencher (nesse caso, o nome do grupo). Implemente as classes, com o seguinte código: class HolderGroup { TextView name; class HolderItem { ImageView imagem; TextView name; TextView description; if(convertview == null){ convertview = inflater. inflate( R.layout.single_item_ listview_group, null); holder = new HolderItem(); convertview.settag(holder); holder.name = (TextView) convertview.findviewbyid(r. id.item); holder.description = (TextView)convertView. findviewbyid(r.id.descrption); holder.imagem = (ImageView) convertview.findviewbyid(r. id.thumbnail); else{ holder = (HolderItem) convertview.gettag(); holder.name.settext(item. getsnmitem()); holder.description.settext(item. getsdsitem()); holder.imagem. setimageresource(item. getilogo()); return convertview; Nada muito diferente do que já fizemos. Precisamos agora, preencher as listas e passar para o adapter. Volte ao ItemDetailFragment e use o seguinte código: Voltando ao getgroupview, carregamos o layout do grupo e preenchemos o TextView com o nome do grupo. Semelhante ao que fizemos no exemplo anterior. Para o getchildview, o código é semelhante: HolderItem holder; Item item = (Item) getchild(groupposition, childposition); else if (mitem.id == 5 ){ rootview = inflater.inflate(r. layout.layout_expandable_ listview, container, false); ExpandableListView lview = (ExpandableListView)rootView. findviewbyid(r. id.expandablelistview); List<String> group = new ArrayList<String>(); 14
15 HashMap<String, List<Item>> itens = new HashMap<String, List<Item>>(); ListExpandable, passando as listas por parâmetro. Rode a aplicação e veja o resultado (Figura 2). group.add( Controles de tela ); group.add( Containers ); List<Item> aux = new ArrayList<Item>(); aux.add(new Item(2, ProgressBar, Controle para mostrar uma barra de progresso, R.drawable.ic_action_ progressbar)); aux.add(new Item(3, TextView, Controle para mostrar um texto, R.drawable.ic_action_ textview)); aux.add(new Item(4, ImageView, Controle para mostrar uma imagem, R.drawable.ic_ action_imageview)); itens.put(group.get(0), aux); aux = new ArrayList<Item>(); aux.add(new Item(2, TabHost, Controle para mostrar abas, R.drawable.ic_action_ tabhost)); aux.add(new Item(3, ListView, Controle para mostrar dados em forma de lista, R.drawable.ic_action_ listview)); itens.put(group.get(1), aux); lview.setadapter(new ListExpandable(getActivity(), itens, group)); Figura 2. Criando grupos com o ExpandableListView Os grupos abrem recolhidos, basta selecionar o mesmo, que será mostrado os itens. Existe um ícone para quando o grupo esta recolhido e outro para aberto. SearchView Esse controle abre uma busca para usarmos na aplicação. Com ele podemos pesquisar em um ListView, por exemplo, ou abrir uma nova activity com resultado de uma pesquisa. Nesse exemplo, vamos pesquisar em um ListView. Crie um novo layout ( layout_searchview.xml ) e adicione um ListView e um SearchView. Nesse primeiro exemplo, o ListView será preenchido com um array de resource e assim, vamos usar um ArrayAdapter, sem criar um novo. Abra o arquivo strings.xml na pasta values e digite o seguinte código: <string-array name= paises > <item>brasil</item> <item>argentina</item> <item>usa</item> <item>paraguai</item> <item>rússia</item> <item>espanha</item> <item>portugal</item> <item>frança</item> </string-array> No ItemDetailFragment, vamos configurar o SearchView e o ListView, usando o seguinte código: Criamos duas listas, onde preenchemos o nome dos grupos, e depois preenchemos os itens, adicionando o grupo criado. Por fim, chamamos o else if (mitem.id == 6 ){ rootview = inflater.inflate(r. layout.layout_searchview, 15
16 container, false); final SearchView search = (SearchView)rootView. findviewbyid(r. id.searchview); ListView lview = (ListView) rootview.findviewbyid(r. id.listview); Resources res = getresources(); String[] paises = res. getstringarray(r.array.paises); final ArrayAdapter<String> adapter = new ArrayAdapter<String>( getactivity(), android.r.layout.simple_ list_item_activated_1, android.r.id.text1, paises); Como sempre, carregamos o layout e os controles que vamos manipular. Usamos uma variável para carregar o array de resource. Criamos um ArrayAdapter e configuramos no ListView. O SearchView possui um Listener com dois métodos. O onquerytextsubmit é executado quando o usuário aperta o botão de pesquisar, assim, vamos realizar a pesquisa. No adapter, temos um método para pesquisar nos valores do mesmo. getfilter().filter, recebe o valor digitado (query). Implementamos o onquerytextchange, para verificar se o que foi digitado esta vazio, assim, retornamos os dados, passando um valor vazio para o filter. O onquerytextchange, será chamado, quando o usuário clicar no X para limpar o que foi digitado ou quando usar a tecla que limpa o valor do SearchView. Execute a aplicação e digite valores para pesquisar no ListView (Figura 3). lview.setadapter(adapter); search. setonquerytextlistener(new SearchView.OnQueryTextListener() public boolean onquerytextsubmit(string query) { if (!query.isempty()){ search.clearfocus(); adapter.getfilter(). filter(query); return public boolean onquerytextchange(string newtext) { if (newtext.isempty()){ adapter.getfilter(). filter( ); ); return false; Figura 3. Filtrando o ListView com o SearchView Note que o filtro é feito pelo inicio do texto digitado, não é pesquisado por qualquer letra dos itens do ListView. Para os outros exemplos, criamos um adapter para preencher o ListView, assim, o getfilter, não esta disponível, precisamos implementá-lo. Vamos adaptar a classe ListItem (se preferir, crie uma nova), para criar esse filtro. Primeiro, devemos implementar Filterable no adapter: public class ListItem extends BaseAdapter implements Filterable Vamos criar alguns atributos: private List<Item> originaldata; private List<Item> filtereddata; public boolean isfilter = false; Preencha originaldata e filtereddata no construtor. Teremos essas duas variáveis para trabalhar com os dados filtrados e os dados normais. No getview, precisamos adaptar para saber de onde vamos pegar os dados para preencher os controles de tela. Por isso, temos isfilter, assim podemos adaptar para o seguinte código: 16
17 Item itemobject; if (isfilter) { itemobject = filtereddata. get(position); else { itemobject = data. get(position); Se estivermos filtrando, precisamos pegar os dados do filtereddata, senão, pegamos do objeto que já trabalhamos. Por fim, precisamos implementar o getfilter, usando o public Filter getfilter() { return new Filter() protected FilterResults performfiltering(charsequence charsequence) { FilterResults results = new FilterResults(); if(charsequence == null charsequence.length() == 0) { results.values = originaldata; results.count = originaldata.size(); else { List<Item> filterresultsdata = new ArrayList<Item>(); String name = ; for(item data : originaldata) { name = data. getsnmitem().touppercase(); if (name. contains(charsequence. tostring().touppercase())) { filterresultsdata. add(data); results.values = filterresultsdata; results.count = filterresultsdata.size(); return protected void publishresults(charsequence charsequence, FilterResults filterresults) { filtereddata = (List<Item>) filterresults.values; isfilter = (filtereddata!= originaldata); notifydatasetchanged(); ; Verificamos se temos valores digitados para filtrar (charsequence), atribuindo para as variáveis o valor atual. Senão, percorremos os dados originais (com a variável auxiliar), e verificamos se o valor digitado é compatível com os dados. No publishresults é onde indicamos se estamos filtrando o adapter, comparando as variáveis. Se for, colocamos em filterresultsdata e depois retornamos o mesmo (usando results). Por fim, precisamos indicar no getcount a quantidade de registros que temos (que podem ser filtrados ou não), para isso, use o seguinte código: if (isfilter) { return filtereddata.size(); else { return data.size(); Crie um novo layout e adicione um ListView e um SearchView. Vamos pegar o mesmo exemplo que criamos o ListView customizado. Digite o seguinte código: else if (mitem.id == 7 ){ rootview = inflater.inflate(r. layout.layout_searchview_filter, container, false); 17
18 final SearchView search = (SearchView)rootView. findviewbyid(r. id.searchview); ListView lview = (ListView) rootview.findviewbyid(r. id.listview); List<Item> lista = new ArrayList<Item>();... final ListItemFilter adapter = new ListItemFilter(getActivity(), lista); lview.setadapter(adapter); newtext) { if (newtext.isempty()){ adapter.getfilter(). filter( ); return false; ); Note que a implementação do filter, é igual ao exemplo anterior, pois implementamos o getfilter. Experimente acessar getfilter no exemplo anterior, não temos. Execute a aplicação, e pesquisa registros no ListView (Figura 4). search. setonquerytextlistener(new SearchView.OnQueryTextListener() public boolean onquerytextsubmit(string query) { if (!query.isempty()){ search.clearfocus(); adapter.getfilter(). filter(query); return public boolean onquerytextchange(string Figura 4. Pesquisando registros no ListView com Filter do Adapter Conclusões Vimos nessa série, o básico para o desenvolvimento Android. Conhecemos desde o inicio da ferramenta, até controles comuns em aplicações Android. Aprendemos como customizá-los para que nossas aplicações fiquem o mais profissional possível. Espero ter passado o conhecimento básico para você se aprofundar na programação Android. 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 ( onde ministra cursos de programação e banco de dados. 18
19 Versionamentos de Arquivos o THVCheckVersion Parte 3 Caros leitores, chegamos a última parte do artigo sobre este tema do componente de versionamento. Esta parte final tem como objetivo frisar no mais importante desta classe, também abordando novos trechos do código- -fonte que ainda não foram ilustrados aqui, como é o principal escopo deste artigo, a classe TLogClass que implementará nosso controle de log, renderizado em uma bela grid (nosso DBGrid conterá no seu evento OnDrawColumnCell as figuras que representarão cada ação possível de THVFolderAction, como Novo, Removido, Modificado, Antigo Nome, Novo Nome ). Para que construir esta classe de histórico? Ora, tão importante quanto saber quem manipulou seus arquivos tanto obter um registro do momento da alteração/remoção/criação dos mesmos, em um dado diretório monitorado pela aplicação portanto como dito antes o que o nosso componente precisa conhecer é apenas o diretório que ele vai monitorar informado na propriedade DirectoryMonitoring, como em HVCheckVersion1.DirectoryMonitoring := C:\meudiretorio ;. Partindo daí tudo fica fácil para o projeto, pois tudo já está encapsulado no componente; todos os processos principais relevantes ao funcionamento deste versionador em série, bastando o componente trabalhar, persistindo os dados encontrados nas ações de arquivos em arquivos XML (files.xml e agora o log.xml). A Thread TFolderMonWorker e a comunicação com a API ReadDirectoryChangesW Esta nossa thread implementará o grosso do nosso projeto, ou seja, todo o processo de detecção de mudanças naquele diretório monitorado pela aplicação será chamado por esta thread, que por sua vez chamará esta API do Windows chamada ReadDirectoryChangesW; segue sua declaração em C++ para recapitulação (parâmetros da função): BOOL WINAPI ReadDirectoryChangesW( _In_ HANDLE hdirectory, _Out_ LPVOID lpbuffer, _In_ DWORD nbufferlength, _In_ BOOL bwatchsubtree, _In_ DWORD dwnotifyfilter, _Out_opt_ LPDWORD lpbytesreturned, _Inout_opt_ LPOVERLAPPED lpoverlapped, _In_opt_ LPOVERLAPPED_ COMPLETION_ROUTINE lpcompletionroutine ); Segue abaixo alguns trechos do código-fonte que implementa a chamada desta API e que retorna as informações monitoradas dos arquivos contidos nesse diretório-base de monitoração (lembrando que os subdiretórios também são monitorados): const NOTIFY_FILTERS: array[tchangetype] of DWORD = ( FILE_NOTIFY_CHANGE_FILE_ NAME // ctfilename NAME, FILE_NOTIFY_CHANGE_DIR_ // ctdirname, FILE_NOTIFY_CHANGE_ ATTRIBUTES // ctattr, FILE_NOTIFY_CHANGE_SIZE // ctsize, FILE_NOTIFY_CHANGE_ LAST_WRITE // ctlastwritetime, FILE_NOTIFY_CHANGE_ LAST_ACCESS // ctlastaccesstime, FILE_NOTIFY_CHANGE_ 19
20 CREATION // ctcreationtime, FILE_NOTIFY_CHANGE_ SECURITY // ctsecurityattr ); type _FILE_NOTIFY_ INFORMATION=packed record NextEntryOffset: DWORD; Action: DWORD; FileNameLength: DWORD; FileName: WideChar; FILE_NOTIFY_INFORMATION = _ FILE_NOTIFY_INFORMATION; PFILE_NOTIFY_INFORMATION = ^FILE_NOTIFY_INFORMATION; type TFolderMonWorker=class(TThread) private Owner: THVCheckVersion; FFolder: THandle; FMonFilter: DWord; FFolderItemInfo: THVFolderItemInfo; procedure SetUp; procedure TearDown; procedure DoFolderItemChange; protected procedure Execute; override; public constructor Create(AOwner: THVCheckVersion); reintroduce; procedure TFolderMonWorker. Execute; const cbufsize = 32 * 1024; // 32k var B: Pointer; vcount: DWord; voffset: DWord; vfileinfo: PFILE_NOTIFY_ INFORMATION; GetMem(B, cbufsize); try while not Terminated do if Owner=nil then Exit; if ReadDirectoryChangesW(FFolder B cbufsize Owner.MonitorSubFolders nil nil ) and (vcount > 0) then if Owner=nil then Exit; vfileinfo := B; repeat voffset := vfileinfo. NextEntryOffset; FFolderItemInfo. Name := WideCharLenToString(@ vfileinfo^.filename, vfileinfo^. FileNameLength); SetLength(FFolderItemInfo.Name, vfileinfo^.filenamelength div 2); case vfileinfo^. Action of FILE_ACTION_ADDED : FFolderItemInfo.Action := fanew; FILE_ACTION_REMOVED : FFolderItemInfo.Action := faremoved; FILE_ACTION_MODIFIED : FFolderItemInfo.Action := famodified; FILE_ACTION_RENAMED_ OLD_NAME: FFolderItemInfo. Action := farenamedold; FILE_ACTION_RENAMED_ NEW_NAME: FFolderItemInfo. Action := farenamednew; FFolderItemInfo. EventDate := Now; Synchronize(DoFolderI temchange);,,,,,,, 20
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 maisListando 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 maisInserindo 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 maisInterfaces Gráficas parte 3
parte 3 (Listview, AlertDialog e ActionBar) 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
Leia maisMemó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 maisANDROID APPLICATION PROJECT
Criando um programa Abrindo o programa Eclipse, clique na opção [FILE], depois em [NEW], selecione a opção [PROJECT], uma janela de opção do tipo de projeto irá se abrir, escolha [ANDROID] logo depois
Leia maisBarra de ferramentas padrão. Barra de formatação. Barra de desenho Painel de Tarefas
Microsoft Power Point 2003 No Microsoft PowerPoint 2003, você cria sua apresentação usando apenas um arquivo, ele contém tudo o que você precisa uma estrutura para sua apresentação, os slides, o material
Leia maisTutorial Plone 4. Manutenção de Sites. Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados
Tutorial Plone 4 Manutenção de Sites Universidade Federal de São Carlos Departamento de Sistemas Web Todos os direitos reservados Sumário Introdução 1 Como fazer a autenticação do usuário 1.1 Através do
Leia maisComo Gerar documento em PDF com várias Imagens
Como Gerar documento em PDF com várias Imagens Para Gerar documento em PDF com várias Imagens, temos que seguir dois passos: 1. Inserir Imagens no Word 2. Gerar PDF a partir de documento do Word 1- Inserir
Leia maisBanco de Dados Microsoft Access: Criar tabelas. Vitor Valerio de Souza Campos
Banco de Dados Microsoft Access: Criar tabelas Vitor Valerio de Souza Campos Objetivos do curso 1. Criar uma tabela no modo de exibição Folha de Dados. 2. Definir tipos de dados para os campos na tabela.
Leia maisCRIANDO TEMPLATES E LEGENDAS
CRIANDO TEMPLATES E LEGENDAS Este tutorial tem como objetivo instruir passo à passo como criar templates de peças, utilizar os novos recursos de cadastro de propriedade de peças e criação de legenda. 1-
Leia maisDisplay 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 maisTutorial Gerar arquivo PDF. Gerando um documento pdf com várias imagens 1- Inserir imagem no Word
Tutorial Gerar arquivo PDF. Com o objetivo de simplificar e diminuir o tamanho de arquivos anexos nos projetos, elaboramos um pequeno tutorial mostrando como gerar um único arquivo no formato pdf contendo
Leia maisBanco de Dados Microsoft Access: Criar tabelas
Banco de Dados Microsoft Access: Criar s Vitor Valerio de Souza Campos Objetivos do curso 1. Criar uma no modo de exibição Folha de Dados. 2. Definir tipos de dados para os campos na. 3. Criar uma no modo
Leia maisTrabalhando 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 maisDespachante Express - Software para o despachante documentalista veicular DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1
DESPACHANTE EXPRESS MANUAL DO USUÁRIO VERSÃO 1.1 1 Sumário 1 - Instalação Normal do Despachante Express... 3 2 - Instalação do Despachante Express em Rede... 5 3 - Registrando o Despachante Express...
Leia maisGoogle Drive. Passos. Configurando o Google Drive
Google Drive um sistema de armazenagem de arquivos ligado à sua conta Google e acessível via Internet, desta forma você pode acessar seus arquivos a partir de qualquer dispositivo que tenha acesso à Internet.
Leia maisBanco de Dados BrOffice Base
Banco de Dados BrOffice Base Autor: Alessandro da Silva Almeida Disponível em: www.apostilando.com 27/02/2011 CURSO TÉCNICO EM SERVIÇO PÚBLICO Apostila de Informática Aplicada - Unidade VI Índice Apresentação...
Leia maisFluxo de trabalho do Capture Pro Software: Indexação de código de barras e separação de documentos
Este procedimento corresponde ao fluxo de trabalho de Indexação de código de barras e de separação de documentos no programa de treinamento do Capture Pro Software. As etapas do procedimento encontram-se
Leia maisEXEMPLO DE COMO FAZER UMA MALA DIRETA
EXEMPLO DE COMO FAZER UMA MALA DIRETA OBS: Para esta nota de aula foi utilizada como referência: Apostila Mala Direta Santos, Jorge Rodrigues dos. Foram adaptados os comando para utilizar mala direta no
Leia mais( 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 maisManual do Google agenda. criação e compartilhamento de agendas
Manual do Google agenda criação e compartilhamento de agendas 1 O que é o Google Agenda? Google Agenda é um serviço de agenda on line gratuito do Google, onde você pode anotar compromissos e tarefas, organizando
Leia maisMicrosoft Access XP Módulo Um
Microsoft Access XP Módulo Um Neste primeiro módulo de aula do curso completo de Access XP vamos nos dedicar ao estudo de alguns termos relacionados com banco de dados e as principais novidades do novo
Leia maisSistema de Recursos Humanos
Sistema de Recursos Humanos Projeto 1 O objetivo desse sistema é gerenciar a admissão e a demissão de funcionários. Esse funcionário pode ou não ter dependentes. Esse funcionário está alocado em um departamento
Leia maisGoogle Drive: Acesse e organize seus arquivos
Google Drive: Acesse e organize seus arquivos Use o Google Drive para armazenar e acessar arquivos, pastas e documentos do Google Docs onde quer que você esteja. Quando você altera um arquivo na web, no
Leia maisValidando dados de páginas WEB
Validando dados de páginas WEB Para que validar os dados? Validar os dados informados pelo usuário garante que sua aplicação funcione corretamente e as informações contidas nela tenha algum sentido. Outro
Leia maisAMBIENTE. 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Índice: CMS 3 O que é Content Management System? Clientes 4 O que é o Cliente? 4 Configurando o i-menu/i-view para trabalhar. com o CMS.
Índice: CMS 3 O que é Content Management System? Clientes 4 O que é o Cliente? 4 Configurando o i-menu/i-view para trabalhar com o CMS. 5 Removendo o Cliente. Playlist 7 Criando um Playlist. 8 Adicionando
Leia maisFERRAMENTAS DE COLABORAÇÃO CORPORATIVA
FERRAMENTAS DE COLABORAÇÃO CORPORATIVA Compartilhamento de Arquivos no Google Drive Sumário (Clique sobre a opção desejada para ir direto à página correspondente) Utilização do Google Grupos Introdução...
Leia maisManual de configuração do sistema
Manual de configuração do sistema (v.1.5.x Beta) Rua México, 119 Sala 2004 Centro Rio de Janeiro, RJ www.doctors-solution.com.br www.simdoctor.com.br contato@simdoctor.com.br Sumário 1. Fazendo seu primeiro
Leia maise-ouv Passo-a-passo Sistema de Ouvidorias do Poder Executivo Federal Junho, 2015 Controladoria-Geral da União
e-ouv Passo-a-passo Sistema de Ouvidorias do Poder Executivo Federal Junho, 2015 Sumário 1. Acesso ao sistema... 3 2. Funcionalidades do sistema... 5 3. Como tratar manifestações... 14 3.1 Detalhar...
Leia maisProgramação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL
Programação Orientada a Objetos com PHP & MySQL Sistema Gerenciador de Banco de Dados: Introdução e configuração de bases de dados com Postgre e MySQL Prof. MSc. Hugo Souza Iniciando nossas aulas sobre
Leia maisMANUAL COTAÇAO WEB MANUAL MANUAL AVANÇO INFORMÁTICA AVANÇO INFORMÁTICA. [Digite seu endereço] [Digite seu telefone] [Digite seu endereço de email]
MANUAL COTAÇAO WEB [Digite seu endereço] [Digite seu telefone] [Digite seu endereço de email] MANUAL MANUAL AVANÇO INFORMÁTICA AVANÇO INFORMÁTICA Material Desenvolvido para a Célula Materiais Autor: Equipe
Leia maisTrecho retirando do Manual do esocial Versão 1.1
Trecho retirando do Manual do esocial Versão 1.1 A rotina de acesso direto ao XML do S-1000, o usuário pode encontrar na opção de cadastro de Empresas do SIP. Sempre que o usuário localizar a figura ao
Leia maisPersistência de Dados
Persistência de s Universidade do Estado de Santa Catarina - Udesc Centro de Ciências Tecnológicas - CCT Departamento de Ciência da Computação Tecnologia de Sistemas de Informação Estrutura de s II - DAD
Leia maisProcedimentos para Reinstalação do Sisloc
Procedimentos para Reinstalação do Sisloc Sumário: 1. Informações Gerais... 3 2. Criação de backups importantes... 3 3. Reinstalação do Sisloc... 4 Passo a passo... 4 4. Instalação da base de dados Sisloc...
Leia maisDicas para usar melhor o Word 2007
Dicas para usar melhor o Word 2007 Quem está acostumado (ou não) a trabalhar com o Word, não costuma ter todo o tempo do mundo disponível para descobrir as funcionalidades de versões recentemente lançadas.
Leia maisMANUAL DO ANIMAIL 1.0.0.1142 Terti Software
O Animail é um software para criar campanhas de envio de email (email Marketing). Você pode criar diversas campanhas para públicos diferenciados. Tela Principal do sistema Para melhor apresentar o sistema,
Leia maisUsando 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 maisCriando 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 maisINTRODUÇÃO À PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS. ADS 6º Período
INTRODUÇÃO À PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS ADS 6º Período INTRODUÇÃO À PROGRAMAÇÃO PARA DISPOSITIVOS MÓVEIS Interface gráfica - gerenciadores de layout No Android, existem diversos tipos de gerenciadores
Leia maisManual do Painel Administrativo
Manual do Painel Administrativo versão 1.0 Autores César A Miggiolaro Marcos J Lazarin Índice Índice... 2 Figuras... 3 Inicio... 5 Funcionalidades... 7 Analytics... 9 Cidades... 9 Conteúdo... 10 Referência...
Leia maisBem- Vindo ao manual de instruções do ECO Editor de COnteúdo.
Manual de Instruções ECO Editor de Conteúdo Bem- Vindo ao manual de instruções do ECO Editor de COnteúdo. O ECO é um sistema amigável e intui?vo, mas abaixo você pode?rar eventuais dúvidas e aproveitar
Leia maisRevisão: Introdução. - Integração com o AutoManager; 1 Atualização de versão do banco de dados PostgreSQL
Urano Indústria de Balanças e Equipamentos Eletrônicos Ltda. Rua Irmão Pedro 709 Vila Rosa Canoas RS Fone: (51) 3462.8700 Fax: (51) 3477.4441 Características do Software Urano Integra 2.2 Data: 12/05/2014
Leia maisPodemos agora ver no IDE do Morfik os objetos que já incorporamos ao nosso projeto :
Podemos agora ver no IDE do Morfik os objetos que já incorporamos ao nosso projeto : O form Index A tabela Fotos A query Q_seleção_de_fotos Vide figura 46. Figura 46 O próximo passo é criar um form que
Leia maisWord 1 - Introdução 1.1 - Principais recursos do word 1.2 - A janela de documento 1.3 - Tela principal
Word 1 - Introdução O Word para Windows ou NT, é um processador de textos cuja finalidade é a de nos ajudar a trabalhar de maneira mais eficiente tanto na elaboração de documentos simples, quanto naqueles
Leia maisParte 5 LibreOffice Base
Parte 5 LibreOffice Base 1. Criação do banco de dados 1. Abra o LibreOffice Base; 2. Escolha Criar um novo banco de dados e clique em Concluir; 3. Salve o banco de dados em alguma pasta do computador.
Leia maisÍNDICE... 2 POWER POINT... 4. Abas... 7 Salvando Arquivos... 8 Abrindo um arquivo... 11 LAYOUT E DESIGN... 13
Power Point ÍNDICE ÍNDICE... 2 POWER POINT... 4 Abas... 7 Salvando Arquivos... 8 Abrindo um arquivo... 11 LAYOUT E DESIGN... 13 Guia Design... 14 Cores... 15 Fonte... 16 Efeitos... 17 Estilos de Planos
Leia maisProgramaçã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 maisJanelas e seus elementos
Janelas e seus elementos As janelas são quadros que são exibidos na tela do monitor. Todos os aplicativos estudados nesse curso serão exibidos dentro de janelas. Nelas você poderá abrir, salvar e fechar
Leia maisTabela e Gráficos Dinâmicos Como estruturar dinamicamente dados no Excel
Tabela e Gráficos Dinâmicos Como estruturar! Para que serve a Tabela e o Gráfico Dinâmico?! Como criar uma Tabela Dinâmica?! Como criar um Gráfico Dinâmico?! Como podemos atualizar dos dados da Tabela
Leia maisCriando Banco de Dados, Tabelas e Campos através do HeidiSQL. Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011
Criando Banco de Dados, Tabelas e Campos através do HeidiSQL Prof. Vitor H. Migoto de Gouvêa Colégio IDESA 2011 Edição 2 Pedreiros da Informação Criando Banco de Dados, Tabelas e Campos através do HeidiSQL
Leia maisPesquisa e organização de informação
Pesquisa e organização de informação Capítulo 3 A capacidade e a variedade de dispositivos de armazenamento que qualquer computador atual possui, tornam a pesquisa de informação um desafio cada vez maior
Leia maisFluxo de trabalho do Capture Pro Software: Indexação de OCR e separação de documentos de código de correção
Este procedimento corresponde ao fluxo de trabalho de Indexação de OCR com separação de código de correção no programa de treinamento do Capture Pro Software. As etapas do procedimento encontram-se na
Leia maisAdicionando Propriedades e Funcionalidades aos Componentes Parte II
Adicionando Propriedades e Funcionalidades aos Componentes Parte II Quantas vezes eu não lamentei por este componente não ter uma propriedade que guardasse uma lista paralela a lista que é mostrada em
Leia maisDesenvolvimento 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 maisManual de Utilização
Manual de Utilização Versão 1.0 18/01/2013 Sempre consulte por atualizações deste manual em nossa página. O Cotação Web está em constante desenvolvimento, podendo ter novas funcionalidades adicionadas
Leia maisProgramação para Android. Aula 06: Activity, menus e action bar
Programação para Android Aula 06: Activity, menus e action bar Activity A classe Activity é quem gerencia a interface com o usuário. Ela quem recebe as requisições, as trata e processa. Na programação
Leia maisAndroid 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 maisOperador de Computador. Informática Básica
Operador de Computador Informática Básica Instalação de Software e Periféricos Podemos ter diversos tipos de software que nos auxiliam no desenvolvimento das nossas tarefas diárias, seja ela em casa, no
Leia maisVISUAL LIGHTBOX FERRAMENTA WEB DESIGN FABIANO KEIJI TAGUCHI
VISUAL LIGHTBOX FERRAMENTA WEB DESIGN FABIANO KEIJI TAGUCHI ESTE MATERIAL TEM UM OBJETIVO DE COMPLEMENTAR OS ASSUNTOS ABORDADOS DENTRO DE SALA DE AULA, TORNANDO-SE UM GUIA PARA UTILIZAÇÃO DA FERRAMENTA
Leia maisTUTORIAL COMO CRIAR E EDITAR UM VÍDEO NO WINDOWS MOVIE MAKER*
TUTORIAL COMO CRIAR E EDITAR UM VÍDEO NO WINDOWS MOVIE MAKER* * Microsoft Windows MovieMakeré um programa da Microsoft Corporation. A versão utilizada é a 5.1 que já vem instalada no Microsoft Windows
Leia maisCapítulo 7 O Gerenciador de Arquivos
Capítulo 7 O Gerenciador de Arquivos Neste capítulo nós iremos examinar as características da interface do gerenciador de arquivos Konqueror. Através dele realizaremos as principais operações com arquivos
Leia maisFacebook Instruções de integração com PayPal
Facebook Instruções de integração com PayPal Há diversas formas de utilizar o PayPal para receber pagamentos na plataforma do Facebook. Primeiro você precisa decidir suas necessidades para a opção mais
Leia maisZS Rest. Manual Profissional. BackOffice Mapa de Mesas. v2011
Manual Profissional BackOffice Mapa de Mesas v2011 1 1. Índice 2. Introdução... 2 3. Iniciar ZSRest Backoffice... 3 4. Confirmar desenho de mesas... 4 b) Activar mapa de mesas... 4 c) Zonas... 4 5. Desenhar
Leia maisVeja 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 maisCRIANDO UM BANCO DE DADOS
CRIANDO UM BANCO DE DADOS Bem, antes de iniciarmos propriamente no delphi, devemos aprender a usar sua ferramentas, sendo uma das mais importantes o Database Desktop, pois é com esta que construímos nossos
Leia maisMicrosoft Office PowerPoint 2007
INTRODUÇÃO AO MICROSOFT POWERPOINT 2007 O Microsoft Office PowerPoint 2007 é um programa destinado à criação de apresentação através de Slides. A apresentação é um conjunto de Sides que são exibidos em
Leia maisEntradas 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 maisManual do Publicador. Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web
Manual do Publicador Wordpress FATEA Sistema de Gerenciamento de Conteúdo Web Sumário Painel de Administração... 3 1 - Inserção de post... 5 2 Publicação de post com notícia na área headline (galeria de
Leia maisProgramaçã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 maisUniversidade Federal do Mato Grosso - STI-CAE. Índice
CAPA Universidade Federal do Mato Grosso - STI-CAE Índice 1. Página da área administrativa... 1.1 Botões e campo iniciais... 2. Explicar como funcionam as seções... 2.1. Seções dinâmicos... 2.1.1 Como
Leia maisRepeater no GASweb. Regiões
Repeater no GASweb Por: Rodrigo Silva O controle de servidor Repeater é um container básico que permite a você criar uma lista de qualquer informação que deseja em uma página Web. Ele não tem uma aparência
Leia maisAJAX no GASweb. Mas e afinal, para que usamos o AJAX?
Nível - Avançado AJAX no GASweb Por: Pablo Hadler AJAX (Asynchronous Javascript and XML) foi criado com o princípio de ser uma maneira rápida e otimizada de podermos fazer requisições Web, sendo esta totalmente
Leia maisProgramação Orientada a Objetos com PHP & MySQL Cookies e Sessões. Prof. MSc. Hugo Souza
Programação Orientada a Objetos com PHP & MySQL Cookies e Sessões Prof. MSc. Hugo Souza Se você precisar manter informações sobre seus usuários enquanto eles navegam pelo seu site, ou até quando eles saem
Leia maisO GEM é um software 100% Web, ou seja, você poderá acessar de qualquer local através da Internet.
Olá! Você está recebendo as informações iniciais para utilizar o GEM (Software para Gestão Educacional) para gerenciar suas unidades escolares. O GEM é um software 100% Web, ou seja, você poderá acessar
Leia maisDisciplina: Programas de Edição de Textos Professora: Érica Barcelos
Disciplina: Programas de Edição de Textos Professora: Érica Barcelos CAPÍTULO 4 4. RECURSOS PARA ILUSTRAÇÕES Uma característica que difere os processadores de textos dos editores é a possibilidade de gerar
Leia maisUniversidade Federal de Santa Maria UFSM Centro de Tecnologia CT. Power Point. Básico
Universidade Federal de Santa Maria UFSM Centro de Tecnologia CT Power Point Básico Santa Maria, julho de 2006 O Power Point é um aplicativo do Microsoft Office direcionado à criação de apresentações.
Leia maisGerenciamento de Contatos
Gerenciamento de Contatos O objetivo deste módulo é ajudar a gerenciar todos os contatos da empresa. Além dos dados mais importantes, o módulo permite cadastrar anotações e relacionar as tarefas e eventos
Leia maisNovell. Novell Teaming 1.0. novdocx (pt-br) 6 April 2007 EXPLORAR O PORTLET BEM-VINDO DESCUBRA SEU CAMINHO USANDO O NOVELL TEAMING NAVIGATOR
Novell Teaming - Guia de início rápido Novell Teaming 1.0 Julho de 2007 INTRODUÇÃO RÁPIDA www.novell.com Novell Teaming O termo Novell Teaming neste documento se aplica a todas as versões do Novell Teaming,
Leia maisMICROSOFT OFFICE EXCEL 2007
LEIAME Nenhuma informação da APOSTILA - MICROSOFT OFFICE EXCEL 2007 poderá ser copiada, movida ou modificada sem autorização prévia e escrita do autor. MICROSOFT OFFICE EXCEL 2007 Efetue cálculos, analise
Leia maisETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES I PROFESSOR RAFAEL BARRETO
ETEC DR. EMÍLIO HENRNANDEZ AGUILAR PROGRAMAÇÃO DE COMPUTADORES I PROFESSOR RAFAEL BARRETO DELPHI - UTILIZANDO OPENDIALOG PARA ARMAZENAR IMAGENS EM BANCO DE DADOS Criaremos uma solução simples para criar
Leia maisJavaScript. JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos.
JavaScript JavaScript é uma linguagem de script usada em navegadores web. É uma linguagem dinâmica, estruturada e orientada em objetos. Pode ser usada dentro do próprio arquivo HTML ou estruturada em um
Leia maisConhecendo 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 maisSumário: Fluxo Operacional... 3 Contatos... 4. Agenda Online... 10. Reservas de Salas... 26. Tarefas... 42
Sumário: Fluxo Operacional... 3 Contatos... 4 Passo a passo para visualização de contatos... 5 Passo a passo para filtragem da lista de contatos... 6 Como ordenar a lista de contatos... 7 Como gerar uma
Leia maisAula 01 - Formatações prontas e condicionais. Aula 01 - Formatações prontas e condicionais. Sumário. Formatar como Tabela
Aula 01 - Formatações prontas e Sumário Formatar como Tabela Formatar como Tabela (cont.) Alterando as formatações aplicadas e adicionando novos itens Removendo a formatação de tabela aplicada Formatação
Leia mais1. Tela de Acesso pg. 2. 2. Cadastro pg. 3. 3. Abas de navegação pg. 5. 4. Abas dados cadastrais pg. 5. 5. Aba grupo de usuários pg.
Sumário 1. Tela de Acesso pg. 2 2. Cadastro pg. 3 3. Abas de navegação pg. 5 4. Abas dados cadastrais pg. 5 5. Aba grupo de usuários pg. 6 6. Aba cadastro de funcionários pg. 7 7. Pedidos pg. 12 8. Cartões
Leia maisLição 1 - Criação de campos calculados em consultas
1 de 5 21-08-2011 22:15 Lição 1 - Criação de campos calculados em consultas Adição de Colunas com Valores Calculados: Vamos, inicialmente, relembrar, rapidamente alguns conceitos básicos sobre Consultas
Leia maisComo incluir artigos:
Como incluir artigos: O WordPress é uma ferramenta muito flexível, com muitas variações e ajustes que podem torná-lo algo muito simples e também muito sofisticado conforme os recursos que são configurados
Leia maisNewAgent enterprise-brain
Manual NewAgent enterprise-brain Configuração Manual NewAgent enterprise-brain Configuração Este manual de uso irá ajudá-lo na utilização de todas as funções administrativas que a NewAgent possui e assim,
Leia maisAnálise de Dados do Financeiro
Análise de Dados do Financeiro Introdução Para reunir em um só local as informações de contas a pagar e receber cadastradas e/ou geradas no sistema TTransp existe a interface de análise de dados do financeiro.
Leia maisIniciando 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 maisEsse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5.
Esse manual é um conjunto de perguntas e respostas para usuários(as) do Joomla! 1.5. Ele considera que você já tem o Joomla! instalado no seu computador. Caso você queira utilizá lo em um servidor na web,
Leia maisOmega Tecnologia Manual Omega Hosting
Omega Tecnologia Manual Omega Hosting 1 2 Índice Sobre o Omega Hosting... 3 1 Primeiro Acesso... 4 2 Tela Inicial...5 2.1 Área de menu... 5 2.2 Área de navegação... 7 3 Itens do painel de Controle... 8
Leia maisAcessando um Banco de Dados
Acessando um Banco de Dados Introdução Agora que você já está craque em JSP e já instalou seu servidor, vamos direto para a parte prática! Neste tutorial vamos aprender a acessar um banco de dados. Para
Leia maisÍNDICE... 2 INTRODUÇÃO... 4
Mic crosoft Excel 201 0 ÍNDICE ÍNDICE... 2 INTRODUÇÃO... 4 Interface... 4 Guias de Planilha... 5 Movimentação na planilha... 6 Entrada de textos e números... 7 Congelando painéis... 8 Comentários nas Células...
Leia maisInstalando o Internet Information Services no Windows XP
Internet Information Services - IIS Se você migrou recentemente do Windows 95 ou 98 para o novo sitema operacional da Microsoft Windows XP, e utilizava antes o Personal Web Server, deve ter notado que
Leia maisGerenciamento de Arquivos e Pastas. Professor: Jeferson Machado Cordini jmcordini@hotmail.com
Gerenciamento de Arquivos e Pastas Professor: Jeferson Machado Cordini jmcordini@hotmail.com Arquivo Todo e qualquer software ou informação gravada em nosso computador será guardada em uma unidade de disco,
Leia maisProgramação para Android. Aula 10: Acesso a câmera, sms e recursos do aparelho
Programação para Android Aula 10: Acesso a câmera, sms e recursos do aparelho Objetivos Nesta aula iremos aprender como invocar os recursos do aparelho: Fazer chamadas telefônicas Enviar SMS Utilizar a
Leia mais