PDA

View Full Version : [Curso de Delphi] Aula 05 - By Tiago Assis



tiagoassis
01/07/2015, 12:11 PM
Curso de Delphi - Aula 05
By Tiago Assis

Primeiramente quero pedir desculpas aos membros da comunidade PerfectZone por essa grande demora em continuação do curso rápido de Delphi. Tive alguns problemas em minha vida real que me impossibilitaram de frequentar o fórum. Mas aqui estou eu de volta e pronto para seguir nosso curso até a conclusão.

Cronograma Aula 05
- Trabalhando com Imagens
- Trabalhando com DBGrid
- Exercícios de fixação


Imagens -> Muitos programadores iniciantes tem uma certa dificuldade de trabalhar com imagens no Delphi, principalmente com imagens que não são nativas da linguagem (referida ao Borland Delphi 7). Nessa aula aprenderemos a trabalhar com imagens de diversas formas, de forma comum, utilizando o compornente OpenPictureDialog, e utilizando banco de dados para armazenar as imagens.

DBGrid -> Trata-se de um componente que tem por função de exibir informações armazenadas no banco de dados. Com DBGrid aprenderemos a dominar as informações armazenadas em nosso banco de dados e ainda utilizaremos o componente PopupMenu, como recurso adicional para nosso trabalho.

Mãos a obra!


Trabalhando com Imagens

Iremos fazer um sistema simples de cadastro e consulta, envolvendo banco de dados SQL Server e trabalhando com imagens de fundo. Primeiramente utilizaremos a extensão bitmap (*.bmp) e logo após adaptaremos funções para aceitar outros formatos de imagens.

Levamos em conta que no Delphi 2009 e versões posteriores, todas as extensões de imagens normalmente são compatíveis, mas caso alguma não for, as funções adicionais serão de grande auxílio.

1 - Crie uma pasta em qualquer local que seja, vamos nomear essa pasta como "Sistema".

2 - Criaremos uma nova aplicação no Delphi... Menu File > New > Application

3 - Salve esse projeto na pasta "Sistema" da seguinte forma:
Unit: U_Principal
Project: Sistema

4 - Adicione os seguintes componentes:
1 MainMenu (Paleta Standard)
1 PopupMenu (Paleta Standard)
1 Panel (Paleta Standard)
1 Dialog (Paleta Dialogs) você poderá utilizar um OpenPictureDialog1 (Paleta Dialogs) se desejar, tanto faz.

5 - Altere as propriedades (Properties) do Panel da seguinte forma:
Align = alClient
BevelOuter = bvNone
BorderStyle = bsSingle
Apagar o texto da propriedade "Caption"

6 - Dê um duplo clique no componente Menu, e adione os seguintes menus:

Arquivo <enter>
Cadastro de Clientes <enter>
Consultas de Clientes <enter>

7 - Dê um duplo clique no componente Popupmenu e adicione os seguintes menus:

Alterar Imagem de Fundo <enter>

8 - Adicione no panel o componente Image (Paleta Additional) e altere suas propriedades (Properties) da seguinte forma:

Align = alClient
Picture = Escolha qualquer imagem do seu computador
PopupMenu = PopupMenu1
Strelch = True


Vamos a programação do código de nossa janela principal agora :)

Dê um duplo clique no componente PopupMenu1 e logo após um duplo clique em Alterar Imagem de Fundo, irá abrir o view source do menu Alterar Imagem de Fundo. Nesse menu iremos fazer com que o Delphi altere a imagem de fundo do arquivo... Porém essa imagem não será gravada, ou seja, quando fechar e abrir o sistema novamente, voltará a imagem padrão definida inicialmente.



procedure TForm1.AlterarImagemdeFundo1Click(Sender: TObject);
begin
if OpenDialog1.Execute then begin // Se OpenDialog1 executar então faça
{Somente Imagens Bitmap (*.bmp)}
Image1.Picture.LoadFromFile(OpenDialog1.FileName); // Carregar Imagem de acordo com o caminho do opendialog1
end;
end;


Salve o projeto e compile/execute o mesmo (F9)... Faça o teste em alterar a imagem de fundo.

Esse código acima é um código simples que geralmente aceitará somente extensão Bitmap (*.bmp) para aceitar extensão JPG por exemplo, precisamos fazer da seguinte maneira:



procedure TForm1.AlterarImagemdeFundo1Click(Sender: TObject);
var
jpg: TJPEGImage; // Variável jpg
begin
jpg := TJPEGImage.Create; // Criamos aqui o jpg
if OpenDialog1.Execute then begin // Se OpenDialog1 for executado, então faça
{Se a posição ".jpg" for encontrado na palavra ou localização do OpenDialog1}
if Pos('.jpg', OpenDialog1.FileName) > 0 then begin
jpg.LoadFromFile(OpenDialog1.FileName); // Carregar o JPG na variável "jpg"
Image1.Picture.Assign(jpg); // Carrega e converte o arquivo jpg para bmp (no entendimento do delphi)
end
else begin
{Caso não encontrar a posição ".jpg" na palavra ou localização do OpenDialog1}
Image1.Picture.LoadFromFile(OpenDialog1.FileName); // Carrega o Bitmap normalmente
end;
end;
end;




Armazenando Imagem no Banco de Dados e Trabalhando com DBGrid

Nessa parte da aula, darei como bonus a forma de armazenar informações, juntamente com a imagem e ao mesmo tempo trabalhar com o DBGrid. Vamos começar !


1 - No seu atual projeto, crie um novo form (File > New > Form).

2 - Salve esse form na sua pasta "Sistema" com o nome de "U_Cadastro".

3 - Adicione nesse form os seguintes componentes:

1 Panel (Paleta Standard)
-> Properties
----> Align = alClient
----> BevelOuter = bvNone
----> BorderStyle = bsSingle
----> Apague o caption

2 - Adicione... 1 componente OpenDialog (Paleta Dialog), 1 componente DBImage (Paleta Data Controls), 2 DBEdit (Paleta Data Controls) e 3 Labels (Paleta Standard).

3 - Monte os labels e os demais componentes da forma desejada, e altere os captions dos labels da seguinte forma: "Foto", "Nome", "Idade".

4 - Adicione 9 Buttons e altere as propriedades Captions deles da seguinte forma:

"Importar Imagem", "Voltar", "Avançar", "Novo", "Salvar", "Alterar", "Excluir", "Cancelar", "Sair".

5 - Crie no seu SQL Server uma database chamada "Sistema" e logo após uma tabela chamada "Clientes" (sobre SQL Server -> [Only registered and activated users can see links]).

6 - Adicione na tabela "Clientes" os seguintes dados:

Nome - > Varchar(30)
Idade -> Varchar(5)
Foto -> Image

7 - Adicione os componentes: ADOConnection (Paleta ADO), ADODataSet (Paleta ADO), DataSource (Paleta Data Access) e 1 DBGrid (Paleta Data Controls).

Vamos ao código:

No Evento OnShow do Form, vamos criar via código a conexão do SQL. Essa conexão será realizada no exato momento que o form de cadastro for executado.



procedure TForm2.FormShow(Sender: TObject);
begin
ADOConnection1.LoginPrompt:=false; // Desabilita a obrigação de digitar login e senha do banco de dados
{Coneta a database de seu banco de dados}
ADOConnection1.ConnectionString:='Provider=SQLOLED B.1;Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=Sistema;Data Source=(local)';
try
{Caso as informações de sua database estiver ok}
ADOConnection1.Connected:=true;
except
{Caso as informações de sua database não estiverem ok}
ADOConnection1.Connected:=false;
ShowMessage('Falha ao tentar conectar banco de dados!');
close;
end;
DataSource1.AutoEdit:=false; // Não permitir editar automaticamente os campos
DataSource1.DataSet:=ADODataSet1; // Tabela que o datasource vai puxar
ADODataSet1.Connection:=ADOConnection1; // Conexão do database
ADODataSet1.CommandText:='select * from Clientes'; // Tabela selecionada
try
{Caso a tabela selecionada existir}
ADODataSet1.Active:=true;
except
{Caso a tabela selecionada ou campo não existir}
ADOConnection1.Connected:=false;
ShowMessage('Falha ao tentar conectar banco de dados!');
close;
end;
{Definições de tabela e campo para o campo foto}
DBImage1.DataSource:=DataSource1;
DBImage1.DataField:='Foto';
DBImage1.Stretch:=true;
{Definições de tabela e campo para o campo Nome}
DBEdit1.DataSource:=DataSource1;
DBEdit1.DataField:='Nome';
{Definições de tabela e campo para o campo Idade}
DBEdit2.DataSource:=DataSource1;
DBEdit2.DataField:='Idade';
{Definições da tabela para o componente DBGrit}
DBGrid1.DataSource:=DataSource1;
end;



No Evento OnClose do Form de cadastro, você digita os seguintes comandos:



procedure TForm2.FormClose(Sender: TObject; var Action: TCloseAction);
begin
ADODataSet1.Cancel; // Cancela qualquer operação da tabela
ADOConnection1.Connected:=false; // Desconecta totalmente o SQL Server
end;



Agora vamos aos códigos dos botões!

Botão Importar Imagem


procedure TForm2.Button1Click(Sender: TObject);
var
jpg: TJPEGImage; // Variável JPG
begin
jpg:=TJPEGImage.Create; // Cria o JPG
if OpenDialog1.Execute then begin // Se OpenDialog1 for executado, então faça
{Se a palavra .jpg for encontrada na localização do OpenDialo1}
if pos ('.jpg', OpenDialog1.FileName) > 0 then begin
jpg.LoadFromFile(OpenDialog1.FileName); // Carrega o JPG
DBImage1.Picture.Bitmap.Assign(jpg); // Converte o JPG e adiciona no campo DBImage
end
else begin
{Se a palavra .jpg não for encontrada na localização do OpenDialog1}
DBImage1.Picture.LoadFromFile(OpenDialog1.FileName ); // Puxa a imagem bmp direto para o campo DBImage
end;
end;
end;



Botão Voltar


procedure TForm2.Button2Click(Sender: TObject);
begin
ADODataSet1.Prior; // Volta ao registro anterior da tabela
end;


Botão Avançar


procedure TForm2.Button3Click(Sender: TObject);
begin
ADODataSet1.Next; // Avança para o próximo registro da tabela
end;


Botão Novo


procedure TForm2.Button4Click(Sender: TObject);
begin
ADODataSet1.Insert; // Liberar adição de novo registro na tabela
end;


Botão Salvar


procedure TForm2.Button5Click(Sender: TObject);
begin
ADODataSet1.Post; // Salva os dados na tabela
ShowMessage('Cliente cadastrado com Sucesso!');
end;


Botão Alterar


procedure TForm2.Button6Click(Sender: TObject);
begin
ADODataSet1.Edit; // Editar registro da tabela
ShowMessage('Edição de registro liberada!');
end;


Botão Excluir


procedure TForm2.Button7Click(Sender: TObject);
begin
ADODataSet1.Delete; // Deleta o registro da tabela
ShowMessage('Cliente deletado com sucesso!');
end;


Botão Cancelar


procedure TForm2.Button8Click(Sender: TObject);
begin
ADODataSet1.Cancel; // Cancela a operação novo ou editar
ShowMessage('O registro foi cancelado!');
end;


Botão Sair


procedure TForm2.Button9Click(Sender: TObject);
begin
close; // Fechar a janela
end;



Pronto, a janela de cadastro de clientes está concluída! O próximo passo é fazer com que a nossa janela principal, execute a janela de cadastro de clientes quando for selecionada no menu. Volte à janela principal pressionando Shift + F12, selecionando-a na lista de forms.

Na janela principal, pressione "Alt + F11" para adicionar ou ligar a janela cadastros à janela principal.

Clique no Menu Arquivo e logo após, Cadastro de Clientes. Declare o seguinte código:


procedure TForm1.CadastrodeClientes1Click(Sender: TObject);
begin
Form2.Show; // Puxa a janela de cadastro
end;


Rode (Compile e execute) seu sistema (pressionando F9).

Note que a cada cadastro um novo registro aparece no DBGrid... Como podemos ver, o DBGrid lista as informações gravadas no banco de dados.

Essa é uma noção básica sobre Imagem e DBGrid.


Download da Source: [Only registered and activated users can see links]

Muito obrigado pela atenção e desculpe a demora galerinha ;)