Introduo 01 Iniciando C++ Builder 02 Acessando comandos rapidamente 04 Criando uma Aplicao 05 Adicionando Componentes 07 Formulrios 09 Rtulos 17 Caixa de Texto 20 Boto de Comando 23 Botes de opo 26 Caixa de verificao 26 Caixa de Lista 27 Caixa Combinada 30 Barra de rolagem 34 Barra de menu 38 PopupMenu 41 Imagem 43 Formas 47 Caixa de lista de arquivos, lista de diretrios e Combinada de Drivers 49 Temporizador 53 Caixa de Dialogo Comum 57 Painel 59 Itens Fundamentais 63 Operadores 68 Estruturas Condicionais 73 Estruturas de Repetio 79 Funes 84 Matrizes 86 Estruturas 93 Arquivos 97 Bibliografia 102 Bonus Banco de Dados 103 Puc - Campinas ProfJos Marcelo Traina Chacon 1
Introduo
Introduo
O C++ Builder da Borland um ambiente visual, orientado a objetos que tem por finalidade desenvolver aplicaes rapidamente para o Windows 95/98/NT. Estas aplicaes podem ser de propsitos gerais ou cliente/servidor. Usando o C++ Builder, voc pode criar eficientes aplicaes Windows com o mnimo de codificao manual.
O Borland C++ Builder disponibiliza uma extensa biblioteca de componentes reutilizveis e um ambiente de ferramentas RAD (Desenvolvimento de Aplicaes Rpida).
Quando voc inicia o Borland C++ Builder, voc imediatamente colocado com o ambiente de programao visual. com este ambiente que o Borland C++ Builder disponibiliza todas as ferramentas que voc necessita para criar, desenvolver, testar, e debugar suas aplicaes.
Iniciando C++ Builder
Iniciando C++ Builder
A melhor maneira se aprender rodando o Borland C++ Builder. Voc poder rodar o BCB da mesma maneira que roda qualquer aplicao Windows, como segue abaixo: Dando um duplo-clique no cone C++ Builder Usando o Windows Explorer. Localize e de um duplo-clique no arquivo BCB.EXE Escolha Executar a partir do menu Iniciar, e especifique o path para o BCB.EXE Selecionando a opo do menu A figura abaixo mostra como o BCB ir aparecer quando for rodado pela primeira vez:
Menu Principal Barra de Ferramentas Object Inspector Paleta de Componentes Formulrio Editor de Cdigo Puc - Campinas ProfJos Marcelo Traina Chacon 3
O C++ Builder ambiente de desenvolvimento (tambm chamado de IDE), tem vrias partes flexveis que voc poder coloca-las em qualquer local da tela. A janela principal contem o menu principal, barra de ferramentas e a paleta de componentes. O Object Inspector, Editor de Cdigo e o formulrio so automaticamente apresentados. Quando voc estiver trabalhando, voc poder redimensionar cada parte e mostrar ferramentas adicionais conforme a sua necessidade.
Acessando comandos rapidamente
Acessando comandos rapidamente
O menu principal no topo da janela principal, disponibiliza acesso a vrios comandos e ferramentas do Borland C++ Builder. Voc pode tambm ver uma barra de ferramentas no cantos esquerdo, embaixo do menu principal. Ela contem botes que podem ajuda-lo quando estiver trabalhando. Cada boto executa uma operao ou comando ( Abrir Arquivo, Salvar Projeto, Rodar, entre outras). A figura abaixo ilustra a barra de ferramentas e mostra a funo de alguns botes.
Clique com o boto direito do mouse na barra de ferramentas e escolha propriedades, voc poder personaliza-la de acordo com as suas necessidades.
Novo Projeto Abrir Unit Salvar Unit Salvar Tudo Abrir Projeto Adicionar Arquivo para Projeto Remover Arquivo do Projeto Ajuda Ver Unit Ver Formulrio Alterar entre Unit e Formulrio Novo Formulrio Rodar Pausa Puc - Campinas ProfJos Marcelo Traina Chacon 5
Criando uma Aplicao
Criando uma Aplicao
O Borland C++ Builder imediatamente apresenta as ferramentas necessrias para que voc inicie a criao da aplicao. Uma janela em branco, conhecida como formulrio, na qual voc criar a interface do usurio Uma extensiva biblioteca, chamada de componentes Uma maneira fcil de alterar as propriedades de um objeto, utilizando o Object Inspector Acesso direto ao cdigo do programa utilizando o Editor de Cdigo
Formulrio
Componentes
Objeto Inspector
Editor de Cdigos
Voc pode usar o Borland C++ Builder para criar aplicaes de 32-bits de qualquer tipo. Desde aplicaes de propsitos gerais, at sofisticados programas de acesso a banco de dados.
Puc - Campinas ProfJos Marcelo Traina Chacon 7
Adicionando Componentes
Adicionando Componentes
Componentes so elementos que voc usa para construir suas aplicaes Borland C++ Builder. Eles incluem todas as partes visveis de sua aplicao tais como, box de dialogo e botes; bem como as partes no visveis enquanto a aplicao estiver rodando, como os Timers.
Muitos componentes visuais so disponibilizados no ambiente de desenvolvimento na paleta de componentes. Voc seleciona o componentes da paleta e arasta-o no formulrio que voc esta desenvolvendo. Uma vez que o componentes esteja no formulrio voc poder ajustar as sua propriedades como, posio, tamanho entre outras.
O Borland C++ Builder agrupa os componentes, em diferentes pgina, de acordo com a sua funcionalidade.
Formulrios e componentes tem muitos pontos em comum; voc pode imaginar que um formulrio e um objeto que pode conter outros componentes.
O Borland C++ Builder inclui vrios componentes que voc pode usar na VCL (Biblioteca de Componentes Visual). Verifique o Help VCL Reference para mais detalhes dos componentes disponveis. Voc pode personalizar a biblioteca de Componentes e suas pginas associadas
componentes adicionando ou removendo componentes, ou ainda escrever seus prprios componentes.
Alterando o comportamento do componente
Voc pode facilmente personalizar a aparncia e o comportamento de sua aplicao usando o Object Inspector. Quando um componente tem o foco no formulrio, suas propriedades e eventos so mostrados no Object Inspector.
Usando a pgina Propriedades do Object Inspector, voc ajustar os valores iniciais, dos componentes, com o qual sua aplicao ir iniciar. Voc usar a pgina Eventos para navegar atravs dos eventos que o componente pode ter.
Dando um clique em um evento em particular, o Borland C++ Builder ir gerar o cdigo para este evento ( event handler). Voc apenas dever completar o cdigo de acordo com a ao desejada.
Puc - Campinas ProfJos Marcelo Traina Chacon 9
Formulrios
Formulrios (Forms) so objetos especializados no qual voc coloca componentes VCL (Biblioteca de Componente Visual). Forms geralmente se parecem como janelas e caixas de dilogo em uma aplicao que esta rodando. Voc interage com o forms lendo e fixando suas propriedades, chamando os mtodos e respondendo aos seus eventos.
Segue uma lista das principais propriedades de um formulrio.
Propriedades Caractersticas de um componente
Align Alinhamento do formulrio
alBotton Alinha na parte inferior da rea grfica
alClient Alinha em toda a rea grfica
alLeft Alinha na parte esquerda da rea grfica
alNone Sem alinhamento
alRight Alinha na parte direita da rea grfica
alTop Alinha na parte superior da rea grfica
BorderIcons Determina qual boto ir aparecer na barra de ttulo
biSystemMenu Boto Fechar biMinimize Boto Minimizar biMaximize Boto Maximizar biHelp Boto Ajuda
biSystemMenu biMinimize biMaximize biHelp Puc - Campinas ProfJos Marcelo Traina Chacon 11 BorderStyle Estilo da Borda, dependem do BorderIcons
bsDialog Somente fechar e Help
bsNone Sem borda
bsSingle Borda Simples
bsSizeable Borda Normal
vsSizeTollWin Somente Boto Fechar
bsToolWin Somente Boto Fechar
BorderWidt Determina um tamanho para a borda na janela onde no podero ser inseridos componentes
Caption Texto que ser mostrado na barra de titulo do formulrio
Color Cor do funda do formulrio
Enable Ativar e Desativar formulrio. Quando esta desativado, ele fica visvel, mas no responde a eventos at ser ativado. true ativa o formulrio false desativa o formulrio
Puc - Campinas ProfJos Marcelo Traina Chacon 13 Height Altura do formulrio em pontos Width Largura do formulrio em pontos
Icon Escolhe uma icone para o programa
Width Heigth 536 218
Editor de Imagens Ferramenta que desenha imagens e icones para o C++ Builder. Funciona como um editor de imagens do Windows e salva como arquivo *.ico
1Passo Criar um novo arquivo de cones.
2Passo Desenhar uma nova cone.
3Passo Salvar o novo arquivo de cone.
Left Distncia da Esquerda Top Distncia do Topo
Name Nome do formulrio no programa. O name atribudo ao formulrio principal Top Left Puc - Campinas ProfJos Marcelo Traina Chacon 15 ser utilizado pelo programa para a definio do nome do programa executvel a ser criado.
Position Determina a posio que aparecer o formulrio na tela. PoDesigned No determinada posio na tela PoScreenCenter Centro da tela
Visible Determina se o formulrio ir ficar visvel ou invisvel. true visvel false invisvel
WindowState Determina em que modo de exibio a tela ser mostrada. WsMaximized Tela Maximizada WsMinimized Tela Minimizada WsNormal Tela Normal (Restaurada)
Name poDesigned poScreenCente r false true
Eventos Aes de um componente
OnClick Usurio d um clique sobre o componente formulrio.
OnDblClick Usurio d um duplo clique sobre o componente formulrio.
OnCreat Evento automtico que executado quando o formulrio executado.
Mtodos Aes que alteram o componente
Close Fecha o formulrio.
Hide Oculta um formulrio. Este mtodo altera a propriedade visible do formulrio para false.
Show Mostra um formulrio. Este mtodo altera a propriedade visible do formulrio para true.
ShowModal Mostra um formulrio como uma caixa de dilogo modal. Os outros formulrios ficam inacessveis, at que o formulrio atual seja fechado.
Rtulos (Label) so objetos no qual voc pode apresentar uma informao textual.
A grande parte das propriedades para o objeto rtulo comum as propriedades explicadas no objeto form. Segue uma lista das principais propriedades de um rtulo.
Propriedades Caractersticas de um componente
Alignment Alinhamento de um texto
taCenter Alinhamento centralizado
taLeftJustify Alinhamento esquerda
taRightJustify Alinhamento direita
AutoSize Tamanho automtico para o rtulo true - rtulo automaticamente redimensionado false - rtulo mantm as dimenses do projeto, se o texto for longo, ele ser truncado
Caption Define o texto que ser escrito na tela.
Font Define caractersticas de padro de letra do texto que ser escrito na tela.
ShowHint Ativa um texto que aparecer quando o mouse for colocado sobre o componente. true aparecera o texto false no aparecera o texto Puc - Campinas ProfJos Marcelo Traina Chacon 19 Hint Texto que aparecer quando o mouse for colocado sobre o componente.
Eventos Aes de um componente
OnClick Usurio d um clique sobre o componente rtulo.
OnDblClick Usurio d um duplo clique sobre o componente rtulo.
Mtodos Aes que alteram o componente
Hide Oculta um rtulo. Este mtodo altera a propriedade visible do rtulo para false.
Show Mostra um rtulo. Este mtodo altera a propriedade visible do rtulo para true.
Exemplo de um projeto com rtulo
Programa Hello World!
Caixa de Texto
Caixa de Texto (Edit) so objetos no qual voc pode introduzir informao textual. Podemos compar-lo a um comando de entrada.
A grande parte das propriedades para o objeto caixa de texto comum as propriedades explicadas anteriormente. Segue uma lista das principais propriedades de um caixa de texto.
Propriedades Caractersticas de um componente
BorderStyle Define o estilo da borda da caixa de texto bsSingle Borda simples bsNone Sem Borda
CharCase Define o tipo de caracteres para a caixa de texto. ecLowerCase Letras minsculas ecNormal Letras minsculas e maisculas ecUpperCase Letras maisculas
bsSingle bsNon ecLowerCas ecNormal ecUpperCas Puc - Campinas ProfJos Marcelo Traina Chacon 21 Enabled Ativa ou desativa uma caixa de texto. true Habilita uma caixa de texto false Desabilita uma caixa de texto no aceitar digitao de valores e aparecer levemente acinzentado
MaxLength Limita o nmero de caracteres a ser digitado
Name Define o nome da caixa de texto no programa
PasswordChar Campo Senha - Define o caracter a ser mostrado
Text Texto que ser exibido na caixa de textos
true false
Eventos Aes de um componente
OnChance Ao alterar a caixa de texto
OnEnter Ao teclar ENTER na caixa de texto
OnExit Ao sair da caixa de texto
OnKeyPress Ao pressionar uma tecla na caixa de texto
Mtodos Aes que alteram o componente
SetFocus Fixa o foco do cursor no objeto escolhido
Puc - Campinas ProfJos Marcelo Traina Chacon 23
Botes de Comando
Botes de Comando (Button) so componentes geralmente usados em programas para disparar um processo quando acionados pelo clique do mouse.
A grande parte das propriedades para o objeto Boto de comando comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de um Boto de comando.
Propriedades Caractersticas de um componente
Cancel Permite que a tecla ESC tenha a mesma funo do clique do mouse true - a tecla ESC ter o mesmo efeito de um clique do mouse false desativa a funo da tecla ESC para o boto
Default Permite que a tecla ENTER tenha a mesma funo do clique do mouse true - a tecla ENTER ter o mesmo efeito de um clique do mouse false desativa a funo da tecla ENTER para o boto
ESC ou Clicar ENTER ou Clicar
Name Define o nome do boto no programa
Eventos Aes de um componente
OnClick Usurio d um clique sobre o componente botes de comando.
Mtodos Aes que alteram o componente
Focused Este mtodo retorna o valor true se o objeto estiver em foco, caso contrrio retorna false.
Programa Temperatura
Eventos do programa temperatura:
OnClick no boto Converter
OnClick no boto Sair
OnCreat no Formulrio FrmTemp Puc - Campinas ProfJos Marcelo Traina Chacon 25 //-------------------------------------------------------------------- void __fastcall TForm1::BtnConvClick(TObject *Sender) { //Declarao de Variveis int tcel, tkel, tfah; AnsiString entrada;
//Faz a leitura da temp. Celsius entrada = EdtCel->Text; //Converte de Texto para Int tcel = StrToInt(entrada);
Classe AnsiString String para Int StrToInt Monetrio para String CurrToStr Float para String FloatToStr Inteiro para representao hexadecimal IntToHex
Botes de Opo e Caixas de verificao
Botes de Opo (RadioButton) so componentes que so apresentam ao usurio em grupo para a escolha de apenas uma opo. As opes no escolhidas ficam desabilitadas.
Caixa de Verificao (CheckBox) so componentes que so apresentam ao usurio em grupo para a escolha de uma ou mais opes.
A grande parte das propriedades para os objetos Boto de opo e Caixa de verificao comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de um Boto de opo e Caixa de verificao.
Propriedades Caractersticas de um componente
Checked Indica se o componente est ou no selecionado. true indica selecionado false indica no selecionado
Eventos Aes de um componente
OnClick Usurio d um clique sobre os componentes botes de opo e caixas de verificao.
Caixa de Lista (ListBox) so componentes que do ao usurio a opo de escolhas, esta escolhas so feitas atravs do mouse.
A grande parte das propriedades para o objeto Caixa de Lista comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de um Caixa de Lista.
Propriedades Caractersticas de um componente
Columns Indica a quantidade de colunas que a caixa de lista ir ter. Utilizando o valor padro 0 a caixa de lista ter apenas uma coluna.
Items Define uma lista inicial de opes na caixa de lista.
Columns = 0 Columns = 3
ExtendedSelect Define se o usurio pode selecionar uma seqncia de itens da caixa ListBox, true permite seleo seqncial false no permite seleo seqncial
MultiSelect Permite ao usurio selecionar mltiplos itens true permite seleo de mltiplos itens false no permite seleo de mltiplos itens
Sorted Apresenta os itens em ordem alfabtica true - apresenta em ordem alfabtica false - apresenta na ordem editada no Itens
TabStop Indica se o controle pode ser acessado usando a tecla TAB true - pode acessar utilizando o TAB false - no pode acessar utilizando o TAB
TabWidth Define o tamanho do caractere de tabulao em um a caixa de lista. 0 - padro definido pelo Windows
Eventos Aes de um componente Permite uma seleo Permite vrias selees Permite uma selees Permite vrias selees c/ CTRL e SHIFT false true Puc - Campinas ProfJos Marcelo Traina Chacon 29
OnClick Usurio d um clique sobre o componente caixa de lista.
OnDblClick Usurio d um duplo clique sobre o componente caixa de lista.
Mtodos Aes que alteram o componente
Clear - Apaga as informaes contidas na caixa de lista.
Caixa Combinada
Caixa combinada (ComboBox) so componentes que do ao usurio a opo de escolhas, esta escolhas so feitas atravs do mouse. Combina caixa de texto com Caixa de lista
A grande parte das propriedades para o objeto Caixa Combinada comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de um Caixa Combinada.
Propriedades Caractersticas de um componente
Style Determina o tipo de caixa combinada e seu comportamento
csDropDown csDropDownList csOwnerDrawFixed csOwnerDrawVariable csSimple Puc - Campinas ProfJos Marcelo Traina Chacon 31 Text Ir conter o texto digitado pelo usurio. Depende do Style escolhido pelo usurio.
Eventos Aes de um componente
OnChance Ao alterar a caixa combinada
Mtodos Aes que alteram o componente
Clear - Apaga as informaes contidas na caixa combinada.
Programa Lista de Usurios
Eventos do programa lista de usurios: csDropDown csSimple
OnClick no boto Sair
OnCreat no Formulrio FrmUsurios
OnClick no boto Adicionar
OnClick no boto Remover
OnChange no EdtUsuarios
void __fastcall TFrmUsuarios::BtnSairClick(TObject *Sender) { /*------------------------------------------- Termina o Programa e descarrega o formulrio -------------------------------------------*/ //Mensagem de Finalizao Application->MessageBox ("Finalizando o Programa...", "Lista de Usurios 1.00",MB_OK); //Beep MessageBeep(0); //Termina o programa Close(); } //--------------------------------------------------------------------
void __fastcall TFrmUsuarios::FormCreate(TObject *Sender) { /*------------------------------------------- Inicializao do Programa -------------------------------------------*/ //Limpa Lista LstUsuarios->Clear(); //Limpa caixa de texto EdtUsuarios->Text=""; //Desabilita o Boto Adicionar BtnAdicionar->Enabled = false; }
//-------------------------------------------------------------------- void __fastcall TFrmUsuarios::BtnAdicionarClick(TObject *Sender) { /*------------------------------------------- Adicionar Usurio -------------------------------------------*/ //Verifica o tipo de Usurio if (OptMaster->Checked) EdtUsuarios->Text = EdtUsuarios->Text + " M"; else EdtUsuarios->Text = EdtUsuarios->Text + " N"; //Adiciona o nome da Caixa de Texto LstUsuarios->Items->Add (EdtUsuarios->Text); EdtUsuarios->Text=""; } //--------------------------------------------------------------------
void __fastcall TFrmUsuarios::BtnRemoverClick(TObject *Sender) { /*------------------ Puc - Campinas ProfJos Marcelo Traina Chacon 33 Remove Usurios ------------------*/ int num; //Verifica o valor corrente da Caixa de Lista num=LstUsuarios->ItemIndex; //Remove o Usurio se existir if (num!=1) LstUsuarios->Items->Delete (num); } //--------------------------------------------------------------------
Barra de rolagem (ScroolBar) so componentes que do ao usurio a opo de construir barras de rolagem na horizontal e na vertical.
A grande parte das propriedades para o objeto Barra de rolagem comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de um Barra de rolagem.
Propriedades Caractersticas de um componente
Kind Define o tipo de barra de rolagem sbHorizontal Barra de rolagem na horizontal sbVertical Barra de rolagem na vertical
sbHorizontal sbVertical Puc - Campinas ProfJos Marcelo Traina Chacon 35 LargeChange - Incremento ou decremento da propriedade Position quando clica sobre o curso da barra de rolagem
Max - Valor mximo para o deslocamento de uma barra de rolagem
Min - Valor mnimo para o deslocamento de uma barra de rolagem
Position Representa o valor corrente do deslocamento do cursor na barra de rolagem
Clicar sobre o curso 10 Valor mximo 1000 Valor mnimo Posio atual 0 Posio atual 100
SmallChance - Representa o incremento ou decremento ao clicar nos botes de deslocamento
Eventos Aes de um componente
OnScroll Ao deslocar a barra de rolagem
OnChance Ao alterar a barra de rolagem
Programa Temperatura
Clicar sobre o boto de deslocamento 1 Puc - Campinas ProfJos Marcelo Traina Chacon 37 Eventos do programa Controle de Temperatura
Barra de menu (MainMenu) so componentes que do ao usurio a opo de construir uma barra de menu principal no topo da tela.
A grande parte das propriedades para o objeto Barra de menu comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de um Barra de menu.
Propriedades Caractersticas de um componente
Items Define os campos da barra de menu. A propriedade items ser utilizada para a construo da barra de menus.
Ao clicar sobre o boto de reticncias na propriedade items ser aberta uma janela de construo de menus.
Para inserir uma opo no menu digite um texto no local selecionado na janela de construo de menus. As setas de movimentaes ajudaro na escolha do local a ser criada a opo do menu.
Para se criar um submenu apertar a tecla CTRL mais a seta para a direita ou utilizar o popupmenu da janela de construo de menus (Creat Submenu).
Puc - Campinas ProfJos Marcelo Traina Chacon 39 Eventos Aes de um componente
OnClick Ao clicar sobre uma opo da barra de menu
Programa Barra de Menu
Passos:
1. Inicia um novo Aplicativo Menu File New Aplication;
2. Insira um componente MainMenu;
3. Clique no boto reticncias da propriedade Items;
4. Crie o menu do projeto abaixo.
Objeto Propriedade Valor Caption Aplicativo Menu Form1 Name FrmAplicativo MainMenu1 Name MnuAplicativo
Menu Arquivo Item Propriedade Valor Caption &Arquivo Arquivo Name MnuArq Caption &Novo Novo Name MnuArqNovo Caption &Abrir Abri Name MnuArqAbrir Caption - Separador Name MnuArqSep1 Caption &Salvar Salvar Name MnuArqSalvar Caption Salvar &Como Salvar Como Name MnuArqSalvarComo Caption - Separador Name MnuArqSep2 Caption &Impressora Impressora Name MnuArqImp Caption &Configurar Configurar Name MnuArqImpCfg Caption &Imprimir Imprimir Name MnuArqImpPrn Caption - Separador Name MnuArqSep3 Caption Sa&ir Sair Name MnuArqSair
Submenu
Menu Editar Item Propriedade Valor Caption &Editar Editar Name MnuEdt Caption &Copiar Copiar Name MnuEdtCopiar Caption C&olar Colar Name MnuEdtColar Caption - Separador Name MnuEdtSep1 Caption &Selecionar Selecionar Name MnuEdtSelecionar
Menu Ajuda Item Propriedade Valor Caption A&juda Ajuda Name MnuAju Caption &Contedo e Indice Contedo Name MnuAjuConteudo Caption - Separador Name MnuAjuSep1 Caption &Sobre o aplicativo Sobre Name MnuAjuSobre
Puc - Campinas ProfJos Marcelo Traina Chacon 41
PopupMenu
PopupMenu so componentes que do ao usurio a opo de construir uma barra de menu que aparecer quando clicar com o boto direito do mouse sobre um objeto assoado ao popupmenu.
A grande parte das propriedades para o objeto popupmenu comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de um PopupMenu.
Propriedades Caractersticas de um componente
Alignment Define o alinhamento do PopupMenu em relao a posio do ponteiro do mouse. paCenter Centralizando coma posio do cursor do mouse.
paLeft esquerda da posio do cursor do mouse.
paRight direita da posio do cursor do mouse.
AutoPopup Define se o PopupMenu ir aparecer automaticamente ao clicar boto direito do mouse sobre o componente. true Aparecer automaticamente false No aparecer automaticamente.
Puc - Campinas ProfJos Marcelo Traina Chacon 43
Imagem
Imagem (Image) so componentes que permitem ao usurio inserir no programa uma imagem grfica.
A grande parte das propriedades para o objeto Imagem comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de um Imagem.
Propriedades Caractersticas de um componente
AutoSize Define que o tamanho do desenho inserido ser ajustado automaticamente true Ajuste automtico de tamanho do desenho.
false No possui ajuste automtico de tamanho do desenho.
Center Define que o desenho inserido centralizado. true Centralizao automtica do desenho.
false No centraliza automaticamente desenho.
Picture Clicar sobre a reticncias para abrir o Editor de Imagens
Clicar no Load e escolher a figura desejada e clicar no abrir. Ser carregada a figura escolhida no Editor de Imagens Puc - Campinas ProfJos Marcelo Traina Chacon 45
Clicar no boto OK
Stretch Ajusta o tamanho da figura no tamanho estabelecido para a imagem. O tamanho da imagem escolhida forada a se adequar ao tamanho do componente Image.
true Imagem adequada ao tamanho do componente image.
false Imagem no adequada ao tamanho do componente image.
Transparent Define se o fundo da imagem ir ficar transparente sobrepondo a outros objetos
true Imagem transparente sobrepondo a outros objetos.
false Imagem no transparente .
Eventos Aes de um componente
OnClick Usurio d um clique sobre o componente imagem.
OnDblClick Usurio d um duplo clique sobre o componente imagem.
Mtodos Aes que alteram o componente
Refresh Fora o redesenho de uma imagem. A sua utilizao em conjunto com o mtodo Repaint
Repaint Fora que a imagem apresentada seja redesenhada.
Puc - Campinas ProfJos Marcelo Traina Chacon 47
Formas
Formas (Shape) so componentes que permitem ao usurio inserir no programa formas geomtrica como retngulos, crculos, elipses, etc.
A grande parte das propriedades para o objeto Imagem comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades de uma Forma.
Propriedades Caractersticas de um componente
Brush Define propriedades de preenchimento do desenho
Color Defini a cor de preenchimento. Style Define o estilo de preenchimento.
Pen Define o contorno da figura geomtrica. Color Defini a cor do contorno da figura. Style Define o estilo da linha de contorno da figura. Width Define a espessura da linha de contorno da figura.
Shape Define a forma da figura geomtrica.
Eventos Aes de um componente
OnMouseMove Ao mover o mouse.
OnMouseDown Ao apertar o boto do mouse.
OnMouseUp Ao soltar o boto do mouse.
Puc - Campinas ProfJos Marcelo Traina Chacon 49
Lista de Arquivos, Drivers e Diretrios
Drivers (DriveComboBox) so componentes que permitem ao usurio selecionar atravs de uma caixa combinada um driver a ser trabalhado.
Diretrio (DiretoryListBox) so componentes que permitem ao usurio visualizar uma lista de diretrios e selecionar diretrios desta lista.
Arquivo (FileListBox) so componentes que permitem ao usurio visualizar uma lista de arquivos e selecionar arquivos desta lista.
A grande parte das propriedades para o objeto Imagem comum as propriedades explicadas anteriormente.
Segue uma lista das principais propriedades destes objetos.
Propriedades Caractersticas de um componente
DirList Conecta o driver escolhido no DriveComboBox a Lista de Diretrios do DirectoryListBox.
TextCase Determina se o texto ser mostrado com letras maisculas ou minsculas. tcLowerCase tcUpperCase
DirLabel Quando associado a um nome de rtulo (Label), qualquer seleo no objeto diretrio se reflete na propriedade caption do objeto rtulo.
FileList Conecta o diretrio escolhido no FileListBox a Lista de Arquivos do FileListBox.
FileEdit Conecta o arquivo escolhido no FileListBox a Caixa de Texto.
FileType Define quais arquivos sero mostrados atravs de seus atributos. ftReadOnly sero mostrados arquivos de Leitura ftHidden sero mostrados arquivos ocultos ftNormal sero mostrados arquivos normais Puc - Campinas ProfJos Marcelo Traina Chacon 51
Mask Define quais os tipos de arquivos sero mostrados atravs da determinao de sua extenso.
ShowGlyphs Define se as cones sero mostradas ao lado do nome do arquivo.
false true
Eventos Aes de um componente
OnClick Usurio d um clique sobre os componentes listados.
OnDblClick Usurio d um duplo clique sobre os componentes listados.
OnMouseMove Ao mover o mouse sobre os componentes listados.
OnKeyPress Ao pressionar uma tecla sobre os componentes listados.
#include "UnitOrdena.h" //-------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TFrmNum *FrmNum; //-------------------------------------------------------------------- __fastcall TFrmNum::TFrmNum(TComponent* Owner) : TForm(Owner) { } //-------------------------------------------------------------------- void __fastcall TFrmNum::BtnCresClick(TObject *Sender) { //Declarao de matriz 5x1 int matnum[5]; int matcres[5]; int i,j,posmat; //Leitura dos nmeros matnum[0]=StrToInt(EdtNum1->Text); matnum[1]=StrToInt(EdtNum2->Text); matnum[2]=StrToInt(EdtNum3->Text); matnum[3]=StrToInt(EdtNum4->Text); matnum[4]=StrToInt(EdtNum5->Text); //Coloca em ordem crescente for (i=0;i<5;i++) { //inicializa o contador de posies posmat=0; for(j=0;j<5;j++) { /*Compara todos os elemento e calcula a posio na matriz resultado*/ if(matnum[i]>matnum[j]) posmat++; } //Armazena o elemento corrente na nova posio calculada matcres[posmat]=matnum[i]; } //Mostra o resultado PnlNum1->Caption = matcres[0]; PnlNum2->Caption = matcres[1]; PnlNum3->Caption = matcres[2]; PnlNum4->Caption = matcres[3]; PnlNum5->Caption = matcres[4]; }
//-------------------------------------------------------------------- void __fastcall TFrmNum::BtnDecClick(TObject *Sender) { //Declarao de matriz 5x1 int matnum[5];
int matdec[5]; int i,j,posmat; //Leitura dos nmeros matnum[0]=StrToInt(EdtNum1->Text); matnum[1]=StrToInt(EdtNum2->Text); matnum[2]=StrToInt(EdtNum3->Text); matnum[3]=StrToInt(EdtNum4->Text); matnum[4]=StrToInt(EdtNum5->Text); //Coloca em ordem crescente for (i=0;i<5;i++) { //inicializa o contador de posies posmat=0; for(j=0;j<5;j++) { /*Compara todos os elemento e calcula a posio na matriz resultado*/ if(matnum[i]<matnum[j]) posmat++; } //Armazena o elemento corrente na nova posio calculada matdec[posmat]=matnum[i]; } //Mostra o resultado PnlNum1->Caption = matdec[0]; PnlNum2->Caption = matdec[1]; PnlNum3->Caption = matdec[2]; PnlNum4->Caption = matdec[3]; PnlNum5->Caption = matdec[4]; } //-------------------------------------------------------------------- void __fastcall TFrmNum::BtnSairClick(TObject *Sender) { if(Application->MessageBox("Tem certeza que deseja finalizar o aplicativo?","Aplicativo Nmeros",MB_OKCANCEL)==IDOK) Close(); } //-------------------------------------------------------------------- void __fastcall TFrmNum::FormShow(TObject *Sender) { EdtNum1->SetFocus(); } //--------------------------------------------------------------------
Puc - Campinas ProfJos Marcelo Traina Chacon 63
Itens Fundamentais
Tipos de Dados
O ambiente de programao C++ Builder trabalha com vrios tipos de dados que podem ser manipulados pelo programa.
Os tipos de dados que podemos trabalhar estaro listados a seguir:
Tipos de Dados Inteiros: Os tipos de dados inteiros so nmeros, positivos ou negativos, excluindo qualquer nmero fracionrio.
TIPO FAIXA int -32768 .. 32767 long int -2147483648 a 2147483647 unsigned int 0 a 65535 unsigned long int 0 a 4294967295
Tipos de Dados Reais: Os tipos de dados reais so nmeros, positivos ou negativos, incluindo nmeros fracionrios.
TIPO FAIXA float -3.4x10 38 a 3.4x10 38
double -3.4x10 308 a 3.4x10 308
Tipos de Dados Caracteres: Os tipos de dados caracteres so seqncia contendo letras, nmeros e smbolos especiais. So
TIPO FAIXA AnsiString Equivale a 2 31 caracteres WideString Equivale a 2 30 caracteres
Tipos de Dados Lgicos:
Os tipos de dados lgicos so representados pelas palavras true para verdadeiro e false para falso.
Variveis
Variveis so informaes que sero armazenadas na memria do computador e podero sofrer alteraes durante a execuo do programa.
Para criar uma varivel necessrio fazer a declarao de varivel.
Declarao de variveis
A declarao de varivel feita em qualquer parte da funo seguindo a seguinte forma:
<tipo> <nome das variveis>;
Exemplo; int A; float B AnsiString nome;
O nome das variveis em C++ podem ter at 32 caracteres, sendo que as letras maisculas e minsculas so diferentes.
Comentrios
Os comentrios so utilizados para documentar o programa fonte, mas no fazem parte do mesmo na compilao, pois sero substitudo por espaos em branco.
Os comentrios podero ser feitos em qualquer parte do programa.
Puc - Campinas ProfJos Marcelo Traina Chacon 65 Os comentrios so feitos atravs dos smbolos // se o comentrio for de uma linha e atravs dos smbolos /* */ se for para um trecho do programa. Ex:
/* Programa elaborado por Professional Computer */ // linha de comentrio
Aplicao com Tipo de Dado Caractere
O exemplo a seguir concatena o nome e sobrenome de uma pessoa
void __fastcall TForm1::Button1Click(TObject *Sender) { int A, B, R; A = StrToInt(Edit1->Text); B = StrToInt(Edit2->Text); R = A + B; Label1->Caption = IntToStr(R); Edit1->SetFocus(); } //-------------------------------------------------------------------- ------
Puc - Campinas ProfJos Marcelo Traina Chacon 67 Aplicao com Tipo de Dado Real
O exemplo a seguir faz calculo de salrio liquido utilizando nmeros reais.
Operadores Operador de atribuio = O operador de atribuio representado pelo sinal de igual utilizado para atribuir um valor a uma varivel.
Ex: int x; x = 3; ou int x = 3;
Operadores aritmticos (+,-,*,/,%)
As expresses aritmticas so escritas linearmente, seguindo as seguintes restries:
a) o sinal de multiplicao o asterisco (*) b) a diviso indicada com a barra (/) c) o mdulo de uma diviso representado por (%) d) Os parnteses so usados para quebrar as prioridades entre os operadores
Ex: A + B * 4 17 % 3 (Retorna 2, pois o resto da diviso de 17 por 3 2) A * B * (C + (A + 5)) Puc - Campinas ProfJos Marcelo Traina Chacon 69 Operadores de incremento (++) O operador de incremento soma 1 a varivel.
O operador pode ser pr-fixado ou ps fixado. Operadores de decremento (--) O operador de decremento subtrai 1 da varivel.
O operador pode ser pr-fixado ou ps fixado.
Operadores Aritmticos de Atribuio
Os operadores aritmticos so: += , -= , *= , /= , %=
Estes operadores eqivalem a: i += 2; equivale i = i + 2; i -= 2; equivale i = i - 2; i *= 2; equivale i = i * 2; i /= 2; equivale i = i / 2; i %= 2; equivale i = i % 2;
Operadores Relacionais
Uma relao a comparao realizada entre dois valores do mesmo tipo.
A natureza da operao indicada por um operador relacional que pode ser:
OPERADOR RESULTADO = = igual a != diferente de < = menor ou igual a < menor que > maior que > = maior ou igual a
O resultado da relao ser um valor lgico (0 ou 1).
Ex.: A != B C > B A <= C
Operadores Lgicos
Os operadores lgicos so descritos em tabela abaixo: OPERADOR RESULTADO && conjuno || disjuno ! negao
A tabela representa a precedncia entre os vrios tipos de operadores. Para quebrar estas precedncias utilizado os parnteses.
Operador Tipos - Sinal de menos unrio ++ Incremento -- Decremento ! No Lgico * Multiplicao / Diviso % Mdulo + Adio - Subtrao < Menor que <= Menor ou igual a > Maior >= Maior ou igual a = = Igual a != Diferente de && E lgico || Ou lgico ?: Condicional = Atribuio *= Aritmtico de Atribuio (vezes) /= Aritmtico de Atribuio (divide) %= Aritmtico de Atribuio (mdulo) += Aritmtico de Atribuio (soma) -= Aritmtico de Atribuio (menos) Puc - Campinas ProfJos Marcelo Traina Chacon 73
Estruturas Condicionais
Estruturas Condicionais
A estrutura condicional faz com que uns grupos de aes sejam realizados quando uma determinada condio satisfeita.
As estruturas condicionais podem ser divididas em trs partes: Estrutura condicional simples Estrutura condicional composta Comando seletivo
Estrutura Condicional Simples
Executa uma seqncia de comandos se a condio for verdadeira.
void __fastcall TForm1::Button1Click(TObject *Sender) { int X, A, B; A = StrToInt(Edit1->Text); B = StrToInt(Edit2->Text); if (A > B) { X = A; A = B; B = X; } Label3->Caption = IntToStr(A); Label4->Caption = IntToStr(B); Edit1->SetFocus(); } //-------------------------------------------------------------------- ------
void __fastcall TForm1::Button1Click(TObject *Sender) { int MES; MES = StrToInt(Edit1->Text); switch (MES) { case 1 : Edit2->Text = "Janeiro"; break; case 2 : Edit2->Text = "Fevereiro"; break; case 3 : Edit2->Text = "Maro"; break; case 4 : Edit2->Text = "Abril"; break;
case 5 : Edit2->Text = "Maio"; break; case 6 : Edit2->Text = "Junho"; break; case 7 : Edit2->Text = "Julho"; break; case 8 : Edit2->Text = "Agosto"; break; case 9 : Edit2->Text = "Setembro"; break; case 10 : Edit2->Text = "Outubro"; break; case 11 : Edit2->Text = "Novembro"; break; case 12 : Edit2->Text = "Dezembro"; break; default : Edit2->Text = "Ms invlido"; break; } Edit1->SetFocus(); } //-------------------------------------------------------------------- ------
Puc - Campinas ProfJos Marcelo Traina Chacon 79
Estruturas de Repetio
Estrutura de Repetio
A estrutura de repetio permite que uma seqncia de comandos seja executada repetidamente, at que, uma determinada condio de interrupo seja satisfeita. Existem trs formas de interrupo que so: 1. Interrupo automtica 2. Interrupo no incio 3. Interrupo no final
Estrutura de Repetio com Interrupo Automtica
Executa um nmero determinado de vezes a seqncia de comandos estabelecida na repetio. representado por:
for( i = 0 ; i < 20 ; i++)
for ( i = 0 ; i < 20 ; i++) { Instruo; : Instruo N; }
Para a varivel ser decrementada utilizamos o operador de decremento. representado por:
for ( i = 30 ; i > 0 ; i--) { Instruo; : Instruo N; }
void __fastcall TForm1::Button1Click(TObject *Sender) { int N, I, R; AnsiString N1, I1, R1; ListBox1->Items->Clear(); N = StrToInt(Edit1->Text); for (I = 1; I <= 10; I++) { R = N * I; N1 = StrToInt(N); I1 = StrToInt(I); R1 = StrToInt(R); ListBox1->Items->Add(N1 + " X " + I1 + " = " + R1); } Edit1->SetFocus(); } //-------------------------------------------------------------------- ------ Puc - Campinas ProfJos Marcelo Traina Chacon 81 Estrutura de Repetio com Interrupo no Incio
A condio de interrupo testada no incio, antes da seqncia de comandos, e se a condio no for satisfeita no realizar a seqncia de comandos. representada por:
while (Expresso de teste) { Instruo 1; Instruo 2; : Instruo n; }
void __fastcall TForm1::Button1Click(TObject *Sender) { int N, I, R; AnsiString N1, I1, R1; ListBox1->Items->Clear(); N = StrToInt(Edit1->Text); I = 1; do { R = N * I; N1 = StrToInt(N); I1 = StrToInt(I); R1 = StrToInt(R); ListBox1->Items->Add(N1 + " X " + I1 + " = " + R1); I++; } while (I <= 10); Edit1->SetFocus(); } //-------------------------------------------------------------------- ----
Funes
A funo um conjunto de tarefas que desejamos realizar.
Devemos escrever funes para quebrarmos o programa em subprogramas que executem tarefas simples e com baixa complexidade.
Devem-se escrever funes para tarefas que repitam vrias vezes no programa.
A estrutura bsica de um programa em C++ so as funes. O programa em C++ constitudo de uma ou mais funes.
Forma geral das funes tipo nome ( tipo ) { instruo_1; instruo_2; : : instruo_N } onde: tipo define que tipo de varivel recebida ou enviada pela funo. instruo instrues utilizadas para compor o programa { marca o incio da funo } marca o final da funo
#include "Unit1.h" //-------------------------------------------------------------------- ------ #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; //-------------------------------------------------------------------- ------ __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //-------------------------------------------------------------------- ------ int Fatorial(int N) { int I, FAT; FAT = 1; for (I = 1; I <= N; I ++) FAT *= I; Form1->Label2->Caption = IntToStr(FAT); return(0); } void __fastcall TForm1::Button1Click(TObject *Sender) { int N; N = StrToInt(Edit1->Text); Fatorial(N); Edit1->SetFocus(); } //-------------------------------------------------------------------- ------
Matrizes
Matrizes correspondem a conjuntos de elementos de um mesmo tipo, onde todos so igualmente acessveis, isto quer dizer que o tempo e tipo de procedimento para acessar qualquer um dos elementos identificado pelo nome da matriz seguido de um ou mais ndices que define sua posio na matriz. Podem ser dos tipos unidimensional ou multidimensional.
Podemos montar uma matriz de caracteres para armazenarmos uma frase.
Matriz Unidimensional
A criao de variveis compostas unidimensionais feita atravs da seguinte declarao:
int notas [5];
char letras [6];
Para entendermos melhor a definio de matrizes , podemos imaginar a seguinte situao: temos que armazenar dados de uma empresa por meses, e para isto poderamos ter 12 variveis diferentes que poderiam por sua vez, estar em locais diferentes de memria.
ou ainda, estar em uma rea contnua, permitindo um acesso um pouco mais facilitado, alis a grande vantagem de se ter uma matriz est justamente no fato de se poder criar algoritmos, que facilitam a lgica de alguns programas:
int meses [12];
Puc - Campinas ProfJos Marcelo Traina Chacon 87 a referncia a um dos elementos de uma matriz feita, de acordo com o deslocamento de endereo, partindo do primeiro elemento, mais o tamanho em bytes de cada elemento, multiplicado pela posio menos 1. Se na matriz meses acima descrita, quisermos nos referir ao ms de maio, basta que coloquemos o valor 5 como ndice:
meses[5] = expresso;
Ex: Dado um conjunto de 8 notas, armazen-las em uma varivel nota, determinando sua mdia.
void Saida() { Form1->Edit21->Text = IntToStr(B[0][0]); Form1->Edit22->Text = IntToStr(B[0][1]); Form1->Edit23->Text = IntToStr(B[0][2]); Form1->Edit24->Text = IntToStr(B[0][3]); Form1->Edit25->Text = IntToStr(B[0][4]); Form1->Edit26->Text = IntToStr(B[1][0]); Form1->Edit27->Text = IntToStr(B[1][1]); Form1->Edit28->Text = IntToStr(B[1][2]); Form1->Edit29->Text = IntToStr(B[1][3]); Form1->Edit30->Text = IntToStr(B[1][4]); Form1->Edit31->Text = IntToStr(B[2][0]); Form1->Edit32->Text = IntToStr(B[2][1]); Form1->Edit33->Text = IntToStr(B[2][2]); Form1->Edit34->Text = IntToStr(B[2][3]); Form1->Edit35->Text = IntToStr(B[2][4]); Form1->Edit36->Text = IntToStr(B[3][0]); Form1->Edit37->Text = IntToStr(B[3][1]); Form1->Edit38->Text = IntToStr(B[3][2]); Form1->Edit39->Text = IntToStr(B[3][3]); Form1->Edit40->Text = IntToStr(B[3][4]); } Puc - Campinas ProfJos Marcelo Traina Chacon 91 //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button1Click(TObject *Sender) { Limpa(); } //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button2Click(TObject *Sender) { int NUMERO, RESPOSTA, I, J; Entrada(); for (I = 0; I <= 3; I++) for (J = 0; J <= 4; J++) { NUMERO = A[I][J]; RESPOSTA = NUMERO * NUMERO; B[I][J] = RESPOSTA; } Saida(); } //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button3Click(TObject *Sender) { int NUMERO, RESPOSTA, I, J; Entrada(); for (I = 0; I <= 3; I++) for (J = 0; J <= 4; J++) { NUMERO = A[I][J]; RESPOSTA = NUMERO * NUMERO * NUMERO; B[I][J] = RESPOSTA; } Saida(); } //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button4Click(TObject *Sender) { int RESPOSTA, I, J; Entrada(); for (I = 0; I <= 3; I++) for (J = 0; J <= 4; J++) { RESPOSTA = A[I][J]; if (RESPOSTA % 2 == 0) B[I][J] = RESPOSTA; else B[I][J] = 0; } Saida(); } //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button5Click(TObject *Sender) { int RESPOSTA, I, J; Entrada(); for (I = 0; I <= 3; I++) for (J = 0; J <= 4; J++) { RESPOSTA = A[I][J]; if (RESPOSTA % 2 != 0) B[I][J] = RESPOSTA; else B[I][J] = 0; } Saida(); } //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button6Click(TObject *Sender) { int SOMAT, LIMITE, I, J, K; Entrada(); for (I = 0; I <= 3; I++)
for (J = 0; J <= 4; J++) { SOMAT = 0; LIMITE = A[I][J]; for (K = 1; K <= LIMITE; K++) SOMAT += K; B[I][J] = SOMAT; } Saida(); } //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button7Click(TObject *Sender) { int FAT, LIMITE, I, J, K; Entrada(); for (I = 0; I <= 3; I++) for (J = 0; J <= 4; J++) { FAT = 1; LIMITE = A[I][J]; for (K = 1; K <= LIMITE; K++) FAT *= K; B[I][J] = FAT; } Saida(); } //-------------------------------------------------------------------- ------
Puc - Campinas ProfJos Marcelo Traina Chacon 93
Estruturas
Estrutura um grupo de informaes relativas a uma mesma entidade. Estas informaes podem ter caractersticas diferentes, como em cadastro onde temos o nome, endereo, telefone, etc.
struct
A declarao de uma struct permite-nos a definir um estrutura.
struct registro { int num; char nome[40]; char end[30]; char fone [15]; };
Aps a declarao da estrutura deve-se declarar variveis que contero esta estrutura. registro clientes; registro alunos[30];
Para armazenar informaes em disco e recupera-las em seguida necessrio a utilizao das funes de arquivo.
Estas funes encontram-se na biblioteca stdio.h. As funes mais comuns de arquivo sero apresentadas na tabela seguinte:
Nome Funo fopen() Abre um arquivo fclose() Fecha um arquivo putc() Escreve um caractere em um arquivo fputc() Escreve um caractere em um arquivo getc() L um caractere de um arquivo fgetc() L um caractere de um arquivo fseek() Posiciona o arquivo em um byte especfico fprintf() Escreve uma informao no arquivo fscanf() L uma informao de um arquivo feof() Devolve verdadeiro se o fim do arquivo for atingido ferror() Devolve verdadeiro se ocorreu um erro rewind() Recoloca o ponteiro de arquivo no incio remove() Apaga um arquivo fflush() Descarrega um arquivo
Tipos de Arquivos
Os Arquivos possuem dois tipos: Arquivos de texto armazenam uma seqncia de caracteres. Arquivos binrios armazenam uma seqncia de bytes, no ocorre nenhuma traduo de caracteres.
Ponteiro de Arquivo
Todo Arquivo dever possuir um ponteiro para direcionar as operaes a serem realizadas. Para escrever ou ler uma informao de um Arquivo, seu programa precisa usar o ponteiro de arquivo: Para utilizar uma varivel ponteiro necessrio declara-la, como exemplo abaixo:
Exemplo: FILE *fp;
Abrindo um Arquivo
A funo fopen associa o nome de um Arquivo em disco com o ponteiro de arquivo. A funo fopen retorna um ponteiro de arquivo, o seu programa nunca poder alterar este valor. Se ocorrer um erro ao abrir o arquivo ser retornado um valor nulo para o ponteiro. Um arquivo pode ser aberto de vrias maneiras, conforme mostra a tabela a seguir:
Modo Significado r Abre um arquivo-texto para leitura w Cria um arquivo-texto para escrita a Anexa a um arquivo-texto rb Abre um arquivo-binrio para leitura wb Cria um arquivo-binrio para escrita ab Anexa a um arquivo-binrio r+ Abre um arquivo-texto para leitura / escrita w+ Cria um arquivo-texto para leitura / escrita a+ Anexa ou cria um arquivo-texto para leitura / escrita r+b Abre um arquivo-binrio para leitura / escrita w+b Cria um arquivo-binrio para leitura / escrita a+b Anexa ou cria um arquivo-binrio para leitura / escrita
Exemplo de Abertura de Arquivo
Exemplo :
Criar um arquivo texto para escrita, associando ao arquivo em disco c:\arquivo.dat.
FILE *fp; fp = fopen(c:\\arquivo.dat,w);
Exemplo 2:
Criar um arquivo texto para escrita, associando ao arquivo em disco c:\arquivo.dat, verificando se no ocorreu erro na abertura do arquivo. Puc - Campinas ProfJos Marcelo Traina Chacon 99
FILE *fp; if ((fp = fopen(c:\\arquivo.dat,w))==NULL) { ShowMessage(O arquivo no pode ser aberto); Close(); }
Fechando um arquivo
Todo arquivo aberto dever ser fechado no final do programa, ou assim que a sua utilizao no se faa mais necessria. Se o arquivo no for fechado poder ocorrer perdas de dados, arquivos destrudos ou problemas intermitentes na execuo do programa. A funo fclose fecha um arquivo aberto, conforme exemplo abaixo:
fclose(fp);
Arquivo do Tipo Texto
O arquivo de texto grava somente caracteres no formato texto.
Arquivo Binrio
Arquivos binrios armazena uma seqncia de bytes, no ocorre nenhuma traduo de caracteres. Exemplo de escrita em arquivo binrio:
struct registro { int num; char nome[30]; }aluno; aluno.num=5; aluno.nome=Joo da Silva; FILE *arquivo; arquivo = fopen(a:\\dados.dat,wb); fwrite(&aluno, sizeof(aluno), 1, arquivo); : : :
fclose (arquivo);
Programa de Arquivo com registros
O programa a seguir mostra a utilizao de arquivo para registros.
#include <vcl.h> #include <stdio.h> //biblioteca para trabalhar com arquivo #pragma hdrstop
#include "Unit1.h" //-------------------------------------------------------------------- ------ #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1; struct CadAluno { char NOME[50]; float NOTA[4]; float MEDIA; }; FILE *arquivo; //ponteiro de arquivo CadAluno ALUNO; //-------------------------------------------------------------------- ------ __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { } //-------------------------------------------------------------------- ------ void LimpaTela() { Form1->Edit1->Text = ""; Form1->Edit2->Text = ""; Form1->Edit3->Text = ""; Form1->Edit4->Text = ""; Form1->Edit5->Text = ""; Form1->ListBox1->Items->Clear(); Form1->Edit1->SetFocus(); } //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button1Click(TObject *Sender) { //se no conseguir abrir arquivo de aluno para adicionar valores if ((arquivo=fopen("C:\\TEMP\\ALUNO.DAT","ab"))==NULL) { ShowMessage("No posso abrir arquivo de alunos"); } else //seno { Puc - Campinas ProfJos Marcelo Traina Chacon 101 //copia valor de Edit1 para matriz de caracteres ALUNO.NOME strcpy(ALUNO.NOME , Edit1->Text.c_str()); ALUNO.NOTA[0] = StrToFloat(Edit2->Text); ALUNO.NOTA[1] = StrToFloat(Edit3->Text); ALUNO.NOTA[2] = StrToFloat(Edit4->Text); ALUNO.NOTA[3] = StrToFloat(Edit5->Text); float SOMA = 0; // soma todas as notas for (int C = 0; C <= 3; C++) { SOMA += ALUNO.NOTA[C]; } // calcula a mdia ALUNO.MEDIA = SOMA/4; //grava registro ALUNO em arquivo fwrite(&ALUNO,sizeof(ALUNO),1,arquivo); //fecha arquivo fclose(arquivo); LimpaTela(); } } //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button2Click(TObject *Sender) { //se no conseguir abrir arquivo de aluno para leitura de valores if ((arquivo=fopen("C:\\TEMP\\ALUNO.DAT","rb"))==NULL) { ShowMessage("No posso abrir arquivo de alunos"); } else //seno { LimpaTela(); //enquanto conseguir ler arquivo de aluno while((fread(&ALUNO,sizeof(ALUNO),1,arquivo)==1)) { char FORMATO[60]; // matriz de caracteres para sada //copia valor de ALUNO.NOME para FORMATO strcpy(FORMATO,ALUNO.NOME); //concatena (soma) valor de ALUNO.NOME com a frase " MEDIA = " strcat(FORMATO," Mdia= "); char media[5]; // matriz de caracteres para media //converte float para texto
gcvt(ALUNO.MEDIA, 1, media); //concatena (soma) valor de FORMATO com media strcat(FORMATO,media); //adiciona resultado no ListBox1 ListBox1->Items->Add(FORMATO); } fclose(arquivo); } } //-------------------------------------------------------------------- ------ void __fastcall TForm1::Button3Click(TObject *Sender) { Close(); } //-------------------------------------------------------------------- ------
Bibliografia
1 MATEUS, Csar Augusto, C++ Builder 5 - Guia Prtico, So Paulo, SP, Editora rica, 2000. 2 MANZANO, Jos Augusto Navarro Garcia, Estudo Dirigido de C++ Builder, So Paulo, SP, Editora rica, 2003. 3 MIZRAHI, Victorine Viviane. Treinamento em Linguagem C++. So Paulo. Makron Books do Brasil Editora Ltda. 4 BERRY, John. Programando em C++. So Paulo. Makron Books do Brasil Editora Ltda. 5 SCHILDT, Herbert. Linguagem C Guia Prtico e Interativo. So Paulo. Makron Books do Brasil Editora Ltda. 6 SCHILDT, Herbert. Linguagem C Completo e total. So Paulo. Makron Books do Brasil Editora Ltda. 7 ELLIS, Margaret A., Stroustrup Bjarne. C++ Manual de Referncia Comentado. Rio de Janeiro. Editora Campus Ltda. 8 DAVIS, Stephen R. C++ Para Leigos. So Paulo. Berkeley. 9 JAMSA, Kris. Salvo pelo... C++. Rio de Janeiro. Livros Tcnicos e Cientficos Ltda. 10 BERGSMAN, Paul. Controlling the world with your PC. Eagle Rock, Virginia. LLH Technology Publishing. 11 TORRES, Gabriel. Hardware Curso Completo. Rio de Janeiro. Axcel Books do Brasil Editora. Puc - Campinas ProfJos Marcelo Traina Chacon 103
Banco de Dados
Introduo
O C++ Builder oferece uma srie de ferramentas e recursos que possibilitam a criao de aplicaes de bancos de dados de forma rpida e fcil. Sero introduzidos, a diante, os conceitos bsicos de manipulao de bancos de dados em C++ Builder, oferecendo uma viso geral dos componentes de acesso a dados mais corriqueiramente utilizados. A base das aplicaes de bancos de dados do C++ Builder est no Borland Database Engine (BDE), uma camada de software que realiza o acesso a bancos de dados baseados em arquivos como Paradox e dBase ou a servidores de bancos de dados locais ou remotos como InterBase, Informix, Oracle, SyBase, etc. Os componentes de bancos de dados do C++ Builder oferecem uma forma simplificada, que utiliza programao visual baseada em PME (Propriedades, Mtodos e Eventos), para acessar a API do BDE. H duas grandes classes de componentes: os componentes de acesso a dados (data-access) e os componentes de controle, visualizao e manipulao dos dados (data-controls), sendo que os componentes de visualizao e manipulao de dados so tambm denominados de componentes data-aware (componentes capazes de mostrar e atualizar os dados armazenados em uma tabela associada). Estes dois grupos de componentes esto localizados, respectivamente, nas pginas Data Access e Data Controls da paleta de componentes do C++ Builder. Os principais componentes do tipo data-access utilizados na criao de aplicaes com bancos de dados em C++ Builder so os componentes derivados da classe abstrata TDataSet, que so: Table da classe TTable, Query da classe TQuery e StoredProc da classe TStoredProc. Qualquer um dos componentes derivados da classe TDataSet podem ser referenciados como datasets. Os componentes Query e StoredProc so mais utilizados em aplicaes cliente-servidor. O componente Table oferece a forma mais simples de se acessar informaes em uma tabela de banco de dados. Um dataset possui um conjunto de estados onde pode se encontrar. Os estados possveis so:
Uma aplicao pode posicionar um dataset em determinado estado atravs de uma chamada explcita a um mtodo ou atravs da ocorrncia de um evento que desencadeie uma troca de estado. H mtodos que sempre levam para determinado estado e so chamados mtodos correspondentes aos estados. So eles: Edit, Insert, Append e Setkey. Um outro conjunto de mtodos sempre retorna o dataset para o seu estado de Browse como Delete, Cancel, GotoKey e GotoNearest. H casos em que o sucesso ou insucesso do mtodo define se o dataset volta ao estado de Browse, como o mtodo Post. O diagrama de estados da Figura 1 mostra os possveis estados de um dataset e os mtodos que causam as trocas de estado para outro.
Puc - Campinas ProfJos Marcelo Traina Chacon 105 O componente Table a interface entre o Borland Database Engine e os componentes DataSource O componente DataSource por sua vez oferece a interface para os componentes data-aware. que iro compor a interface com o usurio. Trabalhando-se com o componente Table usa-se a propriedade DatabaseName para especificar o banco de dados a ser acessado; a propriedade TableName serve para indicar a tabela a acessar; utiliza-se a propriedade IndexName para definir o uso de um determinado ndice com a tabela; configura-se a propriedade Active para True ou chame-se o mtodo Open para abrir o dataset, colocando ele no estado Browse; coloca-se a propriedade Active em False ou chame-se o mtodo Close para fechar o dataset. O componente DataSource a interface entre um componente dataset e os componentes data-aware nos formulrios. O DataSource liga-se a um dataset atravs da propriedade Dataset. Os componentes Data-aware, como DBEdit e DBGrid, ligam- se ao DataSource atravs de suas propriedades DataSource. Usualmente h apenas um DataSource para cada dataset, no entanto pode-se conectar a um dataset tantos DataSource quantos forem necessrios. Para monitorar alteraes no estado do dataset associado ao DataSource pode-se associar um mtodo ao evento OnStateChange. H vrios componentes do tipo data-controls no C++ Builder. O DBGrid permite a visualizao, alterao e navegao no conjunto de todos os registros e campos de uma tabela; o DBText que mostra os dados em um campo de uma tabela como um label read-only similar ao componente Label; o DBEdit usado para apresentar e alterar os valores de um campo numa caixa de edio similar a um componente Edit; o DBImage que apresenta grficos e figuras do tipo bitmap armazenados em um campo do tipo BLOB (BinaryLarge Object), de forma semelhante ao realizado pelo componente Image; e o DBNavigator que oferece um conjunto de botes para navegar pelas linhas de um dataset, adicionar ou eliminar uma linha, colocar o dataset no estado de edio, confirmar ou cancelar as alteraes realizadas no dataset ou recarregar os dados do disco, atualizando o dataset.
Exerccios
Aplicaao simples usando tabela ja existente
1) Crie um novo projeto. Altere a propriedade Name do Form1 para J_Main, e a propriedade Caption para Prtica 1 - Aplicao com Banco de Dados.
2) Salve o projeto atribuindo o nome MAIN.CPP para a Unit1 e PRAT1.BPR para o projeto.
3) Introduza um componente Table no formulrio, (cone da pgina Data Access da paleta de componentes), configure sua propriedade Name para tbEmpregados, sua propriedade DatabaseName para BCDEMOS e sua propriedade TableName para EMPLOYEE.DB.
4) Insira um componente DataSource (cone da pgina Data Access da paleta de componentes) no formulrio, configure sua propriedade DataSet para tbEmpregados.
5) Insira um componente DBGrid (cone da pgina Data Controls da paleta de
componentes), ajuste suas dimenses para se adaptarem ao tamanho do formulrio e altere sua propriedade DataSource para DataSource1.
6) Altere a propriedade Active do componente tbEmpregados para True. A tabela ser aberta e voc visualizar os dados no grid em tempo de projeto. Em seguida coloque esta mesma propriedade novamente para False.
7) Programe o evento OnActivate do formulrio com o seguinte comando:
tbEmpregados->Open(); Que equivalente a fazer tbEmpregados->Active = true; Isto ir abrir a tabela em tempo de execuo.
8) Execute e teste a aplicao. Observe que os dados podero ser alterados, mas recomendamos que no se faam alteraes, uma vez que estes dados so utilizados por aplicaes exemplo do C++ Builder.
visualizando os estados do DataSet tbEmpregados
9) Adicione na parte superior esquerda do formulrio principal um componente Label. Altere sua propriedade Name para labelEstado e limpe o contedo de sua propriedade Caption.
10) Crie um manipulador de eventos para o evento OnStateChange do componente DataSource1. Este evento gerado toda vez que o dataset associado ao datasource (neste caso tbEmpregados) muda de estado. Digite o seguinte cdigo:
switch (tbEmpregados->State) {
case dsInactive: labelEstado->Caption = "Estado Inativo"; break; case dsBrowse: labelEstado->Caption = "Estado de Browse"; break; case dsEdit: labelEstado->Caption = "Estado de Edio"; break; case dsInsert: labelEstado->Caption = "Estado de Insero"; break; case dsSetKey: labelEstado->Caption = "Estado de Busca (SetKey)"; break; case dsCalcFields: labelEstado->Caption = "Estado de Campo Calculado"; break;
}
11) Adicione ao formulrio principal um componente Button. Altere sua propriedade Name para btAbreFecha, sua propriedade Caption para Fechar e programe um tratador de eventos para o seu evento OnClick com o seguinte cdigo:
QUESTO No 1: Qual o estado inicial do dataset tbEmpregados? Quando se clica no boto fechar qual o novo estado? Que transio no diagrama da Figura 1 est associada a essa mudana?
13) Com a tabela tbEmpregados aberta, posicione no campo EmpNo do empregado de cujo valor de EmpNo 2. D um clique neste campo e digite o valor 4. Troque para um novo registro dando um clique no registro para onde se deseja ir.
QUESTO No 2: O que acontece? Porque a exceo foi gerada? Qual o estado do dataset antes e aps a tentativa de mudar de registro? Que transio no diagrama da Figura 1 est associada a essa mudana?
14) Pressione a tecla Esc para cancelar as alteraes. Use a barra de rolagem do grid para posicionar a tabela no ltimo registro. Use a tecla Down () para inserir um novo registro.
QUESTO No 3: Qual o novo estado do dataset? Que transio no diagrama da Figura 1 est associada a essa mudana? Uma outra forma de inserir um registro usando o grid pressionar a tecla Insert, que realizar a insero no ponto atual do cursor.
15) Digite o nmero 147 no campo EmpNo e os dados do seu nome nos campos FirstName e LastName. Mude de registro para confirmar as alteraes (Post).
16) Posicione sobre o registro rcem-includo e pressione as teclas Ctrl+Del para eliminar o registro. Escolha Ok quando for mostrada a caixa de dilogo de confirmao.
Buscando registros. Estado SetKey de um DataSet
17) Adicione um componente Edit ao formulrio J_Main. Altere sua propriedade Name para editBusca e limpe o contedo de sua propriedade Text.
18) Adicione 2 botes do tipo SpeedButton. Configure a propriedade Name de cada um deles para btPreparaBusca e btBusca, respectivamente. Programe a propriedade glyph do primeiro para o bitmap contido no arquivo C:\Arquivos de Programas\Arquivos comuns\Borland Shared\Images\Buttons\fcabopen.bmp e a do segundo para o bitmap do arquivo C:\Arquivos de programas\Arquivos comuns\Borland Shared\images\buttons\find.bmp. O formulrio deve ficar com o aspecto da figura a seguir.
19) Programe o evento OnClick do boto btPreparaBusca com o seguinte cdigo:
20) Programe o evento OnClick do boto btBusca com o segunite cdigo:
tbEmpregados->GotoKey();
21) Compile e teste a aplicao. A busca realizada pelo cdigo, ndice principal da tabela. Digite o valor 10 na caixa de edio. Clique sobre o boto btPreparaBusca.
QUESTO No 4: Qual o novo estado do dataset? Que transio no diagrama da Figura 1 est associada a essa mudana?
22) Clique sobre o boto btBusca. O registro foi localizado? Digite o valor 11 na caixa de edio. Pressione os botes btPreparaBusca e btBusca. E agora o registro foi localizado? Encerre a aplicao.
23) Altere o evento OnClick do boto btBusca para:
tbEmpregados->GotoNearest();
24) Recompile e teste a aplicao. Faa uma busca usando o valor 10.
QUESTO No 5: Qual registro foi localizado? Qual a diferena entre os mtodos GotoKey e GotoNearest? Puc - Campinas ProfJos Marcelo Traina Chacon 109
Fazendo uma busca incremental pelo Nome do Empregado
25) Selecione o componente tbEmpregados. Altere sua propriedade IndexName para ByName.
26) Crie um tratador de eventos para o evento OnChange do componente EditBusca e digite: if (editBusca->GetTextLen() > 0) tbEmpregados->FindNearest(ARRAYOFCONST((editBusca->Text)));
27) Compile e teste a aplicao. Digite um nome na caixa de edio comeando com r. O que acontece?
QUESTO No 6: Por que a busca agora foi realizada pelo nome? Qual a funo do mtodo FindNearest? Ele condensa a funo de quais outros mtodos?
28) Digite o valor 146 na caixa de edio. Pressione o boto btPreparaBusca. O que acontece?
QUESTO No 7: Qual a razo do erro? Por que no foi possvel atribuir o valor 146 ao campo EmpNo com o dataset no modo SetKey? Que campos podem ter valores atribudos no modo SetKey?
Nudando a estrutura da tabela ENPLOYEE.DB
29) Chame o Database DeskTop (Menu Tools | Database DeskTop).
30) No DataBase DeskTop Escolha o menu File | Open | Table Na caixa de dilogo Open Table, abra o combobox Alias (ltima linha) e escolha BCDEMOS. Selecione Employee.db e clique no boto abrir.
31) Escolha o menu Table | Restructure Com a caixa de dilogo aberta, use a tecla Down () para posicionar alm do ltimo campo (Salary), incluindo um novo campo.
32) Digite na coluna FieldName, o nome Picture, pressione a tecla <Tab> para posicionar na coluna Type. Digite G (Campo do tipo Graphic BLOB).
33) Clique no boto Save para validar as alteraes. Feche a tabela Employee.db (Clique duplo no menu de controle da sua janela) e feche o Database DeskTop.
Criando um formulario para ediao de campos individuais
34) Crie um novo formulrio. Altere sua propriedade Name para J_Empregados, sua propriedade Caption para Empregados e a propriedade BordeStyle para bsDialog. Salve o projeto, dando o nome EMPREG.CPP (lembrar de voltar o diretrio atual para o diretrio da Prtica 1) para a Unit associada ao novo formulrio criado.
35) Ajuste o formulrio J_Empregados para ser o formulrio principal da aplicao. Menu Project | Options.
36) Introduza um componente Table no formulrio, configure sua propriedade Name para tbEmpregados, sua propriedade DatabaseName para BCDEMOS e sua propriedade TableName para EMPLOYEE.DB.
37) Insira um componente DataSource no formulrio, configure sua propriedade DataSet para tbEmpregados.
38) Insira um componente DBText (cone da pgina Data Controls da paleta de componentes), configure sua propriedade DataSource para DataSource1 e sua propriedade DataField para EmpNo. Mude sua propriedade Font para tamanho 18, estilo negrito e cor castanho. Este componente serve para exibir valores de uma determinada tabela, sem permitir que os mesmos sejam alterados.
39) Adicione um componente DBEdit (cone da pgina Data Controls da paleta de componentes), configure sua propriedade DataSource para DataSource1 e sua propriedade DataField para FirstName. Inclua um componente Label para identificar o campo, posicionando-o logo acima do DBEdit e ajuste seu Caption para Primeiro Nome.
40) Repita o passo 39 para os campos LastName e Salary.
41) Adicione um componente DBImage (cone da pgina Data Controls da paleta de componentes). Altere sua propriedade DataSource para DataSource1, sua propriedade DataField para Picture e sua propriedade Stretch para True.
42) Inclua um componente DBNavigator (cone da pgina Data Controls da paleta de componentes). Configure sua propriedade DataSource para DataSource1 e sua propriedade ShowHint para True.
43) Posicione um componente BitBtn. Ajuste sua propriedade Kind para bkOk, a propriedade Name para btOk e seu Caption para &Fechar. Programe o evento OnClick do mesmo com o seguinte cdigo: Close();
44) Adicione um Bevel, configurando sua propriedade Shape para bsBottomLine. O formulrio deve ficar com o seguinte aspecto:
Puc - Campinas ProfJos Marcelo Traina Chacon 111
45) Ajuste a propriedade Active do componente tbEmpregados para True.
46) Compile e teste a aplicao. Verifique o funcionamento de cada um dos botes no navegador (DBNavigator).
!nserindo uma figura no campo Picture
47) Adicione um componente OpenDialog no formulrio J_Empregados. Ajuste sua propriedade Filter para conter na coluna Filter Name Imagens (*.bmp) e na coluna Filter para *.bmp; altere o item ofHideReadOnly da propriedade Options para True.
48) Programe um tratador de eventos para o evento OnDblClick do componente DBImage1 contendo os seguinte cdigo:
if (OpenDialog1->Execute()) { DataSource1->DataSet->Edit(); DBImage1->Picture->LoadFromFile(OpenDialog1->FileName);
}
49) Compile e teste a aplicao. Para carregar uma nova figura no campo DBImage basta dar um duplo-click sobre a mesma. Obs: Uma outra forma de carregar valores sobre um campo DBImage usando o ClipBoard (Sequncias de teclas Ctrl+V para inserir e Ctrl+C para copiar).
Deixando o grid Read-Only e chamando a janela de ediao
50) Transfira o formulrio J_Empregados da lista Auto-create forms para a lista Available forms (menu Project | Options).
51) Selecione o formulrio J_Main e neste o componente DBGrid1. No Object Inspector selecione sua propriedade Options e d um duplo-clique sobre a mesma para visualizar os seus itens. Configure os itens dgEditing para False, dgRowSelect e dgAlwaysShowSelection para True. Altere ainda a propriedade ReadOnly deste componente para True.
52) Utilize o menu File | Include Unit Hdr.para fazer uso do mdulo MAIN.CPP.
53) Crie um tratador de eventos para o evento OnDblClick do componente DBGrid1 e digite as seguintes linhas de cdigo:
J_Empregados = new TJ_Empregados(this); J_Empregados->DataSource1->DataSet = tbEmpregados; J_Empregados->ShowModal(); delete J_Empregados;
54) Selecione o formulrio J_Empregados e elimine o componente tbEmpregados. O DataSource1 ser ligado em tempo de execuo (linha 2 do item anterior) ao dataset do tipo TTable do formulrio J_Main denominado tbEmpregados. Obs: Neste caso temos 2 componentes datasource ligados ao mesmo dataset.
55) Altere a propriedade Name do boto btAbrirFechar do formulrio J_Main para btSair, a sua propriedade Caption para Sair e o cdigo do seu envento OnClick para:
Close();
56) Compile e teste a aplicao. Para visualizar e editar um determinado registro basta dar um duplo clique sobre o mesmo. Realize algumas operaes com os dados e observe as alteraes no LabelEstado do formulrio J_Main.
QUESTO No 8: Porque o estado do dataset tbEmpregados influenciado quando altera-se os componentes ligados ao datasource do formulrio J_Empregados?
Configurando o componente DBNavigator
O componente DBNavigator pode ser configurado para apresentar apenas alguns dos botes de navegao. Alm disso as mensagens apresentadas no Hint podem ser personalizadas.
57) Selecione o componente DBNavigator1 do formulrio J_Empregados. Selecione a sua propriedade VisibleButtons e d um duplo clique para visualizar os seus itens. Altere os itens nbEdit e nbRefresh para False.
58) Selecione a propriedade Hints do componente DBNavigator1. D um clique sobre o boto para ativar o editor de lista de strings. Digite os seguintes itens: Primeiro, Anterior, Prximo, ltimo, Adicionar, Eliminar, Editar, Gravar Alteraes, Cancelar Alteraes, Atualizar Informaes.
Obs: Veja que mesmo os botes Edit e Refresh no estando visveis no navegador, as mensagens de Hint devem ser obrigatoriamente especificadas para os mesmos, na ordem em que os botes apareceriam.
59) Compile e teste a aplicao. Chame a janela de edio dos registros (Janela Empregados) e posicione o mouse sobre os botes do navegador. As mensagens programadas iro aparecer.
Aplicao de BDE
O Borland Database Engine (BDE, apresentado anteriormente) oferece um utilitrio de configurao chamado BDE Administrator (BDEAdmin.EXE) que permite configurar os aliases utilizados e alterar o ambiente do Engine como: drivers instalados, configurao interna do sistema e formato de apresentao de data e hora e valores numricos. Essas informaes so gravadas em um arquivo de configurao, normalmente chamado IDAPI32.CFG. Puc - Campinas ProfJos Marcelo Traina Chacon 113 O BDE usa os aliases como nomes alternativos para data sources freqentemente utilizados, sejam estes locais ou remotos. Alm do BDE Administrator para criar e configurar aliases pode-se utilizar tambm o Database Explorer para realizar estas tarefas. Alternativamente pode-se utilizar o programa BDE Configuration Utility (BDECFG32.EXE) e o Database Desktop para manipular aliases. No entanto, o seu uso com verses mais novas do C++ Builder no aconselhvel. O Database Desktop (DBD) um utilitrio independente do C++ Builder, que pode ser utilizado para visualizar criar e modificar tabelas Paradox e dBase, alm de efetuar outras tarefas relacionadas administrao de banco de dados. Pode-se tambm realizar operaes restritas em outros bancos de dados, como Oracle, Interbase e outros. Este no vem sendo atualizado junto com as novas verses do C++ Builder, e a sua utilizao deve ser descontinuada progressivamente, medida que outras ferramentas assumam as suas funes. O Database Explorer permite visualizar e manter bancos de dados (remotos ou locais, com restries), trabalhar com aliases do BDE e com metadados (tabelas, vises, etc., ou seja, dados sobre dados). Na verso Enterprise do C++ Builder o Database Explorer recebe o nome de SQL Explorer, porque tem a possibilidade de acessar bancos de dados SQL.
Exerccios
Definindo um novo alias
1) Crie um diretrio denominado Prat1. No interior deste crie um outro denominado Dados.
2) Chame o BDE Administrator atravs do menu Iniciar | Programas | Borland C++Builder 5 | BDE Administrator, cone . O BDE Administrator pode ser acessado tambm a partir do Painel de Controle do Windows.
3) A interface do BDE Administrator implementada com um componente TreeView, no estilo do Windows Explorer. Clique no sinal do cone para verificar os bancos de dados existentes.
4) Escolha no menu Object a opo New. Ser apresentada a caixa de dilogo New Database Alias. Mantenha o Database Driver Name como STANDARD (tabelas locais Paradox e dBase) que j o valor default e pressione o boto OK.
5) Substitua o nome STANDARD1 sugerido por Prat2. Na propriedade PATH do lado direito da janela digite o caminho onde sero armazenados os dados da prtica 2, ou seja o diretrio Dados criado no item 1. Ou procure o diretrio, clicando no boto . Por exemplo:
6) Escolha o menu Object | Apply (pressione OK na janela de confirmao) para salvar as novas configuraes. O novo alias est criado e salvo. Quando as alteraes so salvas a seta verde no novo alias some. Antes de fechar a aplicao d uma olhada geral na guia Configuration do utilitrio de administrao, para conhecer um pouco os drivers instalados e o que mais pode ser configurado no BDE. Em seguida feche o utilitrio.
Abrindo o DataBase Desktop e configurando o Working Directory
7) Com o alias criado, vamos realizar agora a criao das novas tabelas a serem utilizadas na nossa aplicao.
8) Chame o DataBase Desktop (Menu Iniciar | Programas | Borland C++Builder 5 | DataBase Desktop, cone , da barra de tarefas do Windows).
9) Com a aplicao aberta escolha o menu File | Working Directory e preencha a caixa de dilogo de acordo com a figura abaixo. No campo Alias escolha Prat2 e o campo Working Directory ser preenchido automaticamente !
Criaao da tabela de Empregados
Puc - Campinas ProfJos Marcelo Traina Chacon 115 10) Em seguida escolha o menu File | New | Table para criar uma nova tabela ou alternativamente clique com o boto da direita sobre o cone da SpeedBar e escolher a opo New. O tipo da tabela deve ser Paradox 7.0, que j o default. Preencha ento os campos de acordo com a figura a seguir.
Obs: Para especificar a chave primria da tabela (indicada por um asterisco na coluna Key dos campos que a compem) basta pressionar qualquer tecla com o cursor na coluna Key do campo.
11) Definidos os campos, vamos criar os ndices secundrios a serem utilizados como alternativas para a ordem de visualizao e consulta, que no aquela estabelecida pela chave primria Cod_Emp. Escolha no combobox Table properties a opo Secondary Indexes e em seguida clique sobre o boto . Ser aberta a caixa de dilogo para definio de ndices secundrios. Preencha-a de acordo com a figura abaixo e clique no boto Ok. D o nome idxNome para o ndice. Obs: Os ndices compostos por um nico campo e que sejam do tipo Case Sensitive no requisitam nome e assumem o prprio nome do campo.
12) Pressione no boto e escolha o nome emp.db para o arquivo que armazenar a tabela.
Criaao da tabela de Departamentos
13) Repita os passos 10 a 12 para criar a tabela de Departamentos.
14) Insira os campos apresentados na tabela abaixo:
Field Name Type Size Key Cod_Dep N * Descricao A 25 Gerente N Fone A 20
15) Crie um ndice secundrio denominado idxDescricao contendo o campo Descricao.
16) Salve a tabela com o nome depto.db.
Criaao das regras de integridade referencial
17) Abra a tabela de Departamentos (Depto.db). Clique no menu Table | Restructure ou no cone para realizar alteraes na estrutura da tabela. Escolha no combobox Table properties a opo Referencial Integrity e em seguida clique sobre o boto . Ser aberta a caixa de dilogo para definio das regras de integridade referencial para esta tabela. Preencha-a de acordo com a figura a seguir. Isto garantir que as atualizaes realizadas no campo Cod_Emp da tabela de empregados ir se refletir de forma automtica para a chave estrangeira Gerente da tabela de departamentos. A regra para deleo implcita e sempre proibitiva.
Puc - Campinas ProfJos Marcelo Traina Chacon 117
Clique sobre o boto OK para validar os dados, aparecer uma caixa de dilogo pedindo o nome para a regra de integridade referencial. Fornea o nome rGerente e clique em OK.
18) Clique no boto para salvar as alteraes. Feche a tabela Depto.db.
19) Abra a tabela Emp.db e crie uma regra de integridade referencial para a chave estrangeira Cod_Dep relacionando-a com a tabela Depto.db. Atribua o nome rDepto para esta regra. A caixa de dilogo de criao de regras de integridade referencial deve ser preenchida da seguinte forma:
20) Saia do Database Desktop.
Usando o Database Explorer
21) Abra o Database Explorer (no C++ Builder Client/Server se chama SQL Explorer) atravs do menu Database | Explore .
22) A interface do Explorer semelhante do BDE Administrator. Navegue no banco de dados Prat2 e verifique as tabelas que acabaram de ser criadas no Database Desktop.
23) Repare que, no lado direito da janela, alm de visualizar a definio das tabelas (guia Definition) pode-se manipular os seus dados, atravs da guia Data.
24) Abra o banco de dados DBDEMOS e consulte os dados da tabela ANIMALS.DBF. Repare que o navegador acima dos dados fica habilitado.
OBS.: O Database Explorer permite inserir, excluir e alterar dados em tabelas locais (Paradox e dBase), mas no permite criar novas tabelas ! No entanto, em bancos de dados SQL possvel criar tabelas e tambm outros meta-dados.