sábado, 26 de setembro de 2009

A "arte" de programar em Delphi

Após uma pausa de publicações no Blog, resolvi que retomaria minhas atividades adotando uma prática que é o “sonho” de todo aprendiz: ir direto ao assunto!

Todo mundo que começa a aprender alguma coisa tem uma certa ansiedade em ver logo o resultado. É o aluno de violão que, após a primeira aula, quer logo dar um show e é o aprendiz de Delphi que quer, em poucas horas de “vôo”, desenvolver um sistema e ganhar dinheiro com isto. Eu não os culpo: vivemos na era da ansiedade!

Fui professor durante anos. E algumas pessoas dizem que nasci para ser professor. Sempre que perguntam algo, procuro não apenas responder “isto é assim ou isto é assado”; procuro sempre dar uma resposta ampla, como num esforço para sempre colocar o texto dentro do contexto. Isto é didática!

Mas, conhecendo a comunidade de TI como eu conheço, principalmente os neófitos, vou a partir deste artigo usar uma abordagem diferente. Ao invés de continuar apresentando o Delphi como pretendia, passo-a-passo, apresentando a lógica de cada componente, para só depois juntar tudo numa aplicação, vou fazer diferente: vou apresentar uma aplicação pronta – funcionando – e somente depois é que vou entrar nos detalhes. Assim, pretendo diminuir a ansiedade do leitor, dando-lhe algo “palpável”, para somente depois aprofundar no conhecimento que é necessário ter de cada componente utilizado.

O Delphi é um ambiente vivo!

Para mostrar uma das características que mais gosto no Delphi, vou começar com uma aplicação de banco de dados 100% funcional, que será feita sem que o programador digite uma linha sequer de código! É isto mesmo: vamos fazer uma aplicação de banco de dados, onde você poderá incluir, alterar, e até mesmo excluir dados de um banco de dados, sem escrever nenhuma linha de código!

O banco de dados de exemplo. O que é a BDE

Quando você instala o Delphi, são instaladas várias pastas contendo aplicações de exemplo e uma pasta contendo um banco de dados também de exemplo. Normalmente, este banco de dados fica na pasta C:\Arquivos de programas\Arquivos comuns\Borland Shared\Data.

A BDE é a Borland Database Engine. Já vou logo avisando: não usem a BDE profissionalmente! Ela teve seus dias de glória. Mas hoje está completamente obsoleta. Salvo em raríssimas exceções, não se justifica utilizar a BDE nem criar banco de dados estilo PARADOX. O motivo de apresentar a BDE aqui é meramente didático. Lembrem-se: estamos apenas conhecendo o Delphi.

Para começar, selecione File / New Application e acrescente os seguintes componentes no Form1:

  • Da paleta BDE, adicione um componente Table;
  • Da paleta Data Access, adicione um componente DataSource.

Agora faça as seguintes modificações, configurando algumas propriedades dos componentes (use o Object Inspector para isto):

- Em Form1

  • Caption: BDE Demo
  • ClientHeight: 300
  • ClientWidth: 540
  • Name: frmMain

- Em Table1

  • DatabaseName: DBDEMOS (use a drop down list Box para escolher o nome)
  • Name: tblCountry
  • TableName: country.db (use a drop down list Box para escolher o nome)

- Em DataSource1

  • Name: dsCountry
  • DataSet: tblCountry

OBS.: Se você não sabe como fazer isto, é simples. Procure o componente na paleta citada. Ao encontrá-lo, clique uma vez nele e depois uma vez dentro da janela. Ele será inserido exatamente na posição da janela onde você clicar.

Agora clique no botão Save All e salve o projeto. Quando for solicitado, informe uniMain, para o nome da Unit e BDEDemo, para o nome do projeto.
Tudo correndo bem, a antiga Form1 deve se parecer com a figura abaixo.



Agora as coisas vão ficar mais interessantes!

Clique duplo em tblCountry, para exibir o Fields Editor. Alternativamente, você pode clicar com o botão direito em tblCountry e selecionar Fields Editor... Seja como for, irá aparecer uma janela flutuante. Com a janela flutuante do Fields Editor ativa, aperte Ctrl+F. O resultado será como mostrado na figura abaixo.


Os nomes exibidos agora na lista nada mais são que os campos da tabela Country. Selecione todos os campos da lista (Ctrl+L) e arraste-os para o canto superior esquerdo da janela principal (agora com o caption BDE Demo) e solte. O resultado deve ser como o mostrado na figura abaixo.


OMG! O que aconteceu?!

É o “milagre” do Delphi. Por isto que ele é da categoria RAD – Rapid Application Environment.
Agora vamos ver outra coisa interessante. Selecione tblCountry e, no Object Inspector coloque a propriedade Active = True e observe a tela! Hmmm, interessante, não?

Observe que, além de agora você estar vendo o conteúdo da tabela Country sendo exibido nos componentes que foram inseridos automaticamente pelo Delphi, você poderá ver que na janela flutuante do Fields Editor apareceu uma barra de navegação de banco de dados (DBNavigator). Clicando nos botões de navegação, você pode avançar ou retroceder pela tabela Country, vendo seu conteúdo.

Através deste recurso, você pode pré-visualizar os dados nos componentes e desta forma fazer ajustes de tamanho, largura, altura, etc, sem a necessidade de ter que rodar a aplicação para ver “como seria”.

Podemos ver, por exemplo, que os campos abaixo do nome (Name) estão exageradamente grandes. Podemos ver também que a tela (janela) está muito larga para os dados que estamos apresentando.

Usando o mouse, podemos selecionar um componente e, usando as guias de reajuste alterar as dimensões dele facilmente. Da mesma forma, podemos arrastá-lo para outras posições e etc.

Ajuste as dimensões dos componentes e da janela, de modo a que fiquem mais ou menos como mostrado na figura abaixo.



Observem na figura que surgiu um novo componente. É um DBNavigator. Para adicioná-lo, procure-o na paleta Data Controls. As configurações do DBNavigator são:

  • DataSource: dsCountry
  • Name: dbnCountry
Experimentando a aplicação

Agora que já concluímos nossa aplicação(!!!), vamos rodar. Cliquem no botão Run (ou apertem F9) para ver o programa rodando. Fiquem à vontade para usar a DBNavigator e navegar pela tabela Country e até mesmo incluir alguma coisa. Vejam na figura abaixo que fiz um teste de inclusão e funcionou.



As coisas no mundo visual tendem a ser por demais intuitivas. Mas me sinto obrigado a informar-lhes que para incluir é só clicar no botão com o sinal de mais (+) e para excluir no sinal de menos (-). Á! Quando estiver incluindo (ou editando), para confirmar, clique no botão com o sinal de “Check” (parece um V) ou no botão com um X, para cancelar.

Como pudemos ver, criamos uma aplicação de banco de dados 100% funcional, sem digitar nenhuma linha de código! No próximo artigo vou explicar que “mágica” é esta e aproveitar para incrementar este pequeno aplicativo de exemplo. Até lá...

sábado, 27 de junho de 2009

A IDE do Delphi


O que é o Delphi


Delphi é um ambiente de programação visual orientado ao objeto (OO) para desenvolvimento rápido de aplicaçõs (RAD). Usando Delphi, você pode criar aplicações altamente eficientes para o sistema operacional Windows, da Microsoft. Delphi provê todas as ferramentas que você precisa para desenvolver, testar e distruibuir aplicações, incluindo uma grande biblioteca de componentes reutilizáveis, uma suite de ferramentas de desenvolvimento, modelos de aplicações, formulários e assistentes de programação.

Obtendo Ajuda

Durante o tempo em que estiver desenvolvendo seus programas, você precisará consultar a referência do Delphi, seja em livros, na documentação oficial ou no Help que acompanha o Delphi. Então aprender a obter ajuda é o primeiro passo necessário na sua longa jornada de programador.

Para mim, o melhor “livro” de Delphi que existe na face da terra se chama F1! F1, como sabem, é a maneira de se obter ajuda no Windows. O sistema de ajuda do Delphi é incrivelmente poderoso, pois emprega uma tecnologia sensível ao contexto. A depender de onde esteja o cursor na hora que você aperta F1, surgirá uma tela de ajuda com informações a respeito do que estava próximo ao cursor.

Abaixo, uma série de imagens que falam por si mesmas.


Obtendo ajuda a respeito da propriedade de um Objeto, a partir do Object Inspector.



Obtendo ajuda a respeito de uma expressão, a partir do Code Editor.



Obtendo ajuda a respeito de um Objeto, a partir do Form Designer.

A IDE do Delphi e seus elementos

Identifique os números na imagem abaixo, para conhecer os elementos que compõem a IDE do Delphi, conforme as explicações que se seguem:

1: Menu e Barra de Ferramentas (menu and Toll bars). Local com características e ferramentas para auxiliá-lo no desenvolvimento de aplicações.
2: Paleta de Componentes (Component Palette). Contém componentes prontos para serem adicionados nas aplicações.
3: Editor de código (Code editor). Exibe e permite editar o código das units. As units são as unidades que compõem uma aplicação Delphi.
4: Form Designer. Formulário (janela) em branco onde se faz o desenho da interface com o usuário das aplicações. Uma aplicação pode ter vários Forms.



5: Code Explorer. Exibe as Classes, Variáveis, e Rotinas de uma Unit e permite navegar entre elas facilmente.
6: Object Tree View (Árvore de Visualização de Objetos). Exibe uma visão hierárquica dos componentes em um Form.
7: Object Inspector. Usado para selecionar e alterar as propriedades (Properties) de um objeto bem como selecionar seus manipuladores de evento (Events).
8: Align Tool. Ferramenta para facilitar o alinhamento dos componentes em um Form.

Tool Bars

A janela principal da IDE do Delphi fica na parte de cima. Ela contém o menu principal, as barras de ferramentas (tool bars) e a paleta de componentes. Embora todos estes itens sejam “organizáveis” e possam ficar em posições ao gosto do programador, a IDE os mantem agrupados da forma mais conveniente.

Identificar e saber como funcionam estes elementos é crucial para um bom desempenho durante a programação pois, invariavelmente, um programador terá que interagir quase que o tempo todo com eles. Vamos começar pelas tool bars.



Na medida em que formos avançado no conhecimento da programação Delphi, citaremos estes elementos. Em caso de dúvida, consultem esta tela.

Sem dúvida, a View Toolbar é a que um programador mais interage durante a etapa de desenvolvimento. Com o passar do tempo, ele termina memorizando as teclas de atalho associadas às funções da view toolbar. São elas: F12 → Toggle form/unit; Shift+F12 → View form; Ctrl+F12 → View unit.

Um Projeto Delphi

Como já sabemos, uma aplicação Windows é composta de, no mínimo, uma Classe de Aplicação (a aplicação propriamente dita) e uma Classe de Janela. Um projeto Delphi é composto de vários arquivos, com a finalidade de representar e/ou armazenar elementos da aplicação, até que ela seja compilada e distribuída. Por esta razão, uma das coisas que devemos aprender é quais arquivos são estes e como salvá-los adequadamente.

Dando nome aos elementos e salvando o projeto

Uma boa prática de programação é dar nomes consistentes e razoáveis aos elementos de uma aplicação. Quando iniciamos o Delphi, ele é aberto com os elementos básicos de uma aplicação, nomeados de uma forma padrão. O projeto se chama Project1 e o Form principal se chama Form1. Convém renomeá-los e salvá-los, antes de mais nada.

Retomando o projeto de exemplo dado no artigo anterior (o que calcula o número aproximado de dias vividos), vamos agora praticar a nomeação dos elementos de uma aplicação. Neste projeto, usaremos os seguintes nomes:

frmMain: Nome do form principal (Form1)
Calcula dias vividos: Caption do form principal (o título a ser exibido na barra de títulos da janela)
uniMain: Nome da Unit do form principal
CalculaDias: Nome do projeto

Sempre que iniciar um projeto, nomeie logo o Form principal, mudando no Object Inspector a propriedade Name do Form, e também defina logo um título a ser exibido na barra de títulos do Form.

Feito isto, clique no botão Save All, para salvar a Unit do Form e também o Projeto. Veja a seguir a sequência de telas para realizar esta operação.


Salvando a Unit


Salvando o Projeto

Renomeando os elementos

Se você por acaso já havia gravado este projeto com outros nomes, você deve usar as opções Save As... e Save Project As... do menu File. Save As... salva com outro nome a Unit/Form ativa no momento da seleção desta opção e Save Project As... salva o projeto com outro nome.

Seja nomeando ou renomeando, o resultado deverá ser como este:


Projeto devidamente nomeado. Observe na barra de títulos da janela principal do Delphi o nome do projeto (CalculaDias); O título na barra de títulos do Form principal da aplicação (Calcula dias vividos); o nome do Form principal no Object Inspector (frmMain).

Colocando os elementos num local adequado

Outra boa prática de programação é organizar seus projetos em pastas. Para este projeto, usei o seguinte caminho na hora de salvar os arquivos → D:\Projetos\Blog_Delphi\Artigo02.

Os elementos de um projeto

Agora que salvamos o projeto em um local adequado, vamos identificar e analisar seus elementos. Primeiro, analise a figura abaixo.




Nosso projeto salvo tem 3 + 1 arquivos fundamentais:

CalculaDias.dpr → O que dá nome projeto em si. Equivale ao arquivo exibido quando selecionamos a opção View source, do menu Project;
uniMain.pas → O código fonte de nosso Form principal (frmMain);
uniMain.dfm → O layout de nosso Form principal. Contém a descrição e propriedades de todos os componentes que colocamos no Form.

Estes são os elementos realmente essenciais de um projeto e que se você perder qualquer um deles será impossível compilar o projeto. Muito cuidado com eles! Agora vou explicar o + 1.

CalculaDias.res → Arquivo de recursos (Resource File) da aplicação.

Uma aplicação Windows pode ter um ou mais componentes chamados de Arquivos de Recursos no quais são inseridos elementos da aplicação que não sejam parte do código. Imagens, músicas, arquivos compactados e outros executáveis são exemplos de arquivos podem ser colocados num arquivo de recursos. Durante a compilação estes recursos são “embutidos” no executável, mas só são carregados quando a aplicação solicita. Isto ajuda o Windows a diminuir a carga que uma aplicação pode ter na memória.

Mesmo que você não crie nenhum arquivo de recursos em tua aplicação, o Delphi irá criar automaticamente um arquivo de recursos com o mesmo nome do Projeto. Isto se deve ao fato de que diversos componentes do Delphi utilizam imagens e outras propriedades que, por sua natureza, devem ser colocadas em uma arquivo de recursos. Daí este arquivo ter aparecido.

Vamos continuar analisando mais alguns elementos:

uniMain.dcu → Unit compilada;
CalculaDias.cfg → Arquivo de configurações do Projeto;
CalculaDias.exe → Arquivo executável do projeto.

Todos os demais elementos são relevantes, no momento.

CalculaDias.exe é o teu projeto inteiro compilado. A não ser que tua aplicação seja muito avançada, este é o único arquivo que precisa ser distribuído aos teus futuros clientes. Esta é uma das características que mais gosto no Delphi: ele gera código puro para o Windows.

Diferentemente de outros tipos de compiladores, você não precisa distribuir um “Run-time environment” junto com tua aplicação Delphi. Visual Basic e .NET, por exemplo, obrigam que o usuário de um sistema desenvolvido neles instale uma “tralha” com mais de 32MB, senão eles não funcionam!

sexta-feira, 26 de junho de 2009

O Windows e a IDE do Delphi


Iniciando a série de artigos sobre Delphi, vou falar primeiramente sobre o que significa desenvolver programas para o Sistema Operacional Windows. Por quê? Por uma simples razão:


88,88% dos “deslizes” cometidos por iniciantes da programação para Windows se devem justamente ao fato do total ou parcial desconhecimento de como o Windows funciona e de como os aplicativos para Windows devem funcionar.
Os usuários de aplicativos para Windows estão há décadas habituados à um padrão. E foi este padrão que fez do Windows um sucesso e, talvez, a maior contribuição da Microsoft para o mundo da informática. Desconhecer estes padrões e sair “reinventando a roda” é uma aposta no fracasso de suas aplicações.

É por isto que o título do artigo é “O Windows e a IDE do Delphi” e não “A IDE do Delphi e o Windows”!

Pode parecer tolice, mas juro que não é! Não é à toa que a Microsoft Press tem publicado há décadas um livro cujo título é: “Guia do Programador Microsoft”. Neste livro não há uma linha sequer de código. Tudo o que há nele são recomendações de coisas que você deve fazer e de coisas que você não pode fazer, quando estiver programando para Windows.

A frase que mais gostei neste livro é:

“Para ser um bom programador para Windows, você deve ser um bom usuário de Windows!”

Um artista plástico, ao olhar um quadro, tem a impressão que as outras pessoas têm. Mas justamente por ser um artista que também pinta quadros, ele passa a analisar a técnica, que tipo de tinta pode ter sido usada, faz um certo julgamento ou crítica do quadro que está vendo, etc.

Um programador, da mesma forma, não pode mais olhar para um programa como uma “pessoa comum”. Ele precisa pensar em como aquilo pode ter sido feito, que técnicas o autor do programa pode ter utilizado, etc.

Enfim, um programador é uma pessoa analítica, que observa de forma crítica seu “universo”, que é o mundo da programação de computadores, tentando desvendar o que está por trás das aparências.


O que é um Sistema Operacional


Uma pesquisa rápida no Google mostra uma série de links explicando o que é isto. A Wiki Educartis, por exemplo, fala o seguinte, à respeito dos Sistemas Operacionais:


Um sistema operacional é um programa ou um conjunto de programas cuja função é servir de interface entre um computador e o usuário.

Existem dois modos distintos de conceituar um sistema operacional:

  • Pela perspectiva do usuário ou programador (visão top-down): é uma abstração do hardware, fazendo o papel de intermediário entre o aplicativo (programa) e os componentes físicos do computador (hardware); ou
  • Numa visão bottom-up, de baixo para cima: é um gerenciador de recursos, i.e., controla quais aplicações (processos) podem ser executadas, quando, que recursos (memória, disco, periféricos) podem ser utilizados.”

(pausa) A nós interessa mais o primeiro ponto, principalmente os grifos que fiz. (continuação)

Um sistema operacional pode ser visto como um programa de grande complexidade que é responsável por todo o funcionamento de uma máquina desde o software a todo hardware instalado na máquina. Todos os processos de um computador estão por de trás de uma programação complexa que comanda todas a funções que um utilizador impõe à máquina. Existem vários sistemas operativos; entre eles, os mais utilizados no dia a dia, normalmente utilizados em computadores domésticos, são o Windows, Linux e Mac OS X.

Do ponto de vista de um programador, o computador é um aparato sofisticado ao qual ele pode dar instruções para exercer uma tarefa específica, com um propósito determinado, para o benefício de quem utiliza o computador. O modo de dar instruções chama-se programação.


Os Sistemas Operacionais e suas APIs


Antigamente, programar um computador era coisa acessível apenas a engenheiros e pessoas extremamente conhecedoras da máquina como um todo, verdadeiros cientistas da computação. Um programador tinha que conhecer e dominar detalhes de hardware, tais como enviar um byte pela porta da impressora ou “escrever” informações no dispositivo de video. Era uma tarefa árdua que ele precisava repetir toda vez que fosse programar. Todo e qualquer programa, por mais simples que fosse, forçava o programador a escrever milhares de linhas de código somente para fazer o hardware funcionar de modo a atender uma necessidade lógica (finalidade essencial do software). Ou seja, um programador precisava se dedicar a coisas que pouco ou nada tinham a ver com o objetivo que ele tinha em mente. Algo como desenvolver uma folha de pagamento, por exemplo.


Com o passar do tempo, e com o avanço da computação, os programadores perceberam que podiam desenvolver bibliotecas de funções específicas para cada detalhe de hardware. Assim, surgiram bibliotecas de impressão, bibliotecas de manipulação de video, manipulação de arquivos, etc. Desta forma, usando estas bibliotecas prontas, um programador podia dedicar sua capacidade intelectual para resolver o problema que lhe era apresentado, algo como a folha de pagamento já citada, deixando de lado os “detalhes íntimos” do hardware.

Um Sistema Operacional é basicamente isto para um programador: um conjunto gigantesco de funções prontas, desenvolvidas especificamente para cuidar de detalhes do hardware, e que são disponibilizadas através de uma API, que vem de Application Programming Interface ou Interface de Programação de Aplicativos.

A gloriosa Wikipédia diz o seguinte:

De modo geral, a API é composta por uma série de funções acessíveis somente por programação, e que permitem utilizar características do software menos evidentes ao utilizador tradicional.

Por exemplo, um sistema operacional possui uma grande quantidade de funções na API, que permitem ao programador criar janelas, acessar arquivos, criptografar dados, etc. Ou então programas de desenho geométrico que possuem uma API específica para criar automaticamente entidades de acordo com padrões definidos pelo utilizador.

O Windows Vista, por exemplo, tem 60 milhões de linhas de código! Retirando as “firulas, musiquinhas e periquitos voadores” do Vista, sobram aí milhões de linhas de código destinadas à uma API gigantesca, sobre a qual todo tipo de aplicativo pode ser desenvolvido. Mesmo uma ferramenta de programação como o Delphi é criada em cima desta API.

Certamente, mais de 70% de tudo o que o Delphi oferece à um programador nada mais é que um "encapsulamento" da API do Windows. E por mais que o Delphi seja poderoso, ele não te oferece “encapsulado” tudo o que tem no Windows. Posso lhe assegurar que existem coisas na API do Windows que você vai precisar e não foi “encapsulada” pelo Delphi. Você terá que arregaçar as mangas e programar “na unha”. A boa notícia é que o Delphi facilita muito o acesso à API do Windows.

Recomendo, apenas a título de curiosidade, uma consulta ao site MSDN (Microsoft Developer Network), para ver o quão extensa é a API do Windows:
Só para dar uma idéia, as funções que começam com a letra G são 433 no total. Com a letra S são 390 e com a letra C são 203. Das que começam com a letra S, certamente um dia você vai precisar da ShellExecute, da SetFileAttributes, da SHGetDesktopFolder, da SHGetDiskFreeSpace e da SHGetFileInfo, apenas para dar um "gostinho".

No menu Help do Delphi existe o item Windows SDK, através do qual você tem acesso a toda a ajuda necessária para trabalhar com a API do Windows.


O que significa programar para Windows


O Windows é um Sistema Operacional multi-tarefa, baseado em janelas (windows), daí seu nome. Basicamente, uma aplicação Windows tem uma Classe de Aplicação e uma Classe de Janela. Além disso, ele é Baseado em Eventos.


Imagine-se usando uma aplicação no Windows. O que você normalmente faz é apontar coisas e clicar nelas. Além disso, você digita coisas pelo teclado. Simples, não é? Para o Windows, isto são Eventos!
Abrir um programa; maximizá-lo; minimizá-lo; fechá-lo; clicar em botões; clicar em caixas de texto e depois digitar textos... Tudo isto são eventos.

Programar para Windows é planejar os eventos que um usuário pode “disparar” em tua aplicação.

Se você quer que um usuário digite seu nome e sua idade, para depois você calcular e informar a quantidade aproximada de dias que ele já viveu, o que você faz? Cria uma tela; coloca duas caixas de texto nela, para que ele digite o nome e a idade; você também deve colocar rótulos próximos às caixas de texto, indicando o que você espera que ele digite nelas. Finalmente, você põe uma descrição em algum lugar dizendo qual a finalidade do teu programa e um botão para ele clicar e ver o resultado.

A aparência e o funcionamento das caixas de texto, rótulos e botões ficam por conta do Windows. Quando o usuário clica numa caixa de texto e escreve nela, o Windows se encarrega da edição do texto. Quando o usuário clica no botão, o Windows se encarrega do efeito de “afundar” o botão. Quando o usuário libera o botão, o Windows faz ele voltar à posição normal e “dispara” um evento, chamado no Delphi de OnClick. Mas é só isto que o Windows faz! Se você quiser que o clique no botão resulte em alguma coisa, você vai precisar escrever um algoritmo no evento OnClick do botão. Aí é que está a lógica de programar para Windows. E o Delphi vai te ajudar muito nisto.


A Classe de Aplicação e a Clase de Janela


Eu disse anteriormente que uma aplicação Windows precisa de, no mínimo, duas classes: uma de aplicação e uma de janela.


A Classe de Aplicação é o meio que você tem para informar ao Windows que uma aplicação está “no ar”: a tua aplicação. Basicamente, tua aplicação deve “registrar” uma Classe de Aplicação no Windows, para que ele saiba que ela existe. Uma vez que você registrou tua Classe de Aplicação, o Windows passa a “observar” o que o usuário faz na Janela da tua aplicação e manda para a Classe de Aplicação as Mensagens que representam os Eventos gerados pelo usuário.

A finalidade principal de uma Classe de Aplicação é implementar uma função chamada Loop de Mensagens. Esta função recebe mensagens como WM_MOUSEMOVE, WM_PAINT, WM_CLOSE e tantas outras. Então o Loop de Mensagens da tua aplicação decide se vai tratar ou não as mensagens.

A Classe de Janela é o meio de você criar a interface com o usuário. Numa Classe de Janela, ou simplesmente janela, você coloca os componentes visuais que usuários de Windows estão habituados a usar. Além disto, você cria os códigos necessários para tratar os eventos “disparados” pelo usuário, seja quando ele clica em alguma coisa, quando escreve alguma coisa, ou simplesmente quando manda desligar o Windows!

Se você está pensando qual a finalidade desta “parafernália” toda, é só lembrar do componente Multi-Tafera do Windows. Tua aplicação não é e jamais será a única em utilização pelo usuário. Daí este sofisticado esquema de classes de aplicação e de janelas.

Mas acalme-se! Você não vai precisar fazer nada disto. O Delphi, através de sua VCL (Visual Component Library), se encarrega do “trabalho sujo” necessário de registrar classes, cuidar do Loop de Mensagens e etc. Caberá a você, “apenas”, a tarefa de “desenhar” a Janela e escrever os códigos necessários para tratar os eventos disparados pelo usuário.


Finalmente, o Delphi!


Para animar um pouco mais este artigo, vamos fazer um exercício. Abra o Delphi e aperte F9!


O que aconteceu? Bem, você tem uma aplicação Windows 100% funcional bem diante dos teus olhos! Ela tem uma janela que você pode mover, maximizar, minimizar ou fechar. Além disto, ela tem um Menu de Sistema. Tudo isto sem você digitar uma linha sequer de código.

Pode acreditar, se você fosse fazer isto em C, por exemplo, teria que digitar, no mínimo, duzentas linhas de código e acredito que a esta altura você já deve saber por que (e para que), não é? Isto mesmo, a Classe de Aplicação e a Classe de Janela.

Agora feche a janela da aplicação, para voltarmos ao Delphi. De volta ao Delphi, aperte F12, até que você veja a tela abaixo.


Identifique na tela figura acima uma palavra chamada class e o que está próximo à ela. Interessante, não?!

Agora abra o menu Project e selecione o item View Source. Observe a palavra Application.



Como você pôde observar, existem duas classes: Application e Form. Application é um Objeto do tipo TApplication, que no Delphi é a já famosa Classe de Aplicação. Form1 é um Objeto da Classe TForm1, que nada mais é que uma Herança da classe TForm, do Delphi. No Delphi, uma Janela é chamada de Form. Logo, TForm é a Classe de Janela da aplicação. É só observar o comando

Application.CreateForm(TForm1, Form1);

Este comando simplesmente “registra” no Windows uma Classe de Janela. A janela da aplicação.

Uma aplicação pode ter várias janelas. Mas para ser uma aplicação Windows, ela precisa de ao menos uma janela.

Agora insira alguns componentes em Form1, de modo a ficar mais ou menos como na figura abaixo:


Nesta tela temos três Label, dois Edit e um Button, todos disponíveis na paleta Standard. Para mudar os textos apresentados pelos Label e pelo Button, clique em cada um deles e na mini janela Object Inspector altere a propriedade Caption.

Agora rode a aplicação mais uma vez (F9), digite seu nome e sua idade. Depois clique no botão Calcular. O que aconteceu? Nada?

Bem vindo de volta à realidade!

Não existe “mágica” na programação! O Delphi fará por você o que for possível, mas ele não faz a menor idéia do que seja aquele Calcular que você escreveu no botão! O que ele vai fazer por você é “capturar” o evento OnClick “disparado” pelo usuário, quando ele clicar no botão, e mandar para um ponto onde você possa fazer alguma coisa. Cabe a você escrever a tua lógica no local apropriado. Aí, sim, alguma coisa vai acontecer!

Feche a janela Form1 e volte ao Delphi.

De volta ao Delphi, clique duplo no botão, para escrever o código (algoritmo) necessário para informar o número aproximado de dias que o usuário viveu, com base em sua idade. Finalmente, edite e evento Button1Click, de modo a ficar como mostrado na figura abaixo.


Observe que a seção Var deve ficar entre as cláusulas procedure e begin. Depois que tiver digitado tudo como mostrado na figura, rode o programa mais uma vez (F9) e veja o que acontece depois que você digitar seu nome, sua idade e clicar no botão Calcular.


Hmmm, agora sim!

Finalmente, para encerrar este extenso artigo, altere o código no evento Button1Click, a partir de strMsg, como mostrado abaixo:

strMsg := 'Olá, ' + strNome + '!' + #13#10#13#10 +
'Você tem, aproximadamente, ' + IntToStr(iDias) +
' dias de vida!'+ #13#10#13#10 +
'Deseja sair agora do programa?';

if Application.MessageBox( Pchar(strMsg),
'Alô mundo, estou programando em Delphi!',
MB_ICONINFORMATION+MB_YESNO+MB_DEFBUTTON2) = IDYes
Then Close;

Agora rode a aplicação mais uma vez. Quando você clicar no botão Calcular, o resultado agora será mostrado assim:


Application.MessageBox nada mais é que um "encapsulamento" de uma chamada à API do Windows. Especificamente, uma chamada à função MessageBox. Para ver o que MessageBox faz, consulte a documentação na MSDN para MessageBox. Você poderá ver que ela faz um monte de coisas. Mas vou explicar o que fizemos aqui.

MessageBox tem a finalidade de mostrar uma mensagem e aguardar uma resposta do usuário. A mensagem a ser exibida, o icone, os tipos de botões, o título a ser exibido na barra de títulos, tudo isto fica a teu critério. Quando o usuário clica em um botão, MessageBox retorna um código que vai identificar qual botão o usuário clicou. Este código você usa para tomar decisões.

O que fizemos foi mostrar a mensagem anterior, acrescentando a pergunta:

“Deseja sair agora do programa?”

A idéia é que se o usuário clicar em Sim, o programa deverá ser encerrado. Se clicar em Não, nada acontece e o programa continua aberto. Por isto o

If Application.MessageBox(...) = IDYes
Then Close;

A lógica está toda aí. Se o usuário clicar no botão Sim, MessageBox retornará o código IDYes, tornando a condiçao (If) verdadeira e então (Then) fechando (Close) a aplicação. Se o usuário clicar no botão Não, o código de retorno será IDNo e nada será feito.

Os códigos esquisitos no último parâmetro de chamada da função é que fazem toda a escolha do que será exibido, com relação a icones e botões. Abaixo, o significado deles.

MB_ICONINFORMATION: Mostra um icone de informação padrão do Windows
MB_YESNO: Mostra os botões Sim e Não, nesta ordem
MB_DEFBUTTON2: Indica que o botão número 2 (Não) é o botão default.

Inclui MB_DEFBUTTON2 para mostrar como é importante conhecer a API do Windows e, mais ainda, saber como os programas Windows devem funcionar. O botão default em uma janela ou quadro de diálogo é aquele botão que será automaticamente clicado se o usuário apertar a tecla Enter. Em nosso caso, se o usuário apertar Enter, será o mesmo que clicar no botão Não!

NOTAS: Em uma janela ou quadro de diálogo só poderá haver um botão default, por razões óbvias. MessageBox é um quadro de diálogo do tipo Modal.

quarta-feira, 24 de junho de 2009

O que? Mais um Blog sobre Delphi!


O que é este Blog

Não, este não é mais um Blog sobre Delphi. É "Ô" Blog sobre Delphi Para Leigos. :-)

Mas não discrimine meu Blog por causa do "para leigos". Qualquer coisa que aprendi na vida, aprendi desta forma: li sempre dois livros (no mínimo) sobre o assunto. O primeiro livro se chamava "Qualquer coisa Para Leigos". O segundo livro se chamava "Aprofundando-se em Qualquer coisa". Chegará um momento em que abordarei temas e práticas consideradas avançadas. É só acompanhar o Blog.

Participo de muitos forums*, dentre os quais alguns de Delphi. Não sei se é por causa do fenômeno moderno da ansiedade, mas vejo pessoas sem a menor noção de Qualquer coisa abarrotando os forums de perguntas muitas vezes idiotas (desculpem a sinceridade)!

Muitas pessoas, levadas não sei porque motivo, se metem a fazer coisas relativamente complicadas, sem se darem ao menor trabalho de pesquisar e estudar o mínimo necessário. Tudo começa pelo começo, já não disseram? Então como é que uma pessoa se mete a fazer um "sistema" em Delphi, quando nem sabe como o Delphi funciona?!

Então estas pessoas vão desesperadas nestes forums, colocam lá suas dúvidas, e ficam "histéricas" quando não respondem ou quando são criticadas. Incrível, mas é a verdade!


O Delphi é uma ferramenta de desenvolvimento de programas para computador (chamada comumente de programação)! Ninguém aprende a desenvolver por causa do Delphi. As pessoas podem usar o Delphi para desenvolver programas para computador. É diferente!

Programação de computadores é uma ciência. E a matéria que orienta esta ciência se chama Engenharia de Software. Mas não precisamos ir tão longe. Uma pessoa pode começar lendo livros, até mesmo apostilas, a respeito da ciência de desenvolver programas de computador. Ela precisa, em primeiro lugar, aprender o que é Algoritmo.

Desenvolver é implementar algoritmos. Todo aquele que tiver a pretensão de ser um programador de computadores, precisa de noções básicas. E a primeira delas é o conceito de algoritmo junto com a capacidade de criar algoritmos.

Aconselho fortemente que você, antes de continuar lendo meu Blog (se me der a honra), procure estudar o seguinte, no mínimo:

  • Algoritmos & estruturas de Dados
  • Bancos de Dados
Apesar da recomendação, sempre que possível vou dar umas dicas de como desenvolver certos algoritmos para o que for necessário (ao menos para o entendimento do que eu estiver falando em determinado momento).

Como vai funcionar este Blog

Como o nome sugere, vou começar do básico. Mas como isto aqui é um Blog, e não um livro do Cantu, não vou esmiuçar o Delphi. Vou abordar o Delphi de uma forma prática, identificando logo o que é mais relevante e que permitirá a você, em pouco tempo, "colocar a mão na massa".

O Delphi é muito extenso e um poderosa ferramenta. Sua paleta de componentes e sua VCL (Visual Component Library) oferecem recursos que, em mais de 15 anos que trabalho com o Delphi, nunca precisei utilizá-la 100%! Então vamos ser práticos.



Clique na figura acima, para visualizar a IDE do Delphi. IDE quer dizer Integrated Development Environment ou Ambiente de Desenvolvimento Integrado. A Idéia é "tudo o que você precisa para desenvolver integrado em um ambiente".

Através da IDE do Delphi você "desenha" o visual dos teus programas; escreve o código necessário para dar "inteligência" aos elementos visuais que você coloca na tela; permite você executar o programa de uma vez ou passo-a-passo; permite "depurar" o programa; etc.


Paleta de ferramentas do Delphi.

Nas próximas publicações, irei explorar a IDE do Delphi, começando por sua paleta de ferramentas. Identificarei os componentes mais relevantes e mostrarei como eles funcionam. Na medida em que for mostrando o funcionamento dos componentes, irei apresentando também a Object Pascal, a Linguagem de Programação do Delphi.

Até a próxima!

*(O plural de forum é fora! Mas vou aportuguesar a expressão, para ninguém ficar achando que sou pedante :-)