Você está na página 1de 121

Puc - Campinas

ProfJos Marcelo Traina Chacon



Informtica para Engenharia























Borland C++ Builder


Professor: Jos Marcelo Traina Chacon



Sumrio


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.

wsMaximized wsMinimized
wsNormal
Puc - Campinas
ProfJos Marcelo Traina Chacon
17



Rtulo






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);

//Calcula as temperaturas
tkel = tcel + 273;
tfah = (((tcel*9)/5)+32);

//Mostra na tela os valores calculados
EdtKel->Text = tkel;
EdtFah->Text = tfah;
}

//--------------------------------------------------------------------
void __fastcall TForm1::BtnFimClick(TObject *Sender)
{
//Fecha o programa
Close();
}

//--------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Inicializa as temperaturas
BtnConvClick (Owner);
}
//--------------------------------------------------------------------




Converses de tipo

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.

true false true false
Puc - Campinas
ProfJos Marcelo Traina Chacon
27



Caixas de listas






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);
}
//--------------------------------------------------------------------


void __fastcall TFrmUsuarios::EdtUsuariosChange(TObject *Sender)
{
if(EdtUsuarios->Text!="")
BtnAdicionar->Enabled=true;
else
BtnAdicionar->Enabled=false;
}
//--------------------------------------------------------------------







Barra de rolagem






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

OnChange no ScrollBar1



//--------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UnitControleTemp.h"
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//--------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------

void __fastcall TForm1::ScrollBar1Change(TObject *Sender)
{
int num;
num=275-ScrollBar1->Position;
Edit1->Text= IntToStr(num)+" C";
ProgressBar1->Position=num;
if(num==-25)
{
LblMinimo->Visible=true;
}
else
{
LblMinimo->Visible=false;
}
if(num==300)
{
LblMaximo->Visible=true;
}
else
{
LblMaximo->Visible=false;
}
}
//--------------------------------------------------------------------





Barra de menu






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.



Programa Mostra Imagem



//--------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmTemp *FrmTemp;
//--------------------------------------------------------------------
__fastcall TFrmTemp::TFrmTemp(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------
void __fastcall TFrmTemp::FileListBox1Click(TObject *Sender)
{
//Nome do Arquivo
AnsiString nome;

//Mostra nome
nome=FileListBox1->FileName;

//Carrega o Arquivo
ImgMostrar->Picture->LoadFromFile(nome);
}
//--------------------------------------------------------------------
void __fastcall TFrmTemp::DirectoryListBox1Change(TObject *Sender)
{
//Atualiza a Lista de Arquivos
FileListBox1->Directory=DirectoryListBox1->Directory;
}
//--------------------------------------------------------------------
Puc - Campinas
ProfJos Marcelo Traina Chacon
53



Temporizador






Temporizador (Timer) so componentes que permitem executar uma tarefa em
intervalos de tempo pr determinados.

O intervalo de tempo no temporizador contado em milissegundos.


Propriedades Caractersticas de um componente


Interval Tempo entre um disparo e outro.


Eventos Aes de um componente

OnTimer Seqncia de comandos a ser realizados no intervalo de tempo
determinado no temporizados
uma tecla sobre os componentes listados.




Programa Animao




Puc - Campinas
ProfJos Marcelo Traina Chacon
55
//--------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UnitAnimacao.h"
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
// Declarao de varivel
int seta=1;
char sentido='H';
//--------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TFor(Owner)
{
}
//--------------------------------------------------------------------

void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
if (sentido=='H')
{
switch(seta)
{
case 1 : Image1->Visible=true;
Image2->Visible=false;
Image3->Visible=false;
Image4->Visible=false;
Image5->Visible=false;
Image6->Visible=false;
break;
case 2 : Image1->Visible=false;
Image2->Visible=true;
Image3->Visible=false;
Image4->Visible=false;
Image5->Visible=false;
Image6->Visible=false;
break;
case 3 : Image1->Visible=false;
Image2->Visible=false;
Image3->Visible=true;
Image4->Visible=false;
Image5->Visible=false;
Image6->Visible=false;
break;
}
seta++;
if (seta >3)
seta=1;
}
else
{
switch(seta)
{
case 1 : Image1->Visible=false;
Image2->Visible=false;
Image3->Visible=false;
Image4->Visible=true;
Image5->Visible=false;
Image6->Visible=false;
break;
case 2 : Image1->Visible=false;

Image2->Visible=false;
Image3->Visible=false;
Image4->Visible=false;
Image5->Visible=true;
Image6->Visible=false;
break;
case 3 : Image1->Visible=false;
Image2->Visible=false;
Image3->Visible=false;
Image4->Visible=false;
Image5->Visible=false;
Image6->Visible=true;
break;
} // fim switch case
seta++;
if (seta>3)
seta=1;
}

}
//--------------------------------------------------------------------
void __fastcall TForm1::ScrollBar1Scroll(TObject *Sender,
TScrollCode ScrollCode, int &ScrollPos)
{
Timer1->Interval=1001-ScrollBar1->Position;
ProgressBar1->Position=ScrollBar1->Position;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
sentido='H';
seta=1;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
sentido='A';
seta=4;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
Timer1->Interval=0;
ScrollBar1->Position=0;
ProgressBar1->Position=0;
}
//--------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
Close();
}
//--------------------------------------------------------------------
Puc - Campinas
ProfJos Marcelo Traina Chacon
57



Caixas de Dilogo Comuns






Caixas de Dilogo Comuns (Dialogs) so componentes que permitem abrir caixas
de dilogos comuns do windows.


Substituir
Localizar
Configurar Impressora
Imprimir
Cores
Fontes
Salvar Imagem
Abrir Imagem
Salvar como...
Abrir



Programa Fontes e Cores

//--------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "UnitFontesCores.h"
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TFrmFonCor *FrmFonCor;
//--------------------------------------------------------------------
__fastcall TFrmFonCor::TFrmFonCor(TComponent* Owner)
: TForm(Owner)
{
}
//--------------------------------------------------------------------
void __fastcall TFrmFonCor::BtnFonteClick(TObject *Sender)
{
//Carrega a caixa de dilogo fonte
if(DlgFonte->Execute())
{
LblMens->Font=DlgFonte->Font;
}
}
//--------------------------------------------------------------------
void __fastcall TFrmFonCor::BtnCorClick(TObject *Sender)
{
//Carrega a caixa de dilogo cor
if(DlgCor->Execute())
{
LblMens->Color=DlgCor->Color;
}
}
//--------------------------------------------------------------------
void __fastcall TFrmFonCor::BtnSairClick(TObject *Sender)
{
if(MessageDlg("Deseja mesmo terminar?",mtConfirmation,
TMsgDlgButtons()<<mbYes << mbNo, 0)==mrYes)
Close(); // termina o programa
}
//--------------------------------------------------------------------




Puc - Campinas
ProfJos Marcelo Traina Chacon
59



Painel






Painel (Panel) so componentes que permitem ao usurio criar guias visuais na
criao de painis de controle.

Segue uma lista das principais propriedades de um Painel.

Propriedades Caractersticas de um componente


BevelInner Define estilo de efeito tridimensional interno do painel

BevelOuter Define estilo de efeito tridimensional exterior do painel

BevelWidth Define a espessura do efeito tridimensional do painel

Programa Ordena Nmeros







Puc - Campinas
ProfJos Marcelo Traina Chacon
61
//--------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#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

//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Label3->Caption = Edit1->Text + " " + Edit2->Text;
}
//-------------------------------------------------------------------- ------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
Edit1->Text = "";
Edit2->Text = "";
Label3->Caption = "";
Edit1->SetFocus();
}
//-------------------------------------------------------------------- ------


Aplicao com Tipo de Dado Inteiro

O exemplo a seguir soma os valores de dois nmeros inteiros.

//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------

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.

//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
float HT, VH, PD, TD, SB, SL;
AnsiString FORMATO;
HT = StrToFloat(EditHT->Text);
VH = StrToFloat(EditVH->Text);
PD = StrToFloat(EditPD->Text);
SB = HT * VH;
TD = SB * (PD/100);
SL = SB - TD;
FORMATO = FormatFloat("#,##0.00;(#,##0.00);ZERADO", SL);
Label4->Caption = FORMATO;
}
//-------------------------------------------------------------------- ------





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

Puc - Campinas
ProfJos Marcelo Traina Chacon
71
Tabelas:
&& || !
0 0 0 0 0 0 0 1
0 1 0 0 1 1 1 0
1 0 0 1 0 1
1 1 1

1 1 1


Ex.: P && Q
A || B !C



Precedncia entre operadores

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.

A estrutura condicional simples representada por:

if (Expresso teste)
Instruo;

ou
if (Expresso teste)
{
Instruo;
:
Instruo N;
}








Exemplo:

//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------

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();
}
//-------------------------------------------------------------------- ------



Puc - Campinas
ProfJos Marcelo Traina Chacon
75
Estrutura Condicional Composta

Executa uma seqncia de comandos se a condio for verdadeira, e outra seqncia de comandos se for
falsa, e representado por:

if (Expresso teste)
Instruo;
else
Instruo;

ou
if (Expresso teste)
{
Instruo;
:
Instruo N;
}
else
{
Instruo;
:
Instruo N;
}

Exemplo:



//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
float A, B, C;
A = StrToFloat(Edit1->Text);
B = StrToFloat(Edit2->Text);
C = StrToFloat(Edit3->Text);
if (A<B+C && B<A+C && C<A+B)
if (A==B && B==C)
ShowMessage("Tringulo Equiltero");
else
if (A==B || A==C || C==B)
ShowMessage("Tringulo Issceles");
else
ShowMessage("Tringulo Escaleno");
else
ShowMessage("Os valores fornecidos no formam um tringulo");
Edit1->SetFocus();
}
//-------------------------------------------------------------------- ------

Comandos Seletivos


O comando switch um seletor de opes, executando apenas a opo que for
igual expresso.


A forma geral do comando switch :

switch (varivel ou constante)
{
case constante1:
Instruo;
:
Instruo N;
break;
case constante2:
Instruo;
Puc - Campinas
ProfJos Marcelo Traina Chacon
77
:
Instruo N;
break;
case constante3:
Instruo;
:
Instruo N;
break;
default:
Instruo;
:
Instruo N;
}

Exemplo:


//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------


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;
}

Inicializao Enquanto Incremento

Exemplo:

//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------

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;
}

Exemplo:



//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int N, I, R;
AnsiString N1, I1, R1;
ListBox1->Items->Clear();
N = StrToInt(Edit1->Text);
I = 1;
while (I <= 10)
{
R = N * I;
N1 = IntToStr(N);
I1 = IntToStr(I);
R1 = IntToStr(R);
ListBox1->Items->Add(N1 + " X " + I1 + " = " + R1);
I++;
}
Edit1->SetFocus();
}
//-------------------------------------------------------------------- ------



Estrutura de Repetio com Interrupo no Final

A condio de interrupo testada aps a execuo da seqncia de comandos, e executar pelo menos
uma vez esta seqncia de comandos. representada por:

do
{
Instruo;
:
Instruo N;
} while (teste);


Puc - Campinas
ProfJos Marcelo Traina Chacon
83
Exemplo:

//-------------------------------------------------------------------- -----
#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- -----
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- -----
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- -----

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

Puc - Campinas
ProfJos Marcelo Traina Chacon
85
Exemplo de Funes

A estrutura bsica das funes em C++ so apresentadas abaixo:


//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#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.

Int mes01, mes02, mes03,
mes04, mes05, mes06,
mes07, mes08, mes09,
mes10, mes11, mes12 ;

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.

//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------

void __fastcall TForm1::Button1Click(TObject *Sender)
{

float MD[8];
float SOMA = 0, MEDIA;
int I;
AnsiString FORMATO;
MD[0] = StrToFloat(Edit1->Text);
MD[1] = StrToFloat(Edit2->Text);
MD[2] = StrToFloat(Edit3->Text);
MD[3] = StrToFloat(Edit4->Text);
MD[4] = StrToFloat(Edit5->Text);
MD[5] = StrToFloat(Edit6->Text);
MD[6] = StrToFloat(Edit7->Text);
MD[7] = StrToFloat(Edit8->Text);
for (I = 0; I <= 7; I++)
SOMA = SOMA + MD[I];
MEDIA = SOMA / 8;
FORMATO = FormatFloat("0.00", MEDIA);
Label3->Caption = FORMATO;
Edit1->SetFocus();
}
//-------------------------------------------------------------------- ------


Matriz Multidimensional

So as variveis que utilizam mais que um ndice para a definio da posio de seus
elementos.

A dimenso da matriz em computao conceituada diferente da matemtica.

Um vetor em matemtica pode possuir n dimenses, enquanto em computao ele
possui apenas uma dimenso.

A declarao da matriz multidimensional feita:
int notas [5][4]; // [5] => nmero do aluno, [4] => nmero da classe.

Puc - Campinas
ProfJos Marcelo Traina Chacon
89
Ex: Programa de matriz multidimensional.




//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
int A[4][5], B[4][5];
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------
void Limpa()
{
Form1->Edit1->Text = "";
Form1->Edit2->Text = "";
Form1->Edit3->Text = "";
Form1->Edit4->Text = "";
Form1->Edit5->Text = "";
Form1->Edit6->Text = "";
Form1->Edit7->Text = "";
Form1->Edit8->Text = "";
Form1->Edit9->Text = "";
Form1->Edit10->Text = "";
Form1->Edit11->Text = "";
Form1->Edit12->Text = "";
Form1->Edit13->Text = "";
Form1->Edit14->Text = "";
Form1->Edit15->Text = "";
Form1->Edit16->Text = "";
Form1->Edit17->Text = "";
Form1->Edit18->Text = "";
Form1->Edit19->Text = "";
Form1->Edit20->Text = "";
Form1->Edit21->Text = "";
Form1->Edit22->Text = "";

Form1->Edit23->Text = "";
Form1->Edit24->Text = "";
Form1->Edit25->Text = "";
Form1->Edit26->Text = "";
Form1->Edit27->Text = "";
Form1->Edit28->Text = "";
Form1->Edit29->Text = "";
Form1->Edit30->Text = "";
Form1->Edit31->Text = "";
Form1->Edit32->Text = "";
Form1->Edit33->Text = "";
Form1->Edit34->Text = "";
Form1->Edit35->Text = "";
Form1->Edit36->Text = "";
Form1->Edit37->Text = "";
Form1->Edit38->Text = "";
Form1->Edit39->Text = "";
Form1->Edit40->Text = "";
Form1->Edit1->SetFocus();
return;
}
//-------------------------------------------------------------------- ------

void Entrada()
{
A[0][0] = StrToInt(Form1->Edit1->Text);
A[0][1] = StrToInt(Form1->Edit2->Text);
A[0][2] = StrToInt(Form1->Edit3->Text);
A[0][3] = StrToInt(Form1->Edit4->Text);
A[0][4] = StrToInt(Form1->Edit5->Text);
A[1][0] = StrToInt(Form1->Edit6->Text);
A[1][1] = StrToInt(Form1->Edit7->Text);
A[1][2] = StrToInt(Form1->Edit8->Text);
A[1][3] = StrToInt(Form1->Edit9->Text);
A[1][4] = StrToInt(Form1->Edit10->Text);
A[2][0] = StrToInt(Form1->Edit11->Text);
A[2][1] = StrToInt(Form1->Edit12->Text);
A[2][2] = StrToInt(Form1->Edit13->Text);
A[2][3] = StrToInt(Form1->Edit14->Text);
A[2][4] = StrToInt(Form1->Edit15->Text);
A[3][0] = StrToInt(Form1->Edit16->Text);
A[3][1] = StrToInt(Form1->Edit17->Text);
A[3][2] = StrToInt(Form1->Edit18->Text);
A[3][3] = StrToInt(Form1->Edit19->Text);
A[3][4] = StrToInt(Form1->Edit20->Text);
}
//-------------------------------------------------------------------- ------

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];


Ex:

//-------------------------------------------------------------------- ------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
struct CadAluno
{
AnsiString NOME;
float NOTA[4];
float MEDIA;
};

struct CadAluno ALUNO[8];
int I;
//-------------------------------------------------------------------- ------

__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->Label7->Caption = "";
Form1->Edit1->SetFocus();
}

void Limpar()
{
int J, X;
for (J = 0; J <= 7; J++)
{
ALUNO[J].NOME = "";
for (X = 0; X <= 3; X++);
ALUNO[J].NOTA[X] = 0;
ALUNO[J].MEDIA = 0;
}
LimpaTela();

/* Inicializa contador de registro */

I = 0;
}

void __fastcall TForm1::FormShow(TObject *Sender)
{
Limpar();
}
//-------------------------------------------------------------------- ------

int ExibeRegistro(int POSICAOATUAL)
{
Form1->Edit1->Text = ALUNO[POSICAOATUAL].NOME;
Form1->Edit2->Text = FormatFloat("#0.00", ALUNO[POSICAOATUAL].NOTA[0]);
Form1->Edit3->Text = FormatFloat("#0.00", ALUNO[POSICAOATUAL].NOTA[1]);
Form1->Edit4->Text = FormatFloat("#0.00", ALUNO[POSICAOATUAL].NOTA[2]);
Form1->Edit5->Text = FormatFloat("#0.00", ALUNO[POSICAOATUAL].NOTA[3]);
Form1->Label7->Caption = FormatFloat("#0.00", ALUNO[POSICAOATUAL].MEDIA);
Form1->Edit1->SetFocus();
Puc - Campinas
ProfJos Marcelo Traina Chacon
95
return(0);
}

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int CONTA;
float SOMA;
if (I <= 7 && ALUNO[I].NOME == "")
{
ALUNO[I].NOME = Edit1->Text;
ALUNO[I].NOTA[0] = StrToFloat(Edit2->Text);
ALUNO[I].NOTA[1] = StrToFloat(Edit3->Text);
ALUNO[I].NOTA[2] = StrToFloat(Edit4->Text);
ALUNO[I].NOTA[3] = StrToFloat(Edit5->Text);
SOMA = 0;
for (CONTA = 0; CONTA <= 3; CONTA++)
SOMA =+ ALUNO[I].NOTA[CONTA];
ALUNO[I].MEDIA = SOMA/4;
Label7->Caption = FormatFloat("#0.00", ALUNO[I].MEDIA);
I++; /* Conta registro */
LimpaTela();
}
else
{
LimpaTela();
if (I > 7)
ShowMessage("Memria cheia");
else
ShowMessage("Posio ocupada");
}
}
//-------------------------------------------------------------------- ------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
int J;
ALUNO[I].NOME = "";
for (J = 0; J <= 3; J++)
ALUNO[I].NOTA[J] = 0;
ALUNO[I].MEDIA = 0;
LimpaTela();
}
//-------------------------------------------------------------------- ------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
if (I < 7)
{
I++;
ExibeRegistro(I);
}
else
{
ShowMessage("Chegou no fim");
Edit1->SetFocus();
}
}
//-------------------------------------------------------------------- ------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
if (I > 0)
{
I--;
ExibeRegistro(I);
}
else
{
ShowMessage("Chegou no comeo");
Edit1->SetFocus();
}
}
//-------------------------------------------------------------------- ------
void __fastcall TForm1::Button5Click(TObject *Sender)

{
Limpar();
}
//-------------------------------------------------------------------- ------

Puc - Campinas
ProfJos Marcelo Traina Chacon
97



Arquivos

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:

tbEmpregados->Active = !tbEmpregados->Active;

if (tbEmpregados->Active) btAbreFecha->Caption = "Fechar";
Puc - Campinas
ProfJos Marcelo Traina Chacon
107
else btAbreFecha->Caption = "Abrir";

12) Compile e teste a aplicao.

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:

tbEmpregados->SetKey();
tbEmpregados->FieldByName("EmpNo")->AsString = editBusca->Text;

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.

Puc - Campinas
ProfJos Marcelo Traina Chacon
119
Exercicio Complementar

25) Crie uma aplicao usando o C++Builder, semelhante a Prtica 1, para acessar
as tabelas Emp.db e Depto.DB criadas nesta prtica.