Objetos, componentes
e controles na VCL
|
TObject |
-> |
TPersistent |
-> |
TComponent |
-> |
TControl |
-> |
TWinControl |
|---|---|---|---|---|---|---|---|---|
|
| |
|
v |
|
v |
|
v |
|
v |
|
| |
|
[objects] |
|
[objects] |
|
TGraphicControl |
|
[objects] |
|
| |
|
|
|
|
|
|
|
|
|
| |
-> |
[objects] |
|
|
|
|
|
|
|
| |
|
|
|
|
|
|
|
|
|
| |
-> |
[objects] |
|
|
|
|
|
|
|
v |
|
|
|
|
|
|
|
|
|
Exception |
-> |
[objects] |
|
|
|
|
|
|
Hierarquia simplificada da VCL
O diagrama acima é um sumário da Biblioteca de Componentes Visuais que mostra os cinco maiores ramos da herança da árvore.
Para uma visão completa da hierarquia VCL TObject, dê uma olhada no tópico VCL Object Hierarchy no help do BCB.
O ramo TObject
Todos os objetos da VCL descendem de TObject, uma classe abstrata cujos métodos definem os comportamentos fundamentais como construção, destruição e tratamento de mensagens. A maior parte das poderosas capacidades dos objetos VCL é estabelecida pelos métodos que TObject introduz. TObject encapsula os comportamentos fundamentais comuns a todos os objetos na VCL, apresentando métodos que possibilitam:
A capacidade de responder quando objetos são criados ou destruídos.
Tipo classe e informação de instância num objeto, e informação em tempo de execução (RTTI) acerca dessas propriedades públicas.
Suporte para tratamento de mensagens.
TObject é o ancestral imediato de muitas classes. Classes que estão contidas dentro desse ramo possuem uma característica comum importante: elas são transitórias. O que isto quer dizer? Significa que essas classes não tem um método para salvar o estado que elas se encontram antes de destruição, ou seja, elas não são persistentes.
Um dos principais grupos está no ramo da classe Exception. Essa classe fornece um grande grupo de construção de classes de exceções para tratar automaticamente erros como divisão por zero, erros em arquivos de entrada e saída I/O, e muitas outras exceções.
Outro tipo de grupo no ramo TObject são as classes que encapsulam dados estruturais, tais como:
TBits , uma classe que armazena um “array” de valores Booleanos.
TList , vinculado a classes de listas.
TStack , uma classe que mantém um last-in first-out array de ponteiros
TQueue , uma classe que mantém um first-in first-out array de ponteiros.
Você também pode encontrar encapsulamento por objetos externos como TPrinter, o qual encapsula as janelas de interface para a impressora, e TRegistry, um invólucro de baixo nível para o System Registry e funções que operam o registro.
Tstream é um bom exemplo de outro tipo de classe deste ramo. TStream é a classe base para objetos stream que podem ler ou escrever vários tipos de armazenamento, como arquivos de disco, memória dinâmica, e assim por diante.
Como você pode ver, esse ramo inclui diversos e diferentes tipos de classes que são muito úteis quando você está desenvolvendo aplicações.
O ramo TPersistent
Diretamente abaixo de TObject na hierarquia VCL está TPersistent. TPersistent acrescenta dois importantíssimos métodos para todas classes baseados em SaveToStream e LoadFromStream. Esses métodos fornecem persistência a objetos.
Por exemplo, quando o programador necessita criar um arquivo DFM (arquivo usado armazenar informação acerca dos componentes no form), ele amarra essa coleção de componentes e chama SaveToStream para todos os componentes no form. Qualquer componente “sabe” como escrever as mudanças de suas propriedades fora de um stream (neste caso , num arquivo de texto). Inversamente, quando o programador necessita carregar as propriedades para os componentes desde o arquivo DFM, ele carrega através da coleção dos componentes e chama LoadFromStream para cada componente.
Assim, qualquer classe derivada de TPersistent possui a capacidade de salvar suas informações de estado e restaurá-las quando necessário.
Os tipos de classe neste ramo incluem:
TGraphicsObject, uma classe abstrata base para objetos que encapsulam objetos gráficos Windows: TBrush, TFont e TPen.
TGraphic, um tipo de classe abstrata base para objetos como ícones, bitmaps e metafiles que podem armazenar e exibir imagens visuais : TBitmap, TIcon e TMetafile.
TStrings, uma classe base para objetos que representam uma lista de strings.
TClipboard, um invólucro para o clipboard do Windows, o qual pode conter textos ou gráficos copiados ou cortados de uma aplicação.
TCollection, TOwnedCollection e TCollectionItem, usados para manter indexados coleções definidos de forma especial.
O ramo TComponent
TComponent é o ancestral comum de todos os componentes VCL. Componentes são objetos que podemos manipular nos forms em tempo de desenvolvimento. Apesar do nome, a VCL consiste, principalmente, de objetos não visuais.
Componentes VCL são, em regra, objetos que possuem as seguintes capacidades:
A capacidade de aparecer no Componente palette e ser transferido para o form designer.
A capacidade de administrar-se, a si, e a outros componentes.
A capacidade de incrementar o fluxo e armazenar capacidades.
A capacidade de ser convertido em um controle ActiveX ou outro objeto COM por wizards na página ActiveX do diálogo New Objects.
TComponent atua como um “ônibus” padrão em que todos os componentes estão ligados. Há vários métodos em TComponent que ditam como os componentes agem durante o tempo de desenvolvimento. Este é também o local onde as propriedades Name e Owner são introduzidas. Todo componente derivado de TComponent tem propriedades Name e Owner. A owner é responsável pelo apagar de componentes (liberar a memória com relação aos componentes subalternos).
Componentes que não possuem necessidade de interface visual são derivados diretamente de TComponent.
Os tipos de classes que podem ser encontrados neste ramo incluem:
TMainMenu, uma classe que fornece uma barra de menus e para o form.
TTimer, uma classe que inclui a função timer da API do Windows.
TOpenDialog, TSaveDialog, TFontDialog, TFindDialog, TColorDialog, e assim por diante, as caixas de diálogo comuns..
TActionList, uma classe que mantém uma lista de ações usadas por componentes e controles, como os menus e os botões.
TScreen, uma classe que registra quais forms e módulos de dados foram instanciados pela aplicação, o form ativo e os controles ativos dentro desse form, o tamanho e a resolução da tela, e os cursores e as fontes disponíveis para a aplicação em uso.
O ramo TControl
Todos os controles são objetos visuais, o quê significa que o usuário pode vê-los e manipulá-los em tempo de execução. Todos os controles possuem propriedades, métodos e eventos em comum que são específicos para o aspecto visual dos controles, como a posição do controle, o cursor ou hint associado com o controle, métodos para pintar ou mover o controle e eventos para responder ações do mouse.
Enquanto Tcomponent define comportamento para todos os componentes, Tcontrol define comportamento para todos os controles visuais. Este inclui rotinas arrastar, eventos padrão Windows e containers.
Um grupo de classes
Deste ramo é chamado TGraphicControls. TGraphicControls são controles que podem ser desenhados e nunca receber o foco. Os tipos de controles que podem ser encontrados neste grupo incluem:
Timage, um controle que exibe imagens gráficas..
TLabel, um controle que exibe um texto no form.
TBevel, um controle que representa cortes desenhos.
TPaintBox, um controle que provê um canvas para que aplicações possam usar para desenhar ou restaurar uma imagem.
Observe que estes incluem em comum a rotina paint (Paint, Repaint, Invalidate, etc.), mas o C++Builder não tem que alocar uma janela para eles porque eles não necessitam receber o foco.
O ramo TWinControl
TWinControl é a classe base para todos os controles providos de janelas (Windowed controls). A seguir, as características desses controles:
Windowed controls são controles que podem receber foco quando a aplicação estiver executando.
Outros controles talvez exibam dados, mas o usuário somente poderá usar o teclado para interagir com um controle se o controle for um windowed control.
Windowed controls podem conter outros controles.
Um controle que contém outro controle é um parent. Somente um windowed control pode ser um parent de um ou mais controles filhos (child controls).
Windowed controls tem um window handle.
TWinControls são como TControls exceto pelo fato de poderem receber o foco. Isto significa que existem muito mais eventos standard para aplicar para eles e que o Windows deve alocar um window handle para eles.
Este ramo inclui ambos os controles que são desenhados automaticamente pelo Windows (incluem TEdit, TListBox, TComboBox, TPageControl etc) e também os controles que o C++Builder precisa desenhar (incluem TDBNavigator, TMediaPlayer, TGauge etc). De qualquer forma, você nunca precisará se preocupar acerca da implementação de quaisquer detalhes de como os controles funcionam ou respondem a eventos, pois o C++Builder encapsula completamente esses comportamentos para você.
|
HOME || MAPA DO SITE || CURSOS || TUTORIAIS || LINKS || FORUM || CONTATO |