Pular para o conteúdo principal

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.

Comentários

Postagens mais visitadas deste blog

Lazarus - Acessando banco de dados com SQLdb - Parte I

Para fazer nossa primeira aplicação usando banco de dados no Lazarus vamos usar o SQLite e o conjunto de componentes nativo SQLdb. Inicialmente vamos apresentar passo como essa aplicação foi criada. Essa foi a maneira que eu fiz, e eu agradeço sugestões e questionamentos que pessoas que já passaram por essa experiência. Depois irei fazer algumas considerações sobre o uso do SQLdb. SQLite SQLite é uma biblioteca que implementa um motor de banco de dados SQL. É livre para qualquer finalidade, seja uso particular ou comercial. Lê e escreve em um único arquivo que pode ter além de tabelas, índices, gatilhos e visões. Executa em várias plataformas e é indicado para aplicações embarcadas. Maiores detalhes podem ser encontrados no site oficial. Para usá-lo, baixe-o do site e faça a instalação adequada para o seu sistema operacional. No Windows isso é muito simples, apenas copie sqlite3.dll para o system32 da pasta do sistema operacional. Existe uma ferramenta de linha de comando chamada

Tipos de dados no SQLite

Em SQLite, diferente de outros motores de banco de dados, o tipo de dado de um valor está associado com o valor propriamente dito, e não com o seu contêiner. É um sistema de tipo dinâmico. Um campo de uma tabela em SQLite pode receber qualquer tipo de dado. Assim, o SQLite simplesmente ignora o tipo informado no comando CREATE TABLE. Então, dizemos que no SQLite existem classes de armazenamento. E essas classes são: NULL - como em qualquer outro banco de dados. INTEGER - inteiro com sinal, armazenado em 1, 2, 3, 4, 6 ou 8 bytes dependendo da grandeza do valor. REAL - valor de ponto flutuante armazenado em 8 bytes. TEXT - uma string armazenada usando UTF-8, UTF-16BE ou UTF-16LE. BLOB - armazena um blob, como indica o nome. Uma coluna INTEGER PRIMARY é uma exceção. Só aceita números inteiros. Qualquer valor em um comando SQL tem uma classe de armazenamento implícita. Durante a execução do comando SQL, o SQLite pode converter valores entre classes numéricas (INTEGER e REAL)

Lazarus - Criando relatórios com FortesReport (Parte I)

Para a criação de relatórios, o Lazarus já trás o componente LazReport, no entanto ele precisa ser instalado no IDE. Para fazer a instalação do pacote, acesse o menu Package -> Open package file (.lpk) . Localize o diretório de instalação do Lazarus e na pasta components abra lazreport e depois source . Abra o pacote lazreport.lpk , clique em Compile e depois em Install . Como já sabemos isso irá recompilar o IDE. Depois de inicializado novamente estará disponível a aba LazReport . Leia aqui um tutorial básico sobre o LazReport. No entanto queremos mostrar uma alternativa ao LazReport . Por essa razão, vamos apresentar neste artigo o FortesReport . Para quem conhece o QuickReport, que fazia parte do Delphi, não terá dificuldade de desenvolver com esse componente. Baixe o pacote aqui e instale. Os procedimentos são semelhantes aos que mostramos acima. Você terá uma nova aba chamada Fortes Report . Conectando o banco de dados O primeiro passo para criar a aplicação é fazer