delphi utilizando opendialog para armazenar imagens em banco de dados

6

Click here to load reader

Upload: dkarllus

Post on 25-Aug-2015

234 views

Category:

Documents


10 download

DESCRIPTION

Utilizando Opendialog Para Armazenar Imagens Em Banco de Dados

TRANSCRIPT

  • 1

    ETEC DR. EMLIO HENRNANDEZ AGUILAR

    PROGRAMAO DE COMPUTADORES I

    PROFESSOR RAFAEL BARRETO

    DELPHI - UTILIZANDO OPENDIALOG PARA ARMAZENAR IMAGENS EM BANCO DE DADOS

    Criaremos uma soluo simples para criar banco de dados que armazene endereo de

    uma imagem e faa sua exibio no Delphi. Para este exemplo, armazenaremos informaes

    de Bandas de Rock.

    Iniciamos a criao de um banco de dados simples, chamado BD_BANDAS, com apenas

    uma tabela para armazenar os dados (salva como TB_BANDAS).

    Os campos da tabela TB_BANDAS sero:

    NOME: Para armazenar o nome da banda VARCHAR(100)

    FORMACAO: Para armazenar o ms e ano de formao da banda VARCHAR(7)

    VOCALISTA: O nome do cantor da banda VARCHAR(50)

    SITE: O endereo eletrnico (site) da banda VARCHAR(200)

    PAIS: Pas de origem da banda VARCHAR(50)

    FOTO: Para armazenar o caminho da foto (e no a imagem) VARCHAR(200)

    ULTIMO_ALBUM: Nome do ltimo lbum lanado VARCHAR(250)

    PRECO: Valor deste ltimo lbum - SMALLMONEY

    OBS: No use espaos ou acentos nos nomes dos campos, tabela, ou banco.

    Faa a conexo via ODBC:

    Em Painel de Controle, Ferramentas Administrativas, Fontes de Dados ODBC;

    Fontes de Dados do Sistema, Adicionar, SQL Server;

    Nome de referncia BANDAS, Servidor (Neste caso, escolha o seu computador) onde o

    SQL Server est instalado;

    Autenticao Windows;

    Alterar o Banco de Dados padro para BD_BANDAS;

    Teste a conexo e conclua se estiver tudo correto.

    Crie uma pasta para salvar o projeto (sugesto PROJETO_BANDAS) preferencialmente no

    Disco Local C, para evitar conflitos caso queira abrir o mesmo em outro computador.

    No Delphi, crie um novo projeto e salve logo no incio para evitar problemas com nomes

    de objetos no futuro. Utilize o boto Save All:

  • 2

    Salve na pasta PROJETO_BANDAS;

    O formulrio (Unit1.pas) salve como U_CADBANDAS

    O projeto (Project1.dpr) salve como P_BANDAS

    Altere o Caption do formulrio como desejar e a proriedade Name para FRM_CADBANDAS;

    Faa a conexo com o Banco de Dados BD_BANDAS:

    Adicione um novo Data Module (File, New, Data Module);

    Altere a propriedade Name para DM_BANDAS e salve como U_DMBANDAS.pas

    V para a paleta BDE e adicione uma Table (Mude a propriedade name para

    TB_CADBANDA, em DatabaseName selecione o ODBCO criado, neste caso BANDAS,

    em TableName, escolha a tabela correspondente, neste caso dbo.TB_BANDAS e

    finalmente mude a propriedade Active para True)

    Clique no objeto TB_CAD BANDA com o boto direito do mouse e escolha Fields Editor

    e na janela que se abrir, novamente boto direito, Add Fileds, OK

    Arraste os campos para o formulrio de cadastro e responda Yes para que o Delphi

    automaticamente declare o Data Module na clusula Uses do formulrio de cadastro

    V para a Paleta Data Access e adicione um Data Source (Mude a propriedade name

    para DS_CADBANDA, a propriedade DataSet para TB_CADBANDA)

    Agora na Paleta Data Controls vamos adicionar um DB Navigator (Mude a propriedade

    name para DBN_Cad e configure a propriedade DataSourde

    DM_BANDAS.DS_CADBANDA)

    Com a conexo configurada, redimensione os campos no formulrio como desejar e vamos

    aos novos objetos.

    Clique na paleta Additional e coloque os objetos BitBtn e Image. Mude as propriedades

    conforme solicitao a seguir:

    BitBtn:

    Name BTN_FOTO

    Caption &Carregar Foto

    Glyph Coloque um cone de uma Lupa (OBS. A imagem deve ser do tipo bitmap,

    extenso .bmp)

    Image:

    Name IMG_FOTO

    Stretch True

  • 3

    Picture (Opcional) Crie uma imagem e adicione a esta propriedade, para evitar um erro

    no Delphi gerado quando esta propriedade est vazia, sem uma imagem padro (OBS. A

    imagem deve ser do tipo foto, extenso .jpg).

    OBS: A prpriedade Stretch faz com que o tamanho do objeto Image no seja alterado de

    acordo com o tamanho da imagem, mas sim o contrrio. O objeto ter tamanho fixo e as

    imagens que vo aumentar ou diminuir para se adaptar ao tamanho do objeto Image

    Altere livremente as labels para que no fiquem como nos campos das tabelas, ou seja,

    sem espaos ou acentos, deixando a apresentao do formulrio mais amigvel ao usurio.

    Aps todas as etapas anteriores, seu formulrio dever ter aparncia semelhante a esta:

    Agora faremos com que o objeto IMG_FOTO mostre uma imagem que ser carregada

    de uma pasta, criada dentro da nossa pasta do projeto.

    Para carregar esta imagem, ser necessrio passar para a IMG_FOTO o endereo da

    imagem, ou seja, seu caminho completo, que ser capturado da Edit criada para as fotos,

    armazenado em uma varivel e repassado a nossa IMG_FOTO atravs da propriedade Picture.

    Para facilitar a vida do usurio, faremos com que este endereo seja fornecido atravs

    de uma janela do Windows. Esta janela a mesma utilizada por qualquer aplicao para a

    abertura de arquivos e seu nome Open Dialog.

  • 4

    Para acion-la, clique na paleta Dialogs e escolha o objeto OpenDialog. Altere a

    propriedade Name para OD_FOTO.

    Para que este componente funcione, voc dever ir at a clusula Uses da unit de

    cadastro e acrescentar o parmetro shellapi. Este parmetro o comando que aciona a

    biblioteca de abertura de arquivos do Windows.

    Vamos criar tambm uma varivel chamada FOTO, do tipo String.

    Agora basta verificar qual foi o nome dado a sua Edit para foto. Para evitar alteraes

    por digitao, vamos mudar a propriedade Enabled desta Edit para False (Neste exemplo a Edit

    se chama DBEdit6). Finalmente vamos adicionar ao boto carregar foto o seguinte comando:

    beep;

    if MessageBox (Handle,'Deseja abrir uma imagem?','Imagem', mb_yesno + mb_iconquestion +

    mb_defbutton2) = idyes then

    begin

    DBEdit6.Enabled:=True;

    OD_FOTO.Execute;

    DBEdit6.Text:=OD_FOTO.FileName;

    FOTO:=DBEdit6.Text;

    IMG_FOTO.Picture.LoadFromFile(FOTO);

    DBEdit6.Enabled:=FALSE;

    end;

    Onde:

    Beep um comando para emitir um som do Windows;

    Foi criada uma caixa de mensagem para verificar se h realmente a inteno de adicionar a

    foto;

    Se verdade, mudamos a propriedade Enabled da DBEdit6 (a da foto) para true;

    Executamos a instruo que chama a janela do Windows com OD_FOTO.Execute;

    Capturamos o caminho da foto com DBEdit6.Text:=OD_FOTO.FileName;

  • 5

    Jogamos este caminho na varivel FOTO com FOTO:=DBEdit6.Text;

    Carregamos a foto na IMG_FOTO com IMG_FOTO.Picture.LoadFromFile(FOTO);

    Deixamos a propriedade Enabled da DBEdit6 como false para evitar alterao por digitao.

    Neste ponto, temos a captura da imagem funcionando corretamente, mas ao navegar pelos

    registros, a imagem no atualizada.

    Para solucionar este problema, acessaremos o evento OnChange da nossa Edit que armazena o

    endereo das imagens (DBEdit6) e incluiremos o cdigo a seguir:

    procedure TFRM_CADBANDAS.DBEdit6Change(Sender: TObject);

    begin

    FOTO:=DBEdit6.Text;

    if FOTO='' then

    begin

    FOTO:='C:\PCI_PROJETO_BANDAS\PADRAO.JPG';

    end;

    IMG_FOTO.Picture.LoadFromFile(FOTO);

    end;

    Onde:

    Jogamos o caminho da foto na varivel FOTO com FOTO:=DBEdit6.Text;

    Verificamos se este caminho est vazio com if FOTO='' then

    Se estiver vazio, atribumos o endereo da imagem padro com

    FOTO:='C:\PCI_PROJETO_BANDAS\PADRAO.JPG';

    Mostramos a imagem capturada ou a imagem padro com

    IMG_FOTO.Picture.LoadFromFile(FOTO);

  • 6

    CONSIDERAES FINAIS:

    Esta rotina foi criada utilizando a ferramenta de navegao padro do Delphi (DBNavigator).

    Para melhorar o aspecto visual deste trabalho e torn-lo mais amigvel ao usurio devemos

    criar botes de navegao personalizados e eliminar o DBNavigator.

    Estes trabalhos sero explorados nas prximas aulas.