3. O Ambiente
O Delphi oferece dois níveis de programação distintos. Existe o nível do que
o manual chama de designer, que se utiliza dos recursos de programação visual
e aproveita componentes prontos, e o nível do component writer, que escreve os
componentes para o designer utilizar nas aplicações.
Podemos dizer que o component writer programa em um nível mais baixo e o
designer em um nível mais alto.
Para este curso, consideraremos a programação no nível do designer. Quando
ativamos o Delphi, a tela inicial é parecida com a figura 1. Na janela
superior, temos a barra do menu principal do Delphi, à esquerda a SpeedBar, com
as opções mais comuns e à direita a paleta de componentes. Estes componentes
são a base da programação visual e é onde o designer vai buscar recursos
para sua aplicação.
Abaixo da SpeedBar, está a janela do Object Inspector, que permite visualizar e
modificar as propriedades e eventos de todos os componentes. É também
largamente utilizado pelo designer. Abaixo da paleta ficam a janela de código-fonte
e as janelas que estão sendo construídas.
Figura
1 - Tela inicial do Delphi
Primeiro contato
Para iniciarmos poderíamos criar a versão Delphi do famoso “Hello Word”,
mas vamos partir para alguma coisa um pouco mais interessante e aproveitar para
apresentar uma propriedade que pode ser útil no futuro. Como os programas em
Windows são orientados a eventos é comum desativar opções de menus e botões,
até que o usuário ative as opções que o sistema precisa para inicializar.
Neste primeiro programa, vamos criar uma espécie de gangorra eletrônica. Mas
antes de começar, vejamos o que está acontecendo no Delphi.
Se a tela está parecida com a figura 1, então não há nenhum projeto
selecionado e o Delphi tomou a liberdade de criar um novo projeto para você,
chamando-o de Project1. Um projeto é a coleção de arquivos necessários para
compilar o sistema. Como toda aplicação precisa de pelo menos um form (Form1),
ele também foi criado. Finalmente, todo form tem uma Unit correspondente que é
mostrada no Editor de Código (Unit1).
Não há problema em utilizar esse projeto inicial que
é oferecido pelo Delphi, mas é uma boa idéia renomear e salvar o
projeto o quanto antes. Se você não escolher outro diretório, o projeto será
salvo no diretório do Delphi e não é aconselhável salvar todos os seus
projetos no mesmo diretório. Portanto vamos começar este programa criando um
novo diretório para ele. Após isso, vamos seguir os seguintes passos:
1. Selecione a página Standard na paleta de componentes e clique no componente
Buttom. A seguir clique no form. Um botão deve aparecer no form. Coloque mais
dois botões.
2. Alinhe na horizontal os dois primeiros e coloque o terceiro logo abaixo dos
dois. Se quiser um alinhamento exato, use a opção Edit/Align... do menu. Para
marcar mais de um componente, deixe o Shift pressionado enquanto clica os
componentes. Brinque um pouco com o tamanho dos botões e do form.
3. Clique o primeiro botão para selecioná-lo, a seguir procure no Object
Inspector a propriedade Caption. Mude a string para “ON”. Para o segundo botão
a string é “OFF” e para o terceiro “Close”. Para o segundo botão, mude
a propriedade Enabled para False.
4. Neste ponto é uma boa idéia renomear e salvar o projeto. Escolha a opção
File/Save project as...Selecione o diretório criado para o projeto e use o nome
Main.pas para a unit1 e Gangorra para o projeto.
5. Clique a área pontilhada do form e em seguida ache a propriedade Caption no
OI. Mude a string para “Gangorra”. Aproveite e mude a propriedade Name para
“fmMain”.
6. Dê um clique duplo sobre o primeiro botão. A janela de código será
ativada já com a função correspondente ao evento OnClick criada e posicionada
sob o cursor. Digite o seguinte código:
Button1.Caption := ‘OFF’;
Button1.Enabled := False;
Button2.Caption := ‘ON’;
Button2.Enabled := True;
7. Selecione a janela do form e faça o mesmo com o segundo botão, mas o código
fica invertido:
Button2.Caption := ‘OFF’;
Button2.Enabled := False;
Button1.Caption := ‘ON’;
Button1.Enabled := True;
8.
Finalmente para o terceiro botão o código é simplesmente:
Close;
9. Já podemos executar o programa pressionando F9.
O que está acontecendo: O evento OnClick ocorre sempre que clicamos o mouse
sobre um componente. O Delphi se encarrega de determinar qual é o componente
que deve responder ao evento e direciona o evento para ele. Neste caso, usamos
este evento para ativar/desativar botões manipulando a propriedade Enabled, que
determina se o componente está ativo ou não. Quando o componente está
inativo, ele não responde aos eventos. Também usamos a propriedade Caption
para mudar a mensagem que aparece nos botões. Finalmente usamos o método Close
do form para fechar a aplicação.
Algumas Propriedades mais utilizadas:
Name: É comum a todos os componentes da paleta. O Delphi nomeia
automaticamente todos os componentes que são incluídos no form (inclusive o
proprio form). Usa o nome da classe do componente mais um número sequencial. O
nome atribuído pelo Delphi pode ser mantido, mas é aconselhável renomear os
componentes que serão referidos no programa. Por exemplo, no programa da
Gangorra, Button1 e Button2 deveriam ser renomeados, já que é feita referência
a eles no código fonte, já para o Button3 não há necessidade por que não há
referência a ele. Quando voce renomeia um componente, o Delphi atualiza
automaticamente todo o código gerado pelo Delphi, o que inclui o cabeçário da
Unit, os eventos do componente e as propriedades de outros componentes que fazem
referência ao componente renomeado, mas não atualiza o código gerado por você.
Exemplo: se renomearmos agora o Button1, o Delphi atualizará o cabeçário da
unit, o nome dos eventos de Button1, mas você terá que atualizar as referências
que você fez ao Button1 com o novo nome. Aliás esta é uma regra geral no
Delphi: ele nunca modifica automaticamente o código gerado pelo programador,
mesmo que esteja em comentário.
Caption: Todos os componentes que podem apresentar um rótulo tem esta
propriedade. Armazena a string que será mostrada quando o componente for
desenhado.
Left e Top: Esquerda e Topo. Armazenam a posição do componente em relação
ao form ou painel que o contém. Movendo o componente, estas propriedades se
atualizam automaticamente, e alterando estas propriedades, o componente é
movido.
Height e Width: Altura e comprimento do componente. Idem acima.
Font: Permite selecionar tamanho e tipo da fonte que será usada para
escrever o texto no componente.
Color: Cor do componente. Existe uma lista de cores padrão usadas pelo
Windows e pelo Delphi, mas é possível definir qualquer cor através de seus
componentes RGB.
TabOrder: Ordem do componente no Form ou painel. Quando há vários
componentes selecionáveis no Form
ou painel, a tecla Tab permite navegar entre os componentes. Esta
propriedade define a ordem em que os componentes são selecionados quando o usuário
tecla Tab.
Hint: (Dica) Este é um recurso muito útil e fácil de usar. Permite que
apareça um texto de ajuda quando o usuário posiciona o cursor do mouse sobre
um componente. Todos os componentes podem ter Hint. Na propriedade Hint, voce
deve digitar a frase que deve aparecer. Veja a propriedade abaixo.
ShowHint: Ativa o hint para o componente. Se estiver desligado, o hint não
é mostrado.
Alguns Eventos básicos:
OnClick: É gerado cada vez que o botão esquerdo do
mouse é pressionado e solto. O evento só ocorre quando o usuário
libera o botão. O Delphi já direciona o evento para o componente que está
debaixo do cursor do mouse.
OnDblClick: Gerado quando é feito um duplo clique no botão esquerdo.
OnKeyPress: Gerado quando o usuário pressiona (e libera) uma tecla no
teclado.
OnEnter: Gerado quando o foco de atenção do Windows “cai” sobre o
componente. Exemplo: Suponha uma tela de entrada de dados, onde vários campos
devem ser digitados. Quando a tela é apresentada, o foco, ou o cursor de texto,
está sobre o primeiro campo. Depois de digitar o campo, o usuário pressiona
Tab para passar para o campo seguinte. Veja que o que passa para o campo
seguinte é a atenção da aplicação e do Windows. Essa atenção é chamada
de foco, ou focus em inglês. Este evento é gerado assim que o componente
recebe o foco, antes de executar qualquer código do componente.
OnExit: Gerado imediatamente antes de o foco deixar o componente.
OnResize: Gerado quando o tamanho do componente é alterado. É usado
principalmente em forms e painéis.
OnChange: Gerado quando o valor do componente muda. Só é aplicado em
componentes que permitem edição de seu conteúdo.
Alguns métodos úteis
Show: Desenha o componente. Se for uma janela (form) ela é desenhada e
ativada.
Close: Fechar. Aplicado geralmente em forms e arquivos. Quando utilizado
no form principal, encerra a aplicação.
Repaint: Repintar. Redesenha o componente ou form.
Refresh: Tem o mesmo efeito que o Repaint, mas antes de desenhar, apaga o
componente. Quando aplicado em arquivos, faz com que o buffer do arquivo seja
recarregado.
Create: Aloca memória para criar um componente ou form, dinâmicamente.
Free: Libera a memória alocada com o Create.