O objetivo maior desse experimento é fazer o levantamento das limitações da IDE do Lazarus e o impacto de uma migração de projetos para que seja possível analisar a possibilidade de seu real uso em desenvolvimentos de aplicações comercias.
O primeiro passo foi preparar o ambiente do Lazarus para o desenvolvimento como no Delphi instalando a ZEOS Library. Tentou se instalar a versão disponibilizada no site
sourceforge.net, porém está versão apresentou uma serie de problemas e não conseguia conectar se ao banco de dados.
Foi preciso pedir ajuda em uma lista de discussão especializada em Lazarus. Um membro da lista sugeriu uma versão que ainda está em fase de desenvolvimento mas que acabou funcionando. Após a instalação da ZEOS Library deu se inicio a instalação do Lazarus Report para a criação dos relatórios, este não apresentou nenhum problema.
Preparado o ambiente, iniciou-se a criação do projeto para a aplicação e ao criar um novo projeto no Lazarus apareceu um bug que não permite que se faça uma compilação sem antes salvar o projeto, fato que não causou problemas para o desenvolvimento, mas que foi custoso encontrar o motivo. Com a criação do projeto deu se início a criação dos formulários seguindo as mesmas etapas que no Delphi iniciando-se pelos formulários padrões.
Na criação do formulário de cadastro/edição e do formulário do visualização que fazem uso dos componentes de acesso a dados foram encontrado mais algumas dificuldades. Houve problemas para associar o Datasource a um Dataset que estava situado em um DataModulo. O componente Query que faz consultas ao banco de dados, na versão para o Lazarus, não possui mascara para edição de campos o que obrigou a instalação de um componente DBMaskedit para conseguir colocar mascara nos campos de edição.
O componente DBGrid do Lazarus é mais avançado do que o Delphi tanto em aparência quanto em funcionalidades, apesar de não possuir alguns eventos como o "DefaultDrawDataCell". Mas a grande vantagem é que o desenvolvedor não precisa escrever código para pintar as zebras nas linhas do DBGrid, pois o componente já possui esta funcionalidade.
Herança visual é muito importante para reduzir o número de telas em uma aplicação e para reaproveitar o código. Nesse ponto uma limitação do Lazarus está em não adicionar a palavra-chave "inherited" automaticamente aos métodos herdados o que provoca erro nas rotinas que acabam não executando o código do pai.
No desenvolvimento do formulário principal, houve dificuldades para manipular o componente MainMenu, responsável por criar o menu de navegação na tela, devido a sua forma de "trabalhar" ser diferente a do Delphi. Também houve dificuldades para se "visualizar" um componente do tipo "Panel", que faz o papel de contêiner, ocorrendo que é muito fácil confundi-lo com o próprio formulário.
Foram encontradas algumas limitações quanto ao uso de imagens no projeto: como a da IDE não suportar ícones de tamanho 24x24, obrigando a se fazer um redimensionamento dos ícones que foram usados no Delphi. Também não é possível visualizar as imagens contidas uma ImageList ao fazer um relacionamento de um objeto com um ícone. E ao alterar um ícone em actionlist, o objeto que está vinculado a esta ActionList não atualiza o ícone sozinho, é preciso fazê-lo manualmente.
Na codificação do formulário foi usado o mesmo código que do Delphi e foi encontrada a falta da função LockWindowUpdate que faz referência a API do Windows, fato que é justificado pelo Lazarus ser multi-plataforma. Também não foi possível fazer com que a aplicação se comportasse como MDI, onde os formulários são aberto dentro de outros formulários. Outro problema é que quando não se faz mais uso de procedures que são declaradas automaticamente pela IDE, como é o caso de um clique de botão, a IDE não remove o código da procedure como ocorre no Delphi e é necessário remover manualmente.
As ferramentas de depuração de código não conseguiram ser tão eficientes quanto as do Delphi, como é o caso do dialogo de visualização de variáveis que não consegue visualizar o conteúdo de uma variável que está em outro módulo, obrigando o programador a usar recursos antigos como dar um showmessage na variável para ver seu conteúdo. O compilador também gasta um pouco mais de tempo para gerar os binários da aplicação.
Quando o aplicativo está em execução e por alguma razão gera alguma exceção, é exibida uma mensagem genérica na tela, sem muita informação da origem do erro, isto pode ser um grande problema para o programador encontrar o que está gerando o erro.
O executável gerado possui um tamanho 23 vezes maior do que o criado no Delphi que estava com 2,67MB e no Lazarus com 45 MB. Mais tarde descobriu-se que uma configuração na IDE que reduziu o tamanho para 3,02MB. Ao usar esta configuração as opções de depuração não funcionaram mais.
A interface do editor de relatório dificultou um pouco para encontrar o componente label, e em alguns momentos a IDE fechou abruptamente perdendo todo o trabalho que foi feito e que não havia sido salvo. Também não foi encontrada uma "régua" para auxiliar no posicionamento dos componentes na tela. Por outro lado, foram feitos testes com o aplicativo em execução onde foram gerados relatórios de 100 páginas e não houve nenhum problema.
Apesar de dar suporte ao código escrito no Delphi, o Lazarus não permite portar componentes feitos para Delphi, o que pode dificultar a migração de aplicações que usam componentes mais específicos, ou proprietários como impressoras fiscais, controle de portas seriais dentre outros.