7  Principais Componentes do C++ Builder

7.1  Programação Orientada a Objetos

7.1.1. Objetos e Classes

Todos os elementos de uma interface (botões, caixas de texto, menus, barras de rolagem, imagens, etc) são considerados objetos. Estes objetos podem ser visuais como os botões, por exemplo, ou não visuais como um temporizador (timer).

O C++ Builder e outros ambientes integrados de desenvolvimento também se referem a estes objetos como componentes.

No C++ Builder cada objeto pertence a uma determinada classe. Por exemplo, os botões são da classe TButton, as caixas de texto são da TEdit, etc.

7.1.2. Propriedades

As propriedades são utilizadas para diferenciar objetos de uma mesma classe. Podemos ter, por exemplo, três botões (objetos da classe TButton) cada um com suas características próprias: comprimento, altura, rótulo, etc.

7.1.3. Eventos

Cada objeto está sujeito a uma série de ações do usuário, que chamamos de eventos. Estes eventos, como um clique ou um duplo-clique, por exemplo, devem ser programados para que a aplicação possa responder às ações do usuário.

Os eventos também podem ser gerados pela própria aplicação, ou até mesmo pelo Windows.

7.1.4. Métodos

Os métodos são procedimentos que já estão previamente definidos e incorporados a cada objeto. Por exemplo, para limpar o conteúdo de uma caixa de texto, podemos utilizar o método Clear.

7.2  Propriedades mais comuns

A citação das propriedades que se seguem tem mais um caráter ilustrativo do que informativo. Não se tem a intenção de descrever todas as propriedades de todos os componentes. Para saber mais sobre uma propriedade:

·        clique em uma propriedade no Inspetor de Objetos (Object Inspector);

·        pressione a tecla F1.

 7.2.1. Name

Os objetos possuem muitas propriedades comuns. Dentre elas a mais importante é a Name (nome, conforme Figura 7-1). Todo objeto em um projeto possui uma propriedade Name e o valor desta deve ser único. Colocar nomes significativos não apenas faz seu código mais legível como também previne conflitos futuros com outros nomes.

Figura 7-1: Propriedade Name de um objeto dA CLASSE TLabel

 

Os nomes dos objetos devem seguir a regra de formação de um identificador em Builder. Se você tentar colocar um identificador não consistente com a regra, o Builder acusará tal falta.

7.2.2. Caption e Text

A propriedade Caption (título) é uma seqüência de caracteres (String) associada ao objeto com o objetivo de identificá-lo ao usuário. Não é necessário que seja um identificador da linguagem e é usado, em termos gerais, sem sofrer modificações em tempo de execução.

Para sublinhar um caractere em um título que rotula um objeto, inclua um & (e comercial) antes do caractere. Este tipo de caractere é chamado de caractere de atalho. O usuário pode selecionar o objeto pressionando a tecla Alt enquanto digita o caractere de atalho. Para mostrar um & em um título, utilize &&.

A propriedade Text (texto) também é uma seqüência de caracteres associada ao objeto e que é usada para se ler ou se especificar um novo valor para esta. Não é necessário que seja um identificador da linguagem e é usado, em termos gerais, sofrendo modificações em tempo de execução.

Por padrão, as propriedades Caption e Text são colocadas, pelo IDE, com o mesmo valor da propriedade Name.

Nem todos os objetos possuem as propriedades Caption e Text. Normalmente Caixas de Edição são dotadas da propriedade Text, enquanto objetos com Textos de Mensagem usam a propriedade Caption.

 

.

.

.

 

Ex 2) Elaborar um Programa C++ Builder para calcular e exibir a Média Aritmética de dois valores quaisquer.

Solução 1:

 void __fastcall TForm1::Button1Click(TObject *Sender)

{

  int n1, n2;

  double m;

  n1 = StrToInt(Edit1->Text);

  n2 = StrToInt (Edit2->Text);

  m = (n1+n2)/2;        

  Edit3->Text = FloatToStr(m);

}

 

Obs.: Esta não é a solução adequada pois estamos dividindo uma soma de inteiros por um valor também inteiro. O resultado deste tipo de operação é o inteiro da divisão, isto é, se dividirmos 10 por 4 vamos obter 2 ao invés de 2.5.

 

Solução 2:

 

void __fastcall TForm1::Button1Click(TObject *Sender)

{

  int n1, n2;

  double m;

  n1 = StrToInt (Edit1->Text);

  n2 = StrToInt (Edit2->Text);

  m = (n1+n2)/2.0;        

  Edit3->Text = FloatToStr(m);

}

 

Obs.: Para evitar a divisão inteira podemos, por exemplo, escrever o denominador da fração como 2.0 ao invés de 2, para indicar que se trata de uma divisão com ponto flutuante.

Solução 3:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

  int n1, n2;

  double m;

  n1 = StrToInt (Edit1->Text);

  n2 = StrToInt (Edit2->Text);

  m = float(n1+n2)/2;        

  Edit3->Text = FloatToStr(m);

}

Obs.: Outra maneira de indicar que o resultado da expressão deve ser ponto flutuante é utilizar o Type Casting. Colocando-se float no início da expressão, indicamos que o resultado deve ser ponto flutuante.

Solução 4:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

  int n1 = StrToInt (Edit1->Text);

  int n2 = StrToInt (Edit2->Text);

  double m = (n1+n2)/2.0;        

  Edit3->Text = FloatToStr(m);

}

Obs.: Esta solução mostra a flexibilidade existente na declaração das variáveis. As mesmas podem ser declaradas no início do procedimento ou mais adiante, antes de serem utilizadas.

Solução 5:

void __fastcall TForm1::Button1Click(TObject *Sender)

{

  double n1 = StrToFloat(Edit1->Text);

  double n2 = StrToFloat(Edit2->Text);

  double m = (n1+n2)/2.0;

  Edit3->Text = FloatToStr(m);

}

 

Obs.: Ao contrário das soluções anteriores, esta última solução permite que sejam calculadas médias de notas que não são inteiras. Basta trocarmos o tipo int por double e a função de conversão StrToInt para StrToFloat.

Comentário: Muito cuidado com a escolha do tipo das variáveis e com a utilização correta das funções de conversão. Nesta última solução, por exemplo, se apenas trocarmos a função de conversão StrToInt para StrToFloat mas deixarmos as variáveis n1 e n2 como inteiras e tentarmos calcular a média de 6.5 e 8.5, por exemplo, vamos obter como resultado o valor 7. Isto ocorre porque as variáveis n1 e n2 são inteiras e armazenam os valores 6 e 8 ao invés de 6.5 e 8.5.