E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
63
33.. OOss OObbjjeettooss CCoommppoonneenntteess Os objetos componentes são elementos genéricos com uma funcionalidade
concreta cuja única finalidade é a reutilização. Cada um deles está destinado a
realizar uma tarefa típica em uma aplicação. Um objeto componente da VCL é
uma classe que caracteriza a um elemento de controle do Windows acrescidos de
propriedades, métodos e gerenciadores de eventos de cada controle.
A filosofia dos objetos componentes no C++ Builder é exatamente à mesma
do Microsoft Visual Basic®. A analogia é tanta que alguns componentes podem
ser utilizados em ambos ambientes, como é o caso dos objetos ActiveX.
33..11.. AAss PPáággiinnaass ddee ccoommppoonneenntteess Como comentado anteriormente os objetos componentes se agrupam na
paleta de objetos em distintas páginas, a saber:
� Standard: inclui os objetos componentes mais comuns e mais usados para os programas Windows®.
� Additional: armazena componentes especializados próprios do C++ Builder.
� Win32: inclui quadros de diálogo próprios do Windows.
� System: esta página inclui controles especializados de interação com o sistema operacional.
� Data Access, Data Controls e InterBase: inclui componentes especializados para o acesso às bases de dados.
� Internet e FastNet: inclui componentes para os distintos protocolos de acesso à Internet.
� QReport: são componentes para desenhar rapidamente todo tipo de relatórios.
� Dialogs: contém quadros de diálogo comuns nas aplicações Windows® prontos ara usar.
� Win3.1: inclui componentes próprios do Windows 3.1 por compatibilidade de versões anteriores.
� Samples: contém componentes para demonstração de como criar e personalizar
novos componentes.
� ActiveX: os objetos componentes desta página são objetos ActiveX criados por
outros desenvolvedores.
� Servers: armazena componentes COM derivados dos servidores OLE.
Figura 3-1 - Paleta de componentes.
L U I S F E R N A N D O E S P I N O S A C O C I A N
64
33..11..11.. SSttaannddaarrdd Esta aba contém os componentes mais comuns e habituais dos programas
Windows®.
Figura 3-2 - Objetos da aba Standard.
MainMenu
Cria uma barra de menu que atua como menu principal. Para adicionar as opções ao
menu e aos submenus adicione este componente ao quadro. Para acessar a
ferramenta de configuração de menus clicar duas vezes sobre o objeto.
PopupMenu
Cria menus de contexto que aparecem quando se clica com o botão direito do mouse.
Para configurar o menu de contexto proceda clicando duas vezes sobre o
componente.
Label
Mostra um texto que o usuário não poderá selecionar nem manipular. Se usa para
mostrar textos de título, cabeçalhos e até resultados alterando a propriedade Caption
em tempo de execução.
Edit Mostra uma caixa de inserção ou edição de texto na qual o usuário pode introduzir e
modificar uma única linha de texto.
Memo Mostra uma área de edição de texto na qual o usuário pode introduzir e modificar
múltiplas linhas de texto.
Button Cria um botão que o usuário pode pressionar para disparar eventos e ações.
CheckBox
Apresenta uma opção binária (sim/não ou verdadeiro/falso) de forma que quando se
seleciona este controle se alterna uma propriedade entre ambos valores. Este
controle pode ser usado para criar um grupo de controles que implementam seleções
que não são mutuamente exclusivas (diferente dos objetos RadioButton).
RadioButton
Apresenta uma opção binária (sim/não ou verdadeiro/falso) de forma que quando se
seleciona este controle se alterna uma propriedade entre ambos valores. Este
controle pode ser usado para criar um grupo que represente seleções mutuamente
exclusivas.
ListBox Mostra uma lista de elementos de seleção que está acompanhada de uma barra de
deslocamento.
ComboBox
Mostra uma lista de elementos de seleção. É um controle que combina os aspectos
dos componentes ListBox e Edit. O usuário pode introduzir dados na área de edição
ou selecionar uma das existentes na área da lista.
ScrollBar
Proporciona uma forma prática e cômoda de modificar a área visível de um quadro ou
de uma lista. Também pode ser usada para deslocar-se em uma faixa ampla de
valores por incrementos prefixados.
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
65
GroupBox É um elemento de agrupamento para opções relacionadas de um quadro.
RadioGroup É um elemento de agrupamento que cria um grupo de componentes RadioButton em
um quadro.
Panel
É um elemento de agrupamento que pode conter outros objetos componentes. Se usa
para criar barras de ferramenta e barras de status. Os componentes contidos estão
associados ao painel.
ActionList Cria grupos de ações que centralizam as respostas da aplicação ante as ações do
usuário.
33..11..22.. AAddddiittiioonnaall Os componentes desta página são controles especializados próprios do
C++ Builder.
Figura 3-3 - Objetos da aba Additional.
BitBtn Cria um botão que pode conter um gráfico no formato bitmap.
SpeedButton
Cria um botão que pode conter um gráfico bitmap porém não contém texto. Estes
botões se agrupam normalmente dentro de um painel para criar uma barra de
ferramentas.
MaskEdit
Permite introduzir e editar dados como no componente Edit, permitindo também a
possibilidade de especificar formatos particulares tais como códigos de CEP, número
telefônicos, datas e outros tipos de máscaras.
StringGrid Cria uma grade que pode ser usada para mostrar dados em linhas e colunas
(tabelas).
DrawGrid Cria uma grade que pode ser usada para mostrar dados em linhas e colunas
arbitrárias.
Image Mostra um desenho em bitmap.
Shape Desenha formas geométricas tais como: elipses, círculos, retângulos e quadrados.
Bevel Cria linhas ou quadros com aparência de relevo.
ScrollBox É um elemento de agrupamento com barras de scroll (deslocamento).
L U I S F E R N A N D O E S P I N O S A C O C I A N
66
CheckListBox
Mostra uma lista de elementos de seleção acompanhada de uma barra de scroll. É
parecido ao componente ListBox, porém cada elemento da lista tem associado um
CheckBox.
Splitter
Adiciona um divisor a um quadro entre dois componentes alinhados e que permite
ao usuário redimensionar os controles em tempo de execução clicando e arrastando
a linha da divisão.
StaticText
É um componente de texto não parecido ao Label porém com o próprio gerenciador
de janela podendo ser associado a uma propriedade de um objeto ActiveX por
exemplo.
ControlBar É um gerenciador para auxiliar as barras ferramentas, usado para para mover e
redimensionar.
Chart
É um objeto para construir e visualizar gráficos. Bastante usado nas aplicações de
engenharia. Para criar as suas séries de gráficos deve se clicar duas vezes encima
do componente para acessar o configurador.
33..11..33.. WWiinn3322 Esta página inclui os componentes mais comuns nas aplicações pra 32
bits.
Figura 3-4 - Objetos da aba Win32.
TabControl É um divisor de páginas mutuamente exclusivas acessíveis por abas.
PageControl
Se usa para construir quadros de diálogo com páginas múltiplas dentro da mesma
janela.
ImageList
É uma lista de imagens do mesmo tamanho acessíveis mediante um índice. Se
utiliza para gerenciar de forma eficiente grandes quantidades de imagens ou
bitmaps. Para criar uma lista de imagens basta adicionar um componente ao
formulário e clicar duas vezes nele para acessar o editor de listas de imagens.
RichEdit
É uma especialização do componente Memo. Proporciona a possibilidade de
modificar as propriedades tais como fontes de letra (tipo, tamanho, cor, estilo,
etc.) e o formato do parágrafo (alinhamento, tabulação, endentação, numeração,
etc.). Permite marcar e arrastar o texto além de copiar e colar.
TrackBar
Consiste em uma barra que mostra uma faixa e um indicador que mostra o valor
atual de uma variável permitindo a sua modificação.
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
67
ProgressBar
Consiste em uma barra retangular que vai sendo pintada de esquerda à direita. É
usada para mostrar a progressão de alguma tarefa demorada.
UpDown
São botões usados para permitir ao usuário de incrementar ou decrementar um
certo valor.
HotKey
Atribui uma combinação de teclas para qualquer componente. Pode ser usada
para criar teclas de atalho.
Animate
Abre um espaço para mostrar arquivos *.avi (Áudio Vídeo Interleaved) ou uma
série de bitmaps colocados em seqüência para mostrar na forma de filme.
DateTimePicker
Mostra uma lista de seleção que acompanhada de uma barra de scroll para
selecionar datas. A data pode ser selecionada no calendário, usando a barra de
scroll ou escrevendo diretamente.
MonthCalendar Mostra um calendário que representa um mês.
TreeView Mostra um conjunto de objetos estruturados de forma hierárquica.
ListView Permite visualizar uma lista distribuídos num espaço.
HeaderControl
Mostra um cabeçalho sobre colunas de texto ou números. Este controle pode
subdividir-se em várias partes para proporcionar cabeçalhos para múltiplas
colunas.
StatusBar
É uma área para indicar o estado de ações ou textos de descrição mais amplos
usualmente colocados na parte inferior das janelas.
ToolBar
Gerencia os botões rápidos e outros controles organizando-os de forma adequado
e ajustando a sua posição e tamanho.
CoolBar
Mostra uma coleção de controles “Coolband” dentro de bandas que se podem
mover e redimensionar.
PageScroller
Contém objetos dentro da área de cliente que podem ser deslocados sem usar
uma barra de scroll.
33..11..44.. SSyysstteemm Esta página inclui controles especializados.
Figura 3-5 - Objetos da aba System.
L U I S F E R N A N D O E S P I N O S A C O C I A N
68
Timer
É um componente não-visual que atua como temporizador. Se usa para executar
uma série de instruções (mediante o gerenciador de evento OnTimer()) que
devem ser executados a cada intervalo de tempo especificado na propriedade
Interval.
PaintBox
Especifica uma área retangular sobre um quadro que delimita uma região na qual
pode se desenhar dentro da aplicação.
MediaPlayer
Mostra uma área com botões similares aos reprodutores de áudio e vídeo, para
reproduzir vídeo e som.
OleContainer
Cria uma área cliente OLE (Object Linking and Embedding) em um quadro. Para
definir o programa deve se clicar duas vezes no objeto.
DdeClientConv
Estabelece uma conexão cliente a uma aplicação servidora DDE (Dynamic Data
Exchange).
DdeClientItem
Especifica os dados do cliente DDE (Dynamic Data Exchange) que são transferidos
em um diálogo DDE.
DdeServerConv
Estabelece uma conexão servidora a uma aplicação DDE (Dynamic Data
Exchange).
DdeServerItem
Especifica os dados do servidor DDE (Dynamic Data Exchange) que se transferem
em um diálogo DDE.
33..11..55.. PPáággiinnaa DDaattaa AAcccceessss Esta página inclui componentes especializados para acesso a bases de
dados.
Figura 3-6 - Objetos da aba Data Access.
DataSource Atua como um conduto entre um componente de conjunto de dados tais como o
TTable e os componentes de manipulação tais como TDBGrid.
Table
Recupera dados de uma tabela física de banco de dados através do BDE (Borland
Database Engine) e os entrega aos componentes de manipulação através de um
componente DataSource. Também funciona no caminho inverso.
Query
Usa declarações SQL para recuperar dados de uma tabela de banco de dados via BDE
e os envia através de um componente DataSource. Também funciona no caminho
inverso.
StoredProc Permite a aplicação de acessar procedimentos de armazenamento do servidor. Envia
dados recebidos de um componente para uma base de dados via BDE.
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
69
Database Estabelece uma conexão persistente com uma base de dados, especialmente no modo
remoto requerendo o uso de login e password.
Session
Fornece o controle global sobre um conjunto de componentes de base de dados. O
componente default TSession é automaticamente criado para cada aplicação de banco
de dados do C++ Builder.
BatchMove
Copia uma estrutura de tabela ou seus dados. Pode ser usado para mover tabelas
inteiras entre bancos de dados com diferentes formatos.
UpdateSQL Permite suporte de atualização com base de dados read-only.
33..11..66.. PPáággiinnaa DDaattaa CCoonnttrroollss Esta página inclui componentes especializados para gerenciar bases de
dados.
Figura 3-7 - Objetos da aba Data Controls.
DBGrid
Ferramenta que habilita a visualização e edição de dados de fora tabular
similar às planilhas de cálculo.
DBNavigator É um objeto que permite a navegação dentro da tabela de dados.
DBText
Objeto de texto usado para mostrar o valor de um campo do registro
corrente.
DBEdit Caixa de texto para mostrar ou editar o campo do registro corrente.
DBMemo Caixa Memo para mostrar ou editar textos no registro corrente.
DBImage
Caixa de imagens para mostrar, cortar, colar imagens de e para o registro
corrente.
DBListBox
Lista de caixas de texto para mostrar ou navegar entre listas de valores de
uma coluna em uma tabela.
DBComboBox
ComboBox para editar, mostrar ou navegar numa lista de valores de uma
coluna de uma tabela.
DBCheckBox ComboBox para mostrar ou editar uma variável booleana de um registro.
L U I S F E R N A N D O E S P I N O S A C O C I A N
70
DBRadioGroup Conjunto de RadioButtons para mostrar ou selecionar valores de uma coluna.
DBLookupListBox
É um objeto na forma de caixa de textos para visualizar vários conjuntos de
dados na forma ListBoxes.
DBLookupComboBox Serve para visualizar listas de itens na forma de ComboBoxes.
DBRichEdit
É um editor de múltiplas linhas para visualizar ou editar textos formatados
dentro de uma base de dados.
DBCtrlGrid Mostra vários campos em múltiplos registros na forma de uma grade tabular.
DBChart
Serve para visualizar dados armazenados em base de dados na forma de
gráficos.
33..11..77.. IInntteerrnneett ee FFaassttNNeett Os componentes de esta página oferecem diferentes protocolos de acesso à
Internet.
Figura 3-8 - Objetos da aba Internet.
Figura 3-9 - Objetos da aba FastNet.
ClientSocket Torna uma aplicação ou módulo de dados num cliente TCP/IP.
ServerSocket Torna uma aplicação ou módulo de dados num servidor TCP/IP.
CppWebBrowser
Permite criar aplicações personalizadas de web browsing ou adicionar
capacidade de visualizar documentos, download e outras ações da internet.
WebDispatcher
Converte um módulo de dados comum em um módulo Web e habilita a
aplicação Web Server a responder a requisições HTTP.
PageProducer
Converte um template HTML em uma cadeia de comandos HTML que
podem ser interpretados pela aplicação cliente tal como um Web browser.
Os comandos e tags HTML são substituídos por conteúdos personalizados
pelo evento OnHTMLTag.
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
71
QueryTableProducer
Monta uma seqüência de comandos HTML para gerar uma visualização de
registros em forma tabular a partir de um objeto TQuery, que obtém os
seus parâmetros de uma mensagem de requisição HTTP.
DataSetTableProducer
Monta uma seqüência de comandos HTML para gerar uma visualização
tabular dos registros a partir de um objeto TDataSet. Isto permite à
aplicação de criar imagens do conjunto de dados para uma resposta HTTP.
DataSetPageProducer
Converte um template HTML em uma cadeia de comandos HTML que
podem ser interpretados pela aplicação cliente tal como um Web browser.
Os tags especiais HTML são substituídos por valores.
NMDayTime Recupera a data e horário de um servidor intranet ou internet.
NMMsg
Envia mensagens simples de texto em ASCII na internet ou intranet usando
o protocolo TCP/IP.
NMMsgServ Recebe mensagens enviadas com o componente TNMMsg.
NMEcho
Envia textos para um servidor eco da internet e ecoa novamente para a
aplicação.
NMFTP
Implementa o FTP (File Transfer Procol). É um controle ActiveX invisível que
fornece uma forma rápida de acesso para serviços de FTP para transferir
arquivos e dados entre uma máquina local e uma remota.
NMHTTP
É um controle ActiveX invisível que implementa o protocolo cliente HTTP
permitindo ao usuário capturar documentos HTTP diretamente sem
necessidade de browsing ou processamento de arquivos de imagem.
NMNNTP
É um controle ActiveX invisível que permite a aplicação de acessar os
servidores de notícias Networking News Transfer Protocol (NNTP). Ele
fornece capacidade de leitura de notícias e de postagem de mensagens.
NMStrm
Envia streams para um servidor de stream através da intranet ou da
internet.
NMStrmServ Recebe streams enviadas pelo componente TNMStrm.
NMPOP3
Controle ActiveX invisível que recupera e-mails de servidores UNIX e outros
que suportem o protocolo POP3.
NMSMTP
Controle ActiveX que permite o acesso a servidores de e-mail SMTP
permitindo postar e-mails.
NMTime
Recupera datas e horários de servidores de horário de acordo com a RFC
868.
NMUDP
Controle invisível WinSock Activex que fornece fácil acesso a serviços de
rede do tipo User Datagram Protocol (UDP). Implementa um WinSock para
L U I S F E R N A N D O E S P I N O S A C O C I A N
72
o servidor e para o cliente e representa um ponto de comunicação
utilizando os serviços UDP. Pode ser usado para ler e escrevers dados UDP.
NMURL
Decodifica dados URL em cadeias legíveis e codifica cadeias padronizadas
no formato URL.
NMUUProcessor Codifica e decodifica arquivos MIME (UUEncodes).
PowerSock
Serve como base para a criação de controles para tratar outros protocolos
ou para criar protocolos proprietários.
NMGeneralServer
Serve como classe base para desenvolver servidores internet multi-
threaded que suportem os padrões RFC.
NMFinger
Recupera informaçoes sobre um usuário a partir de um servidor finger
usando o protocolo Finger descrito na RFC 1288.
33..11..88.. QQRReeppoorrtt Esta aba inclui os componentes para preparar relatórios e resumos.
Podem ser incorporados cabeçalhos e rodapés, resumos, agrupamentos com
cabeçalhos e rodapés, etc. Esses relatórios podem provir de qualquer fonte de
dados: TTable, TQuery, listas, matrizes, arrays, etc. Pode se usar um visualizador
prévio para comprovar os resultados. Os cálculos podem ser feitos de forma
similar aos das planilhas eletrônicas. Caso esta aba não apareça na barra de
componentes, você pode adicionar usando a opção de menu Component + Install
Packages.
Figura 3-10 - Objetos da aba QReport.
QuickRep
É o formulário básico de relatório. É um componente visual que se adapta ao
tamanho do papel selecionado.
QRSubDetail Faz conexão de um relatório com um conjunto de dados.
QRStringsBand Permite colocar bandas contendo strings num relatório.
QRBand
Colcoa bandas em um componentes TQuickRep e permite ajustar a propriedade
Bandtype para selecionar o tipo de comportamento durante a geração do relatório.
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
73
QRChildBand
Se houver bandas com componentes que devam ser incrementados e os outros
movidos para baixo pode se usar uma banda filha. É também bastante útil quando
houver bandas muito longas e múltiplas páginas.
QRGroup
Permite agrupar bandas e fornecer um controle para cabeçalhos, rodapés e
quebras de página.
QRLabel
Imprime textos estáticos e outros que não provenham de banco de dados. O texto
a ser impresso deve ser colocado na propriedade Caption. Pode se dividir o texto
em múltiplas linhas e páginas.
QRDBText
Versão de TQRLabel que imprime o valor de um campo da base de dados. Podem
ser impressos campos de cálculo e texto, incluindo strings, campos numéricos,
campos de data e memorandos. Os textos podem ser divididos em múltiplas linhas
e páginas. Pode se conectar o componente a um campo de dados setando as
propriedades DataSource e DataField.
QRExpr Imprime campos da base de dados, cálculos e textos estáticos.
QRSysData
Imprime as informações do sistema tais como título do relatório, número de
páginas e outros.
QRMemo
Imprime grande quantidade de texto que não provém de um campo da base de
dados. Ele pode ser texto estático ou este pode ser alterado durante a geração do
relatório. Pode se expandir verticalmente assim que for necessário e dividir em
múltiplas páginas
QRExprMemo Pemite gerar conteúds usando expressões do Quick Report.
QRRichText Permite adicionar Rich Text embutido no seu relatório.
QRDBRichText
Fornece uma forma de quebrar dados para o acesso dos campos DBRichText nos
relatórios.
QRShape Desenha formas simples tais como retângulos, círculos e linhas em um relatório.
QRImage
Mostra imagens em um relatório. Suporta todos os tipos de formatos de imagem
da classe TPicture.
QRDBImage
Imprime imagens armazenadas em campos binários (BLOB). Imprime todos os
formatos gráficos suportados pelo C++ Builder.
QRCompositeReport
Permite combinar mais de um relatório num relatório único.
QRPreview Permite efetuar um preview do relatório na tela antes da impressão.
L U I S F E R N A N D O E S P I N O S A C O C I A N
74
QRTextFilter Permite exportar os conteúdos do relatório em formato texto.
QRCSVFilter
Permite exporta os conteúdos do relatório em um arquivo de banco de dados
delimitado por vírgulas.
QRHTMLFilter Permite exportar os conteúdos do relatório em HTML.
QRChart Permite incluir um componente TChart dentro de um quadro Quick Report.
33..11..99.. DDiiaallooggss Esta página inclui as diferentes janelas de diálogo comuns às aplicações
Windows. Essas janelas de diálogo proporcionam uma interface consistente para
realizar operações com arquivos tais como abrir, salvar e imprimir.
Uma janela de diálogo é aberta ao chamar o método Execute(). Este
método retorna um valor lógico:
� true: se o usuário escolhe OK na janela de diálogo ou;
� false: se o usuário escolher Cancel ou sai da janela de diálogo sem salvar as
mudaças.
Figura 3-11 - Objetos da aba Dialogs.
Cada janela de diálogo (exceto a associada ao componete PrinterSetup)
possui a propriedade Options que afeta a sua aparência e o seu comportamento.
Uma janela de diálogo pode ser fechada pelo programa mediante o método
CloseDialog(). Para modificar a posição desses objetos em tempo de execução
deve se usar as propriedades Handle, Left, Top e Position.
OpenDialog Mostra uma janela de diálogo comum do Windows para selecionar e abrir
arquivos (não abre arquivos de por si).
SaveDialog Mostra uma janela de diálogo comum do Windows para selecionar e salvar
arquivos (não salva arquivos de por si).
OpenPictureDialog
Mostra uma janela de diálogo modal comum do Windows para selecionar e
abrir arquivos gráficos. É idêntica à janela associada a OpenDialog exceto que
contém uma região para a visualização prévia das imagens.
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
75
SavePictureDialog
Mostra uma janela de diálogo modal comum do Windows para selecionar e
salvar arquivos gráficos. É idêntica à janela associada a SaveDialog exceto que
contém uma região para a visualização prévia das imagens.
FontDialog Mostra uma janela de diálogo modal comum do Windows para especificar a
família, tamanho e estilo da fonte de letra.
ColorDialog Mostra uma janela de diálogo modal comum do Windows para especificar a cor.
PrintDialog Mostra uma janela de diálogo modal comum do Windows para especificar as
informações de impressão.
PrinterSetupDialog Mostra uma janela de diálogo modal comum do Windows para configurar
impressoras.
FindDialog Mostra uma janela de diálogo modal comum do Windows para especificar as
strings a serem buscadas.
ReplaceDialog Mostra uma janela de diálogo modal comum do Windows para especificar a
string a ser buscada e substituída.
33..11..1100.. WWiinn 33..11 Esta página inclui os controles próprios do Windows 3.1 para permitir
compatibilidade com aplicações antigas. Muitos destes controles possuem
versões atualizadas nos componentes incluídos na aba Win32. Estes controles
não devem ser usados em novas aplicações.
Figura 3-12 - Objetos da aba Win 3.1.
33..11..1111.. SSaammpplleess Esta aba inclui exemplos de componentes personalizados que podem ser
construídos e incorporados na paleta de componentes. O código fonte está
disponível no diretório \examples\controls\source do diretório de instalação do
Builder C++.
Figura 3-13 - Objetos da aba Samples.
L U I S F E R N A N D O E S P I N O S A C O C I A N
76
33..11..1122.. AAccttiivveeXX Os componentes desta aba são objetos ActiveX. São aplicações completas e
portáveis criadas por outros programadores. Alguns deste componentes são
shareware (não freeware) e podem expirar após certo número de operações de
edição.
Figura 3-14 - Objetos da aba ActiveX.
Chartfx Permite criar gráficos altamente personalizados.
VSSpell Permite personalizar o verificador ortográfico.
F1Book
Permite desenhar uma planilha eletrônica totalmente funcional mesmo em tempo de design
(esta aplicação expira após um determinado número de edições).
VtChart Permite criar cartas em 3D (com duas variáveis).
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
77
33..22.. PPrroopprriieeddaaddeess,, MMééttooddooss ee
GGeessttoorreess ddee EEvveennttooss Podemos destacar três aspectos de um determinado componente: as suas
propriedades, os métodos que ele pode executar e os eventos a que ele pode
responder.
33..22..11.. AAss PPrroopprriieeddaaddeess As propriedades são os elementos do componente que configuram o seu
aspecto e controlam o seu comportamento.
Muitos componentes possuem propriedades comuns. Por exemplo, todos
os componentes visuais têm as propriedades Top e Left que controlam a posição
do componente no quadro, tanto no modo de design quanto em tempo de
execução. Se estas propriedades forem alteradas durante o runtime o
componente irá se movimentar pelo quadro.
Temos visto como podem se estabelecer e modificar as propriedades dos
componentes durante o design usando o Inspetor de Objetos. As propriedades
têm geralmente um método de acesso associado que é executado ao alterar uma
propriedade em tempo de execução. Para modificar uma propriedade geralmente
é suficiente somente designar o novo valor. Ao realizar uma alteração, a VCL
invoca o método de acesso à propriedade. No caso especial da propriedade Left,
a VCL redesenhará todo o quadro novamente com a nova disposição do objeto.
Em resumo, as propriedades possuem dois especificadores de acesso que
se utilizam ao consultar ou modificar o valor das mesmas em tempo de execução.
Assim, existe um especificador de leitura e um especificador de escrita. Os
especificadores de acesso associam métodos de leitura ou de escrita (funções)
com as propriedades. Ao ler ou alterar o valor de uma propriedade se invocam,
automaticamente, as funções respectivas associadas.
Ao designar um novo valor a uma propriedade está se acessando o
especificador de escrita. A VCL comprova se existe um método de acesso
associado ao especificador de escrita e se houver, o executa. Se não houver,
simplesmente designa o novo valor à propriedade em questão.
L U I S F E R N A N D O E S P I N O S A C O C I A N
78
Ao consultar o valor de uma propriedade se acessa o especificador de
leitura. Na maioria dos casos o especificador de leitura não faz mais do que
devolver o valor da propriedade em questão.
EEXXEERRCCÍÍCCIIOO 44:: MMOODDIIFFIICCAAÇÇÃÃOO EE CCOONNSSUULLTTAA DDAASS PPRROOPPRRIIEEDDAADDEESS EEMM TTEEMMPPOO DDEE EEXXEECCUUÇÇÃÃOO
No exercício 3 observe que no quadro foi fixado o título
“Quadro de Teste” depois de modificar a propriedade Caption do
quadro. Para modificar o seu valor em tempo de execução, pode
se fazer por exemplo, que o título seja estabelecido no momento
da criação da janela. Para isso pode se escrever um gestor para o
evento OnCreate associado ao componente frmPrincipal (primeira
janela criada do programa exemplo). Lembrar que basta clicar
duas vezes no OnCreate (na aba Events do Inspetor de Objetos) do
componente frmPrincipal.
A continuação escreva o seguinte fragmento de código
dentro do método FormCreate:
//------------------------------------------------------------ void __fastcall TfrmPrincipal::FormCreate(TObject *Sender) { frmPrincipal->Caption = "Primeiro programa com C++ Builder"; } //------------------------------------------------------------
A seguir, modificar a cor do quadro (propriedade Color) se esta propriedade
estiver com o valor default: clBtnFace.
//------------------------------------------------------------ void __fastcall TfrmPrincipal::FormCreate(TObject *Sender) { frmPrincipal->Caption = "Primeiro programa com C++ Builder"; if (frmPrincipal->Color == clBtnFace) // Leitura frmPrincipal->Color = clWhite; // Escritura } //------------------------------------------------------------
Finalmente, estabelecer que sempre que o programa iniciar a execução o
objeto TCheckBox esteja desabilitado.
//------------------------------------------------------------ void __fastcall TfrmPrincipal::FormCreate(TObject *Sender) { frmPrincipal->Caption = "Primeiro programa com C++ Builder"; if (frmPrincipal->Color == clBtnFace) // Leitura frmPrincipal->Color = clWhite; // Escritura chkOp->Checked = false; // Escritura } //------------------------------------------------------------
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
79
Executando o programa o resultado é mostrado na figura a seguir.
Figura 3-15 - Alteração das propriedades frmPrincipal->Color e chkOp->Checked em tempo de execução.
33..22..22.. OOss MMééttooddooss Os métodos são funções associadas ao componente que podem ser
invocadas para realizar distintas ações no mesmo. Por exemplo, todos os
componentes visuais possuem um método chamado Show() para mostrá-lo e
outro chamado Hide() para escondé-lo. No exemplo 3 foi invocado o método
Terminate() associado à aplicação que estava sendo executada (objeto
Application) para finalizar a mesma como resposta ao clique do botão. Na
linguagem C++ todos os métodos são membros de uma classe assim como as
propriedades.
EEXXEERRCCÍÍCCIIOO 55.. MMÉÉTTOODDOOSS AASSSSOOCCIIAADDOOSS AAOOSS CCOOMMPPOONNEENNTTEESS
A seguir modificaremos o evento OnCreate do componente frmPrincipal
para que não apareçam os objetos RadioButton.
//--------------------------------------------------------------------------- void __fastcall TfrmPrincipal::FormCreate(TObject *Sender) { frmPrincipal->Caption = "Primeiro programa com C++ Builder"; if (frmPrincipal->Color == clBtnFace) // Leitura frmPrincipal->Color = clWhite; // Escritura chkOp->Checked = false; // Escritura rdbtOp1->Hide(); // Hide() es el metodo que oculta el rdbtOp2->Hide(); // componente sobre el que se aplica. } //--------------------------------------------------------------------------
Executando o programa o resultado é mostrado na figura a seguir.
L U I S F E R N A N D O E S P I N O S A C O C I A N
80
Figura 3-16 - Uso do método Hide() nos objetos RadioButton.
33..22..33.. OOss EEvveennttooss Um evento é qualquer acontecimento que possa ocorrer num componente
(movimento do cursor ou clique de algum botão do mouse, aperto de tecla do
keyboard, deslocamento ou redimensionamento de uma janela, etc.) que podem
condicionar o comportamento e a aparência do programa. Cada componente
possui uma série de eventos que poderá receber ou gerar. Podem se tratar
diferencialmente os eventos desejados e deixar que os outros sejam tratados da
maneira padrão.
Quando se responde a um evento se diz que está se manipulando o evento.
Os eventos se manipulam mediante os gestores ou manipuladores de eventos.
A forma de tratar um evento associado a um componente no C++ Builder é
bastante simples: ativa-se o componente que vai responder ao evento e usando o
Inspetor de Eventos (aba Events) seleciona-se o evento ao qual o objeto deve
responder e, quando se ative o editor de código, escreve-se o código associado ao
gestor do evento.
O sistema operacional Windows® é um sofware orientado a eventos. Isto
significa que qualquer programa está condicionado pelos eventos que ocorrem no
entorno do Windows®. Um programa Windows está continuamente verificando o
sistema operacional pela ocorrência de qualquer evento e se algum ocorrer, o
Windows avisa ao programa pelo envio de uma mensagem. Um programa
Windows está ocioso quando passa a maior parte do tempo esperando que
ocorra algum evento.
EEXXEERRCCÍÍCCIIOO 66.. GGEESSTTOORREESS DDEE EEVVEENNTTOOSS A seguir construiremos um gestor para o evento associado
ao modificar o componente CheckBox de forma que quando estiver
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
81
ativo (inicialmente desativado) faça aparecer os dois objetos RadioButton e ative
o botão OK. Quando o objeto CheckBox for desativado, os objetos RadioButton
serão ocultados novamente e será desativado o botão OK. Para isto escreveremos
o gestor associado ao evento OnClick do componente CheckBox:
//--------------------------------------------------------------------------- void __fastcall TfrmPrincipal::chkOpClick(TObject *Sender) { if (chkOp->Checked == true) { rdbtOp1->Show(); rdbtOp2->Show(); rdbtOp1->Checked = true; btOK->Enabled = true; } else { rdbtOp1->Hide(); rdbtOp2->Hide(); btOK->Enabled = false; } } //---------------------------------------------------------------------------
Ao executar o programa se produz o seguinte resultado:
Figura 3-17 - Uso de gestores de eventos.
A seguir coloque um objeto TLabel no quadro para aparecer comos segue.
Altere a propriedade Name do objeto para LblOut e a propriedade Visible para
false.
Figura 3-18
L U I S F E R N A N D O E S P I N O S A C O C I A N
82
Finalmente escreveremos o gestor do evento associado ao fazer clique no
botao OK, que está ativo (propriedade Enabled) somente quando o CheckBox
está selecionado e em conseqüência quando podem ser usados os RadioButton.
Observe o código a seguir e os resultados da execução.
//-------------------------------------------------------------------------- void __fastcall TfrmPrincipal::btOKClick(TObject *Sender) { LblOut->Visible = true; if(rdbtOp1->Checked) { if(edtOp->Text == ""){ LblOut->Caption = "Você escolheu a Opção 1"; } else{ LblOut->Caption = "Escolheu a opção 1 Sr. " + edtOp->Text; } } else{ if(edtOp->Text == ""){ LblOut->Caption = "Você escolheu a Opção 2"; } else{ LblOut->Caption = "Escolheu a opção 2 Sr. " + edtOp->Text; } } } //--------------------------------------------------------------------------
Figura 3-19
33..33.. OOss CCoommppoonneenntteess VViissuuaaiiss ee NNããoo--
vviissuuaaiiss Um componente é visual quando possui uma representação gráfica em
tempo de design e execução (botões, barras de rolagem, quadros de edição, etc.).
E N G E N H A R I A D E P R O C E S S A M E N T O D I G I T A L I I
83
Um componente sem interface gráfica é chamado de não-visual. Alguns
componentes não-visuais são os temporizadores (timers), quadros de mensagens
não visíveis durante o design e outros. Em geral, não há uma diferença entre
eles, exceto é claro, a visualização do componente.
Os componentes não-visuais podem ser facilmente colocados nos quadros
na mesma forma que os controles, embora a sua posição seja irrelevante.