ÁLBUM DE IMAGENS 1. Primeiramente iremos criar um Alias, isto é, um apelido para indicar o local onde a tabela de dados vai ser gravada. 2. Para criar este Alias teremos que fazer uso do programa BDE Administrator. Para encontra-lo, vá em: Iniciar à Todos os programas à Borland Delphi7 à BDE Administrator 3. O programa tem o seguinte aspecto: 4. Vá no menu Object à New à clique OK. O Programa passa a ter este aspecto: 5. Substitua o nome STANDARD1 pelo apelido CURSO. Do lado direito, dê um clique na linha PATH, e no final da mesma aparecerá um botão com reticências. Clique neste botão e teremos a opção de escolher o local onde será a pasta correspondente ao Banco de Dados CURSO: - Álbum de Imagens - Página 1
6. Escolha para esta pasta, por exemplo, a sua pasta pessoal e crie dentro da mesma uma pasta chamada DADOS. Clique no botão Ok. Pronto! O Alias está criado. 7. Para criar a tabela que irá conter os dados das fotos, use o programa DataBaseDesktop. Para chamar este programa de dentro do ambiente Delphi vá ao menu e escolha a opção: Tools à DataBase Desktop 8. Dentro do programa DataBase Desktop, vá ao menu: File à New à Table... 9. Clique em [OK] para escolher o tipo de tabela: Paradox 7. 10. Agora, na janela que se abre, escreva os dados da tabela, assim distribuídos: FieldName (nome do campo) Type (tipo de dado) Size(tamanho, somente para o tipo A) Key (chave primária) 11. Acione o botão [Save As] e digite para o nome da tabela: Album.db e para o Alias o que aponta para a pasta de dados (CURSO). Está Pronto. 12. Após fechar o programa DataBase Desktop, volte ao ambiente Delphi. 13. Agora, no formulário vazio, vamos inserir alguns objetos e alterar algumas de suas propriedades: Objeto Aba Propriedade Valor Descrição Table1 BDE DataBaseName CURSO Alias que aponta para Dados TableName Album.db Nome real da tabela DataSource1 Data Access DataSet Table1 Liga o objeto DataSource à tabela Vai adequar a imagem ao tamanho Stretch True Data deste objeto DBImage Controls DataSource DataSource1 Liga este objeto ao banco de dados DataField Foto Nome do campo ao qual se associa DBEdit1 Idem DataSource DataSource1 Liga este objeto ao banco de dados DataField Descrição Nome do campo ao qual se associa DBEdit2 Idem DataSource DataSource1 Liga este objeto ao banco de dados DataField Data Nome do campo ao qual se associa - Álbum de Imagens - Página 2
Objeto Propriedade Valor Descrição Label1 Label2 Caption Descrição Texto que aparece no mesmo Font 12, fsbold Fonte tamanho 12, negrito Caption Data Texto que aparece no mesmo Font 12, fsbold Fonte tamanho 12, negrito DataSource DataSource1 Liga este objeto ao banco de dados DBNavigator1 True os 4 Vai deixar visível apenas os botões VisibleButtons primeiros First, Prior,Next e Last SpeedButton1 Caption &Insere figura Texto do botão Glyph Insert.bmp Figura do botão* SpeedButton2 Caption &Apaga figura Texto do botão Glyph Delete.bmp Figura do botão* SpeedButton3 Caption &Zoom Texto do botão Glyph ZoomIn.bmp Figura do botão* Filter BitMaps *.bmp Somente o tipo bmp será mostrado InitialDir C:\Windows Diretório inicial será \Windows OpenPictureDialog1 Escolha uma Título que aparecerá no topo do Title figura diálogo. Panel1 Visible false O painel ficará inicialmente invisível Align AlClient Ocupa todo o PAINEL Image1 A figura irá se adaptar ao tamanho (dentro de Panel1) Stretch true deste objeto. * esta figura se encontra na pasta: C:\Arquivos de programas\arquivos comuns\borland Shared\Images\Buttons Image1 e Panel1 DataSource Table 1 SpeedButton1 OpenPictureDialog SpeedButton2 SpeedButton3 Label2 Label1 DBNavigator1 - Álbum de Imagens - Página 3
14. Agora que a parte visual está pronta, vamos começar a programar alguns eventos. 15. O botão [Insere Figura] irá chamar o diálogo de abertura de figuras, portanto, escolha o método Onclick do mesmo e digite os comandos que aparecem em negrito: procedure TForm1.SpeedButton1Click(Sender: TObject); If OpenPictureDialog1.execute then Table1.Insert; DBImage1.Picture.LoadFromFile(OpenPictureDialog1.filename); O método Execute do objeto OpenPictureDialog1 é uma função que devolve o valor false ou true, caso o usuário tenha, respectivamente, cancelado ou não a operação. Portanto, o comando If... then... irá executar os comandos caso o usuário tenha escolhido uma figura (execute = true). O método Insert do objeto Table1 irá inserir um registro em branco na tabela. O método LoadFromFile da propriedade Picture do objeto DBImage1 irá, indiretamente, inserir no campo Foto da tabela a imagem que foi lida do arquivo apontado pela propriedade filename do objeto OpenPictureDialog1. Esta propriedade (filename) guarda o caminho e o nome do arquivo escolhido pelo usuário. 16. O botão [Apaga figura] irá apagar a figura atual do banco de dados. Para isto, utilizando do método Onclick, digite os comandos que aparecem em negrito: procedure TForm1.SpeedButton2Click(Sender: TObject); if MessageBoxEx(0,'DESEJA APAGAR A FIGURA ATUAL?','CUIDADO, MB_YESNO,LANG_PORTUGUESE)= IDYES then table1.delete; A rotina MessageBoxEx é uma função que retorna uma constante referente ao código do botão que foi acionado pelo usuário. Várias combinações de botões são possíveis, neste caso utilizamos os botões [Sim] e [Não]. Os parâmetros de MessageBoxEx têm o seguinte significado: o O primeiro sempre será zero. o O segundo, é a mensagem que surgirá fazendo a pergunta ao usuário. o O terceiro, é o título que aparece na janelinha de diálogo. o o O quarto representa os botões que irão aparecer (Yes e No). O último parâmetro indica a língua do país, para que o texto dos botões apareçam na língua escolhida. (Sim e Não). A constante IdYes indica que o botão [Sim] foi acionado. Se a função retornar um valor igual a IdYes, é porque este botão foi acionado, e portanto, deveremos apagar a figura. Para apagar a figura, utilizamos o método Delete do objeto Table1, que elimina o registro corrente da tabela. - Álbum de Imagens - Página 4
17. Ao iniciar o programa, o primeiro evento programável que ocorre é o OnCreate do formulário. Portanto, na grande maioria das vezes, utilizamos este método para inicializar valores do programa. Neste caso, precisamos testar a existência da tabela e também fazer com que o painel Panel1 ocupe toda a tela, embora continue invisível. Não fizemos isto antes, pois, se mantivéssemos o painel ocupando todo o formulário, seria bastante incômoda a tarefa de programar os demais objetos. Este painel irá nos auxiliar quando quisermos fazer um zoom da imagem (ver o método onclick do speedbutton3). Então vamos lá: escolha o método OnCreate do formulário Form1 e digite os comandos que aparecem em negrito: procedure TForm1.FormCreate(Sender: TObject); If Table1.exists then Table1.Open else ShowMessage('Album não encontrado.'); Form1.Close; Panel1.Align:= alclient; O método Exists do objeto Table1 permite-nos verificar a existência do arquivo nomeado na propriedade tablename deste mesmo objeto (Álbum.db). Caso este arquivo esteja no local especificado, este método retorna o valor true. Portanto, se o arquivo existir, a tabela é aberta para consulta e gravação, através do método Open. Caso o arquivo não exista, o computador irá emitir a mensagem: Álbum não encontrado. Em seguida, o programa é encerrado quando fechamos o formulário principal através do comando Form1.Close. Em seguida, o painel passará a ocupar todo o formulário, pois, isto acontece toda vez que mudamos a propriedade Align para o valor alclient. 18. Um cuidado todo especial você deverá tomar toda vez que trabalhar com banco de dados em Delphi: o registro que você está inserindo só é gravado depois que você inserir outro registro, ou depois de você confirmar, através do comando Post. Para que o último registro inserido não se perca, é bom que se automatize a gravação do mesmo. Para isto, utilize-se do método OnClose do formulário, que é a penúltima operação que é realizada depois que saímos de um programa. Escolha este método e digite os comandos que aparecem em negrito: procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction); If Table1.state <> dsbrowse then Table1.Post; Table1.close; A propriedade state do objeto Table1, guarda o estado em que se encontra atualmente a tabela. Ela poderá estar no modo de inserção (dsinsert), ou de edição (dsedit) ou de visualização (dsbrowse). Se o valor da propriedade state for diferente de dsbrowse indica que a tabela está no modo de inserção ou edição, o que conseqüentemente indica que existem alterações não gravadas!!! portanto, para gravar, utilizamos o método Post do objeto Table1. Em seguida fechamos a tabela através do comando Table1.close. - Álbum de Imagens - Página 5
19. Agora, vamos programar o botão [Zoom]. Na realidade, não haverá nenhum zoom, o que faremos é colocar a imagem que está no DBImage1 no objeto Image1 que está dentro do painel que por sua vez ocupa todo o formulário. Isto nos dará a impressão que a figura cresceu. Portanto, o que temos que fazer é transferir a imagem para Image1 e fazer o painel ficar visível. Para tal, acione o método OnClick do objeto SpeedButton3, e digite os comandos que aparecem em negrito: procedure TForm1.SpeedButton3Click(Sender: TObject); Panel1.visible:= true; Image1.picture:= DBImage1.picture; 20. Agora, temos um problema!!! como iremos voltar a imagem para o tamanho original? 21. Temos diante de nós somente o objeto Image1 ocupando todo o formulário. Portanto, seria mais indicado programar o método OnClick deste objeto para esconder novamente o painel. Para isto, acione o método OnClick do objeto Image1 e digite os comandos que aparecem em negrito: procedure TForm1.Image1Click(Sender: TObject); Panel1.visible:= false; Image1.picture:= nil; Além de tornar o objeto Panel1 invisível, atribuímos o valor Nil à propriedade Picture do objeto Image1 que faz com que a imagem desapareça. Na realidade, picture é um ponteiro, que aponta para um local da memória onde se encontram armazenados os dados que propiciam o desenho da figura. Quando atribuímos o valor Nil estamos dizendo para o ponteiro apontar para lugar algum, o que faz com que a imagem desapareça. 22. Pronto. O que propúnhamos para este projeto já foi feito!!! J J J J J J J J J J J J J J J J J J J J J - Álbum de Imagens - Página 6