Projeto Supermercado

Propaganda
Projeto Supermercado - Produtos
OBJETIVO:
Este projeto possibilitará fazer a manutenção dos dados da tabela de Produtos.
Didaticamente, ele permite ao programador iniciante ter os primeiros contatos com os objetos de
visualização individual dos registros em um banco de dados.
PRIMEIRAS PROVIDÊNCIAS:
1) Altere as seguintes propriedades do Form1:
a. Caption: Sistema Supermercado – Produtos
b. Position: escolha a opção poScreenCenter para que o formulário sempre seja colocado
no meio exato da tela.
c. BorderIcons: coloque a opção false em Maximize, pois, queremos impedir que o
usuário maximize o formulário.
d. BorderStyle: altere para bsSingle, para que o usuário não consiga mais alterar o
tamanho do formulário movendo as bordas do mesmo.
2) Para gravar o projeto. Faça o seguinte:
a.
b.
c.
d.
e.
f.
Vá até à pasta chamada SUPERMERCADO
Dentro desta pasta, crie a pasta PRODUTOS
Clique no ícone correspondente a Save All e grave a Unit1.pas na pasta PRODUTOS.
Em seguida, ao mostrar a tela que pretende gravar o project1.dproj renomeie o mesmo
para produtos e grave também na pasta PRODUTOS. Este arquivo dará origem ao
arquivo do executável que terá o nome produtos.exe.
Por falar em executável, vamos orientar o Delphi 2007 (D2007) a gravá-lo na pasta
SUPERMERCADO e não na pasta PRODUTOS. Durante todo o projeto iremos utilizar
deste expediente: os arquivos-fonte ficarão em uma pasta e o arquivo executável ficará
na pasta SUPERMERCADO.
Para orientar o D2007 a gravar o executável na pasta SUPERMERCADO faça o seguinte:
(i) clique no menu Project e em
seguida em Options...
(ii) na janela que surge clique na
opção Directories/Conditionals
(iii) depois,
clique
no
botão
reticências que está na opção
Output directory situada à direita
da janela.
(iv) na nova janela que surge informe
onde se encontra a pasta
SUPERMERCADO
no
seu
computador.
(v) clique OK nas duas janelas.
3) Pronto!!! Gravamos os arquivos-fonte na pasta PRODUTOS e informamos ao D2007 que o
executável deverá ser gravado na pasta SUPERMERCADO.
Prof. Alberto C. Carvalho - IFJF
Página 1
Projeto Supermercado - Produtos
CONEXÃO DO BANCO DE DADOS (FÍSICO) COM O PROGRAMA:
Para tal, utilizaremos o objeto ZConnection1, obtido pelo instanciamento da classe TZConnection que
está na aba Zeos.
Agora altere as seguintes propriedades do objeto ZConnection1, diretamente no Object Inspector:
Database: coloque aqui o nome do banco de dados (nome da pasta onde se encontram as tabelas)
HostName: nome do servidor de banco de dados. No nosso caso é localhost.
Protocol: nome do tipo de banco de dados que estamos utilizando. No nosso caso será “mysql-5”.
User: nome do login do usuário do banco de dados. No nosso caso utilizaremos o login default que é
“root”.
Connected: altere para True.
Se você conseguiu alterar o valor da propriedade Connected para true é sinal de que tudo está correto
até o momento.
ENVIANDO COMANDOS SQL AO SERVIDOR:
Para que possamos enviar comandos SQL ao servidor de banco de dados iremos utilizar o objeto da
classe TZQuery.
Insira no formulário o objeto ZQuery1.
Altere as seguintes propriedades de ZQuery1:
a.
b.
c.
connection: ZConnection1.
SQL: clique no botão com as reticências e na janela que surge digite select * from produtos e
clique em OK.
Active: altere o valor para true. Se conseguir, é porque fez tudo certo até aqui.
VISUALIZANDO OS DADOS DA TABELA PRODUTOS:
Para que possamos visualizar o conteúdo da tabela, precisamos inserir no nosso projeto um objeto da
classe TDataSource (aba Data Access), que é utilizado para fazer a ligação entre o ZQuery1 e qualquer
objeto de visualização de dados.
Altere a sua propriedade DataSet informando o nome do objeto ZQuery1.
Desta vez, utilizaremos objetos para visualização individual de cada registro da tabela (classe TDBEdit),
que permite a visualização/edição do dado contido no mesmo.
Como este objeto é individual, além da propriedade DataSource do mesmo, precisamos informar
também o nome do campo ao qual se refere, através de sua propriedade DataField.
Portanto, para cada um dos campos da tabela Produtos, teremos que inserir um objeto DBEdit,
alterando os propriedades DataSource e DataField de cada um.
Mas, o D2007 permite uma redução de trabalho, característica desta linguagem para ser de alta
produtividade, realizando as seguintes operações:
Prof. Alberto C. Carvalho - IFJF
Página 2
Projeto Supermercado - Produtos
INSERINDO OBJETOS DE VISUALIZAÇÃO DO BD NO FORMULÁRIO:
Para inserirmos todos/alguns objetos automaticamente no formulário, proceda da seguinte forma:
a.
b.
c.
Dê um duplo clique no objeto ZQuery1.
Na janela que surge, em sua parte
branca, clique com o botão direito do
mouse e escolha a opção Add All
Fields.
Selecione os campos que deseja
transferir para o formulário e
arraste-os até o mesmo.
d.
Pronto. Surgirão todos os DBEdit correspondentes a cada campo arrastado, bem como um
objeto DBMemo (campo descrição) já com
as propriedades DataSource e DataField
alteradas de acordo com o campo que
cada um pertence. E para completar,
aparece um objeto Label para cada um,
contendo o nome do campo arrastado.
e.
Agora, é só ajeitarmos o lay-out,
posicionando os objetos e alterando o
tamanho de cada um deles.
Prof. Alberto C. Carvalho - IFJF
Página 3
Projeto Supermercado - Produtos
INSERINDO BOTÕES DE NAVEGAÇÃO, INSERÇÃO, APAGAMENTO E GRAVAÇÃO:
Para que possamos navegar de um registro para outro da tabela, e realizar algumas operações básicas,
insira 7 objetos da classe TSpeedButton alterando suas propriedades conforme a tabela abaixo:
Objeto
SpeedButton1
SpeedButton2
SpeedButton3
SpeedButton4
SpeedButton5
SpeedButton6
SpeedButton7
Glyph
ARROW1UL.BMP
ARROW1L.BMP
ARROW1R.BMP
ARROW1DR.BMP
TRASH.BMP
INSERT.BMP
FLOPPY.BMP
ShowHint
True
True
True
True
True
True
True
Hint
Primeiro registro
Registro anterior
Próximo registro
Último registro
Apaga registro
Novo registro
Grava registro
Obs.: Todas estas imagens se encontram na pasta c:\Arquivos de Programas\Arquivos
Comuns\CodeGear Shared\Images\Buttons
Cada um dos botões deverá ter o método correspondente ao evento OnClick alterado da seguinte
forma:
procedure TForm2.SpeedButton1Click(Sender: TObject);
begin
ZQuery1.First;
end;
procedure TForm2.SpeedButton2Click(Sender: TObject);
begin
ZQuery1.Next;
end;
Prof. Alberto C. Carvalho - IFJF
Página 4
Projeto Supermercado - Produtos
procedure TForm2.SpeedButton3Click(Sender: TObject);
begin
ZQuery1.Last;
end;
procedure TForm2.SpeedButton4Click(Sender: TObject);
begin
ZQuery1.Prior;
end;
procedure TForm2.SpeedButton5Click(Sender: TObject);
begin
ZQuery1.Insert;
end;
procedure TForm2.SpeedButton6Click(Sender: TObject);
begin
if MessageBox(0,'Deseja realmente apagar este registro?','Produtos',mb_YesNo) = idYes then
begin
ZQuery1.Delete;
end;
end;
procedure TForm2.SpeedButton8Click(Sender: TObject);
begin
if ZQuery1.State in [dsInsert,dsEdit] then ZQuery1.post;
end;

Convém observar que os comandos são bastante intuitivos e não é necessária nenhuma
explicação adicional. Convém apenas justificar o uso do MessageBox que é uma função que
retorna o botão acionado: os botões que aparecerão são informados no último parâmetro
(mb_YesNo) e fizemos o teste verificando se o botão Sim havia sido acionado (idYes).

Já no comando de gravação, utilizamos o comando in (pertence a...) que verifica se o valor que
está guardado na propriedade state da tabela (estado da tabela) representa a informação se
ela está no modo de inserção de dados (dsinsert) ou se está editando algum dado (dsedit).
Somente em um destes casos é que iremos fazer a gravação (post).
Como o botão de gravação é o mais largo, convém acrescentarmos um texto na sua propriedade
caption = Grava o registro atual.
Ao fazermos isto, verificamos que fica antiestético, o que nos leva a utilizar de um pequeno artifício que
irá permitir escrever o texto em 2 linhas:
a) Clique com o botão direito do mouse no formulário e escolha a opção de menu View as Text.
b) Com isto, você terá acesso ao arquivo-texto correspondente ao arquivo Unit1.dfm que contém
as informações que permitem desenhar o formulário.
c) Procure a frase “Grava o registro atual” no referido arquivo. Para isto, você pode utilizar o
atalho [Ctrl] [F].
d) Ao encontrar a frase, a altere inserindo um #13 (código ASCII) do [Enter] que irá provocar uma
mudança de linha.
Altere de:
Caption = 'Grava o registro atual'
Para:
Caption = 'Grava o'#13'registro atual'
e) Clique com o botão direito novamente, e escolha a opção View as Form para retornar ao
formulário no modo gráfico.
Prof. Alberto C. Carvalho - IFJF
Página 5
Projeto Supermercado - Produtos
INSERINDO IMAGEM DO PRODUTO:
1) Tire fotos de alguns produtos e anote o seu código de barras e também outros dados como a
quantidade do mesmo e o seu fabricante. No nosso site disponibilizamos algumas fotos de
produtos para que sejam utilizadas como ilustração do programa.
2) Acrescente ao projeto um objeto da classe TOpenPictureDialog (aba Dialogs), que possibilitará
abrir um diálogo onde o usuário poderá carregar a foto do produto para o programa.
3) Altere as seguintes propriedades de OpenPictureDialog1:
Title:
Filter:
Escolha uma foto
Apague todos os tipos disponíveis, exceto Jpg e Jpeg.
4) Iremos padronizar o seguinte:
a. Todas as fotos receberão como nome o código de barras do produto, seguido da
extensão jpg.
b. Todas as fotos serão gravadas em uma pasta chamada fotos que ficará contida na
pasta supermercado. Não haverá necessidade da criação manual desta pasta, pois,
implementaremos no programa a criação da mesma automaticamente.
c. As fotos deverão sempre ser tiradas com a máquina fotográfica na mesma posição
para evitar distorções, pois, elas ficarão encaixadas dentro de um objeto Image de
tamanho fixo.
5) Inclua agora um objeto da classe TSpeedButton alterando as seguintes propriedades do
mesmo:
Caption:
Escolher uma foto
Glyph:
VIDEO.BMP
Para colocar em 2 linhas, use o que explicamos na
página anterior.
6) Acrescente mais 2 objetos: um da classe TBevel e outro da classe TImage; sendo que deste
último, altere sua propriedade stretch para true, para que a foto se coloque inteiramente
dentro do objeto. Já no primeiro, altere a propriedade Shape para bsFrame para que a linha
fique em alto relevo. Veja o novo aspecto do formulário:
Prof. Alberto C. Carvalho - IFJF
Página 6
Projeto Supermercado - Produtos
7) O método correspondente ao evento OnClick do botão “Escolher uma foto” será:
procedure TForm2.SpeedButton7Click(Sender: TObject);
begin
if OpenPictureDialog1.Execute then
begin
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
if not directoryexists(diretorio+'fotos') then MkDir(diretorio+'fotos');
Image1.Picture.SaveToFile(diretorio+'fotos/'+ZQuery1.FieldByName('cod_produto').AsString+'.jpg');
end
else Image1.Picture:= nil;
end;
a.
b.
c.
d.
e.
if OpenPictureDialog1.Execute then – O método execute retorna true se alguma
figura for escolhida e false caso contrário. Então, caso o usuário não cancele a
operação uma figura será escolhida e ficará arquivada na propriedade Filename do
OpenPictureDialog1.
Image1.Picture.LoadFromFile(OpenPictureDialog1.FileName); - transferimos para a
propriedade Picture do objeto Image1 o arquivo que se encontra registrado na
propriedade FileName do objeto OpenPictureDialog1, o que fará surgir a imagem na
tela.
if not directoryexists(diretorio+'fotos') then MkDir(diretorio+'fotos'); - testamos se
existe a pasta fotos “pendurada” na pasta supermercado (diretório do programa).
Caso não exista, criamos a pasta (MkDir = Make directory).
Image1.Picture.SaveToFile(diretorio+'fotos/'+ZQuery1.FieldByName('cod_produto').
AsString+'.jpg'); - Grava a imagem que se encontra no objeto Image1 na pasta fotos
contendo o código de barras guardado no campo cod_produto do registro atual,
acrescido da extensão .jpg.
Caso o usuário cancele o diálogo e não escolha nenhuma figura, apagamos a imagem
que porventura esteja no objeto Image1, apontando o ponteiro Picture para lugar
algum (nil).
8) Uma vez que conseguimos associar o nome da foto ao código de barras do produto, poderemos
ao navegar pelos registros mostrar a foto correspondente a cada produto em evidência. Para
tal, iremos escrever um pequeno método que terá esta finalidade:
a.
Digite na área public da declaração da classe Form1 a referência ao procedimento
“Le_foto”:
private
{ Private declarations }
public
procedure Le_foto;
end;
b.
Acione o conjunto de teclas [ctrl] [shift] [C] para abrirmos a implementação do
referido procedimento, onde testamos a existência do arquivo, existindo, mostramos a
imagem em Image1, caso contrário, apagamos a imagem atual.
procedure TForm2.Le_foto;
begin
if fileexists(diretorio+ 'fotos/'+ ZQuery1.FieldByName('cod_produto').AsString+ '.jpg’)
then Image1.Picture.LoadFromFile(diretorio+ 'fotos/'+
ZQuery1.FieldByName('cod_produto').AsString+'.jpg')
else Image1.Picture:= nil;
end;
Prof. Alberto C. Carvalho - IFJF
Página 7
Projeto Supermercado - Produtos
c.
O local ideal para colocarmos a chamada a este procedimento é no evento
OnDataChange do objeto DataSource1, pois, este evento é acionado quando o registro
atual é trocado. (contribuição do aluno MARCOS PAULO MENDES, 2INF-N-2009/2).
procedure TForm2.DataSource1DataChange(Sender: TObject; Field: TField);
begin
Le_foto;
end;
Concluímos aqui este programa.

Prof. Alberto C. Carvalho - IFJF
Página 8
Download