Você está na página 1de 121

Puc - Campinas

Informtica para Engenharia

Borland C++ Builder


Professor: Jos Marcelo Traina Chacon

Prof 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

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.

Prof Jos Marcelo Traina Chacon

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

Paleta de
Componentes

Object
Inspector

Formulrio
Editor de
Cdigo

Puc - Campinas

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.

Prof Jos Marcelo Traina Chacon

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.
Abrir
Unit

Salvar
Unit

Abrir
Projeto

Salvar
Tudo

Adicionar Arquivo
para Projeto

Novo
Projeto

Remover Arquivo
do Projeto
Ajuda

Ver Unit

Ver
Formulrio

Alterar
entre Unit e
Formulrio

Novo
Formulrio

Rodar

Pausa

Clique com o boto direito do mouse na barra de ferramentas e escolha


propriedades, voc poder personaliza-la de acordo com as suas necessidades.

Puc - Campinas

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

Prof Jos Marcelo Traina Chacon

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

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.
Componentes e suas pginas associadas

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

Prof Jos Marcelo Traina Chacon

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

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

Prof Jos Marcelo Traina Chacon

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
biMinimize

biHelp

biMaximize

biSystemMenu

Puc - Campinas

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

Prof Jos Marcelo Traina Chacon

11

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

Height Altura do formulrio em pontos


Width Largura do formulrio em pontos

Width
536

Heigth

218

Icon Escolhe uma icone para o programa

Prof Jos Marcelo Traina Chacon

13

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
1 Passo Criar um novo arquivo de cones.

2 Passo Desenhar uma nova cone.

3 Passo Salvar o novo arquivo de cone.


Left Distncia da Esquerda
Top Distncia do Topo
Top

Left

Name Nome do formulrio no programa. O name atribudo ao formulrio principal

Puc - Campinas

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

poScreenCente
r

Name

poDesigned

Visible Determina se o formulrio ir ficar visvel ou invisvel.


true visvel
false invisvel

true

false

WindowState Determina em que modo de exibio a tela ser mostrada.


WsMaximized Tela Maximizada
WsMinimized Tela Minimizada
WsNormal Tela Normal (Restaurada)

Prof Jos Marcelo Traina Chacon

15

wsMaximized

wsMinimized

wsNormal

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.

Puc - Campinas

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

Prof Jos Marcelo Traina Chacon

17

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

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!

Prof Jos Marcelo Traina Chacon

19

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

bsSingle

bsNon

CharCase Define o tipo de caracteres para a caixa de texto.


ecLowerCase Letras minsculas
ecNormal Letras minsculas e maisculas
ecUpperCase Letras maisculas

ecLowerCas

ecNormal

ecUpperCas

Puc - Campinas

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

true

false

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

Prof Jos Marcelo Traina Chacon

21

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

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
ESC ou
Clicar

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

ENTER ou
Clicar

Prof Jos Marcelo Traina Chacon

23

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

//-------------------------------------------------------------------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

Prof Jos Marcelo Traina Chacon

25

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

false

true

false

true

Eventos Aes de um componente


OnClick Usurio d um clique sobre os componentes botes de opo e caixas de
verificao.

Puc - Campinas

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.
Columns = 0

Columns = 3

Items Define uma lista inicial de opes na caixa de lista.

Prof Jos Marcelo Traina Chacon

27

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

Permite
uma
seleo

Permite
vrias
selees

Permite
uma
selees

Permite vrias
selees c/ CTRL
e SHIFT

Sorted Apresenta os itens em ordem alfabtica


true - apresenta em ordem alfabtica
false - apresenta na ordem editada no Itens

false

true

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

Puc - Campinas

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.

Prof Jos Marcelo Traina Chacon

29

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

Text Ir conter o texto digitado pelo usurio. Depende do Style escolhido pelo
usurio.
csDropDown

csSimple

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:

Prof Jos Marcelo Traina Chacon

31

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

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

Prof Jos Marcelo Traina Chacon

33

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

LargeChange - Incremento ou decremento da propriedade Position quando clica


sobre o curso da barra de rolagem

10

Clicar sobre o
curso

Max - Valor mximo para o deslocamento de uma barra de rolagem

Valor mximo 1000

Min - Valor mnimo para o deslocamento de uma barra de rolagem

Valor mnimo

Position Representa o valor corrente do deslocamento do cursor na barra de


rolagem

Posio atual 100

Posio atual 0

Prof Jos Marcelo Traina Chacon

35

SmallChance - Representa o incremento ou decremento ao clicar nos botes de


deslocamento

Clicar sobre o boto


de deslocamento

Eventos Aes de um componente


OnScroll Ao deslocar a barra de rolagem
OnChance Ao alterar a barra de rolagem

Programa Temperatura

Puc - Campinas

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

Prof Jos Marcelo Traina Chacon

37

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

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
Form1
MainMenu1

Propriedade
Caption
Name
Name

Menu Arquivo
Item
Propriedade
Arquivo
Caption
Name
Novo
Caption
Name
Abri
Caption
Name
Separador
Caption
Name
Salvar
Caption
Name
Salvar Como Caption
Name
Separador
Caption
Name
Impressora
Caption
Name
Configurar
Caption
Name
Imprimir
Caption
Name
Separador
Caption
Name
Sair
Caption
Name

Valor
Aplicativo Menu
FrmAplicativo
MnuAplicativo
Valor
&Arquivo
MnuArq
&Novo
MnuArqNovo
&Abrir
MnuArqAbrir
MnuArqSep1
&Salvar
MnuArqSalvar
Salvar &Como
MnuArqSalvarComo
MnuArqSep2
&Impressora
MnuArqImp
&Configurar
MnuArqImpCfg
&Imprimir
MnuArqImpPrn
MnuArqSep3
Sa&ir
MnuArqSair

Prof Jos Marcelo Traina Chacon

39

Submenu

Menu Editar
Item
Editar
Copiar
Colar
Separador
Selecionar
Menu Ajuda
Item
Ajuda
Contedo
Separador
Sobre

Propriedade
Caption
Name
Caption
Name
Caption
Name
Caption
Name
Caption
Name

Valor
&Editar
MnuEdt
&Copiar
MnuEdtCopiar
C&olar
MnuEdtColar
MnuEdtSep1
&Selecionar
MnuEdtSelecionar

Propriedade
Caption
Name
Caption
Name
Caption
Name
Caption
Name

Valor
A&juda
MnuAju
&Contedo e Indice
MnuAjuConteudo
MnuAjuSep1
&Sobre o aplicativo
MnuAjuSobre

Puc - Campinas

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.

Prof Jos Marcelo Traina Chacon

41

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

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.

Prof Jos Marcelo Traina Chacon

43

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

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.

Prof Jos Marcelo Traina Chacon

45

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

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.

Prof Jos Marcelo Traina Chacon

47

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

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.

Prof Jos Marcelo Traina Chacon

49

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

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.

Prof Jos Marcelo Traina Chacon

51

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

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

Prof Jos Marcelo Traina Chacon

53

Puc - Campinas

//-------------------------------------------------------------------#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;

Prof Jos Marcelo Traina Chacon

55

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

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

Prof Jos Marcelo Traina Chacon

57

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

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

Prof Jos Marcelo Traina Chacon

59

Programa Ordena Nmeros

Puc - Campinas

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

Prof Jos Marcelo Traina Chacon

61

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

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.4x1038 a 3.4x1038

double

-3.4x10308 a 3.4x10308

Tipos de Dados Caracteres:


Os tipos de dados caracteres so seqncia contendo letras, nmeros e smbolos
especiais. So
TIPO

FAIXA

AnsiString

Equivale a 231 caracteres

WideString

Equivale a 230 caracteres

Prof Jos Marcelo Traina Chacon

63

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

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

Prof Jos Marcelo Traina Chacon

65

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

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

Prof Jos Marcelo Traina Chacon

67

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

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;

Prof Jos Marcelo Traina Chacon

69

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

Tabelas:
&&

||

Ex.:

P && Q
A || B

!C

Prof Jos Marcelo Traina Chacon

71

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

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

Prof Jos Marcelo Traina Chacon

73

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

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:

Prof Jos Marcelo Traina Chacon

75

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

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

Prof Jos Marcelo Traina Chacon

77

case 5
case 6
case 7
case 8
case 9
case 10
case 11
case 12
default

:
:
:
:
:
:
:
:
:

Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text
Edit2->Text

=
=
=
=
=
=
=
=
=

"Maio";
"Junho";
"Julho";
"Agosto";
"Setembro";
"Outubro";
"Novembro";
"Dezembro";
"Ms invlido";

break;
break;
break;
break;
break;
break;
break;
break;
break;

}
Edit1->SetFocus();
}
//-------------------------------------------------------------------- ------

Puc - Campinas

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

Inicializao

; i++)

Incremento

Enquanto

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

Prof Jos Marcelo Traina Chacon

79

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

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)

Prof Jos Marcelo Traina Chacon

81

: 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

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

Prof Jos Marcelo Traina Chacon

83

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

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

Prof Jos Marcelo Traina Chacon

85

------

------

------

------

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

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

Prof Jos Marcelo Traina Chacon

87

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

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 = "";

Prof Jos Marcelo Traina Chacon

89

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

=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=
=

IntToStr(B[0][0]);
IntToStr(B[0][1]);
IntToStr(B[0][2]);
IntToStr(B[0][3]);
IntToStr(B[0][4]);
IntToStr(B[1][0]);
IntToStr(B[1][1]);
IntToStr(B[1][2]);
IntToStr(B[1][3]);
IntToStr(B[1][4]);
IntToStr(B[2][0]);
IntToStr(B[2][1]);
IntToStr(B[2][2]);
IntToStr(B[2][3]);
IntToStr(B[2][4]);
IntToStr(B[3][0]);
IntToStr(B[3][1]);
IntToStr(B[3][2]);
IntToStr(B[3][3]);
IntToStr(B[3][4]);

Puc - Campinas

//-------------------------------------------------------------------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++)

Prof Jos Marcelo Traina Chacon

91

------

------

------

------

------

------

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

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:

Prof Jos Marcelo Traina Chacon

93

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

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)

Prof Jos Marcelo Traina Chacon

95

------

------

------

------

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

Puc - Campinas

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:

Prof Jos Marcelo Traina Chacon

97

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

Abre um arquivo-texto para leitura

Cria um arquivo-texto para escrita

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

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

Prof Jos Marcelo Traina Chacon

99

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

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

Prof Jos Marcelo Traina Chacon

101

Bibliografia
1

MATEUS, Csar Augusto, C++ Builder 5 - Guia Prtico, So Paulo, SP,


Editora rica, 2000.

MANZANO, Jos Augusto Navarro Garcia, Estudo Dirigido de C++ Builder,


So Paulo, SP, Editora rica, 2003.

MIZRAHI, Victorine Viviane. Treinamento em Linguagem C++. So Paulo.


Makron Books do Brasil Editora Ltda.

BERRY, John. Programando em C++. So Paulo. Makron Books do Brasil


Editora Ltda.

SCHILDT, Herbert. Linguagem C Guia Prtico e Interativo. So Paulo.


Makron Books do Brasil Editora Ltda.

SCHILDT, Herbert. Linguagem C Completo e total. So Paulo. Makron


Books do Brasil Editora Ltda.

ELLIS, Margaret A., Stroustrup Bjarne. C++ Manual de Referncia


Comentado. Rio de Janeiro. Editora Campus Ltda.

DAVIS, Stephen R. C++ Para Leigos. So Paulo. Berkeley.

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

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:

Prof Jos Marcelo Traina Chacon

103

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

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, ligamse 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

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.

Prof Jos Marcelo Traina Chacon

105

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.

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

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.

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.

Prof Jos Marcelo Traina Chacon

107

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

"

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

#$%&'

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

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.

Prof Jos Marcelo Traina Chacon

109

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.

da pgina Data Controls da


42) Inclua um componente DBNavigator (cone
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

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).
+

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).
,

-&

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:

Prof Jos Marcelo Traina Chacon

111

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?
( )

"*

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

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
)

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
os bancos de dados existentes.

do cone

para verificar

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:

Prof Jos Marcelo Traina Chacon

113

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

0 /

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 !

Puc - Campinas

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.

Prof Jos Marcelo Traina Chacon

115

12) Pressione no boto


armazenar a
tabela.

e escolha o nome emp.db para o arquivo que

(
13) Repita os passos 10 a 12 para criar a tabela de Departamentos.
14) Insira os campos apresentados na tabela abaixo:
Field Name
Cod_Dep
Descricao
Gerente
Fone

Type Size
N
A
N
A

Key
*
25
20

15) Crie um ndice secundrio denominado idxDescricao contendo o campo


Descricao.
16) Salve a tabela com o nome depto.db.
(

17) Abra a tabela de Departamentos (Depto.db). Clique no menu Table |


para realizar alteraes na estrutura da tabela.
Restructure ou no cone
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

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.


1

Prof Jos Marcelo Traina Chacon

117

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

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

Prof Jos Marcelo Traina Chacon

119

Você também pode gostar