CAPTULO 3

Projetando um Formulrio: Componentes, Menus e Eventos

Este captulo mostrar como configurar os formulrios e os componentes
que so colocados neles. A mudana da aparncia de um formulrio ou de
um componente normalmente   feita especificando as propriedades no
Object Inspector. Assim, este captulo comea mostrando como voc deve
trabalhar com o Object Inspector. Em seguida, abordamos  tcnicas que
utilizam o mouse para ajustar as propriedades dos formulrios e dos
componentes, mostrando tambm os mtodos utilizados com o teclado. Em
seguida, analisaremos  os componentes - com discusses de (algumas) das
suas propriedades e eventos associados. Explicamos ainda os princpios
de um projeto de menu utilizando o Menu Designer  que faz parte do
Delphi, assim como a maneira de salvar arquivos no formato ASCII para
que possam ser impressos ou visualizados em um processador de texto
normal.

NOTA: H mais de 75 componentes, que, tomados em seu conjunto, tm
vrias centenas de propriedades. No estamos de forma alguma pretendendo
esgotar o assunto.  Voc tem de estar preparado para consultar a ajuda
on-line para obter maiores informaes a respeito de formulrios,
componentes individuais e as suas propriedades  e eventos associados.

         Uma maneira de acelerar a curva de aprendizado do Delphi 
estar ciente de que vrios tipos de componentes utilizam as mesmas
designaes para as propriedades  e eventos. E, em quase todos os casos,
o mesmo nome significa uma funcionalidade semel pela qual fazemos um
projeto responder a um clique em um formulrio e como o fazemos
responder a um clique em um boto de comando. Igualmente, todos os
componentes  e formulrios tm propriedades que especificam onde esto
localizados, ou que lhe permitem exibir uma pequena dica de ajuda ao
deixar o cursor repousar nele (da  mesma forma como  feito pelo prprio
Delphi).

Trabalhando com o Object Inspector

H vrias maneiras diferentes para especificar propriedades com a
utilizao do Object Inspector. (A documentao chama-os de editores de
propriedades). Aqui, apresentamos  a figura do Object Inspector. Observe
que h duas pginas com aba - uma  para especificar propriedades e a
outra  para eventos.
        Na prxima seo, discutimos os diversos mtodos utilizados para
especificar propriedades no Object Inspector.

NOTA: A especificao de determinadas propriedades, como a propriedade
Color, exige uma combinao das tcnicas discutidas a seguir.

Editor Simples

        Com esse tipo de editor, voc d um clique na coluna da direita,
ou de valor, e digita o texto ou o valor ali. Voc pode utilizar as
tcnicas de edio padro  do Windows para cortar e colar nessas caixas.
O modelo  o editor de ttulo para um for
        O Delphi realmente verifica o que voc digita para ver se tem
sentido. Se voc colocar alguma coisa que no faz sentido, o Delphi
apresentar uma caixa de  mensagem "Invalid property value" (e retorna
ao seu valor original). Por exemplo, o Delphi 

Editor de Lista Suspensa

O Delphi utiliza esse tipo de editor de propriedade quando voc tem um
nmero finito de escolhas para o valor da propriedade. Um exemplo disso
 a propriedade BorderStyle  para um formulrio que controla (como seria
de se esperar) o tipo de borda existente em um formulrio. Eis uma
figura mostrando esse tipo de editor com a exibio  da lista de valores
possveis.
        H duas maneiras de escolher alguma coisa na lista suspensa de
propriedades disponveis nesses tipos de editores.

        * Abra a lista dando um clique na seta para baixo (ou
pressionando ALT+SETA PARA BAIXO). Em seguida selecione o item desejado.
        *Continue dando cliques duplos na coluna de valor at que seja
mostrado o valor que voc deseja.

Editor de Caixa de Dilogo

O Delphi segue a conveno padro Windows em que reticncias indicam que
h uma caixa de dilogo disponvel. As reticncias aparecem quando voc
d um clique na  coluna de valor. D um clique nas reticncias para
revelar a caixa de dilogo. (Voc tambm pode dar um clique duplo na
coluna de valor ou pressionar CTRL+ENTER  para mostrar a caixa
diretamente). O exemplo tpico  a caixa de dilogo da propriedade
Fontes, conforme mostrada aqui:
       Quando voc terminar de ajustar as especificaes na caixa de
dilogo, d um clique em OK para que elas tenham efeito.

Editor de Propriedades Aninhadas

Esse tipo de editor normalmente corresponde s propriedades que vm em
grupos. Por exemplo, a propriedade BorderIcons que controla quais cones
(padro) aparecem  na barra de ttulo de um formulrio tem trs
possibilidades: caixa de controle, boto de maximizao e boto de
minimizao. Um sinal de mais (+)  esquerda do nome  da propriedade
indica que voc tem um grupo de propriedades que podem ser atribudas.
D um clique duplo na coluna da esquerda para ver a lista de
propriedades.  Eis uma figura desse tipo de editor: 
        Por exemplo, para remover o boto de maximizao de um
formulrio, faa o seguinte:
        1. D um clique duplo na coluna da esquerda da propriedade
BorderIcons.
        2. Coloque a coluna de biMaximize em False dando um clique duplo
na coluna (de valor) da direita, que aparece conforme mostrado aqui:

DICA: Uma vez que a propriedade Font para o formulrio tambm tem o
sinal + indicando um conjunto de propriedades que voc pode especificar,
voc pode dar um clique  duplo na coluna da esquerda para trabalhar com
propriedades de fonte individuais em vez de utilizar a caixa de dilogo
Font.

Formulrios

Os formulrios tm 36 propriedades que voc pode especificar no momento
do projeto com o Object Inspector. Alm disso, respondem a 20 eventos
diferentes. O objetivo das prximas sees  apresentar voc s
propriedades e aos eventos mais importantes. Gastamos um pouco mais de
tempo com as propriedades e eventos associados  com os formulrios do
que com os componentes nas ltimas sees deste captulo. Isto ocorre
porque muitas dessas propriedades e eventos voltam a se repetir com
funcionalidade  similar para os diversos componentes.

DICA: O Delphi vem com uma galeria de formulrios pr-construdos para
ser utilizados como modelos para seus projetos. Veja o tpico de ajuda
on-line "Adding Form  Templates to your Project" para obter mais
informaes sobre o assunto.

Propriedades dos Formulrios

Embora no seja muito precisa, uma boa maneira para se pensar nas
propriedades  que elas afetam a aparncia de um objeto. As propriedades
podem ser alteradas durante  a execuo do projeto ou durante o
processamento. Quando elas so alteradas por ocasio do processamento, a
sintaxe toma o formato: object.property : = new value

NOTA: Para maiores informaes a respeito das tcnicas de codificao,
veja o Captulo 4.
 
        O que segue  uma breve discusso das propriedades mais
importantes e um formulrio. (Veja o Captulo 11 para obter maiores
informaes sobre propriedades  associadas com grficos e a ajuda
on-line para as propriedades no discutidas neste livro.)

NOTA: Se uma propriedade dos formulrios no  discutida aqui e voc
quer descobrir mais a seu respeito, utilize a ajuda on-line. A maneira
mais fcil para fazer  isso  utilizando a sensibilidade ao contexto
interna ao Delphi: escolha a propriedade dando um clique ou movendo o
cursor e, em seguida, pressione F1.

        ActiveControl - Essa propriedade  utilizada quando voc
acrescenta componentes a um formulrio. Utilize-a para especificar qual
 o componente que ter  o foco inicial quando seu programa for
processado. Por exemplo, os botes de comando mostram  ttulo. A
propriedade ActiveControl  utilizada com freqncia no momento do
processamento. Ela vai lhe dizer qual  o componente que tem o foco e
permitir acessar  as propriedades daquele componente.
        AutoScroll - Deixe isso especificado com o valor padro True
para dizer ao Delphi que acrescente automaticamente barras de
deslocamento a um formulrio  no momento do processamento, quando h
componentes que no esto sendo exibidos.
        BorcIerlcons - Essa propriedade  utilizada para determinar se
um formulrio mostra a caixa de controle padro do Windows e os botes
de maximizao e  minimizao. (Veja a seo "Editor de Propriedades
Aninhadas" anteriormente, neste captulo.)
        BorderStyle - Essa propriedade determina o estilo da borda.
(Veja tambm a seo "Editor de Propriedades Aninhadas" anteriormente
neste captulo. )
        Caption - Voc viu a mudana dessa propriedade no Captulo l.
Ela determina o texto que aparece na barra de ttulo.
        ClientHeight, ClientWidth - Essas propriedades representam a
altura e a largura da parte utilizvel do formulrio - a parte que
exclui as bordas. Ambas  so medidas em pixels (Pixel significa
"elemento de figura" -  a menor unidade de resoluo p
        Color - Essa propriedade determina a cor de fundo de um
formulrio. A propriedade Color utiliza um editor de lista suspensa para
os vrios cdigos de cor.
        The Ctl3D Property - Essa  uma propriedade Verdadeiro/Falso
(True/False) que determina se um componente ter uma aparncia
tridimensional ou no. O padro  no Delphi  True, de modo que os
componentes parecem ter alguma profundidade.
        Cursor - Essa propriedade permite-lhe determinar a aparncia do
cursor quando o mouse est no formulrio. H 15 formatos padres,
variando desde a seta  normal at uma ampulheta ou formas mais exticas.
(Consulte a ajuda on-line para obter uma lis

NOTA: Pela utilizao da funo LoadCursor da API do Windows  possvel
utilizar um cursor personalizado. Veja a ajuda on-line para obter
maiores informaes sobre  como fazer isso.

        Enabled - Se o valor padro True dessa propriedade for alterado
para False, o formulrio no responder mais a qualquer evento.
Normalmente essa propriedade   manuseada por ocasio do processamento.
        Font - Essa propriedade permite-lhe mudar as fontes da
informao exibida no formulrio por meio da propriedade Canvas, por
ocasio do processamento (veja o Captulo 4).
        FormStyle - H quatro possibilidades para essa propriedade. O
valor padro, fsNormal, diz que o formulrio torna-se uma janela padro.
Mude isso para fsStayOnTop  e o formulrio permanecer sempre por cima
de qualquer outro formulrio em seu proje formulrios MDI. (Veja o
Captulo 12.)
        Height, Width - Essas propriedades determinam a altura e a
largura do formulrio em pixels incluindo as bordas (em oposio s
propriedades ClientHeight,  ClientWidth, que medem apenas o espao
interno).
        HelpContext - Essa propriedade  utilizada ao se escrever um
sistema de ajuda compatvel com Windows (veja o Captulo 12) para seu
aplicativo.
        Hint, Showhint - A propriedade Hint fornece o texto para a dica
de ajuda suspensa, utilizada em conjunto com o evento OnHint. Voc tem
de ter a propriedade  ShowHint colocada em True para que esse evento
seja ativado.
        HorzScrollBar, VertScrollBar - Essas duas propriedades
determinam se um formulrio tem barras de deslocamento horizontais e
verticais. Esses so exemplos  de propriedades aninhadas, de modo que
voc d um clique duplo na coluna da esquerda para ve trabalhar. A
Tabela 3.1 descreve as cinco propriedades aninhadas para as barras de
deslocamento.

Tabela 3.1 Propriedades Aninhadas para Barras de Deslocamento.

        Increment - Determina a quantidade de movimento que ocorre
quando o usurio d um clique numa seta de deslocamento.
        Margin - permite-lhe especificar o nmero mnimo de pixels que
voc quer entre os componentes e a borda da barra de deslocamento antes
que uma barra de  deslocamento realmente aparea.
        Position - Determina onde o polegar, a caixa na barra de
deslocamento, aparece.
        Range -  um inteiro que determina a distncia de deslocamento
da barra.
        Visible - Determina se as barras de deslocamento so ou no
visveis.

        Para tornar as barras de deslocamento visveis, assegure-se de
que:
        * A propriedade Visible seja True
        * A propriedade Range da barra de deslocamento seja maior que
apropriedade ClientWidth (para barras de deslocamento horizontais) ou
que a propriedade Height  (para barras de deslocamento verticais).
        Icon - Esta propriedade determina o cone utilizado para o
programa quando o formulrio  minimizado.
        KeyPreview - O padro para essa propriedade  False. Se voc
fizer a sua mudana para True, ento a maioria das seqncias de teclas
so processadas primeiro  pelos eventos Key do formulrio - em lugar do
componente que tem o foco. (Veja maiores d
        Left, Top - Essas propriedades determinam onde se encontra o
formulrio, relativamente  borda superior esquerda da tela. Ela 
medida em pixels.
        Menu - Essa propriedade permite-lhe designar que menu aparecer
no formulrio. (Veja "Projetando Menus" mais adiante, neste captulo.)
        Name - Essa propriedade est disponvel para todos os objetos do
Delphi. A propriedade Name permite-lhe dar nomes significativos aos seus
objetos Delphi  para tornar os programas mais claros. O Delphi
estabelece um nome padro como Form 1 ao prime

NOTA: As convenes de nomenclatura para os objetos provocaram muitas
discusses. Algumas pessoas preferem utilizar um prefixo que indica o
objeto, seguido  pelo nome significativo. Exemplos disso podem ser
frmAbout ou frmlnitial. Outros preferem utilizar alguma coisa que tenha
significado em ingls: AboutForm ou FormAbout.  Sem querermos nos
envolver na discusso, apenas apontamos o fato quase que evidente de que
nomes significativos para os objetos facilitaro a depurao - seguir
algumas convenes (documentadas)  sempre uma boa idia.

        As regras para o nome de um objeto so:
        * Voc no pode utilizar uma palavra reservada ou uma diretriz
padro (veja a ajuda on-line para obter uma lista delas) como nome de um
objeto.
        * Os nomes de objetos podem ter qualquer tamanho, mas apenas os
primeiros 63 caracteres so considerados.
        * O primeiro caracter tem de ser uma letra ou um sublinhado.
        * O restante do nome pode incluir qualquer combinao de letras,
nmeros e sublinhados.
        * A caixa das letras no nome da varivel  irrelevante.

        PixelsPerlnch, Scaled - Assim que a propriedade Scaled 
colocada em True, a propriedade PixelsPerInch determina quantos pixels
so utilizados para cada  polegada do formulrio. Essas duas
propriedades so utilizadas na maioria das vezes no moment Screen. Pela
combinao das duas propriedades, voc pode determinar o que o Windows
est utilizando como nmero de pixels em uma polegada. Assim que voc
souber  isso, pode escrever o cdigo com facilidade para tornar seus
formulrios independentes da resoluo da tela.
        PopupMenu - Voc especifica essa propriedade com o nome do menu
suspenso que quer que aparea quando o usurio d um clique no boto
direito do mouse  em uma rea vazia do formulrio. (Veja "Projetando
Menus" mais adiante, neste captulo, para sab
        Position - Essa propriedade lhe fornece um meio simples para
especificar a posio do formulrio. H cinco possibilidades. As duas
mais importantes so  o valor padro, poDesigned, que deixa o formulrio
na posio em que voc o projetou, e psScre usurio.
        PrintScale - Essa propriedade facilita a impresso da informao
em um formulrio. O valor padro de poNone significa que no ocorrer
nenhum escalonamento  e o formulrio aparecer no papel de forma
diferente da que aparece na tela. Se voc a col para que tanto o
formulrio impresso como o exibido tenham as mesmas dimenses.
        Visible - Essa propriedade determina se o formulrio permanece
ou no visvel no momento do processamento.
        WindowState - H trs valores para essa propriedade. O padro,
wsNormal, no deixa o formulrio nem maximizado nem minimizado.
Normalmente voc utiliza  cdigo para mudar essa propriedade para um dos
dois outros valores: wsMaximized ou wsMinimized do processamento.

Eventos de Formulrios

O reconhecimento de formulrios  a chave do poder do Delphi, mas sem
que voc tenha escrito o cdigo no manipulador de evento apropriado,
nada acontecer. A primeira  coisa que voc precisa fazer ao escrever um
manipulador de eventos  gerar o modelo do procedimento de evento. O
mtodo geral para gerar um modelo de procedimento  de evento  dar um
clique duplo na coluna da direita do nome do evento.

NOTA: Se voc d um clique duplo em um componente ou em um formulrio, o
Delphi faz aparecer o modelo de procedimento de evento padro para
aquele objeto. (Para  formulrios,  o evento OnCreate.)

        Aqui mostramos descries sucintas dos eventos de formulrio
mais importantes. (Novamente, veja na ajuda on-line os eventos de
formulrio que no so abordados  neste livro.)

        OnActivate - O Delphi utiliza esse gerenciador de eventos quando
o foco  transferido ao formulrio. Em projetos de um nico formulrio,
como voc viu no  Captulo 1, isso acontece automaticamente quando o
aplicativo  processado.
        OnClick, OnDblClick - Esse evento  acionado quando o usurio d
um clique (ou um clique duplo) em uma rea vazia do formulrio.

NOTA: O evento OnClick ser sempre acionado primeiro mesmo quando o
usurio d um clique duplo.

        OnCloseQuery, OnClose - O evento OnCloseQuery  acionado quando
o usurio tenta fechar o formulrio(por exemplo, com um clique duplo na
caixa de controle).  Voc pode utilizar esse evento como cdigo de
limpeza - ou at evitar que o formulrio sej  fechado.
        OnCreate - Esse evento  acionado quando o formulrio  criado
pela primeira vez. Voc o utiliza para especificar propriedades iniciais
do formulrio e de  seus componentes.
        OnDeactivate - Esse evento  acionado quando o usurio muda (por
exemplo, utilizando o Gerenciador de Tarefas do Windows ou ALT+TAB) para
um outro aplicativo.  Utilize esse evento para qualquer cdigo (como
avisos para salvar arquivos) que voc qu
        OnDragDrop, OnDragOver, OnMouseDown, OnMouseMove, OnMouseUp.
Esses eventos so utilizados com cdigo para detectar os movimentos do
mouse. (Veja o Captulo  12.)
        OnHide - Voc pode utilizar cdigo para esconder formulrios
(veja o Captulo 4). Se o fizer, o Delphi aciona esse evento.
        OnKeyDown, OnKeyPress, OnKeyUp - Esses eventos permitem-lhe
determinar o que o usurio est fazendo com o teclado. (Veja o Captulo
5. )
        OnPaint - Esse procedimento de evento  onde voc colocar
cdigo com mais freqncia para redesenhar informaes que precisam ser
repintadas. (Veja o Captulo  11.)
        OnResize - Esse evento  acionado sempre que o usurio
redimensiona um formulrio. Normalmente voc coloca cdigo nesse
procedimento de evento para reposicionar  componentes conforme
necessrio.
        OnShow - Esse evento  acionado exatamente antes que o
formulrio seja mostrado; utilizado na maioria das vezes com projetos de
vrios formulrios. (Veja  o Captulo 4.)
 
Componentes

Os componentes so as ferramentas do seu projeto. So os objetos do tipo
botes de comando e caixas de escolha que tornam os aplicativos Windows
mais fceis de ser  utilizados que os aplicativos no-Windows.

NOTA: A documentao distingue entre componentes e controles. Controles
so aqueles componentes que o usurio consegue ver.

        Alm do mais, o Delphi distingue entre componentes em janelas
daqueles que no funcionam em janelas. A distino principal  que
componentes em janelas podem  receber o foco, e os que no funcionam em
janelas no podem. (Para aqueles que esto fam tambm no tm uma ala
Windows.)

NOTA: Ns utilizaremos apenas o termo genrico "componente" para fazer
referncia aos componentes em janelas e aos que no funcionam em
janelas. Tambm no utilizaremos  o termo "controle" para distinguir
entre componentes visuais e no visuais.

        Da mesma forma que com um formulrio, os componentes tm
propriedades que voc pode estabelecer por ocasio do projeto por meio
do Object Inspector ou por  ocasio do processamento por meio de um
cdigo. Muitas propriedades como Height, Width, Sho como para os
componentes.
        Primeiro forneceremos descries curtas, no formato de tabelas,
dos componentes mais comuns. Depois passaremos ao mtodo de "pint-los"
em seu formulrio.  Por fim falaremos de alguns dos componentes mais
comuns com pequenas discusses de suas pro

Uma Viso Geral dos Componentes

Os mais de 70 componentes distribudos com o Delphi so exibidos nas
diferentes pginas da paleta de Componentes. Esta seo fornece uma
viso geral dos componentes  mais comuns. No abordamos os componentes
da pgina VBX da paleta de Componentes ou aquelas na pgina Samples. (Os
componentes Data Access esto resumidos no Captulo  13.)

NOTA: Voc pode facilmente acrescentar outros componentes ao Delphi. Por
exemplo, uma vez que o Delphi pode acrescentar qualquer componente
Visual Basic que satisfaa  s especificaes de Visual Basic 1.0, j
existem centenas de ferramentas que voc pode acrescentar para
necessidades especficas. Para ver como acrescentar componentes,  veja a
ajuda on-line na pgina sobre "Registering Components".

DICA VISUAL BASIC: A pgina VBX contm exemplos de componentes Visual
Basic (os nomes de arquivo deles terminam em VBX). Entretanto, se voc
tem o Professional  Edition do Visual Basic ou vrios componentes
configurados para o Visual Basic,  possvel que os nomes dos arquivos
dos componentes na pgina VBX sejam incompatveis  com seus componentes
existentes. Por exemplo, os componentes GAUGE.VBX no Delphi so
incompatveis com aqueles fornecidos com Visual Basic Professional. Voc
ter  que mover ou renomear os arquivos GAUGE.VBX do Visual Basic
Professional para evitar uma quebra de seu sistema.

Pgina Standard

A pgina Standard da paleta de Componentes contm os componentes que
voc provavelmente utilizar com maior freqncia. Eles esto resumidos
na Tabela 3.2.

Pgina Additional

A pgina Additional da paleta de Componentes contm componentes
utilizados em situaes mais especficas, como quando voc precisa criar
agendas com abas ou botes  de orientao grfica. Ela  resumida na
Tabela 3.3. (Veja o Captulo 11 para mais informaes sobre grficos.)

Pgina Dialogs

A pgina Dialogs da paleta de Componentes contm aquilo que voc precisa
para fornecer as caixas de dilogo comuns que os usurios Windows
esperam ver. Ela  resumida  na Tabela 3.4. (Veja o Captulo 12 para
mais informaes sobre caixas de dilogo.)

Pgina System

A pgina System da paleta de Componentes tem os componentes para
trabalhar com discos e arquivos (veja o Captulo 10) e para trabalhar
com DDE e OLE (veja o Captulo  11 ). Ela contm tambm o importante
componente Timer (veja "Temporizadores" mais adiante, neste captulo).
Essa pgina est resumida na Tabela 3.5.

Acrescentando Componentes ao Formulrio

Assim que voc decidir que componente deseja acrescentar a um
formulrio, h vrias maneiras de coloc-lo ali:
        *Se voc der um clique duplo no componente, o Delphi acrescenta
o componente no tamanho e formato padro, no centro do formulrio. (Caso
j existam componentes  no centro do formulrio, o novo ser colocado
sobre o antigo e voc ter que mov-lo p

Tabela 3.2 Pgina Standard da Paleta de Componentes.

        Main Menu - Permite-lhe projetar menus comuns.
        PopupMenu - Utilizado para projetar menus suspensos.
        Label - Utilizado para rotular outros componentes ou para exibir
um texto que no pode mudar.

Tabela 3.2 Pgina Standard da Paleta de Componentes (continuao).

        Edit - Exibe uma rea em que o usurio pode colocar uma linha de
texto.
        Memo - Utilizado quando voc quer permitir aos usurios a
colocao de vrias linhas de texto.
        Button - Utilizado para criar botes de comando.
        CheckBox - Utilizado para opes quando h apenas duas
possibilidades.
        RadioButton - Utilizados em um grupo para opes mutuamente
exclusivas.
        ListBox - Exibe uma lista de escolhas.
        ComboBox - Normalmente, combina uma caixa de lista com uma rea
de edio para permitir ao usurio escolher um item da lista ou colocar
diretamente sua  prpria opo.
        ScroIIBar - Fornece um mtodo analgico para se movimentar por
uma faixa de escolhas.
        GroupBox - Permite-lhe agrupar itens para que se comportem como
uma unidade.
        RadioGroup - Um tipo especial de caixas de grupo que facilita o
trabalho com botes de rdio.
        Panel -  mais utilizado para fazer barras de ferramentas e
barras de status. (Veja o Captulo 12.)

        *Se voc quer acrescentar um componente em um determinado lugar:
        1. D um clique no componente.

Tabela 3.3 Pgina Additional da Paleta de Componentes.

        BitBtn - Funciona como um boto de comando, mas permite um
grfico que seja utilizado como face do boto.
        SpeedBar Button - Utilize-o com o componente Panel para criar
barras de ferramentas e barras de status. (Veja o Captulo 12.)
        TabSet - Permite-lhe criar as caixas de dilogo com abas (como
no Object Inspector) que esto se tornando mais comuns nos aplicativos.
Utilize-as em conjunto  com o componente Notebook quando voc precisar
de mais flexibilidade que a fornecida pel
        Notebook - Fornece-lhe um meio para ter uma pilha de vrias
pginas.
        Tabbed Notebook - Cria vrias pginas em um formulrio com uma
aba no topo.
        MaskedEdit - Permite-lhe formatar a exibio ou esconder
(mascarar) os caracteres digitados pelo usurio.
        Outline - Permite-Ihe criar esboos.
        StringGrid - Utilizado para dados de texto tabulados.
        DrawGrid - Utilizado quando as imagens (possivelmente misturadas
com texto) precisam ser arranjadas em uma tabela.
        Image - Para exibir um mapa de bit, um cone ou um meta-arquivo
Windows.


Tabela 3.3 Pgina Additional da Paleta de Componentes (continuao).

        Shape -Utilizado em lugar de cdigo para exibir crculos,
elipses, retngulos ou retngulos arredondados.
        Bevel - Utilizado para conseguir um retngulo com um chanfro
(moldura de quadro)  sua volta.
        Header - Fornece-lhe uma rea para colocar texto que pode ser
redimensionada. Normalmente  utilizado com os componentes da grade.
        ScrollBox - D-lhe uma rea de exibio com barras de
deslocamento dentro do formulrio.

        2. D um clique no local do formulrio onde voc quer que seja
colocado o canto superior esquerdo do componente.
        3. O componente aparecer ali em seu tamanho padro.

        Evidentemente, voc pode querer que um componente seja menor ou
maior que o tamanho padro. Para fazer isso, em vez de dar um clique no
ponto onde voc quer  que o canto esquerdo aparea, coloque o ponteiro
do mouse no local e arraste.  medida qu posio do componente. Solte o
boto do mouse quando voc estiver satisfeito com o tamanho e a posio
do componente.

Acrescentando Vrios Componentes a um Formulrio

Freqentemente, voc vai querer acrescentar vrios componentes do mesmo
tipo a um formulrio. (Por exemplo, com frequncia voc precisa de
vrios botes de comando  ou caixas de edio.)
        Para acrescentar vrios componentes do mesmo tipo:
        1. Mantenha pressionada a tecla SHIFT.
         2. D um clique no componente na paleta. (voc pode, na
verdade, soltar a tecla shift depois de selecionar o componente.)

Tabela 3.4 Pgina Dialogs da Paleta de Componentes.

        OpenDialog - Fornece-lhe a caixa de dilogo comum Open File
padro.
        SaveDialog - Fornece-lhe a caixa de dilogo comum Save File
padro.
        FontDialog - Fornece-lhe a caixa de dilogo padro para escolher
fontes.
        ColorDialog - Fornece-lhe a caixa de dilogo padro para
escolher cores.
        PrintDialog - Fornece-lhe a caixa de dilogo comum Print padro.
        PrinterSetupDialog - Permite-lhe pular a caixa PrintDialog para
ir diretamente  caixa de dilogo Printer Setup.
        FindDialog - Fornece-lhe uma caixa de dilogo Find.
        ReplaceDialog - Fornece-lhe uma caixa de dilogo Replace, (isto
, duas reas onde colocar texto).

        3. Ou voc d um clique duplo, ou ento um clique no local do
formulrio onde voc quer que aparea o canto superior esquerdo de cada
cpia do componente,  e depois arraste.

NOTA: Se voc utilizar esse mtodo, esteja certo de dar um clique no
cone do ponteiro para poder voltar ao mtodo usual de trabalhar com
componentes. (O cone de  ponteiro est sempre na extremidade esquerda
de cada palavra da paleta de Componentes.)

Tabela 3.5 Pgina System da Paleta de Componentes.

        Timer - Utilizado para ativar um cdigo em um determinado
intervalo do Timer.
        PaintBox - D-lhe uma rea para grficos.
        FileListBox - Fornece-lhe uma caixa de lista que mostra arquivos
no diretrio atual.
        DirectoryListBox - Mostra a estrutura do diretrio no drive
atual.
        DriveComboBox - Utilizado para navegar entre drives.
        FiIterComboBox - Utilizado quando voc quer filtrar os arquivos
mostrados em um FileListBox.
        MediaPlayer -Utilizado ao trabalhar com arquivos multimdia.
        OLEContainer - Fornece um cliente OLE.
        DDEClientConv - Utilizado para estabelecer um cliente DDE.
        DDEClientltem  Utilizado para especificar o que ser enviado do
Cliente ao servidor em ligao DDE cliente.
        DDEServerConv - Utilizado para instalar um servidor DDE.
        DDEServerltem - Utilizado para especificar o que ser enviado do
servidor ao cliente.

Componentes Container

Quando voc utiliza componentes como botes de rdio, eles precisam ser
mantidos em grupos. Dessa forma, o Delphi sabe quais devem ser
desligados quando um deles   ligado. H seis componentes Delphi (alm
do prprio formulrio) que podem servir como componentes container. A
idia de um container  que, no momento do projeto,  todos os
componentes se comportem como um nico (algumas vezes isso  chamado de
relacionamento pai filho). Por exemplo, quando voc movimenta um
componente container,  os componentes filho se movem com ele. Os seis
componentes container so GroupBox, RadioGroupBox, Panel, Notebook,
TabbedNotebook e ScrollBox.
        A maneira mais fcil para criar um container  acrescent-lo ao
formulrio antes que voc acrescente os componentes-filho. Assim que
voc tiver colocado  o container no formulrio, assegure-se de que o
componente container esteja selecionado.
        Em seguida, acrescente componentes como normalmente faria,
dando, por exemplo, um clique dentro do container. Por exemplo, quando
voc est com um componente  container selecionado, dar um clique duplo
em um componente far com que ele aparea (co

NOTA: Voc tambm pode acrescentar vrias cpias do mesmo componente a
um componente container que atualmente est ativo, utilizando o mtodo
SHIFT+clique. Isso   especialmente til para fazer barras de
ferramentas (veja Captulo 12).

Trabalhando com Componentes Existentes

Antes que voc possa trabalhar com um componente que j se encontra em
um formulrio,  preciso fazer a sua seleo. Isso pode ser feito de uma
das seguintes formas: D um clique dentro do componente, ou Escolha o
componente soltando o seletor Object, localizado no topo do Object
Inspector. Um exemplo disso  mostrado aqui:

                        Button1 : T Button
                        Button1
                        Editl
                        Forml
                        ListBox1
                        Memo1

         Se voc est operando dentro do formulrio, tambm pode
utilizar a tecla TAB para mover o foco entre os componentes do
formulrio. Quando um componente   selecionado em um formulrio,
pequenos quadrados negros chamados de alas de dimensionament
        Arrastar as alas permite-lhe redimensionar o componente (veja
"Redimensionando e Reformando Componentes" mais adiante neste captulo).

Selecionando Vrios Componentes

Com freqncia, voc ter que trabalhar com muitos componentes ao mesmo
tempo (por exemplo, quando voc precisa alinh-los). A maneira mais
fcil para selecionar  vrios componentes :
        l. Manter pressionada a tecla SHIFT.
        2. Dar um clique em cada um dos componentes.

        H mais um mtodo para selecionar vrios componentes que
ocasionalmente  til:

        1. Imagine um retngulo que contenha apenas aqueles componentes
que voc quer selecionar. V at um canto desse retngulo imaginrio e
d um clique no boto  esquerdo do mouse.
        2. Mantenha pressionado o boto esquerdo do mouse e arraste o
retngulo tracejado at ele conter todos (e apenas) os componentes que
voc quer selecionar.  Em seguida, solte o boto do mouse.

        Independentemente do modo como se seleciona um grupo de
componentes, ao terminar de selecionar voc sabe que foi bem-sucedido
quando todos eles mostram alas  de dimensionamento cinzas.

NOTA: Se os componentes esto associados a um objeto container, como um
componente Panel ou GroupBox, pressione CTRL antes de selecionar o
componente.

        Voc tambm pode selecionar todos os componentes em um
formulrio escolhendo Edit| Select All. Finalmente, para cancelar a
seleo de um grupo de componentes,  d um clique em uma regio vazia do
formulrio ou em qualquer componente que no faz pa

Movendo Componentes

Para mover um componente at uma posio diferente:

        1. Selecione o componente.
        2. Coloque o mouse dentro do componente e arraste-o para a sua
nova posio. (Tome cuidado para no arrastar as alas de
dimensionamento, o que ocasionaria  um redimensionamento em lugar de uma
movimentao. )

        Observe que  medida que voc manuseia o componente, ele parece
se mover aos trancos e barrancos, no suavemente. Conforme diz a velha
piada de computao,  isso no  um erro,  um recurso. As posies dos
componentes em um modelo passam a uma si disponvel no menu Options
permite-lhe controlar esse recurso. ( chamado "Arap to grid".) Voc
tambm pode deixar a grade com uma malha mais ou menos fina mudando  as
opes nessa caixa de dilogo.

NOTA: Quando voc tiver selecionado um grupo de componentes, eles todos
se movimentaro em conjunto.

Redimensionando e Reformando Componentes

As alas de dimensionamento representam a maneira mais fcil para mudar
a forma e o tamanho de um componente. Para redimensionar um nico
componente,  preciso selecion-lo  primeiro. Voc deve ser capaz de ver
as alas de dimensionamento pretas. Arraste ento as alas de
dimensionamento apropriadas.
       Voc tambm pode selecionar um componente e escolher Edit Size
para exibir a caixa de dilogo Size, conforme mostrada aqui:
        Preencha agora esta caixa de dilogo como quiser e escolha OK.

NOTA: Se voc precisa redimensionar vrios componentes, selecione-os
primeiro. Abra em seguida a caixa de dilogo e preencha-a conforme
necessrio.

Cancelando Componentes

Se voc precisa cancelar componentes do formulrio, selecione-os
primeiro. Em seguida, pressione a tecla DELETE, ou escolha Edit |Delete.

DICA:  sempre possvel recuperar componentes cancelados escolhendo
Edit|Undelete. Voc deve, porm, utilizar a opo Undelete antes de
fazer qualquer outra coisa!

Cortando, Copiando e Colando Componentes

O Delphi permite-lhe cortar, copiar e colar componentes entre
formulrios, ou entre um formulrio e um container utilizando convenes
padres do Windows (CTRL+X  para cortar, CTRL+C para copiar, e assim por
diante). Voc tambm pode utilizar as opes apropriadas no menu Edit. 
preciso estar ciente de que, sempre ao copiar  um componente, o Delphi
d ao componente um nome novo, no entanto, utiliza as mesmas
propriedades. Mais importante, o Delphi continua utilizando os antigos
manipuladores  de eventos que voc escreveu.

Alinhando Componentes

O problema na utilizao do mouse para arrastar componentes  a
dificuldade em conseguir que as bordas se alinhem corretamente. Para que
seu aplicativo tenha uma  aparncia mais bem-acabada, voc precisa ter a
certeza de que os componentes esto perfeitamente alinhados. Depois que
tiver selecionado um grupo de componentes,  h duas maneiras para
alinh-los entre si:
        * Utilize a paleta Alignment (escolha View|Alignment Palette
para abrir a paleta Alignment).
        * Abra a caixa de dilogo Align no menu Edit e d um clique nas
opes que desejar.

NOTA: Independentemente do mtodo que voc escolher, o primeiro
componente que voc seleciona  utilizado como referncia para o
alinhamento. Por exemplo, se o primeiro  componente est um pouco
deslocado para a esquerda e voc opta por alinhar os componentes
escolhendo Left sides na caixa de dilogo Align, os outros se movero
para  a esquerda.

Alguns Componentes Individuais

Esta seo discute algumas propriedades e eventos de componentes comuns
que so importantes ao manusear o foco para componentes. Seguimos isto
com uma discusso  sobre os componentes mais comuns. (No  nenhum
exagero dizer que 10 a 15 componentes formam o grosso da interface
visual em projetos Delphi. )
        Apesar de discutirmos algumas das propriedades e eventos mais
comuns que ocorrem de tempos em tempos para componentes, no repetiremos
discusses sobre as  diversas propriedades e eventos (como Color,
Cursor, Enabled, Let, Name, Top, Visible, Widt da mesma forma para
formulrios e componentes. Assim, o procedimento para estabelecer uma
dica de ajuda quando o mouse estiver sobre um componente  o mesmo que
ao fazer isso para um formulrio. (Voc deveria consultar o Captulo 5
para eventos-chave e o Captulo 12 em que tratamos do mouse. )

NOTA: As propriedades que medem onde se encontra um componente, como
Align, Left e Top, so sempre calculadas com relao aos limites do
componente container.


Propriedades de Foco e Eventos

O formulrio ou um nico componente existente nele pode estar ativo -
isto , ter o foco - em qualquer momento. Voc aprendeu uma maneira para
determinar qual o  componente que tem o foco inicial: especificar a
propriedade ActiveControl do formulrio. Se voc no especificar a
propriedade ActiveControl, ento, o Delphi d  o foco inicial quele
cuja propriedade Default  colocada em True. Finalmente, se voc no
especificar ActiveControl nem a propriedade Default, ento, o Delphi
olha  para os componentes cuja propriedade TabStop  colocada em True.
Em seguida move o foco ao componente visvel (e ativado) com o menor
valor para a propriedade Tab  Order.

        O Evento OnEnter - Esse evento  acionado sempre que um
componente se torna ativo. Utilize-o para escrever qualquer cdigo
inicial que voc queira para o  componente.
        O ################################ ### ###########
################################################################
###
###!###"#######$###%###&###'###(###)###*###+###,###-###.###/###0###1###2
###3###4###5###




Evento OnExit - Esse evento  acionado
sempre que o foco  se afasta de um componente ativo. Utilize-o para
escrever qualquer cdigo que voc quer que seja processado quando o
componente perde o foco.
        Propriedades de Ttulo e Teclas Aceleradoras - Muitos
aplicativos Windows utilizam teclas aceleradoras para mover rapidamente
o foco ou dar um clique em  um boto. Estas teclas so indicadas por um
sublinhado no ttulo. Os usurios podem ento pre o foco.

        Para estabelecer uma tecla aceleradora para um componente
Delphi, acrescente um smbolo "&" exatamente antes da letra aceleradora
(sublinhada). Por exemplo,  se voc estabelecer a propriedade do ttulo
de um boto de comando em & Quit, ento o usu seu procedimento de evento
OnClicK.

Rtulos

Os rtulos so utilizados para o texto que identifica os componentes dos
quais esto perto (por exemplo, voc quer rotular caixas de edio).
Tambm podem ser utilizados  para exibir um texto que os usurios no
podem editar.

DICA: Voc pode utilizar um rtulo para fornecer uma tecla aceleradora
aos componentes que no tm uma propriedade de ttulo (como caixas de
edio). A idia   que quando o usurio utiliza a tecla aceleradora, o
componente  que  o valor da propriedade FocusControl do rtulo -
recebe o foco.

        Alignment - H trs maneiras possveis para alinhar um texto.
Por exemplo, se voc especificar o valor dessa propriedade em taCenter,
o Delphi centralizar  o texto dentro do rtulo. (As duas outras
possibilidades so taLeftJustify e taRightJustif
        AutoSize - Caso essa propriedade seja colocada em True, ento o
rtulo se redimensiona automaticamente para se adequar ao texto. Voc
pode fazer com que  o rtulo se redimensione automaticamente para se
adequar a um ttulo que se altera, caso colo
        Transparent - Essa propriedade  utilizada ao trabalhar com
grficos (veja o Captulo 11 ). Se voc coloc-la em True, poder ver
atravs do rtulo a figura  subjacente.
        Wordwrap - Coloque essa propriedade em True se quiser que o
texto quebre no final das linhas em vez de expandir horizontalmente.

Caixas de Edio

O componente Edit d a voc um lugar onde o usurio pode digitar uma
nica linha de informao. Caixas de edio tambm podem ser utilizadas
para exibir informaes  a um usurio. Para as caixas de edio, a
propriedade AutoSize passa  True por padro. Isso permite  caixa
expandir para levar em conta qualquer mudana de fonte  que voc fizer.
No tem nenhum efeito sobre a largura.

        AutoSelect - Voc pode optar por ter o texto em uma caixa de
edio automaticamente selecionado sempre que ele receber o foco,
especificando a propriedade  AutoSelect em True.
        CharCase - Voc pode permitir ao usurio que digite um texto
misturando maisculas e minsculas (o padro) ou pode restringir a
entrada a maisculas ou  minsculas pela mudana dessa propriedade. O
Delphi muda automaticamente a caixa daquilo que o propriedade.
        MaxLength - Esse inteiro determina a quantidade mxima de texto
que o usurio pode digitar. O valor padro de zero significa que no h
limites, exceto  aqueles determinados pelo sistema. Qualquer outro valor
restringir o nmero de caracteres.
        PasswordChar - Se quiser mascarar os caracteres que um usurio
digita, ento mude esse para um caractere no-nulo.
        ReadOnly - Coloque-o em True para impedir que o usurio coloque
texto na caixa. Essa  uma alternativa comum para utilizar um rtulo na
exibio de um texto  inaltervel.
        Text - Isso determina que texto aparea inicialmente no
componente. O valor padro  o nome do componente.
        O Evento OnChange - Esse evento  acionado sempre que o usurio
muda os dados na caixa de edio.

CUIDADO: Tome muito cuidado para no colocar nenhum cdigo no
procedimento de evento OnChange que mude o contedo da caixa. Isso far
o sistema acionar continuamente  o evento at uma quebra do programa.
(Isto normalmente  chamado de cascata de eventos.)

Componentes Memo

O componente Memo d a voc uma maneira para trabalhar com vrias linhas
de texto. Voc pode at mesmo utilizar um componente Memo para ler
rapidamente os dados  de um arquivo (veja o Captulo 9). Os componentes
Memo conseguem ler e armazenar at 255K de texto. Muitas das
propriedades dos componentes Memo, como MaxLength,  ReadOnly ou Text
funcionam de maneira similar queles no componente Edit. Se voc quiser
que o componente Memo tenha barras de deslocamento, especifique a
propriedade  ScrollBars de acordo. Embora a propriedade Align funcione
como seria de se esperar, h uma possibilidade (nova) elegante - se voc
especificar Align para alClient,  ento o componente Memo ocupa todo
espao no formulrio. O que segue  uma discusso breve das propriedades
mais importantes especficas ao componente Memo.

        WantTabs, WantReturns - Normalmente nos aplicativos Windows, a
tecla TAB movimenta voc entre os componentes. Caso queira que os
usurios sejam capazes de  inserir tabulaes em um componente Memo,
coloque essa propriedade em True. Se voc deix-l A propriedade
WantReturns, por outro lado, vai para o valor True por padro, de modo
que o usurio pode utilizar a tecla ENTER para separar linhas. Coloque-o
em  False e a tecla ENTER  enviada ao formulrio para ser processada, e
os usurios tero que utilizar a combinao ctrl+enter para separar as
linhas.

Botes e Botes de Bit

 muito comum em aplicativos Windows colocar botes em um formulrio
para que o usurio possa dar um clique neles para que faam alguma
coisa. (Embora muitos componentes  consigam detectar o evento clique e
ter, assim, um procedimento de evento OnClick associado a eles.) Os dois
tipos de boto mais comuns sustentados pelo Delphi so  chamados botes
de comando (Button  efetivamente o nome do componente) e botes de bit
(BitBtn  o nome de componente para estes).

NOTA: Estes dois botes tambm respondem aos clique duplos, embora
programar uma ao para que um boto responda a um clique duplo seja
pouco usual.

        O componente Button pode ser encontrado na pgina Standard da
paleta de Componentes e botes de bit (BitBtn) podem ser encontrados na
pgina Additional.  Tanto o boto de comando como o de bit fornecem ao
usurio a iluso de que os botes esto se Um componente BitBtn  como
um boto de comando comum, exceto que voc pode combinar nele tanto
texto quanto um grfico mapeado em bit. Voc pode utilizar um dos  mapas
de bit predefinidos do Delphi como aqueles utilizados para os botes OK,
Cancel ou Help do Delphi, ou especificar o seu prprio mapa de bits para
o boto.
       As duas propriedades mais comuns dos botes de comando e dos
botes de bit sero discutidas primeiro. Em seguida, voc ver breves
descries das propriedades  mais importantes dos botes de bit
(BitBtn).

        Cancel - Algumas vezes voc quer que seja acionado um evento ao
pressionar a tecla ESC. Para isto, especifique a propriedade Cancel do
boto como True. Assim  que tiver feito isso, o Delphi aciona o
manipulador de eventos OnClick para esse boto s
        Default- O evento OnClick para um boto padro (um cuja
propriedade Default esteja em True)  acionado sempre que o usurio
pressiona a tecla enter. Para  tornar um boto o boto padro,
especifique como True a propriedade Default do boto.

NOTA: Se o usurio pressionar ENTER quando um boto tem o foco, ento o
Delphi aciona o evento OnClick para aquele boto. Isso acontece quer
voc tenha ou no especificado  um boto de comando padro. Tambm, se
um componente Memo, cuja propriedade WantReturns  True, tem o foco,
ento o Delphi envia o retorno de carro ao componente  Memo (novamente
quer exista ou no um boto padro).

Propriedades do Boto de Bit

Agora discutiremos rapidamente as propriedades importantes especficas
dos botes de bit (BitBtn).

        Glyph, NumGlyphs - A propriedade Glyph permite-lhe especificar o
mapa de bit para um boto de bit. Quando voc especifica essa
propriedade no ambiente de  projeto, o Delphi lhe fornece uma caixa de
dilogo File Open de padro Windows para escolher o mesmo boto se
quiser, mas todas devem ser do mesmo tamanho. A propriedade NumGlyphs
permite-lhe especificar vrias imagens. (Veja a ajuda on-line para mais
informaes  sobre isso.)
        Kind - A propriedade Kind determina o tipo de grfico mapeado
por bit que aparece no boto de bit. Por exemplo, um valor de bkOk
resulta no boto "OK" verde  da marca de escolha que voc v no Delphi.
H 11 valores possveis. Coloque-o em bkCustom propriedade Glyph de
acordo).
        Layout, Margin, Spacing - A propriedade Layout determina se o
mapa de bits se encontra  esquerda,  direita, no topo ou embaixo do
boto de bit. A propriedade  Margin fornece a quantidade de espao entre
o boto de bit e sua borda. A propriedade 

Os Componentes Caixa de Lista e Caixa Combinada

Tanto o componente ListBox (Caixa de Lista) quanto o ComboBox (Caixa
Combinada) permitem-lhe exibir uma lista deslocvel de itens de onde o
usurio pode selecionar.  A diferena  que o usurio no pode mudar as
entradas em uma caixa de lista. (As caixas combinadas fornecem uma rea
de edio onde o usurio pode colocar informaes.)  Voc precisa
utilizar um cdigo para colocar os itens nesses componentes, de modo que
voltaremos a esses dois componentes no Captulo 5.
       Aqui esto discusses resumidas das propriedades mais importantes
dos componentes que voc pode querer especificar durante o projeto.

DICA: Especifique a propriedade IntegralHeight de uma caixa de lista
como True para garantir que ela no possa ser redimensionada de tal
forma que um item seja  apenas parcialmente visvel.

        Columns - Essa propriedade aplica-se apenas a caixas de lista.
Ela determina o nmero de colunas que o usurio v na caixa.
        ExtendSelect, MultiSelect - Essas propriedades tambm se aplicam
apenas a caixas de lista. Se MuItiSelect  colocado em True, ento o
usurio pode selecionar  mais do que um item na caixa de lista
utilizando tcnicas normais do Windows. A diferen que utilizar a tecla
SHIFT para selecionar um grupo adjacente e a tecla CTRL para selecionar
vrios grupos adjacentes.
        Sorted - Essa propriedade aplica-se aos dois componentes. Ela
determina se o Delphi mantm os itens em ordem  medida que voc
acrescenta mais itens  caixa  de lista ou  caixa combinada.
        Style - Essa propriedade permite-lhe determinar o estilo da
caixa combinada. H cinco possibilidades, embora apenas trs sejam muito
comuns. O primeiro  valor comum  realmente o valor padro, chamado de
csDropDown, que lhe fornece a lista suspens ter uma caixa de lista
pendente (isto , sem rea de edio). Se voc a especificar em
csSimple, no ter nenhuma lista de itens associada.

Os Componentes Caixa de Seleo e Botes de Rdio

Utilize check boxes (caixas de seleo) quando voc quiser fornecer
opes no-exclusivas ao usurio. Em seguida, voc utiliza um cdigo
para determinar se o usurio  escolhe ou cancela a escolha de uma
determinada caixa de seleo (utilizando o valor da propriedade
Checked). Por outro lado, utilize um grupo de radio buttons (botes  de
rdio) quando voc precisar apresentar escolhas mutuamente exclusivas ao
usurio. (Um bom exemplo  a caixa de lista Align no Delphi.) Sempre que
um usurio d  um clique em um boto de rdio em um grupo, os outros
botes so desligados. Em qualquer caso, como seria de esperar, quando o
usurio d um clique em uma caixa  ou em um boto, o Delphi tambm
aciona o evento OnClick para aquele componente.

NOTA: J que os botes de rdio operam como um grupo, a nica maneira em
que dois botes de rdio podem ser escolhidos ao mesmo tempo em um
formulrio acontece  se eles se encontram em componentes containers
separados.
   
 Temporizadores

Utilize um componente Timer (Temporizador) sempre que voc quiser que
alguma coisa (ou "nada" - como uma pausa) ocorra periodicamente. Por
exemplo, talvez voc queira  ter um programa que desperte periodicamente
para verificar os preos de aes. Em um nvel mais comum, se voc
quiser exibir um "relgio" em um formulrio, pode  querer atualizar o
visor do relgio a cada minuto ou at a cada segundo (veja em "O Evento
Timer" mais adiante, neste captulo, a nica linha de cdigo que isso
requer).
       Os temporizadores no so visveis ao usurio; o cone aparece
apenas durante o projeto. Por isso, onde voc coloca ou como voc
dimensionia o componente  Timer durante o projeto no  relevante.
Embora os temporizadores sejam ferramentas important De fato, o Windows
restringe todos os aplicativos (no apenas os aplicativos Delphi
processando ao mesmo tempo) em 16 temporizadores.

DICA: No exagere na criao de temporizadores j que o excesso deles
gastar uma boa poro de recursos preciosos do Windows.

        O cone do componente Timer se parece com um relgio antigo e
pode ser encontrado na pgina System da paleta Componente. H duas
propriedades importantes  de componentes Timer: Enabled e Interval.

Enabled

Enabled  uma propriedade Booleana - Verdadeira (True)/Falsa (False) 
que determina se o Timer deve ou no comear a funcionar. Se durante o
projeto voc a coloca  em True, o relgio comea a funcionar quando o
formulrio  carregado. Tambm, pelo fato dos componentes Timer serem
invisveis ao usurio, ele pode muito bem desconhecer  que um
temporizador foi ativado. Por isso, voc pode querer informar ao usurio
que um temporizador est funcionando utilizando uma caixa de mensagem,
um componente  Image, ou uma caixa de figura com um cone de relgio em
seu interior.
         Caso especifique a propriedade Enabled em False durante o
projeto, o componente Timer comea a funcionar apenas quando voc coloca
essa propriedade em True  no cdigo. Igualmente, voc pode desativar um
temporizador dentro do cdigo especificando

Interval

A propriedade Interval determina quanto tempo o Delphi espera antes de
chamar o procedimento de evento do temporizador (veja a prxima seo).
O intervalo  medido  em milissegundos, e os limites tericos esto
entre 1 milissegundo e 65.535 milissegundos (um pouco mais do que um
minuto e cinco segundos). O motivo pelo qual esses  so limites apenas
tericos  que o hardware subjacente fornece apenas 18 tiques de relgio
por segundo. Uma vez que isso  um pouco menos de 56 milissegundos por
tique de relgio, voc no pode realmente utilizar uma propriedade
Interval menor do que 56, e os intervalos que no diferem em pelo menos
essa quantidade podem  fornecer o mesmo resultado. (Embora voc possa
utilizar funes API, descritas no Captulo 5, para intervalos de tempo
menores.)
       Quanto menor voc especificar a propriedade Interval, mais tempo
de CPU  gasto acordando o procedimento de evento Timer. Se voc
especificar a propriedade  Interval em um valor muito pequeno, a
performance de seu sistema pode diminuir consideravel

NOTA: Uma propriedade Interval de zero desativa o temporizador.

        O Evento Timer - O Delphi tenta acionar o procedimento de evento
Timer com a freqncia que voc especificou a propriedade Interval. Mas,
como a CPU pode estar fazendo alguma outra coisa quando o momento
determinado pelo intervalo tiver decorrido, o procedimento de evento
Timer exatamente quando voc desejar. (O Delphi saber quando o
intervalo se esgotou; ele talvez precise apenas terminar o que est
fazendo  antes de ativar o evento Timer.) Se o tempo tiver se esgotado,
o Delphi chamar o procedimento de evento Timer assim que estiver livre
para faz-lo. (Voc pode  utilizar cdigo para determinar se decorreu
mais tempo do que o planejado.)

        Por exemplo, vamos supor que voc quer desenvolver um projeto
com um relgio que se atualizar a cada segundo. Para projetar o
formulrio, siga estes passos:
        l. Acrescente um rtulo e um temporizador a um formulrio em
branco.
        2. Especifique a propriedade AutoSize do rtulo em True e o
tamanho da fonte em 18. Especifique a propriedade Interval do componente
Timer em 1.000 ( 1.000  milissegundos = 1 segundo).

        Escreva agora o seguinte cdigo no procedimento de evento Timer,
para o componente Timer 1:

procedure TForml.Timer1Timer(Sender: TObject)
     begin
              LabeI1.Caption: = Agora :+ DateTimeToStr/Now);
     end;

        O Delphi chamar este procedimento de evento e atualizar o
tempo do relgio aproximadamente a cada segundo porque a propriedade
Interval foi colocada em  1.000. (Veja no Captulo 5 mais informaes
sobre as funes date/time que utilizamos neste 


DICA: Se voc quiser que o procedimento de evento Timer realize alguma
coisa com menos freqncia do que uma vez por minuto (a especificao
mxima para a propriedade  Interval),  preciso acrescentar uma varivel
esttica (constante digitada) ao procedimento de evento Timer. Essa
varivel permite-lhe manter controle sobre o nmero  de intervalos que
se passaram. (Veja no Captulo 4 mais sobre esses tipos de variveis.)

Os Componentes StringGrid e DrawGrid

O componente StringGrid permite-lhe construir tabelas de dados textuais.
DrawGrid permite-lhe exibir tanto texto quanto grficos. A interseo de
uma linha e de  uma coluna normalmente  chamada de clula. A maioria
das propriedades para os dois componentes da grade funciona de forma
similar. Aqui, ns abordamos apenas as  propriedades bsicas das grades.
Grande parte das propriedades das grades  til apenas por ocasio do
processamento. Por exemplo, as duas propriedades de Cells  permitem-lhe
colocar itens nas clulas e do a voc acesso aos itens em cada clula.
(Para saber mais a respeito das propriedades durante o processamento e
para  maiores detalhes sobre grades, veja a ajuda on-line.)

        ColCount, RowCount - Essas propriedades determinam o nmero de
linhas e colunas na grade. O valor padro para cada uma destas
propriedades  cinco, mas  voc pode fazer a sua reposio no cdigo ou
via Object Inspector, conforme necessrio.
        DefaultColWidth, DefaultRowHeight, Height, Width -
DefaultColWidth e DefaultRowHeight especificam a largura de uma coluna
ou a altura de uma linha. Height  e Width, como voc provavelmente
percebe, especificam a altura e largura de toda grade.
        FixedCols, FixedRows, FixedColor - Freqentemente, quando voc
est trabalhando com uma grade, vai querer utilizar determinadas clulas
para exibir informaes  o tempo todo. Por exemplo, independentemente da
maneira pela qual um usurio se desloc Linhas e colunas fixas so sempre
exibidas em cinza e devem ficar no topo e do lado esquerdo da grade. A
propriedade FixedColor fornece a cor que o Delphi deveria  utilizar para
as clulas fixas.
        GridLineWidth - Essa propriedade determina a largura da linha
entre clulas. Valores maiores fornecem linhas mais espessas, e um valor
de zero apaga a linha  de grade preta (embora voc ainda continue a ver
onde se encontram os limites das clulas
        Options - Essa propriedade aninhada tem 15 especificaes
Booleanas - Verdadeira (True)/Falsa (False) - diferentes. Essas so mais
utilizadas para determinar  como a grade aparece ao usurio ou como ele
pode manipular a grade durante o processamen em True, ento o usurio
pode editar um texto dentro de uma clula. (Consulte a ajuda on-line
para conseguir maiores detalhes sobre essa propriedade.)

Projetando Menus

Pense nos itens de menu como componentes especializados que voc
acrescenta aos seus formulrios. Os itens de menu respondem apenas a um
evento clique. Projetar  os tipos certos de menus tornar seu aplicativo
muito mais amigvel ao usurio. O Delphi permite-lhe construir nveis de
menus essencialmente ilimitados e acrescenta  tambm menus suspensos
(popups).
       Menus que contm submenus so normalmente chamados menus
hierrquicos (ou em cascata). Evidentemente que utilizar um excesso de
nveis de menus pode tornar  o aplicativo confuso ao usurio. Quatro,
com certeza,  um excesso; dois ou trs nveis  o de um determinado
item de menu quando ele v uma seta aps o item de menu.

DICA: Em vez de utilizar um monte de submenus, considere projetar uma
caixa de dilogo personalizada para as opes.

        Para acrescentar um menu ao seu formulrio, voc precisa
acrescentar primeiro um componente de menu (ou um menu suspenso) a um
formulrio. Acrescentar um componente Menu permite-lhe criar um menu que
aparece quando o usurio aciona o boto direito um componente Menu ou
Popup, basta dar um clique duplo no componente, uma vez que no importa
onde o componente aparece em um formulrio.
        Em seguida voc tem que abrir o Menu Designer. Para isto:
        * D um clique duplo dentro do componente Menu no formulrio, ou
        * D um clique duplo (ou d um clique nas reticncias) na
propriedade Itens dos componentes Menu.

        Em seguida, o Delphi exibe o Menu Designer, conforme mostrado na
prxima ilustrao.
        Observe que o primeiro item de menu (vazio) est iluminado no
Menu Designer. O Menu Designer fornece-lhe uma perspectiva de como seus
menus iro parecer. Veja o seguinte:
        Observe como os itens na barra de menus principal aparecem da
forma em que apareceriam no formulrio. Evidentemente que voc tambm
pode construir menus para os itens na barra de menus principal. Eis o
exemplo de um submenu para o primeiro item de
        Quando voc projeta um menu para um componente de menu suspenso,
o Delphi mantm apenas uma coluna, conforme mostrado na prxima
ilustrao.

Trabalhando com o Menu Designer

Vamos supor que voc esteja trabalhando com um componente de menu
principal. Se voc digitar o ttulo para o primeiro item e pressionar
ENTER, o Delphi coloca uma caixa pontilhada  sua direita e embaixo
dele, conforme mostrado aqui:

        A caixa que est embaixo corresponderia ao primeiro item no
"Menu First" e aquele  direita seria o segundo item do menu principal.
Voc pode navegar pelo Menu Designer com as teclas de seta ou com o
mouse.

NOTA: O Delphi d ao item de menu uma propriedade Name baseada no
ttulo. Para tornar seu cdigo mais simples, talvez voc queira mudar a
propriedade Name diretamente  no Object Inspector.

DICA: Se voc especificar a propriedade Caption para um menu que no
seja o principal como um hfen (-), aparece uma barra de separao no
menu naquele local.

        As barras de separao tm muitas utilidades; a mais simples
consiste em desdobrar menus longos em grupos. Se voc tem mais do que
cinco ou seis itens em um menu, verifique se h alguma maneira de
utilizar uma barra de separao para agrup-los.
        Tambm  na propriedade Caption que voc acrescenta as
reticncias que seriam utilizadas por um item de menu para indicar que
um clique no item apresentar uma caixa de dilogo.
        Observe como os itens na barra de menus principal aparecem da
forma em que apareceriam no formulrio. Evidentemente que voc tambm
pode construir menus para os itens na barra de menus principal. Eis o
exemplo de um submenu para o primeiro item de
        Quando voc projeta um menu para um componente de menu suspenso,
o Delphi mantm apenas uma coluna, conforme mostrado na prxima
ilustrao.

Trabalhando com o Menu Designer

Vamos supor que voc esteja trabalhando com um componente de menu
principal. Se voc digitar o ttulo para o primeiro item e pressionar
enter, o Delphi coloca uma caixa pontilhada  sua direita e embaixo
dele, conforme mostrado aqui:
        A caixa que est embaixo corresponderia ao primeiro item no
"Menu First" e aquele  direita seria o segundo item do menu principal.
Voc pode navegar pelo  Menu Designer com as teclas de seta ou com o
mouse.

NOTA: O Delphi d ao item de menu uma propriedade Name baseada no
ttulo. Para tornar seu cdigo mais simples, talvez voc queira mudar a
propriedade Name diretamente  no Object Inspector.

DICA: Se voc especificar a propriedade Caption para um menu que no
seja o principal como um hfen (-), aparece uma barra de separao no
menu naquele local.
   
        As barras de separao tm muitas utilidades; a mais simples
consiste em desdobrar menus longos em grupos. Se voc tem mais do que
cinco ou seis itens em  um menu, verifique se h alguma maneira de
utilizar uma barra de separao para agrup-los. 
        Tambm  na propriedade Caption que voc acrescenta as
reticncias que seriam utilizadas por um item de menu para indicar que
um clique no item apresentar  uma caixa de dilogo.

DICA: Se a propriedade Caption  especificada como vazia, mas no da
propriedade Name, o Delphi continua a reservar espao para o item de
menu. Essa  uma maneira  para fazer o menu Help aparecer na extrema
direita.

Acrescentando e Apagando Itens de Menu

O Delphi permite-lhe trabalhar dentro do Menu Designer para inserir ou
apagar itens de menu. Vamos comear por inserir um novo item de menu em
um menu existente.  Em primeiro lugar, itens de menu so inseridos 
esquerda do item selecionado na barra de menus principal ou acima
daquele que voc selecionou quando est trabalhando  com um submenu.

* Para acrescentar um item de menu: Mova o cursor para um item de menu,
em seguida, pressione a tecla INSERT. * Para apagar um item de menu:
Selecione o item e depois pressione a tecla DELETE.

Rearranjando Itens de Menu

Durante o projeto, voc pode movimentar itens de menu no Menu Designer
simplesmente arrastando-os e largando-os. A nica exceo  a que voc
esperaria: no  possvel  mover um item de menu para um seu submenu.
Enquanto voc est arrastando itens de menu, o cursor muda de formato.

NOTA: Quando voc move um item de menu, quaisquer itens de menu abaixo
dele tambm se movem.

        Por exemplo, para mover um item de menu ao longo da barra de
menu principal, arraste o item de menu ao longo da barra de menu at que
a ponta do cursor de  arrasto aponte para a nova posio. Em seguida,
solte o boto do mouse. Se voc mover um it o menu no momento em que o
cursor apontar para o menu novo.

Especificando Teclas Aceleradoras e Simplificaes de Teclado

Como voc viu antes, as teclas de acelerao permitem ao usurio acessar
um comando de menu a partir do teclado pressionando ALT e a letra
apropriada, indicada em  seu cdigo pelo smbolo "&" que a precede. Da
mesma forma que com componentes, voc indica a tecla aceleradora
colocando o smbolo "&" antes da letra.
       Por outro lado, as simplificaes pelo teclado permitem ao
usurio ativar o item de menu sem ter que abrir o menu. Para estabelecer
uma simplificao pelo  teclado para um item de menu:

l. Selecione o item de menu. 2. Entre com um valor para a propriedade
ShortCut do item. (Voc tambm pode dar um clique duplo na coluna da
direita no Object Inspector para ver uma lista com  simplificaes
comuns.)

CUIDADO: O Delphi no verifica se voc j utilizou a simplificao ou a
combinao da tecla aceleradora antes.

Criando Menus Aninhados

O Delphi permite que voc faa de um item de menu a entrada para um
outro menu. Isso  indicado por uma seta  direita do item de menu. Para
criar um menu aninhado  (em cascata), selecione primeiro o item de menu
que ter o submenu. Depois:

1. D um clique no boto direito do mouse no Menu Designer e escolha
Create Submenu a partir do SpeedMenu. 2. Coloque um nome para o primeiro
item do submenu. 3. Pressione ENTER (ou a tecla de seta para baixo
quando o foco est no projetista de menu) para criar um espao para o
prximo item de submenu.

        Continue com esse processo at estar satisfeito. Quando estiver,
pressione ESC para voltar ao nvel de menu anterior ou d um clique
dentro do Menu Designer  para ir at um lugar diferente. (Como sempre,
voc pode arrastar um item de menu existent

DICA: Se voc mover uma estrutura de menu existente para um outro lugar
no Menu Designer, seus submenus movem-se com ela. Isso lhe d um menu
aninhado instantaneamente.

Modelos de Menus

Delphi  fornecido com alguns modelos de menus j construdos e voc
tambm pode criar os seus prprios modelos de menus para que sejam
reutilizados. Para acrescentar  um modelo de menus, voc tem que estar
no Menu Designer. Assim:

1. D um clique no boto direito do mouse para poder abrir o Speed Menu.
2. Escolha Insert From Template.

        Nesse ponto, aparece a caixa de dilogo Insert Template,
fornecendo-lhe uma lista com os modelos de menus atualmente
/disponveis. Escolha aquele que voc  quer acrescentar. (Assim voc
pode utilizar as tcnicas j conhecidas para personaliz-lo.)

NOTA: Voc ter que rescrever os manipuladores de evento OnClick para os
itens no modelo de menus. Talvez voc tambm tenha de ajustar a
propriedade Name de todos  itens de menu se no gostar daqueles criados
pelo Delphi.

        Depois que voc tiver projetado um menu, faa o seguinte para
salv-lo para que seja reutilizado como modelo:

1. D um clique no boto direito do mouse para abrir o SpeedMenu. 2.
Escolha Save As Template.

        Aparece a caixa de dilogo Save Template. Esta caixa de dilogo
permite-lhe colocar uma pequena descrio do menu-voc no precisa
seguir as convenes  normais de nomenclatura DOS/Windows.

Tornando os Itens de Menu Responsivos

Os itens de menu acionam um evento apenas quando o usurio d um clique
em um item. Para chegar at o modelo para esse manipulador de eventos:

* D um clique duplo no item de menu no Menu Designer.

Ou, se voc est no formulrio: * D um clique no item de menu.

A Representao ASCII de um Formulrio

A idia da representao ASCII de um formulrio  simples: ela contm
uma descrio textual das propriedades do formulrio. Isso  necessrio
porque normalmente  o Delphi armazena o arquivo (.DFM) do formulrio em
um formato binrio que  totalmente ilegvel. A representao ASCII de
um formulrio  uma ferramenta de depurao  extremamente til. Com sua
utilizao, voc pode verificar facilmente se as propriedades do
formulrio e de seus componentes so exatamente o que voc quer. 
tambm  de grande ajuda ao realizar um controle de verso no
desenvolvimento de um projeto complexo.

DICA: Voc pode modificar as propriedades de um formulrio ou de seus
componentes utilizando um editor de texto comum na representao ASCII.

        Voc tem de abrir um arquivo Form para poder fazer a sua
converso, mas no pode ter o mesmo formulrio aberto simultaneamente
nos formatos DFM (visual)  e TXT (texto). Em particular, isso significa
que voc tem de trabalhar com um arquivo .DFM j formato ASCII:

1. Escolha File|Open File. 2. Selecione o arquivo de formulrio (.DFM),
que voc quer converter para ASCII, a partir da caixa de dilogo que
aparecer. O Delphi trar o arquivo para o ambiente  de projeto no
formato ASCII. 3. Escolha agora File |Save File As e utilize uma
extenso de arquivo .TXT para o nome de arquivo.

        Para converter uma verso de texto de um arquivo Form de volta
ao formato binrio (.DFM) faa o seguinte:
       
        1. Escolha File |Open File.
        2. Selecione o arquivo de texto que voc quer reconverter do
formato de texto para o binrio na caixa de dilogo que aparecer. O
Delphi vai coloc-lo no  ambiente de projeto no formato ASCII na janela
do Code Editor.
        3. Escolha File|Save As - apenas agora d ao arquivo uma
extenso .DFM.

        Para ver um exemplo da representao ASCII de um formulrio,
faa o seguinte:

        1. Inicie um projeto novo e d ao formulrio o ttulo ASCII.
        2. Acrescente um nico boto de comando no tamanho padro, na
posio padro, utilizando o nome padro Command 1.
        3. Salve o arquivo Form.
        4. Converta o arquivo Form em ASCII, utilizando as tcnicas
relacionadas acima.

O arquivo ser assim: object Form1: TForm1 Left = 200 Top = 99 Width =
435 Height = 300 Caption = 'ASCII' PixeIsPerlnch = 96 object Button1:
Tbutton Left = 169 Top =120 Width = 89 Height = 33 Caption ='Button1'
TabOrder = 0 end end

     Como voc pode ver, a representao ASCII contm uma descrio
textual do formulrio e as propriedades essenciais dos botes de
comando. Por exemplo, o novo  ttulo do formulrio  refletido pela
seguinte linha de cdigo:
       
         Caption = 'ASCII'

        O formato ASCII para um componente comea parecendo algo como:
       
         object Button1= Tbutton

        Isso indica de que classe o objeto vem. Veja o Captulo 6 para
saber mais a esse respeito.




 
