Criando uma agenda com o Lazarus
Este artigo mostra como criar uma agenda simples com o Lazarus, uma IDE para FreePascal. Alm de ser uma boa dica para treinar programao em pascal, usando arquivo em memria, array, record, variveis, procedure, etc e tudo em modo grfico |'8^). Leia o artigo do Cabelo sobre o Lazarus: www.vivaolinux.com.br/artigos/verArtigo.php?codigo=176&pagina=1 1. Baixando e instalando Baixe os pacotes necessrios para instalar o Lazarus em http://www.lazarus.freepascal.org. No menu selecione os links: Download/binaries/linux/Current Lazarus Binary RPM e baixe os pacotes: fpc-1.0.11-031022.i386.rpm (ou a ltima verso estvel) lazarus-0.9.0.6-fpc_1.0.11-031022.i386.rpm (lazarus para o freepascal escolhido) Download/resources/libraries/gtk2_bindings e baixe o pacote: gtk2fpc-1.0.2-fpc_1.0.7_laz.20030301.i386.rpm Agora basta instalar os pacotes: rpm -ivh <nome_pacote> Na rea de download do Lazarus voc pode encontrar os pacotes binrios para instalar no Windows 2. Criando o formulrio da agenda Execute o Lazarus Como deu para perceber o Lazarus uma IDE como o Delphi ou Kylix, com Menu, Componentes (botes, caixa de texto, menu, painis etc), Object Inspector (propriedades e eventos) (figura 1). Selecione no menu File/New Form. Ser criado um form chamado Form1 (figura 2). No Object Inspector, mude a propriedade Caption para "Agenda FreePASCAL". Na barra de Componentes, (figura 3) selecione a aba Standard e clique no TLABEL (cone com a letra "A"), agora clique no formulrio para incluir um Label, posicione a mesma no canto superior esquerdo. No Object Inspector, mude a propriedade CAPTION para Cdigo e Autosize para TRUE. Agora vamos selecionar, com um clique, na aba Standard o componente TEDIT para receber o valor do cdigo. Clique no formulrio, logo a frente da label Cdigo. No Object Inspector, apague o contedo da propriedade TEXT e modifique a propriedade NAME para EditCod.
Repita os passos dos dois paragrafos acima para os campos, nome, endereo, complemento, telefone (res), telefone (serv), celular, e-mail, mudando a propriedade para EditNome, EditEnde, EditComp, EditTelR, EditTelS, EditTelC, EditMail, respectivamente (figura 4). No exemplo alinhei as TLabels pela direita e os TEdit pela esquerda, ajustando o tamanho do ltimo de acordo com a necessidade. Ajuste as posies dos objetos dentro do formulrio, o Lazarus tem uma facilidade muito interessante que mostrar com linhas coloridas os posicionamentos horizontais e verticais, facilitando o alinhamento durante a construo do formulrio. Agora que voc j ajustou os campos salve o projeto e o formulrio, clicando em File/Save All (Ctrl+Sft+S), ser solicitado nome do projeto e do form, digite proj_agenda.lpr para o projeto e agenda.pas para o formulrio. 3. Colocando botes de controle J colocamos os campos, agora vamos colocar os botes de controle para a agenda. Clique sobre o componente TBOTTOM (cone com boto "OK"), na aba Standard e depois sobre o formulrio, na parte inferior. Renomeie o boto para BtPrimeiro, na propriedade Name do Object Inspector e modifique a propriedade Caption para " |< Primeiro ". Dica: use pipe e menor que, para fazer a seta de incio. Repita estes passos para criar os botes "< Anterior", "Prximo >", "ltimo >|", "Novo" e "Confirmar", renomeia a propriedade Name para BtAnterior, BtProximo, BtUltimo, BtNovo e BtConfirmar respectivamente (figura 5). 4. Colocando dica do campos O Lazarus permite que sejam criadas dicas para os campos, esta dicas ajudam os usurio durante o preenchimento dos dados no formulrio. Clique sobre o TEDIT onde ser digitado o nome. No Object Inspector, edite a propriedade HINT para "Digite o nome" (sem aspas) e a propriedade SHOWHINT para True. Execute o form atravs do menu em Run/Run, voc pode executar tambm clicando no cone com a seta verde ou teclando <F9>. Passe o mouse sobre o campo Nome para ver o resultado. Feche o formulrio em execuo e repita o processo para os demais campos colocando as dicas de digitao. 5. Criando estrutura de registros para a agenda Vamos criar duas estruturas de registros, uma para armazenar informaes da "base de dados" e outra para armazenar os dados. No Lazarus Source Editor (rea de edio do cdigo do Lazarus), na rea de Type digite: Type tBase=record QtReg:integer; PsReg:integer; end; tAgenda=record Cod:string; Nome:string; Ende:string; Comp:string; TelR:string; TelS:string; TelC:string;
Mail:string; end; Agora vamos criar a varivel e o array para receber os registros. No Lazarus Source Editor, na rea de Var digite: Var Base:tBase; vAgenda:array[1..100] of tAgenda; 6. Colocando a mo na massa. Iniciando a procedure ACTIVATE. O que estiver programado no FormACTIVATE ser executado sempre que voc carregar o formulrio. Para fazer isso clique sobre o formulrio (Form1:TForm1), no Object Inspector selecione a aba Events, a seguir clique sobre ONACTIVATE, aparecer um campo para preenchimento e um boto a direita (com trs pontinho), clique sobre o boto para criar a procedure TForm1.Form1ACTIVATE. Edite a procedure conforme as linhas abaixo: procedure TForm1.Form1ACTIVATE(Sender: TObject); begin Base.QtReg:=1; {inicia quantidade de registro} Base.PsReg:=1; {define a posicao do registro como um} EditCod.ReadOnly:=True; {nao permite mudana do codigo} EditCod.text:=InttoStr(Base.PsReg); {converte para string e atribui a EditCod} end; 7. Criando evento para confirmar incluso do registro no array vAgenda Agora vamos criar o evento para o boto "Confirma", com a finalidade de gravar os dados no array. Primeiro selecione o boto Confirma, a seguir clique na aba Events do Object Inspector e selecione o evento ONCLICK (boto com trs ponto, como no exemplo acima). Ser criado a procedure TForm1.BtConfirmaCLICK. Edite a mesma conforme as linhas abaixo: procedure TForm1.BtConfirmaCLICK(Sender: TObject); begin {atribui ao array o conteudo de TEdit} vAgenda[Base.PsReg].Cod:=EditCod.text; vAgenda[Base.PsReg].Nome:=EditNome.text; vAgenda[Base.PsReg].Ende:=EditEnde.text; vAgenda[Base.PsReg].Comp:=EditComp.text; vAgenda[Base.PsReg].TelR:=EditTelR.text; vAgenda[Base.PsReg].TelS:=EditTelS.text; vAgenda[Base.PsReg].TelC:=EditTelC.text; vAgenda[Base.PsReg].Mail:=EditMail.text; end; Cada linha tem a funo de gravar os dados digitados nos campos TEdit para seu campo correspondente no array, na posio do cdigo atual. NOTA: o campo de cdigo esta sendo usado como chave ligada ao ndice do array apenas para efeito educativo, considerando-se o fato de no haver excluso nem gravao em disco dos registros para este exemplo.
NOTA: o campo de cdigo esta sendo usado como chave ligada ao ndice do array apenas para efeito educativo, considerando-se o fato de no haver excluso nem gravao em disco dos registros para este exemplo. 8. Criando um novo registro Neste evento, que ser associado ao boto Novo, ser criado um novo registro para a Agenda. Selecione o boto "Novo" e no Object Inspector selecione ONCLICK, e crie a procedure TForm1.BtNovoCLICK. Edite conforme as linhas abaixo. procedure TForm1.BtNovoCLICK(Sender: TObject); begin Base.QtReg:=Base.QtReg+1; Base.PsReg:=Base.QtReg; EditCod.text:=InttoStr(Base.QtReg); EditNome.text:=''; EditEnde.text:=''; EditComp.text:=''; EditTelR.text:=''; EditTelS.text:=''; EditTelC.text:=''; EditMail.text:=''; end; 9. Movimentando-se dentro do array Agora vamos criar os eventos para movimentar uma posio para cima e para baixo dentro do array, desta forma navegando dentro do registro da agenda. Clique sobre o boto "< Anterior" e na aba Events crie a procedure TForm1.BtAnteriorCLICK. Editando-a confirme cdigo abaixo: procedure TForm1.BtAnteriorCLICK(Sender: TObject); begin {se posicao for maior que um subtrai um} if Base.PsReg > 1 then {retorna uma posiao no array} Base.PsReg:=Base.PsReg-1; {atribui ao TEdit conteudo do array} EditCod.text:=vAgenda[Base.PsReg].Cod; EditNome.text:=vAgenda[Base.PsReg].Nome; EditEnde.text:=vAgenda[Base.PsReg].Ende; EditComp.text:=vAgenda[Base.PsReg].Comp; EditTelR.text:=vAgenda[Base.PsReg].TelR; EditTelS.text:=vAgenda[Base.PsReg].TelS; EditTelC.text:=vAgenda[Base.PsReg].TelC; EditMail.text:=vAgenda[Base.PsReg].Mail; end; Faa o mesmo procedimento com o boto TForm1.BtProximoCLICK, conforme cdigo abaixo: "Prximo >" e crie a procedure
procedure TForm1.BtProximoCLICK(Sender: TObject); begin
{se posicao for menor que quantidade soma um} if Base.PsReg < Base.QtReg then {avana uma posiao no array} Base.PsReg:=Base.PsReg+1; {atribui ao TEdit conteudo do array} EditCod.text:=vAgenda[Base.PsReg].Cod; EditNome.text:=vAgenda[Base.PsReg].Nome; EditEnde.text:=vAgenda[Base.PsReg].Ende; EditComp.text:=vAgenda[Base.PsReg].Comp; EditTelR.text:=vAgenda[Base.PsReg].TelR; EditTelS.text:=vAgenda[Base.PsReg].TelS; EditTelC.text:=vAgenda[Base.PsReg].TelC; EditMail.text:=vAgenda[Base.PsReg].Mail; end; Saltando para o primeiro registro. Crie a procedure TForm1.BtPrimeiroCLICK e edite o cdigo: procedure TForm1.BtPrimeiroCLICK(Sender: TObject); begin {vai para posiao 1 do array} Base.PsReg:=1; {atribui ao TEdit conteudo do array} EditCod.text:=vAgenda[Base.PsReg].Cod; EditNome.text:=vAgenda[Base.PsReg].Nome; EditEnde.text:=vAgenda[Base.PsReg].Ende; EditComp.text:=vAgenda[Base.PsReg].Comp; EditTelR.text:=vAgenda[Base.PsReg].TelR; EditTelS.text:=vAgenda[Base.PsReg].TelS; EditTelC.text:=vAgenda[Base.PsReg].TelC; EditMail.text:=vAgenda[Base.PsReg].Mail; end; Saltando para o ltimo registro. Crie a procedure TForm1.BtUltimoCLICK e edite o cdigo: procedure TForm1.BtUltimoCLICK(Sender: TObject); begin {vai para o ultimo registro} Base.PsReg:=Base.QtReg; {atribui ao TEdit conteudo do array} EditCod.text:=vAgenda[Base.PsReg].Cod; EditNome.text:=vAgenda[Base.PsReg].Nome; EditEnde.text:=vAgenda[Base.PsReg].Ende; EditComp.text:=vAgenda[Base.PsReg].Comp; EditTelR.text:=vAgenda[Base.PsReg].TelR; EditTelS.text:=vAgenda[Base.PsReg].TelS; EditTelC.text:=vAgenda[Base.PsReg].TelC; EditMail.text:=vAgenda[Base.PsReg].Mail; end; _____________________________ GNU GPL