Professional Documents
Culture Documents
novembro 2012
ndice
Editorial
04
C#
05
12
Autor: Lucas de
Oliveira
Android
Autor: Marcos C.
Silva
Delphi
Delphi
18
24
Autor: Thiago C.
Montebugnoli
Dicas
28
Legenda
30
Iniciante
Intermedirio
Avanado
novembro 2012
03
Bem-vindo
Ol amigos do The Club, no final do ms de Outubro aconteceu
a to esperada Embarcadero Delphi Conference.
Ns estivemos por l prestigiando este grande evento e pudemos
assistir a vrias palestras. Para compartilhar com vocs, nesta edio,
estamos trazendo um pequeno artigo onde podero conferir mais
detalhes a respeito desta Conferncia.
A revista deste ms conta ainda com outros artigos: nosso consultor tcnico Lucas de Oliveira continua com a srie de artigos
relacionados ao FireMonkey, onde aborda como trabalhar com um
formulrio base de cadastro com barra de ferramentas, procurando
exemplificar passo a passo para um maior aprendizado.
Internet
http://www.theclub.com.br
Cadastro: cadastro@theclub.com.br
Suporte: suporte@theclub.com.br
Informaes: info@theclub.com.br
Skype Cadastro: theclub_cadastro
Skype Suporte: theclub_linha1
theclub_linha2
theclub_linha3
www.twitter.com/theclubbr
Impresso e acabamento:
GRIL - Grfica e Editora
Taquarituba-SP - Tel. (14) 3762-1345
Reproduo
04
novembro 2012
DELPHI
No primeiro horrio escolhemos para assistir a palestra de abertura do Senhor David I e Michael Swindell, tendo como ttulo Indroducing HTML 5 Builder. Foram discutidas diversas caractersticas desta nova ferramenta que tem como objetivo customizar aplicaes das plataformas (Android, Mac, Windows)
utilizando arquivos CSS3. Eu particularmente gosto de novidades, mas sinceramente tenho a certeza que ferramentas como estas sero utilizadas por poucas
pessoas e em um prazo muito longo de tempo por no se tratar de ferramentas indispensveis para a maioria dos desenvolvedores.
Samuel David fala sobre a integrao do Google Maps usando o Delphi XE 3. Discute um pequeno exemplo para aplicaes desktop utilizando um componente chamado TChromium. Particularmente achei interessante esta integrao de uma forma rpida e prtica, demonstrando algumas das funcionalidades
do XE 3 com o Google.
J Guinther Pauli, tendo como ttulo de sua palestra Aplicaes Corporativas para Web com Asp.Net, discutiu uma boa parte do tempo sobre as evolues
do Asp.Net, falou um poucos das verses do Framework, dando dicas e macetes para a platia. O assunto principal desta palestra foi o uso do Delphi Prism,
o mesmo utiliza a linguagem Oxygen junto com uma Ide de desenvolvimento do Visual Studio da Microsoft. Esta palestra se tornou um pouco cansativa pelo
fato de envolver tecnologias j existentes a um bom tempo na linguagem C# por exemplo, ficando como um conhecimento a mais para quem j trabalha com
o bom e velho Delphi.
Na quarta palestra, ministrada pelo Dormevilly Tertius, com o nome ER/Studio Ecosystem: Modelagem, ETL, Repositrio e Portal foram abordados vrias
funcionalidades do ER/Studio, ferramenta responsvel pela modelagem lgica e fsica de sistemas. O palestrante montou exemplos prticos e de fcil entendimento envolvendo ETL (Extract, Transform and Load), auditoria de informaes, entre outros, proporcionando aos ouvintes o conhecimento um pouco mais
avanado dos recursos oferecidos.
Com a chegada do Windows 8 no poderamos deixar de
conferir como fica a situao do desenvolvedor envolvendo
novas tecnologias, e isto que Kelver Merlotti nos demonstra
em sua palestra Desenvolvendo para Windows 8. Utilizando
o XE 3, sendo totalmente compatvel com esta verso do
Windows, ele monta pequenos exemplos das funcionalidades
destas duas tecnologias.
Bem, estas foram algumas das palestras que o The Club
assistiu e por isso procurei escrever um pouco sobre elas.
Novamente ressalto que o evento estava coberto por timos
palestrantes e representantes que nos propuseram a ensinar
e apresentar novos recursos do novo Delphi XE 3. Conhecemos tambm outras ferramentas como o HTML Builder 5, e
recursos novos como: Aplicaes em Windows 8, Aplicaes
para Mac, Android, Windows Phone, Aplicaes para Web
entre outras.
Logo abaixo segue o site oficial com as palestras, seguindo por seus palestrantes e separadas por sala.
http://www.delphiconference.com.br/
05
Delphi
Parte VIII
Vimos no artigo anterior, um pequeno exemplo de como a POO pode
ajudar a construir aplicaes cliente-server no Delphi de forma eficiente
e de qualidade. Neste artigo, ainda continuaremos vendo POO, onde
mostrarei como criar um controle VCL no Delphi.Nas partes III e IV, vimos
alguns componentes da VCL e para nossa alegria, podemos criar nossos
prprios componentes. Isso mesmo, podemos criar componentes do
zero ou estender algum existente. O que vou mostrar neste artigo,
um componente simples, para localizar dados, que pode ser modificado
de acordo com a necessidade do desenvolvedor.
Para aplicaes terem performances, sempre bati na tecla da parametrizao de dados, ou seja, os dados que so mostrados em tela devem ser a
06
novembro 2012
Inciando a construo
Primeiramente, precisamos criar um pacote. Mesmo usando o Delphi XE2,
voc pode usar qualquer verso do Delphi para criar o componente. Clique
em File>New>Other e acesse o item Package (Imagem 1).
procedure Buscar;
function GetCodigo: integer;
property DataSet: TClientDataSet;
property SQLCodigo: string;
property SQLDescricao: string;
Nota: Caso deseja, voc pode criar uma coleo para ter vrios tipos
de pesquisa, como por exemplo, a propriedade Collumns do DBGrid. De
acordo com essa coleo, dinamicamente, voc poderia criar os itens
do RadioButton da tela anterior. Fica como pesquisa para incrementar
o componente.
No cdigo anterior, criamos a assinatura de um mtodo que ser responsvel por realizar a consulta (Buscar) e uma funo, para retornar o cdigo
retornado pela consulta. Alm disso, temos que criar uma propriedade do tipo
TClientDataSet, responsvel por ter os dados da consulta.
Criando o formulrio
Teremos de criar o formulrio de pesquisa, que deve conter os controles
de tela para digitar o texto, boto de pesquisa e um grid onde sero mostrados
os dados, alm de um DataSource que ser vinculado a um DataSet. Voc pode
incluir componentes de sua necessidade.
Nossa tela de pesquisa ter dois filtros: um para pesquisa pelo cdigo,
outro para pesquisa por uma descrio (nome, titulo etc). Crie um novo
formulrio no pacote e adicione os controles, veja na Imagem 2 como ser o
formulrio de pesquisa.
Caso deseja, mude para o controle que utiliza para trabalhar com dados
locais (IBQuery, Query etc). As outras duas propriedades indicam o cdigo
SQL para a consulta por cdigo ou por descrio, assim basta conImagemr a
propriedade do Localizar, para ter a consulta parametrizada no componente.
O cdigo do Buscar, simplesmente, repassa pro ClientDataSet o valor do
Edit (edtLocalizar), onde o usurio digitar o valor de busca. No caso, temos que
verificar qual o tipo de filtro escolhido pelo usurio, para poder conImagemr
no DataSet o respectivo comando SQL da Listagem 1.
Listagem 1. Verificando o filtro escolhido
FDataSet.Close;
if (rgLocalizar.ItemIndex = 0) then
begin
FDataSet.CommandText := FSQLCodigo;
FDataSet.Params[0].AsInteger :=
StrToInt(edtLocalizar.Text);
end
else
begin
FDataSet.CommandText := FSQLDescricao;
FDataSet.Params[0].AsString := % +
edtLocalizar.Text + %;
end;
FDataSet.Open;
Result := DataSet.Fields[0].AsInteger;
novembro 2012
07
Codificando o formulrio
if FDataSet <> Value then
begin
FDataSet := Value;
DataSource1.DataSet := FDataSet;
end;
O valor do Width ser de acordo com o tamanho do Grid que voc especificar. Entende-se que duas colunas so necessrias, pois vamos, em quase sua
totalidade, retornar apenas cdigo e uma descrio, mas voc pode adaptar
para retornar quantas colunas quiser.
08
novembro 2012
Criando o componente
Agora, precisamos criar uma unit, que receber mais propriedades que
sero repassadas ao formulrio no momento de sua criao em memria,
assim como tambm fazer o registro do componente no Delphi.
procedure Register;
begin
RegisterComponents(Luciano Pimenta,
[TLocalizar]);
end;
unit uLocalizar;
interface
uses Classes, Forms, DB, Dialogs,
ufrLocalizar, Graphics, Controls,DBClient;
type
TLocalizar = class(TComponent)
private
FDataSet: TClientDataSet;
FFormLocalizar: TfrLocalizar;
FSQLDescricao: string;
FSQLCodigo: string;
procedure SetDataSet(const Value:
TClientDataSet);
procedure SetSQLCodigo(const Value:
string);
procedure SetSQLDescricao(const Value:
string);
protected
procedure Notification(AComponent:
TComponent;
Operation: TOperation); override;
public
function Execute: Boolean;
function ReturnValue: integer;
published
property DataSet: TClientDataSet read
inherited;
if Operation = opRemove then
if AComponent = FDataSet then
FDataSet := nil;
09
{$R *.dcr}
Poderamos tambm indicar o nome do arquivo sem a utilizao da mscara. Agora, basta recompilar a aplicao e seu componente ter um novo
cone (Imagem 5).
Testando o componente
Imagem 3. Componente instalado no Delphi
10
novembro 2012
if Localizar1.Execute then
begin
cdsEmployee.Close;
cdsEmployee.Params[0].AsInteger :=
Localizar1.ReturnValue;
cdsEmployee.Open;
end;
Usando na aplicao
Onde vamos usar nosso componente de pesquisa? No cadastro de vendas,
temos algumas pesquisas auxiliares (cliente, empresa e produto), onde usamos
a tela de pesquisa genrica. Vamos modificar para usar o nosso componente
de pesquisa.
Adicionar trs Localizar no formulrio e faa a ligao da propriedade
DataSet com os respectivos ClientDataSets de pesquisa.
Veja na Listagem 6 o valor das propriedades dos componentes e o cdigo
dos botes para chamar o componente de pesquisa e fazer as conImagemes
necessrias.
Listagem 6. Alterao do cdigo dos botes
novembro 2012
11
Localizar Cliente
Boto Produto
if (locProduto.Execute) then
nCdProduto := locProduto.ReturnValue
else
DMPesquisa.cdsPesquisaProduto.Close;
Boto Cliente
if (locCliente.Execute) then
nCdCliente := locCliente.ReturnValue
else
DMPesquisa.cdsPesquisaCliente.Close;
Localizar Empregado
SQLCodigo
Boto Empregado
if (locEmpregado.Execute) then
nCdEmpregado := locEmpregado.
ReturnValue
else
DMPesquisa.cdsPesquisaEmpregado.Close;
Concluso
Vimos neste artigo como podemos criar componentes que nos auxilie em
aplicaes client/server para ser utilizado em consultas auxiliares, poupando
tempo de programao e diminuio de cdigo. Poderamos usar formulrios
com a mesma finalidade, mas o componente tem facilidade de ser instalado
e estar disponvel em qualquer projeto Win32.
O que mostrei aqui foi apenas o pontap inicial, use sua criatividade para
agilizar seu dia a dia de programador. Um grande abrao a todos!
Localizar Produto
Sobre o autor
SQLCodigo
Luciano Pimenta
12
novembro 2012
www.lucianopimenta.net
Formulrio
base de cadastro com barra de
ferramentas
Parte I
Ol pessoal, nos ltimos artigos sobre FireMonkey, no Delphi XE2,
foi mostrado como fazer na plataforma FireMonkey algumas prticas
utilizadas no dia a dia de desenvolvimento na j tradicional plataforma
VCL. Nos prximos artigos vamos continuar com esta ideia, mostrando
algumas adaptaes a serem feitas para utilizar a plataforma Firemonkey,
e alm de se utilizar das mesmas tcnicas da VCL, ainda poder incrementar a interface de sua aplicao com os mais variados recursos visuais
do FireMonkey.
Neste artigo mostraremos como criar um formulrio base para telas de
cadastro, com uma barra de ferramentas para navegao entre registros. Este
formulrio servir de base para a criao de outros formulrios de cadastro, ele
no ser exibido na aplicao, apenas servir para manter um layout padro
de seus formulrios, alm claro de centralizar os cdigos mais comuns em
formulrios deste tipo, reutilizando-os nos formulrios que utilizarem este
como base.
Os formulrios que herdarem este formulrio base herdaro alm do
layout, que manter um padro para todos os formulrios de cadastro, herdar
tambm os seus cdigos, e isto muito importante, porque assim cada novo
formulrio pode se preocupar apenas com os seus cdigos especficos, pois
13
Caso algum boto seja filho de outro na hierarquia deve-se deixa-lo como
filho da ToolBar, pois cada boto ter uma ao diferente na navegao dos
registros e dependendo da ao de um boto os outros podero ficar desabilitados, por isso se faz necessrio deixar todos como filhos da ToolBar. Caso
haja um caso assim, basta arrastar o SpeedButton para o n da ToolBar. Veja
um exemplo na Imagem 2.
Os componentes visuais j esto devidamente alocados no layout do formulrio, vamos agora adicionar os componentes de acesso a dados. Devemos
lembrar que por se tratar de um formulrio base, ele no far nenhum vinculo
direto com banco de dados, porm, dever fornecer uma estrutura para tal
funo, aos formulrios que receberem sua herana.
Adicione um TDataSetProvider (DataAccess), um TClientDataSet (DataAcnovembro 2012
15
then
Result := DS.DataSet.State in
[dsInsert, dsEdit]
else
// PRIMEIRO E ANTERIOR
if (TSpeedButton(Sender).Tag in [8, 9])
then
Result := (DS.DataSet.State =
dsBrowse) and not (DS.DataSet.Bof)
else
// PRXIMO E LTIMO
if (TSpeedButton(Sender).Tag in [10,
11]) then
Result := (DS.DataSet.State =
dsBrowse) and not (DS.DataSet.Eof)
else
// SAIR
if (TSpeedButton(Sender).Tag in [13])
then
Result := True;
end;
novembro 2012
EstadoBotao(sbPrimeiro, dsBase);
sbAnterior.Enabled :=
EstadoBotao(sbAnterior, dsBase);
sbProximo.Enabled :=
EstadoBotao(sbProximo, dsBase);
sbUltimo.Enabled :=
EstadoBotao(sbUltimo, dsBase);
sbLocalizar.Enabled :=
EstadoBotao(sbLocalizar, dsBase);
sbSair.Enabled :=
EstadoBotao(sbAtualizar, dsBase);
end;
cdsBase.Edit;
if (Assigned(FOCO)) then
TControl(FOCO).SetFocus;
end;
4: begin
if MessageDlg(Confirma a
excluso?, TMsgDlgType.mtConfirmation,
[TMsgDlgBtn.mbYes,
TMsgDlgBtn.mbNo], 0) = mrYes then
cdsBase.Delete;
end;
5: begin
if MessageDlg(Confirma a
gravao?, TMsgDlgType.mtConfirmation,
[TMsgDlgBtn.mbYes,
TMsgDlgBtn.mbNo], 0) = mrYes then
cdsBase.Post;
end;
6: begin
if MessageDlg(Cancelar
edio?, TMsgDlgType.mtConfirmation,
[TMsgDlgBtn.mbYes,
TMsgDlgBtn.mbNo], 0) = mrYes then
cdsBase.Cancel;
end;
7: cdsBase.Refresh;
8: cdsBase.First;
9: cdsBase.Prior;
10: cdsBase.Next;
11: cdsBase.Last;
12: begin
frmPesquisa := TfrmPesquisa.
Create(Self);
SQL_PADRAO
TABELA;
CAMPO_CHAVE;
CAMPO_BUSCA;
frmPesquisa.DESCRICAO :=
DESCRICAO_PESQUISA;
frmPesquisa.CDS := cdsBase;
frmPesquisa.ShowModal;
FreeAndNil(frmPesquisa);
end;
13: Close;
end;
end;
end;
Concluso
Neste artigo foi mostrado a primeira parte de como criar um formulrio
base de cadastro, o foco neste artigo foi como construir a barra de ferramentas
do formulrio base, vimos as adaptaes a serem realizadas se comparadas
com a plataforma VCL, e tambm o porque de trazer o componentes TClientDataSet para o formulrio unificando os cdigos referentes tabela a ser
trabalhado no formulrio.
O prximo artigo ter a continuao deste projeto, mostraremos mais
alguns mtodos padres em formulrios de cadastro e tambm como fazer
uma herana deste formulrio base. Espero que tenham gostado do que viram
at aqui e que tenha sido til de alguma forma, at o nosso prximo artigo,
um abrao a todos.
Sobre o autor
Lucas Vieira de Oliveira
Consultor Tcnico The Club.
suporte@theclub.com.br
novembro 2012
17
Linguagem C#
Criando um Componente
TextBox personalizado
Na linguagem C# isto se torna uma tarefa fcil e prtica, sendo que neste artigo
vou criar um TextBox personalizado contendo validaes de CPF, CNPJ e PIS usando o
mtodo OnValidating(). Reescreverei mtodos e propriedades como: OnLostFocus(),
OnGotFocus() e ForeColor para dar uma impresso um pouco mais interessante
ao usurio. Ser necessrio tambm criar uma classe Tipo para trabalharmos com
o Tipo de validao necessria.
Para esta tarefa achei mais prtico utilizar um combobox acoplado nas suas
propriedades.
Criando o Componente
Inicie o Microsoft Visual Studio e crie um novo projeto como Class Libary. (No
18
novembro 2012
Clique com o boto direito sobre a soluo e escolha Add/New Item.... Criaremos uma classe do incio. Ver Imagem 01. Vou abordar assuntos j mencionados em
assuntos anteriores, primeiramente importe algumas bibliotecas teis ao longo do
desenvolvimento.
using System.Windows.Forms;
using System.Drawing;
using System.ComponentModel;
System.Windows.Forms: Assembly que contm a classe TextBox.
System.Drawing: Assembly responsvel pela troca de cores dos componentes.
System.ComponentModel: Classes responsveis pela manipulao e converso
de dados dos componentes.
O primeiro passo ao criar uma classe definir o atributo como Public, para
podermos visualiz-la em qualquer parte do projeto e logo em seguida usar o recurso
de herana para a classe TextBox. Defina tambm o Constructor e Destructor
}
//Sobrescrever o evento ao perder o foco
protected override void
OnLostFocus(EventArgs e)
{
base.OnLostFocus(e);
this.BackColor = Color.White;
}
//Herana de Classes
public class TextBoxTheClub: TextBox
{
//Definindo o Contructor
public TextBoxTheClub()
{
}
//Definindo o Destructor
~TextBoxTheClub()
{
}
Vou reescrever os mtodos OnLostFocus(), OnGotFocus() e a propriedade
ForeColor sendo respectivamente responsveis por perder o foco, receber o foco e
mudar cor da fonte, que neste caso defini como DarkBlue.
return Color.DarkBlue;
base.ForeColor = value;
[TypeConverter(typeof(Tipo)),
Category(validao)]
public string TipoValidacao
{
get;
set;
}
Para identificarmos o tipo de validao foi necessrio criar uma propriedade
TipoValidacao usando os operadores Get e Set, pois atravs deles que podemos
recuperar e atribuir os valores descritos acima. Graas a esta propriedade que conseguimos manipular as conImagemes propostas pelo desenvolvedor.
19
Text) == true)
if (ValidarCpf(this.
{
MessageBox.
Show(CPF Vlido!!);
}
else
{
Show(CPF Invlido!!);
}
CNPJ)
MessageBox.
this.Focus();
}
else if (TipoValidacao ==
{
Text) == true)
if (ValidarCnpj(this.
{
Show(CNPJ Vlido!!);
MessageBox.
}
else
{
MessageBox.
Show(CNPJ Invlido!!);
this.Focus();
}
}
else if (TipoValidacao ==
PIS)
{
if (ValidarPis(this.Text)
== true)
{
MessageBox.Show(PIS
Vlido!!);
}
else
{
MessageBox.Show(PIS
Invlido!!);
this.Focus();
}
}
}
}
O evento Onvalidating() executado no momento que samos do Textbox, ou
seja, o validamos. Este evento ser responsvel por chamar as funes de validaes
de CPF, CNPJ e PIS. No primeiro momento verificamos se o campo est preenchido com
a propriedade length e logo em seguida usamos a propriedade pblica TipoValidacao identificando o que o desenvolvedor deseja validar. Por final chamamos a funo
desejada. No entrarei em detalhes como foram montadas as funes pelo fato deste
artigo abordar a criao de componentes. Segue em seguida as funes ValidarCpf(),
ValidarCnpj() e ValidarPis().
novembro 2012
if (resto < 2)
resto = 0;
else
resto = 11 - resto;
digito = resto.ToString();
tempCpf = tempCpf + digito;
soma = 0;
for (int i = 0; i < 10; i++)
soma += int.Parse(tempCpf[i].
ToString()) * multiplicador2[i];
resto = soma % 11;
if (resto < 2)
resto = 0;
else
resto = 11 - resto;
digito = digito + resto.ToString();
return cpf.EndsWith(digito);
}
public static bool ValidarPis(string pis)
{
int[] multiplicador = new int[10] { 3,
2, 9, 8, 7, 6, 5, 4, 3, 2 };
int soma;
int resto;
if (pis.Trim().Length != 11)
return false;
pis = pis.Trim();
pis = pis.Replace(-, ).
Replace(., ).PadLeft(11, 0);
soma = 0;
for (int i = 0; i < 10; i++)
soma += int.Parse(pis[i].
ToString()) * multiplicador[i];
resto = soma % 11;
if (resto < 2)
resto = 0;
else
resto = 11 - resto;
return pis.EndsWith(resto.ToString());
}
Prontinho, acabamos de criar um pequeno componente utilizando o C#, Salve o
projeto e o compile. Ver Imagem 02.
A Instalao
Clique com o boto direito na Toolbox e escolha Choose Items... para adicionar
a .dll criada anteriormente. Imagem 03.
21
Sobre o autor
Marcos Csar Silva
Concluso
A criao de componentes se torna uma prtica muito recomendada na
programao Orientada a Objetos, sendo muito utilizada desde o incio dos
tempos. O principal intuito deste artigo foi de demonstrar que atravs de
22
novembro 2012
Consultor de Sistemas na consultoria de sistemas DataSmart e Consultor Tcnico do The Club, Bacharel em Cincia
da Computao, MBA em Gesto Empresarial, Certificaes
MCAD (Microsoft Certified Application Developer) e MCSD.
NET (Microsoft Certified Solution Developer .NET)
marcos@theclub.com.br
ANDROID
Aprendendo a utilizar o
ListView
Ol amigos do The Club, estou de volta com artigos relacionados ao
Sistema Android. Apresentarei o ListView, sendo um dos componentes
mais utilizados e importantes desta plataforma pelo fato de possibilitar
a implementao de funes ligadas ao Banco de Dados, classes ou
qualquer coleo de dados.
A documentao On-Line para o desenvolvedor Android descreve o
ListView como um grupo de exibio que mostra uma lista de itens com possibilidade de rolagem. Os itens da lista so automaticamente inseridos usando
um adaptador que utiliza o contedo de uma fonte (uma consulta qualquer ou
com banco de dados), convertendo cada item resultando em uma viso que
por fim mostrado ao usurio final.
Para criar uma classe clique com o boto direito sobre o pacote principal
escolha New/Class definindo como Clientes.java. Esta classe possuir
todas as propriedades descritas anteriormente com seus mtodos Getters
and Setters. Para criar estes mtodos automaticamente, clique com o boto
direito e escolha Source/Generate Getters and Setters. Este recurso do Eclipse
possibilita a automatizao de vrios processos, incluindo este. Ver Imagem 01.
Este artigo possuir dois exemplos, o primeiro utilizando a classe ArrayAdapter e o segundo faremos uma pequena implementao nesta classe para
personalizar e montar um layout desejado pelo desenvolvedor. Seguiremos
os mesmos passos descritos nos artigos anteriores, crie um novo Projeto em
Android, defina o nome da atividade principal como menuescolherAtividade.
23
package pct.Android_ListView;
import java.util.ArrayList;
import java.util.List;
public class Clientes
{
private int Id_Cliente;
private String Nome;
private String Tipo_Pessoa;
private String Cnpj_Cpf;
private String Email;
private String Situacao;
public int getId_Cliente()
{
return Id_Cliente;
}
public void setId_Cliente(int id_
Cliente)
{
Id_Cliente = id_Cliente;
}
public String getNome()
{
return Nome;
}
public void setNome(String nome)
{
Nome = nome;
}
public String getTipo_Pessoa()
{
return Tipo_Pessoa;
}
public void setTipo_Pessoa(String
tipo_Pessoa)
{
Tipo_Pessoa = tipo_Pessoa;
}
public String getCnpj_Cpf()
{
return Cnpj_Cpf;
}
public void setCnpj_Cpf(String cnpj_
Cpf)
{
Cnpj_Cpf = cnpj_Cpf;
}
public String getEmail()
{
return Email;
}
public void setEmail(String email)
{
Email = email;
}
{
}
return Situacao;
public void setSituacao(String
situacao)
{
24
novembro 2012
Situacao = situacao;
}
public Clientes()
{
}
public List<Clientes>
ListarClientes()
{
List<Clientes> lista_cliente = new
ArrayList<Clientes>();
Clientes cliente = new
Clientes();
cliente.setId_Cliente(1);
cliente.setNome(Thiago
Montebugnoli);
cliente.setEmail(thiago@
theclub.com.br);
cliente.setCnpj_
Cpf(366.999.888-99);
cliente.setTipo_Pessoa(F);
cliente.setSituacao(1);
lista_cliente.add(cliente);
Clientes cliente1 = new
Clientes();
cliente1.setId_Cliente(2);
cliente1.setNome(Marcos Cesar
Silva);
cliente1.setEmail(marcos@
theclub.com.br);
cliente1.setCnpj_
Cpf(166.999.888-99);
cliente1.setTipo_Pessoa(F);
cliente1.setSituacao(1);
lista_cliente.add(cliente1);
Clientes cliente2 = new
Clientes();
cliente2.setId_Cliente(3);
cliente2.setNome(Bruno);
cliente2.setEmail(bruno@
theclub.com.br);
cliente2.setCnpj_
Cpf(222.222.888-99);
cliente2.setTipo_Pessoa(J);
cliente2.setSituacao(1);
lista_cliente.add(cliente2);
Clientes cliente3 = new
Clientes();
cliente3.setId_Cliente(4);
cliente3.setNome(Vitor);
cliente3.setEmail(vitor@
theclub.com.br);
cliente3.setCnpj_
Cpf(999.999.999-99);
cliente3.setTipo_Pessoa(J);
cliente3.setSituacao(0);
lista_cliente.add(cliente3);
Clientes cliente4 = new
Clientes();
cliente4.setId_Cliente(5);
cliente4.setNome(Eduardo);
cliente4.setEmail(eduardo@
theclub.com.br);
cliente4.setCnpj_
Cpf(366.999.888-99);
cliente4.setTipo_Pessoa(F);
cliente4.setSituacao(0);
lista_cliente.add(cliente4);
Clientes cliente5 = new
Clientes();
cliente5.setId_Cliente(6);
cliente5.setNome(The Club);
cliente5.setEmail(suporte@
theclub.com.br);
cliente5.setCnpj_
Cpf(41.789.789.0001/05);
cliente5.setTipo_Pessoa(J);
cliente5.setSituacao(1);
lista_cliente.add(cliente5);
Clientes cliente6 = new
Clientes();
cliente6.setId_Cliente(7);
cliente6.setNome(Datasmart);
cliente6.setEmail(datarmart@
theclub.com.br);
cliente6.setCnpj_
Cpf(99.888.898.0001/01);
cliente6.setTipo_Pessoa(J);
cliente6.setSituacao(0);
lista_cliente.add(cliente6);
return lista_cliente;
}
}
java.util.ArrayList;
java.util.List;
android.app.Activity;
android.os.Bundle;
android.view.View;
android.widget.ArrayAdapter;
android.widget.Button;
android.widget.ListView;
android.widget.RadioGroup;
novembro 2012
25
A funo ListarArrayAdapter a mais importante, pois com ela que vamos atribuir os dados da classe Clientes ao ListView. Primeiramente instancie
a classe Clientes e execute o mtodo ListarClientes() atribuindo a uma varivel
do tipo List<Clientes>. Aproveite para criar outra varivel do tipo ArrayList que
ser responsvel por armazenar nossos dados. Faremos um Loop para varrer os
registros da varivel lista_Clientes para obtermos o ID e o Nome concatenado
utilizando o mtodo get().
Armazenamos em uma varivel do tipo ArrayAdapter<String>, passando
por parmetro: o contexto atual, o tipo de layout que teremos no ListView, o
Tipo de Fonte utilizada e o ArrayList com os dados concatenados. Ao compilar
e executar a aplicao, ela dever ficar idntica a Imagem 03.
novembro 2012
android:layout_width=fill_parent
android:layout_height=70dip
android:paddingTop=5dip
android:paddingBottom=5dip
android:orientation=vertical>
<LinearLayout android:id=@+id/
linearLayout1
android:layout_width=wrap_content
android:layout_height=match_parent
android:orientation=horizontal>
<LinearLayout
android:orientation=vertical
android:layout_width=135dp
android:layout_height=match_
parent>
<TextView android:id=@+id/
txtNome
android:layout_width=match_
parent
android:layout_height=20dp>
</TextView>
<TextView android:id=@+id/
txtEmail
android:layout_width=match_
parent
android:layout_height=20dp>
</TextView>
<TextView android:id=@+id/
txtCnpjCpf
android:layout_width=match_
parent
android:layout_height=20dp>
</TextView>
</LinearLayout>
<LinearLayout
android:gravity=center_vertical
android:orientation=horizontal
android:layout_width=wrap_content
android:layout_height=match_
parent>
<RadioGroup android:layout_
width=wrap_content
android:orientation=horizont
al
android:layout_height=wrap_
content
android:layout_
marginRight=15dip
android:id=@+id/radios>
<RadioButton
android:layout_height=wrap_content
android:text=Fsica
android:id=@+id/rbFisica
android:layout_width=wrap_
content
android:textSize=8dip>
</RadioButton>
<RadioButton
android:layout_height=wrap_content
android:text=Jurdica
android:id=@+id/
rbJuridica
android:layout_width=wrap_
content
android:textSize=8dip>
</RadioButton>
</RadioGroup>
</LinearLayout>
<LinearLayout
android:gravity=right|center_vertical
android:orientation=vertical
android:layout_width=40dip
android:layout_height=50dp>
<TextView android:id=@+id/
txtStatus
android:textSize=8dip
android:textAppearance=?androi
d:attr/textAppearanceSmall
android:layout_width=wrap_
content
android:layout_gravity=center_
horizontal
android:text=Ativo
android:layout_height=wrap_
content>
</TextView>
<CheckBox android:layout_
width=wrap_content
android:id=@+id/cxSituacao
android:layout_height=wrap_
content>
</CheckBox>
</LinearLayout>
</LinearLayout>
</LinearLayout>
java.util.List;
android.content.Context;
android.view.LayoutInflater;
android.view.View;
android.view.ViewGroup;
android.widget.ArrayAdapter;
android.widget.CheckBox;
android.widget.RadioButton;
android.widget.TextView;
Variveis utilizadas ao decorrer da implementao, sendo a primeira responsvel por montar o Layout do ListView e a segunda sendo uma identificao
do theclubadapter.XML.
public theclubadapter(Context context, int
resource, List<Clientes> objects)
{
super(context, resource, objects);
this.inflater = LayoutInflater.
from(context);
this.recursoId = resource;
}
No constructor da classe passamos alguns parmetros responsveis respectivamente pelo Contexto, Identificao do Lay-out XML e a Lista contendo
os dados dos Clientes.
@Override
public View getView(int position, View
novembro 2012
27
novembro 2012
ListarClientes();
ArrayAdapter<Clientes> ad = new
theclubadapter(this,
R.layout.
theclubadapter, lista_clientes);
lstView.setAdapter(ad);
}
Concluso
O ListView se torna um componente indispensvel quando trabalhamos
com o Sistema Android se comparando ao DbGrid do Delphi, o GridView do
Asp.Net. O ListView se destaca no aspecto de personalizao do Lay-Out,
sendo possvel brincar da maneira e da forma que desejarmos. Utiliza um
Adapter, que trocando em midos seria um adaptador que usa o contedo
vindo de uma fonte de dados, sendo que a mesma poder vir de diversas
origens. Espero que estes dois pequenos exemplos sirvam de base para o
conhecimento bsico aos senhores.
Abrao e at o ms que vem!
Sobre o autor
Thiago Cavalheiro Montebugnoli
Thiago Cavalheiro Montebugnoli tecnlogo, formado pela Faculdade
de Tecnologia de Botucatu SP (FATEC) foi consultor tcnico do The Club, j
desenvolveu softwares utilizando a plataforma .NET, Delphi junto com Banco
de Dados SQL Server e Firebird. Atualmente trabalha no Centro de Processamento de Dados da Prefeitura Municipal de Ita-SP. Possui as seguintes
certificaes: MCP - Microsoft Certified Professional, MCTS - Microsoft Certified Technology Specialist, MCAD - Microsoft Certified Application Developer
e MCSD - Microsoft Certified Solution Developer.
thiago@theclub.com.br
Dicas DELPHI
Salvando e restaurando uma TStringGrid
Vamos criar uma funo denominada FilterChar que retornar uma string.
O corpo da funo segue na listagem 2.
function TForm1.FilterChars(const S:
String;
const ValidChars: TChars): String;
var
I: Integer;
begin
Result := ;
for I := 1 to Length(S) do
if S[I] in ValidChars Then
Result := Result + S[I];
end;
procedure TForm1.Button1Click(Sender:
TObject);
begin
// Retorna apenas as letras digitadas no
edit
ShowMessage(FilterChars(Edit1.Text,
[A..Z, a..z]));
end;
procedure TForm1.Button2Click(Sender:
TObject);
begin
// Retorna apenas os nmeros digitados
no edit
ShowMessage(FilterChars(Edit1.Text,
[0..9, ,]));
end;
29
Horizontal
30
Vertical
novembro 2012
novembro 2012
novembro 2012