Apostila CBUILDER
Apostila CBUILDER
Apostila CBUILDER
Introdução
Introdução
O C++ Builder da Borland é um ambiente visual, orientado a objetos que tem por
finalidade desenvolver aplicações rapidamente para o Windows 95/98/NT. Estas
aplicações podem ser de propósitos gerais ou cliente/servidor. Usando o C++ Builder,
você pode criar eficientes aplicações Windows com o mínimo de codificação manual.
Quando você inicia o Borland C++ Builder, você é imediatamente colocado com o
ambiente de programação visual. É com este ambiente que o Borland C++ Builder
disponibiliza todas as ferramentas que você necessita para criar, desenvolver, testar,
e debugar suas aplicações.
A melhor maneira se aprender é rodando o Borland C++ Builder. Você poderá rodar o
BCB da mesma maneira que roda qualquer aplicação 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 opção 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
Formulário
Editor de
Código
Puc - Campinas
Novo
Projeto Remover Arquivo
do Projeto
Ajuda
Ver Unit
Formulário
Componentes
Editor de Códigos
Você pode usar o Borland C++ Builder para criar aplicações de 32-bits de qualquer
tipo. Desde aplicações de propósitos gerais, até sofisticados programas de acesso a
banco de dados.
Puc - Campinas
Adicionando Componentes
Adicionando Componentes
Componentes são elementos que você usa para construir suas aplicações Borland
C++ Builder. Eles incluem todas as partes visíveis de sua aplicação tais como, box de
dialogo e botões; bem como as partes não visíveis enquanto a aplicação estiver
rodando, como os Timers.
Componentes e suas páginas associadas
Formulários e componentes tem muitos pontos em comum; você pode imaginar que
um formulário e um objeto que pode conter outros componentes.
O Borland C++ Builder inclui vários componentes que você pode usar na VCL
(Biblioteca de Componentes Visual). Verifique o Help VCL Reference para mais
detalhes dos componentes disponíveis. Você pode personalizar a biblioteca de
Formulários
biHelp biMaximize
Puc - Campinas
Enable – Ativar e Desativar formulário. Quando esta desativado, ele fica visível, mas
não responde a eventos até ser ativado.
• true – ativa o formulário
• false – desativa o formulário
Puc - Campinas
Width
536
Heigth
218
Left
Name – Nome do formulário no programa. O name atribuído ao formulário principal
Puc - Campinas
será utilizado pelo programa para a definição do nome do programa executável a ser
criado.
poScreenCente poDesigned
r
true false
Rótulo
Rótulos (Label) são objetos no qual você pode apresentar uma informação textual.
Font – Define características de padrão 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 – não aparecera o texto
Puc - Campinas
Hint – Texto que aparecerá quando o mouse for colocado sobre o componente.
Hide – Oculta um rótulo. Este método altera a propriedade visible do rótulo para false.
Show – Mostra um rótulo. Este método altera a propriedade visible do rótulo para
true.
Caixa de Texto (Edit) são objetos no qual você pode introduzir informação textual.
Podemos compará-lo a um comando de entrada.
bsSingle bsNon
true false
Botões de Comando
Cancel – Permite que a tecla ESC tenha a mesma função do clique do mouse
• true - a tecla ESC terá o mesmo efeito de um clique do mouse
• false – desativa a função da tecla ESC para o botão
ESC ou
Clicar
Default – Permite que a tecla ENTER tenha a mesma função do clique do mouse
• true - a tecla ENTER terá o mesmo efeito de um clique do mouse
• false – desativa a função da tecla ENTER para o botão
ENTER ou
Clicar
Focused – Este método retorna o valor true se o objeto estiver em foco, caso
contrário retorna false.
Programa Temperatura
//--------------------------------------------------------------------
void __fastcall TForm1::BtnConvClick(TObject *Sender)
{
//Declaração de Variáveis
int tcel, tkel, tfah;
AnsiString entrada;
//Calcula as temperaturas
tkel = tcel + 273;
tfah = (((tcel*9)/5)+32);
//--------------------------------------------------------------------
void __fastcall TForm1::BtnFimClick(TObject *Sender)
{
//Fecha o programa
Close();
}
//--------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
//Inicializa as temperaturas
BtnConvClick (Owner);
}
//--------------------------------------------------------------------
Conversões de tipo
Classe AnsiString
String para Int
• StrToInt
Monetário para String
• CurrToStr
Float para String
• FloatToStr
Inteiro para representação hexadecimal
• IntToHex
Caixas de listas
• Columns – Indica a quantidade de colunas que a caixa de lista irá ter. Utilizando
o valor padrão 0 a caixa de lista terá apenas uma coluna.
Columns = 0 Columns = 3
false true
csDropDown
csDropDownList
csOwnerDrawFixed
• csSimple
csOwnerDrawVariable
Puc - Campinas
• Text – Irá conter o texto digitado pelo usuário. Depende do Style escolhido pelo
usuário.
csDropDown
csSimple
OnChange no EdtUsuarios
//--------------------------------------------------------------------
void __fastcall TFrmUsuarios::BtnAdicionarClick(TObject *Sender)
{
/*-------------------------------------------
Adicionar Usuário
-------------------------------------------*/
//Verifica o tipo de Usuário
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="";
}
//--------------------------------------------------------------------
Remove Usuários
------------------*/
int num;
//Verifica o valor corrente da Caixa de Lista
num=LstUsuarios->ItemIndex;
//Remove o Usuário se existir
if (num!=1)
LstUsuarios->Items->Delete (num);
}
//--------------------------------------------------------------------
sbHorizontal
sbVertical
Puc - Campinas
Clicar sobre o
10 curso
Valor mínimo
Posição atual 0
Programa Temperatura
Puc - Campinas
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)
{
}
//--------------------------------------------------------------------
Ao clicar sobre o botão de reticências na propriedade items será aberta uma janela de
construção de menus.
Para inserir uma opção no menu digite um texto no local selecionado na janela de
construção de menus. As setas de movimentações ajudarão na escolha do local a ser
criada a opção do menu.
Para se criar um submenu apertar a tecla CTRL mais a seta para a direita ou utilizar o
popupmenu da janela de construção de menus (Creat Submenu).
Puc - Campinas
Passos:
Menu Arquivo
Item Propriedade Valor
Arquivo Caption &Arquivo
Name MnuArq
Novo Caption &Novo
Name MnuArqNovo
Abri Caption &Abrir
Name MnuArqAbrir
Separador Caption -
Name MnuArqSep1
Salvar Caption &Salvar
Name MnuArqSalvar
Salvar Como Caption Salvar &Como
Name MnuArqSalvarComo
Separador Caption -
Name MnuArqSep2
Impressora Caption &Impressora
Name MnuArqImp
Configurar Caption &Configurar
Name MnuArqImpCfg Submenu
Imprimir Caption &Imprimir
Name MnuArqImpPrn
Separador Caption -
Name MnuArqSep3
Sair Caption Sa&ir
Name MnuArqSair
Menu Ajuda
Item Propriedade Valor
Ajuda Caption A&juda
Name MnuAju
Conteúdo Caption &Conteúdo e Indice
Name MnuAjuConteudo
Separador Caption -
Name MnuAjuSep1
Sobre Caption &Sobre o aplicativo
Name MnuAjuSobre
Puc - Campinas
PopupMenu
PopupMenu – são componentes que dão ao usuário a opção de construir uma barra
de menu que aparecerá quando clicar com o botão direito do mouse sobre um objeto
assoado ao popupmenu.
Imagem
Clicar no botão OK
Formas
Lista de Arquivos,
Drivers e Diretórios
tcLowerCase tcUpperCase
arquivo.
false true
//--------------------------------------------------------------------
#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
Programa Animação
//--------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "UnitAnimacao.h"
//--------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
// Declaração de variável
int seta=1;
char sentido='H';
//--------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TFor(Owner)
{
}
//--------------------------------------------------------------------
}
//--------------------------------------------------------------------
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 Diálogo Comuns (Dialogs) – são componentes que permitem abrir caixas
de diálogos comuns do windows.
Substituir
Localizar
Configurar Impressora
Imprimir
Cores
Fontes
Salvar Imagem
Abrir Imagem
Salvar como...
Abrir
#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 diálogo fonte
if(DlgFonte->Execute())
{
LblMens->Font=DlgFonte->Font;
}
}
//--------------------------------------------------------------------
void __fastcall TFrmFonCor::BtnCorClick(TObject *Sender)
{
//Carrega a caixa de diálogo 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) – são componentes que permitem ao usuário criar guias visuais na
criação de painéis de controle.
//--------------------------------------------------------------------
#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)
{
//Declaração de matriz 5x1
int matnum[5];
int matcres[5];
int i,j,posmat;
//Leitura dos números
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 posições
posmat=0;
for(j=0;j<5;j++)
{
/*Compara todos os elemento
e calcula a posição na matriz resultado*/
if(matnum[i]>matnum[j])
posmat++;
}
//Armazena o elemento corrente na nova posição
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)
{
//Declaração de matriz 5x1
int matnum[5];
Itens Fundamentais
Tipos de Dados
O ambiente de programação C++ Builder trabalha com vários tipos de dados que
podem ser manipulados pelo programa.
TIPO FAIXA
int -32768 .. 32767
long int -2147483648 a 2147483647
unsigned int 0 a 65535
unsigned long int 0 a 4294967295
TIPO FAIXA
float -3.4x1038 a 3.4x1038
double -3.4x10308 a 3.4x10308
TIPO FAIXA
AnsiString Equivale a 231 caracteres
WideString Equivale a 230 caracteres
Os tipos de dados lógicos são representados pelas palavras true para verdadeiro e
false para falso.
Variáveis
Declaração de variáveis
Exemplo;
int A;
float B
AnsiString nome;
O nome das variáveis em C++ podem ter até 32 caracteres, sendo que as letras
maiúsculas e minúsculas são diferentes.
Comentários
Os comentários são utilizados para documentar o programa fonte, mas não fazem
parte do mesmo na compilação, pois serão substituído por espaços em branco.
Os comentários são feitos através dos símbolos // se o comentário for de uma linha
e através dos símbolos /* */ se for para um trecho do programa.
Ex:
//-------------------------------------------------------------------- ------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------
//-------------------------------------------------------------------- ------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------
//-------------------------------------------------------------------- ------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------
Ex:
int x;
x = 3;
ou
int x = 3;
Ex:
A +B *4
A * B * (C + (A + 5))
Puc - Campinas
+= , -= , *= , /= , %=
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;
OPERADOR RESULTADO
== igual a
!= diferente de
Ex.: A != B
C>B
A <= C
Operadores Lógicos
OPERADOR RESULTADO
&& conjunção
|| disjunção
! negação
Puc - Campinas
Tabelas:
&& || !
0 0 0 0 0 0 0 1
0 1 0 0 1 1 1 0
1 0 0 1 0 1
1 1 1 1 1 1
Ex.: P && Q
A || B !C
Operador Tipos
++ Incremento
-- Decremento
! Não Lógico
* Multiplicação
/ Divisão
% Módulo
+ Adição
- Subtração
> Maior
== Igual a
!= Diferente de
&& E lógico
|| Ou lógico
?: Condicional
= Atribuição
Estruturas Condicionais
Estruturas Condicionais
A estrutura condicional faz com que uns grupos de ações sejam realizados quando
uma determinada condição é satisfeita.
if (Expressão teste)
Instrução;
ou
if (Expressão teste)
{
Instrução;
:
Instrução N;
}
//-------------------------------------------------------------------- ------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------
Executa uma seqüência de comandos se a condição for verdadeira, e outra seqüência de comandos se for
falsa, e é representado por:
if (Expressão teste)
Instrução;
else
Instrução;
ou
if (Expressão teste)
{
Instrução;
:
Instrução N;
}
else
{
Instrução;
:
Instrução 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)
{
}
//-------------------------------------------------------------------- ------
Comandos Seletivos
:
Instrução N;
break;
case constante3:
Instrução;
:
Instrução N;
break;
default:
Instrução;
:
Instrução 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)
{
}
//-------------------------------------------------------------------- ------
Estruturas de Repetição
Estrutura de Repetição
//-------------------------------------------------------------------- ------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------
A condição de interrupção é testada no início, antes da seqüência de comandos, e se a condição não for
satisfeita não realizará a seqüência de comandos. É representada por:
Exemplo:
//-------------------------------------------------------------------- ------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
A condição de interrupção é testada após a execução da seqüência de comandos, e executará pelo menos
uma vez esta seqüência de comandos. É representada por:
do
{
Instrução;
:
Instrução 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)
{
}
//-------------------------------------------------------------------- -----
//-------------------------------------------------------------------- ----
Devem-se escrever funções para tarefas que repitam várias vezes no programa.
instrução_1;
instrução_2;
: :
instrução_N
onde:
Exemplo de Funções
//-------------------------------------------------------------------- ------
#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();
}
//-------------------------------------------------------------------- ------
Matriz Unidimensional
meses[5] = expressão;
//-------------------------------------------------------------------- ------
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-------------------------------------------------------------------- ------
Matriz Multidimensional
São as variáveis que utilizam mais que um índice para a definição da posição de seus
elementos.
//-------------------------------------------------------------------- ------
#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 = "";
void Entrada()
{
A[0][0] = StrToInt(Form1->Edit1->Text);
A[0][1] = StrToInt(Form1->Edit2->Text);
A[0][2] = StrToInt(Form1->Edit3->Text);
A[0][3] = StrToInt(Form1->Edit4->Text);
A[0][4] = StrToInt(Form1->Edit5->Text);
A[1][0] = StrToInt(Form1->Edit6->Text);
A[1][1] = StrToInt(Form1->Edit7->Text);
A[1][2] = StrToInt(Form1->Edit8->Text);
A[1][3] = StrToInt(Form1->Edit9->Text);
A[1][4] = StrToInt(Form1->Edit10->Text);
A[2][0] = StrToInt(Form1->Edit11->Text);
A[2][1] = StrToInt(Form1->Edit12->Text);
A[2][2] = StrToInt(Form1->Edit13->Text);
A[2][3] = StrToInt(Form1->Edit14->Text);
A[2][4] = StrToInt(Form1->Edit15->Text);
A[3][0] = StrToInt(Form1->Edit16->Text);
A[3][1] = StrToInt(Form1->Edit17->Text);
A[3][2] = StrToInt(Form1->Edit18->Text);
A[3][3] = StrToInt(Form1->Edit19->Text);
A[3][4] = StrToInt(Form1->Edit20->Text);
}
//-------------------------------------------------------------------- ------
void Saida()
{
Form1->Edit21->Text = IntToStr(B[0][0]);
Form1->Edit22->Text = IntToStr(B[0][1]);
Form1->Edit23->Text = IntToStr(B[0][2]);
Form1->Edit24->Text = IntToStr(B[0][3]);
Form1->Edit25->Text = IntToStr(B[0][4]);
Form1->Edit26->Text = IntToStr(B[1][0]);
Form1->Edit27->Text = IntToStr(B[1][1]);
Form1->Edit28->Text = IntToStr(B[1][2]);
Form1->Edit29->Text = IntToStr(B[1][3]);
Form1->Edit30->Text = IntToStr(B[1][4]);
Form1->Edit31->Text = IntToStr(B[2][0]);
Form1->Edit32->Text = IntToStr(B[2][1]);
Form1->Edit33->Text = IntToStr(B[2][2]);
Form1->Edit34->Text = IntToStr(B[2][3]);
Form1->Edit35->Text = IntToStr(B[2][4]);
Form1->Edit36->Text = IntToStr(B[3][0]);
Form1->Edit37->Text = IntToStr(B[3][1]);
Form1->Edit38->Text = IntToStr(B[3][2]);
Form1->Edit39->Text = IntToStr(B[3][3]);
Form1->Edit40->Text = IntToStr(B[3][4]);
}
Puc - Campinas
//-------------------------------------------------------------------- ------
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++)
Estruturas
Estrutura é um grupo de informações relativas a uma mesma entidade. Estas
informações podem ter características diferentes, como em cadastro onde temos o
nome, endereço, telefone, etc.
struct
struct registro
{
int num;
char nome[40];
char end[30];
char fone [15];
};
Ex:
#include <vcl.h>
#pragma hdrstop
#include "Unit1.h"
//-------------------------------------------------------------------- ------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//-------------------------------------------------------------------- ------
struct CadAluno
{
AnsiString NOME;
float NOTA[4];
float MEDIA;
};
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();
I = 0;
}
return(0);
}
Arquivos
Para armazenar informações em disco e recupera-las em seguida é necessário a
utilização das funções de arquivo.
Nome Função
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 específico
fprintf() Escreve uma informação no arquivo
fscanf() Lê uma informação 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 início
remove() Apaga um arquivo
fflush() Descarrega um arquivo
Tipos de Arquivos
Ponteiro de Arquivo
Todo Arquivo deverá possuir um ponteiro para direcionar as operações a serem realizadas.
Para escrever ou ler uma informação de um Arquivo, seu programa precisa usar o
ponteiro de arquivo:
Para utilizar uma variável ponteiro é necessário declara-la, como exemplo abaixo:
Abrindo um Arquivo
Modo Significado
r Abre um arquivo-texto para leitura
w Cria um arquivo-texto para escrita
a Anexa a um arquivo-texto
rb Abre um arquivo-binário para leitura
wb Cria um arquivo-binário para escrita
ab Anexa a um arquivo-binário
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-binário para leitura / escrita
w+b Cria um arquivo-binário para leitura / escrita
a+b Anexa ou cria um arquivo-binário para leitura / escrita
Exemplo :
FILE *fp;
fp = fopen(“c:\\arquivo.dat”,”w”);
Exemplo 2:
FILE *fp;
if ((fp = fopen(“c:\\arquivo.dat”,”w”))==NULL)
{
ShowMessage(“O arquivo não pode ser aberto”);
Close();
}
Fechando um arquivo
Todo arquivo aberto deverá ser fechado no final do programa, ou assim que a sua
utilização não se faça mais necessária.
Se o arquivo não for fechado poderá ocorrer perdas de dados, arquivos destruídos ou
problemas intermitentes na execução do programa.
A função fclose fecha um arquivo aberto, conforme exemplo abaixo:
fclose(fp);
Arquivo Binário
Arquivos binários – armazena uma seqüência de bytes, não ocorre nenhuma tradução de caracteres.
Exemplo de escrita em arquivo binário:
struct registro
{
int num;
char nome[30];
}aluno;
aluno.num=5;
aluno.nome=“João da Silva”;
FILE *arquivo;
arquivo = fopen(“a:\\dados.dat”,”wb”);
fwrite(&aluno, sizeof(aluno), 1, arquivo);
: : :
#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 não conseguir abrir arquivo de aluno para adicionar valores
if ((arquivo=fopen("C:\\TEMP\\ALUNO.DAT","ab"))==NULL)
{
ShowMessage("Não posso abrir arquivo de alunos");
}
else //senão
{
Puc - Campinas
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();
}
//-------------------------------------------------------------------- ------
1 MATEUS, César Augusto, C++ Builder 5 - Guia Prático, São Paulo, SP,
Editora Érica, 2000.
9 JAMSA, Kris. Salvo pelo... C++. Rio de Janeiro. Livros Técnicos e Científicos
Ltda.
10 BERGSMAN, Paul. Controlling the world with your PC. Eagle Rock,
Virginia. LLH Technology Publishing.
Banco de Dados
Introdução
Exercícios
8) Execute e teste a aplicação. Observe que os dados poderão ser alterados, mas
recomendamos que não se façam alterações, uma vez que estes dados são
utilizados por aplicações exemplo do C++ Builder.
switch (tbEmpregados->State) {
14) Pressione a tecla Esc para cancelar as alterações. Use a barra de rolagem do
grid para posicionar a tabela no último registro. Use a tecla Down (↓) para inserir um
novo registro.
15) Digite o número 147 no campo EmpNo e os dados do seu nome nos campos
FirstName e LastName. Mude de registro para confirmar as alterações (Post).
21) Compile e teste a aplicação. A busca é realizada pelo código, índice principal da
tabela. Digite o valor 10 na caixa de edição. Clique sobre o botão btPreparaBusca.
22) Clique sobre o botão btBusca. O registro foi localizado? Digite o valor 11 na caixa
de edição. Pressione os botões btPreparaBusca e btBusca. E agora o registro foi
localizado? Encerre a aplicação.
24) Recompile e teste a aplicação. Faça uma busca usando o valor 10.
! "
27) Compile e teste a aplicação. Digite um nome na caixa de edição começando com
r. O que acontece?
QUESTÃO No 6: Por que a busca agora foi realizada pelo nome? Qual a função do
método FindNearest? Ele condensa a função de quais outros métodos?
28) Digite o valor 146 na caixa de edição. Pressione o botão btPreparaBusca. O que
acontece?
QUESTÃO No 7: Qual a razão do erro? Por que não foi possível atribuir o valor 146
ao
campo EmpNo com o dataset no modo SetKey? Que campos podem ter valores
atribuídos no modo SetKey?
# #$%&'
30) No DataBase DeskTop Escolha o menu File | Open | Table… Na caixa de diálogo
Open Table, abra o combobox Alias (última linha) e escolha BCDEMOS. Selecione
Employee.db e clique no botão abrir.
31) Escolha o menu Table | Restructure… Com a caixa de diálogo aberta, use a
tecla Down (↓) para posicionar além 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 botão Save para validar as alterações. Feche a tabela Employee.db
(Clique duplo no menu de controle da sua janela) e feche o Database DeskTop.
( ) *
34) Crie um novo formulário. 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 diretório atual
para o diretório da Prática 1) para a Unit associada ao novo formulário criado.
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 código: Close();
+ ) $
49) Compile e teste a aplicação. 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 (Sequências de teclas Ctrl+V para inserir e Ctrl+C para copiar).
, -& .
52) Utilize o menu File | Include Unit Hdr….para fazer uso do módulo MAIN.CPP.
( ) "*
O componente DBNavigator pode ser configurado para apresentar apenas alguns dos
botões de navegação. Além disso as mensagens apresentadas no Hint podem ser
personalizadas.
Obs: Veja que mesmo os botões Edit e Refresh não estando visíveis no navegador,
as mensagens de Hint devem ser obrigatoriamente especificadas para os mesmos,
na ordem em que os botões apareceriam.
59) Compile e teste a aplicação. Chame a janela de edição dos registros (Janela
Empregados) e posicione o mouse sobre os botões do navegador. As mensagens
programadas irão aparecer.
Aplicação de BDE
O Borland Database Engine (BDE, apresentado anteriormente) oferece um
utilitário de configuração chamado BDE Administrator (BDEAdmin.EXE) que permite
configurar os aliases utilizados e alterar o ambiente do Engine como: drivers
instalados, configuração interna do sistema e formato de apresentação de data e hora
e valores numéricos. Essas informações são gravadas em um arquivo de
configuração, normalmente chamado IDAPI32.CFG.
Puc - Campinas
Exercícios
) *
4) Escolha no menu Object a opção New. Será apresentada a caixa de diálogo New
Database Alias. Mantenha o Database Driver Name como STANDARD (tabelas
locais Paradox e dBase) que já é o valor default e pressione o botão OK.
/ ) 0 /
7) Com o alias criado, vamos realizar agora a criação das novas tabelas a serem
utilizadas na nossa aplicação.
(
Puc - Campinas
10) Em seguida escolha o menu File | New | Table… para criar uma nova tabela ou
Obs: Para especificar a chave primária da tabela (indicada por um asterisco na coluna
Key dos campos que a compõem) basta pressionar qualquer tecla com o cursor na
coluna Key do campo.
11) Definidos os campos, vamos criar os índices secundários a serem utilizados como
alternativas para a ordem de visualização e consulta, que não aquela estabelecida
pela chave primária Cod_Emp. Escolha no combobox Table properties a opção
( )
clique sobre o botão . Será aberta a caixa de diálogo para definição das
regras de integridade referencial para esta tabela. Preencha-a de acordo com a figura
a seguir. Isto garantirá que as atualizações realizadas no campo Cod_Emp da tabela
de empregados irá se refletir de forma automática para a chave estrangeira Gerente
da tabela de departamentos. A regra para deleção é implícita e sempre proibitiva.
Puc - Campinas
Clique sobre o botão OK para validar os dados, aparecerá uma caixa de diálogo
pedindo o nome para a regra de integridade referencial. Forneça o nome rGerente e
clique em OK.
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 diálogo de criação de regras de integridade referencial
deve ser preenchida da seguinte forma:
23) Repare que, no lado direito da janela, além de visualizar a definição das tabelas
(guia Definition) pode-se manipular os seus dados, através da guia Data.
OBS.: O Database Explorer permite inserir, excluir e alterar dados em tabelas locais
(Paradox e dBase), mas não permite criar novas tabelas ! No entanto, em bancos de
dados SQL é possível criar tabelas e também outros meta-dados.
Puc - Campinas
2 (
25) Crie uma aplicação usando o C++Builder, semelhante a Prática 1, para acessar
as tabelas Emp.db e Depto.DB criadas nesta prática.