![]() |
Ilustração de uma agenda de contatos. |
Índice
Introdução
Gerenciar contatos é uma tarefa essencial no dia a dia, e criar uma aplicação em Delphi para isso pode ser um excelente projeto para iniciantes. Neste artigo, vamos desenvolver uma aplicação de Agenda de Contatos em Delphi, permitindo adicionar, editar, remover e buscar contatos. Durante o processo, aprenderemos a manipular componentes de interface, utilizar estruturas de dados e persistir dados para salvar e carregar contatos.
Passo a Passo
Passo 1: Configurando o Projeto
Criar um Novo Projeto
- Abrir o Delphi: Abra o Delphi e crie um novo projeto VCL Forms Application.
- Salvar o Projeto: Salve o projeto com um nome significativo, como "AgendaDeContatos".
Adicionar Componentes
No formulário principal, adicione os seguintes componentes:
- TListBox: Para listar os contatos.
- TButton: Para adicionar, editar, remover, buscar e atualizar contatos.
- TEdit: Para entrada de dados dos contatos (nome, telefone, e-mail).
- TLabel: Para identificar os campos de entrada.
Organize os componentes de forma que a interface fique intuitiva e fácil de usar.
Passo 2: Definindo a Estrutura de Dados
Criar um Registro para Contatos
Vamos definir um registro para armazenar as informações dos contatos:
type
TContato = record
Nome: string;
Telefone: string;
Email: string;
end;
Criar uma Lista de Contatos
Usaremos uma lista para armazenar os contatos:
private
ListaContatos: TList<TContato>;
Passo 3: Manipulando Contatos
Adicionar Contatos
Crie um método para adicionar contatos à lista:
procedure TForm1.AdicionarContato;
var
Contato: TContato;
begin
Contato.Nome := edtNome.Text;
Contato.Telefone := edtTelefone.Text;
Contato.Email := edtEmail.Text;
ListaContatos.Add(Contato);
SalvarContatos;
AtualizarListaContatos;
end;
Atualizar a Lista de Contatos
Crie um método para atualizar a exibição da lista de contatos:
procedure TForm1.AtualizarListaContatos;
var
Contato: TContato;
begin
ListBoxContatos.Items.Clear;
for Contato in ListaContatos do
ListBoxContatos.Items.Add(Contato.Nome + ' - ' + Contato.Telefone + ' - ' + Contato.Email);
end;
Editar e Remover Contatos
Para editar e remover contatos, podemos usar métodos semelhantes:
procedure TForm1.EditarContato;
var
Contato: TContato;
Index: Integer;
begin
Index := ListBoxContatos.ItemIndex;
if Index <> -1 then
begin
Contato := ListaContatos[Index];
Contato.Nome := edtNome.Text;
Contato.Telefone := edtTelefone.Text;
Contato.Email := edtEmail.Text;
ListaContatos[Index] := Contato;
SalvarContatos;
AtualizarListaContatos;
end;
end;
procedure TForm1.RemoverContato;
var
Index: Integer;
Nome, Telefone, Email: String;
begin
if ListBoxContatos.Count <> ListaContatos.Count then
begin
ShowMessage('Atualize a lista antes de remover.');
Exit;
end;
Index := ListBoxContatos.ItemIndex;
if Index <> -1 then
begin
ListaContatos.Delete(Index);
SalvarContatos;
AtualizarListaContatos;
end;
end;
Buscar Contatos
Crie um método para buscar contatos pelo nome:
procedure TForm1.BuscarContato;
var
Contato: TContato;
NomeBusca: string;
begin
NomeBusca := edtBuscar.Text;
ListBoxContatos.Items.Clear;
for Contato in ListaContatos do
if Pos(LowerCase(NomeBusca), LowerCase(Contato.Nome)) > 0 then
ListBoxContatos.Items.Add(Contato.Nome + ' - ' + Contato.Telefone + ' - ' + Contato.Email);
end;
Passo 4: Persistência de Dados
Salvar Contatos
Crie um método para salvar contatos em um arquivo, esse arquivo estará na mesma pasta do executável e terá o nome de Contatos.txt:
procedure TForm1.SalvarContatos;
var
Contato: TContato;
ContatoFile: TextFile;
FileName: String;
begin
FileName := ExtractFilePath(Application.ExeName) + 'Contatos.txt';
AssignFile(ContatoFile, FileName);
Rewrite(ContatoFile);
for Contato in ListaContatos do
Writeln(ContatoFile, Contato.Nome + '|' + Contato.Telefone + '|' + Contato.Email);
CloseFile(ContatoFile);
end;
Carregar Contatos
Crie um método para carregar contatos de um arquivo:
procedure TForm1.CarregarContatos;
var
Contato: TContato;
ContatoFile: TextFile;
Linha: string;
FileName: String;
begin
FileName := ExtractFilePath(Application.ExeName) + 'Contatos.txt';
if FileExists(FileName) then
begin
AssignFile(ContatoFile, FileName);
Reset(ContatoFile);
while not Eof(ContatoFile) do
begin
Readln(ContatoFile, Linha);
Contato.Nome := Copy(Linha, 1, Pos('|', Linha) - 1);
Delete(Linha, 1, Pos('|', Linha));
Contato.Telefone := Copy(Linha, 1, Pos('|', Linha) - 1);
Delete(Linha, 1, Pos('|', Linha));
Contato.Email := Linha;
ListaContatos.Add(Contato);
end;
CloseFile(ContatoFile);
AtualizarListaContatos;
end;
end;
Código Completo da Agenda de Contatos em Delphi
unit Unit1;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Generics.Collections;
type
TContato = record
Nome: string;
Telefone: string;
Email: string;
end;
TForm1 = class(TForm)
ListBoxContatos: TListBox;
btnAdicionar: TButton;
edtNome: TEdit;
Label1: TLabel;
btnEditar: TButton;
btnRemover: TButton;
btnBuscar: TButton;
edtTelefone: TEdit;
Label2: TLabel;
edtEmail: TEdit;
Label3: TLabel;
edtBuscar: TEdit;
Label4: TLabel;
btnAtualizar: TButton;
Label5: TLabel;
procedure btnAdicionarClick(Sender: TObject);
procedure btnEditarClick(Sender: TObject);
procedure btnRemoverClick(Sender: TObject);
procedure btnBuscarClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure btnAtualizarClick(Sender: TObject);
private
{ Private declarations }
ListaContatos: TList<TContato>;
procedure AdicionarContato;
procedure AtualizarListaContatos;
procedure EditarContato;
procedure RemoverContato;
procedure BuscarContato;
procedure SalvarContatos;
procedure CarregarContatos;
procedure LimparCampos;
procedure LimparBusca;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ TForm1 }
procedure TForm1.AtualizarListaContatos;
var
Contato: TContato;
begin
ListBoxContatos.Items.Clear;
for Contato in ListaContatos do
ListBoxContatos.Items.Add(Contato.Nome + ' - ' + Contato.Telefone + ' - ' + Contato.Email);
end;
procedure TForm1.btnAdicionarClick(Sender: TObject);
begin
AdicionarContato;
LimparCampos;
end;
procedure TForm1.btnAtualizarClick(Sender: TObject);
begin
AtualizarListaContatos;
end;
procedure TForm1.btnBuscarClick(Sender: TObject);
begin
BuscarContato;
LimparBusca;
end;
procedure TForm1.btnEditarClick(Sender: TObject);
begin
EditarContato;
end;
procedure TForm1.btnRemoverClick(Sender: TObject);
begin
RemoverContato;
end;
procedure TForm1.AdicionarContato;
var
Contato: TContato;
begin
Contato.Nome := edtNome.Text;
Contato.Telefone := edtTelefone.Text;
Contato.Email := edtEmail.Text;
ListaContatos.Add(Contato);
SalvarContatos;
AtualizarListaContatos;
end;
procedure TForm1.EditarContato;
var
Contato: TContato;
Index: Integer;
begin
Index := ListBoxContatos.ItemIndex;
if Index <> -1 then
begin
Contato := ListaContatos[Index];
Contato.Nome := edtNome.Text;
Contato.Telefone := edtTelefone.Text;
Contato.Email := edtEmail.Text;
ListaContatos[Index] := Contato;
SalvarContatos;
AtualizarListaContatos;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
ListaContatos := TList<TContato>.Create;
CarregarContatos;
end;
procedure TForm1.LimparBusca;
begin
edtBuscar.Clear;
edtBuscar.SetFocus;
end;
procedure TForm1.LimparCampos;
begin
edtNome.Clear;
edtTelefone.Clear;
edtEmail.Clear;
edtNome.SetFocus;
end;
procedure TForm1.RemoverContato;
var
Index: Integer;
Nome, Telefone, Email: String;
begin
if ListBoxContatos.Count <> ListaContatos.Count then
begin
ShowMessage('Atualize a lista antes de remover.');
Exit;
end;
Index := ListBoxContatos.ItemIndex;
if Index <> -1 then
begin
ListaContatos.Delete(Index);
SalvarContatos;
AtualizarListaContatos;
end;
end;
procedure TForm1.BuscarContato;
var
Contato: TContato;
NomeBusca: string;
begin
NomeBusca := edtBuscar.Text;
ListBoxContatos.Items.Clear;
for Contato in ListaContatos do
if Pos(LowerCase(NomeBusca), LowerCase(Contato.Nome)) > 0 then
ListBoxContatos.Items.Add(Contato.Nome + ' - ' + Contato.Telefone + ' - ' + Contato.Email);
end;
procedure TForm1.SalvarContatos;
var
Contato: TContato;
ContatoFile: TextFile;
FileName: String;
begin
FileName := ExtractFilePath(Application.ExeName) + 'Contatos.txt';
AssignFile(ContatoFile, FileName);
Rewrite(ContatoFile);
for Contato in ListaContatos do
Writeln(ContatoFile, Contato.Nome + '|' + Contato.Telefone + '|' + Contato.Email);
CloseFile(ContatoFile);
end;
procedure TForm1.CarregarContatos;
var
Contato: TContato;
ContatoFile: TextFile;
Linha: string;
FileName: String;
begin
FileName := ExtractFilePath(Application.ExeName) + 'Contatos.txt';
if FileExists(FileName) then
begin
AssignFile(ContatoFile, FileName);
Reset(ContatoFile);
while not Eof(ContatoFile) do
begin
Readln(ContatoFile, Linha);
Contato.Nome := Copy(Linha, 1, Pos('|', Linha) - 1);
Delete(Linha, 1, Pos('|', Linha));
Contato.Telefone := Copy(Linha, 1, Pos('|', Linha) - 1);
Delete(Linha, 1, Pos('|', Linha));
Contato.Email := Linha;
ListaContatos.Add(Contato);
end;
CloseFile(ContatoFile);
AtualizarListaContatos;
end;
end;
end.
Explicação do Código
- Declaração das Bibliotecas (
uses
): Incluímos bibliotecas necessárias para manipulação de strings, listas genéricas, controle de formulários e componentes visuais. - Declaração da
TContato
: Um registro (record
) para armazenar informações de um contato: nome, telefone e email. - Declaração da Classe
TForm1
: A classe principal do formulário que contém componentes visuais e métodos para manipular os contatos. - Componentes Visuais:
ListBoxContatos
: Lista de contatos.- ed
tNome
, edtTelefone
, edtEmail
: Campos de entrada para os dados do contato. btnAdicionar
,btnEditar
,
,btn
RemoverbtnBuscar
,btnAtualizar
: Botões para ações diversas.lblNome
,
,lbl
Telefone
,lbl
Emaillbl
Buscar,lbl
ListaContatos: Rótulos descritivos.
- Métodos do Formulário:
- AdicionarContato: Adiciona um novo contato à lista.
- EditarContato: Edita o contato selecionado na lista.
- RemoverContato: Remove o contato selecionado na lista.
- BuscarContato: Busca contatos na lista com base no texto fornecido.
- SalvarContatos: Salva os contatos em um arquivo de texto.
- CarregarContatos: Carrega os contatos de um arquivo de texto.
- AtualizarListaContatos: Atualiza a visualização da lista de contatos.
- LimparCampos: Limpa os campos com os dados do contato para que um novo seja adicionado, e posiciona o cursor do mouse na caixa de texto do nome.
- LimparBusca: Limpa o campo de busca para que uma nova busca seja feita, e posiciona o cursor do mouse na caixa de texto de busca.
Veja abaixo como ficou a ilustração do projeto Agenda de Contatos:
![]() |
Ilustração do projeto. |
Código fonte do exemplo
Você pode fazer o download do exemplo do projeto através do repositório do github:
https://github.com/Gisele-de-Melo/AgendaContatos
Conclusão
Desenvolver uma agenda de contatos em Delphi é um excelente projeto para iniciantes, pois envolve a manipulação de componentes de interface, estruturas de dados e persistência de dados. Com os conceitos aprendidos neste projeto, você está preparado para criar aplicações mais complexas e robustas. Continue explorando as funcionalidades do Delphi e aprimorando suas habilidades de programação.
Ao seguir este guia, você criou uma aplicação funcional de agenda de contatos, entendeu a lógica por trás do código e aprendeu a importância da persistência de dados. Mantenha a prática e explore novos projetos para se tornar um desenvolvedor Delphi cada vez melhor.
Nenhum comentário:
Postar um comentário