Páginas

terça-feira, 5 de janeiro de 2010

Lazarus - Entendendo os Arquivos do Projeto

Em um post anterior vimos como criar uma aplicação simples. Aprendemos como alterar propriedades usando o Inspetor de Objetos e como escrever um método para responder a eventos. Vimos como compilar e executar o programa. Agora vamos estudar mais alguns recursos do Lazarus.
Para prosseguir em nosso estudo vamos usar o programa AloMundo criado anteriormente. Clique no botão Abrir ou pressione CTRL + O. Selecione o projeto AloMundo e confirme.

Alterando propriedades em tempo de execução

Dificilmente um programa pode ser escrito sem que seja necessário alterar propriedades dos componentes em tempo de execução, ou seja, através de código. Por exemplo, queremos mudar a propriedade Caption do botão btnAloMundo para Diga alô de novo depois que o usuário clicar nele pela primeira vez. Será necessário mudar a largura - propriedade Width - do botão para 100, para caber o novo Caption. Vamos alterar o código do procedimento btnAloMundoClick como mostrado na figura.
Desta forma se quisermos mudar o valor de uma propriedade em tempo de execução, utiliza-se um comando de atribuição normalmente. Muitas propriedades podem ser alteradas em tempo de execução e outras podem ser alteradas apenas em tempo de execução. Aquelas que só podem ser alteradas em tempo de execução não são listadas no  Inspetor de Objetos. Algumas dessas propriedades de tempo de execução são definidas como apenas leitura, o que significa que você pode ler seu valor, mas não pode alterá-lo.

Adicionando mais código ao programa

Vamos centralizar o botão no form. Clique em btnAloMundo com o botão direito do mouse. Clique em Alinhamento. Marque Centralizar na janela nas duas colunas e confirme. Agora o botão está centralizado, mas há um probleminha. O botão não permanece centralizado quando redimensionamos o form. Isto pode ser resolvido de duas formas.
Uma solução é mudar o estilo da borda do form de modo que ele não possa ser redimensionado em tempo de execução. Para isso selecione o form e localize a propriedade BorderStyle. Mude para bsSingle. Isso evita que o usuáro mude as dimensões do formulário. Outra abordagem é escrever um código que faça o botão se mover para o centro sempre que o form for redimensionado. Embora pareça que grande parte do trabalho do programador em Lazarus seja selecionar opções e componentes visuais, tem um momento em que é necessário escrever código. Quanto mais experiente você fica, mais código tem que escrever.
Quando precisamos adicionar código ao programa, a primeira pergunta a ser respondida é: Onde? Em uma linguagem orientada a eventos, em geral, o código é executado em resposta a um evento. Neste caso queremos que nosso programa execute um código quando o form for redimensionado. O evento que ocorre nessa situação é OnResize. Para programá-lo, selecione o o form e a aba Eventos do Inspetor de Objetos. Localize o evento OnResize e dê um duplo clique à direita do nome. Um novo procedimento é adicionado ao editor de código. Digite então o seguinte código:
Lembre de retornar a propriedade BorderStyle para bsSizeable antes de executar o programa. Para determinar as propriedades Top e Left do botão - isto é, a posição do seu canto superior esquerdo - o programa calcula o centro da página, dividindo a altura e a largura interna ou área cliente da página por 2, e então subtrai metade da altura (Height) e da largura (Wdith) do botão. Execute o programa e redimensione o form para ver o que acontece com o botão.

Uma ferramenta de mão dupla

No exemplo que criamos até aqui escrevemos códigos para responder a eventos. Cada porção de código é parte de um procedimento diferente. O código fonte de um form é escrito em uma unit em FreePascal, nesse caso na unit u_alomundo.pas. O código aumenta não apenas quando escrevemos código para eventos, mas também quando adicionamos componentes ao form. As definições de propriedades e eventos do form e dos componentes adicionados são adicionados em um segundo arquivo denominado, nesse caso, u_alomundo.lfm.
O Lazarus pode ser definido como uma ferramenta de mão dupla, pois tudo que é feito no ambiente visual gera algum código. O desenvolvedor tem acesso total ao código gerado, e mesmo parecendo bastante complexo às vezes, é possível alterá-lo. Até se tornar um programador fluente em Lazarus, você pode continuar fazendo tudo visualmente.
Quando você altera o código dos componentes, isso se reflete visualmente no form. Só é preciso tomar algum cuidado.

Analisando o código fonte

Sempre que iniciamos um novo form o Lazarus tem uma unit com um código fonte associado como mostra a figura abaixo.


A unit usa (uses) algumas units que contém bibliotecas de procedimentos de funções do FreePascal. Também define uma nova classe. A nova classe é TForm1 e é derivada de TForm. Define também uma nova instância dessa classe: Form1.
Units são módulos nos quais uma aplicação é dividida. Quando iniciamos um novo projeto, o Lazarus gera um módulo program e uma unit que define o form principal. A cada vez que adicionamos um novo form ao programa, uma unit é adicionada. Por padrão as units tem extensão .PAS, os arquivos program tem a extensão .LPR e os arquivos de descrição de form tem extensão .LFM.
Assim que adiconamos novos componentes a declaração da classe form muda. Por exemplo, quando você adiciona um botão ao form, a parte do código fonte que define novos tipos de dados torna-se o seguinte:



Agora se a propriedade Name do botão from mudada para btnAloMundo, o código muda para:



A alteração de outras propriedades de um componente não modifica o código fonte da unit. As propriedades de form e seus componentes são armazenados em um arquivo de descrição de form com a extensão .LFM.
Adicionar código para tratar eventos causa maiores modificações no código fonte. Sempre que um novo manipulador de eventos é definido, uma nova linha é adicionada à definição de tipo de dado do form, um corpo de método vazio é inserido na implementation, e alguma informação é armazenada no arquivo de descrição do form.



A descrição textual do form

Como vimos anteriormente o arquivo com extensão .LFM tem a descrição textual do form. Podemos visualizar e até alterar usando o editor. Para abrir clique com o botão direito no form e selecione a opção Mostrar Fonte (.lfm). Outra forma é simplesmente usando a opção Abrir do menu Arquivo. Vamos dar uma olhada nesse arquivo para entender o que é armazenado nele.



Como podemos observar o arquivo contém descrição de objetos. O primeiro deles é o form frmAloMundo, com suas propriedades. Um dos atributos de frmAloMundo é o botão btnAloMundo. Note também que podem existir conexões entre os eventos e procedimentos - neste caso o OnClick do botão. Procure não editar esse arquivo. Tudo que precisamos fazer é feito visualmente no form e é mais seguro.

Arquivo de Projeto

Quando iniciamos uma nova aplicação, além dos dois arquivos detalhados antes, o Lazarus cria automaticamente o arquivo de projeto - com a extensão .LPR. Raramente precisamos alterá-lo. Só modifique esse arquivo se você tiver certeza do que está fazendo. Faça uma cópia de toda a aplicação antes de modificá-lo para poder retornar se algo sair errado. Quando você compila a aplicação o Lazarus gera um executável com o mesmo nome do arquivo .LPR. Esse é o arquivo principal, o program. Se você observar esse arquivo verá que ai são criados os forms e executada a aplicação.

Nenhum comentário:

 
Creative Commons License
This work by Carlos Alberto P. Araújo is licensed under a Creative Commons Atribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil License.