{"id":1644,"date":"2022-07-13T10:59:46","date_gmt":"2022-07-13T13:59:46","guid":{"rendered":"https:\/\/gladiston.net.br\/?page_id=1644"},"modified":"2022-07-13T16:04:57","modified_gmt":"2022-07-13T19:04:57","slug":"criando-modelos-formais-para-a-ide-lazarus","status":"publish","type":"page","link":"https:\/\/gladiston.net.br\/en\/programacao\/lazarus-ide\/criando-modelos-formais-para-a-ide-lazarus\/","title":{"rendered":"Criando modelos formais de projetos para a IDE"},"content":{"rendered":"\n<p>No artigo anterior explicamos como usufruir de modelos de maneira mais informal, onde \u00e9 uma solu\u00e7\u00e3o simples e pr\u00e1tica para o dia a dia, especialmente quando estamos tratando apenas de arquivos fontes e formul\u00e1rios. No entanto, a informalidade tem seu pre\u00e7o: m\u00e1 documenta\u00e7\u00e3o e organiza\u00e7\u00e3o, por isso \u00e9 bom ter o costume de ser organizado e documentar bem os arquivos usados para modelos.<\/p>\n\n\n\n<p>Neste novo artigo veremos como criar modelos formais baseados nas instru\u00e7\u00f5es (em ingl\u00eas):<\/p>\n\n\n\n<p><a href=\"https:\/\/wiki.lazarus.freepascal.org\/Project_Templates\">https:\/\/wiki.lazarus.freepascal.org\/Project_Templates<\/a><\/p>\n\n\n\n<p>Ao final deste artigo, voc\u00ea estar\u00e1 apto a quando o usu\u00e1rio ir em  File|New, e seus modelos serem listados diretamente na IDE, com explica\u00e7\u00e3o para cada uma delas:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"752\" height=\"442\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-8.png\" alt=\"\" class=\"wp-image-1675\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-8.png 752w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-8-300x176.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-8-18x12.png 18w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><figcaption>A IDE com nossos modelos personalizados de projetos<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Vis\u00e3o Geral<\/h2>\n\n\n\n<p>O IDE Lazarus permite registrar seus pr\u00f3prios tipos de projeto por meio de pacotes de designtime. O pacote <strong>projtemplates <\/strong>que vem pr\u00e9-instalado permite simplesmente usar projetos existentes como templates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Definindo a pasta de modelos(templates)<\/h2>\n\n\n\n<p>A primeira coisa que \u00e9 preciso fazer \u00e9 definir onde ser\u00e1 nosso reposit\u00f3rio de modelos, voc\u00ea pode escolher uma pasta compartilhada na rede ou um reposit\u00f3rio local, mas eu prefiro uma pasta local com controle de versionamento usando git. Esta ultima \u00e9 sensivelmente melhor e decentralizado.<\/p>\n\n\n\n<p>V\u00e1 em Tools|Project Template Options&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"411\" height=\"130\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/laztemplates-setdir1.png\" alt=\"\" class=\"wp-image-1651\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/laztemplates-setdir1.png 411w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/laztemplates-setdir1-300x95.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/laztemplates-setdir1-18x6.png 18w\" sizes=\"auto, (max-width: 411px) 100vw, 411px\" \/><figcaption>Definindo a pasta de modelos(templates)<\/figcaption><\/figure>\n\n\n\n<p>No exemplo acima, nossos modelos estar\u00e3o em c:\\projetos-fpc\\laztemplates.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Regras claras<\/h2>\n\n\n\n<p>Siga as seguintes regras ou as coisas n\u00e3o funcionar\u00e3o como esperado:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Dentro de nosso reposit\u00f3rio deve ser criado uma subpasta para cada modelo.<\/li><li>Cada diret\u00f3rio \u00e9 um modelo de projeto.<\/li><li>Referencias a vari\u00e1veis &#8211; falamos delas adiante &#8211; devem conter dois underlines __ antes e depois do seu nome, sempre conte-os. Ent\u00e3o se criar uma vari\u00e1vel <strong>MAINUNIT<\/strong> para servir de nome da unit, ent\u00e3o a unit que a usar\u00e1 dever\u00e1 se chamar __MAINUNIT__ .  Voc\u00ea n\u00e3o sabe o tamanho da zebra quando faz isso errado.<\/li><li>Seu modelo deve ser funcional, resumidamente, se n\u00e3o compila 100% ent\u00e3o n\u00e3o  use.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Criando nosso primeiro modelo<\/h2>\n\n\n\n<p>No nosso reposit\u00f3rio de modelos &#8211; c:\\projetos-fpc\\laztemplates &#8211; crie uma pasta chamada &#8220;dialogo&#8221; e dentro dela crie um arquivo chamado <strong>project.ini<\/strong> com o seguinte conte\u00fado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Project]\nName=Projeto b\u00e1sico com DATAMODULE+TDI\nAuthor=Gladiston Santana &lt;email@servidor.com>\nDescription=Um projeto basico com datamodule e form principal TDI.\nRecurse=0\nExclude=.gitignore;leiame.txt<\/code><\/pre>\n\n\n\n<p>O formato \u00e9 padr\u00e3o .ini e \u00e9 bem simples e f\u00e1cil de entender por si s\u00f3, mesmo assim vamos a explica\u00e7\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Name: Nome do projeto\/modelo.\u00a0O nome e a descri\u00e7\u00e3o que ser\u00e1 apresentado quando na IDE voc\u00ea selecioanr File|New&#8230;<\/li><li>Author: Autor do modelo, no caso de duvidas no uso, a equipe poder\u00e1 procurar o autor.<\/li><li>Description: Descri\u00e7\u00e3o em uma \u00fanica linha a respeito do projeto\/modelo. <\/li><li>Recurse: Se as subpastas ser\u00e3o copiadas tamb\u00e9m ou n\u00e3o. Se sim, use &#8220;1&#8221;, caso contr\u00e1rio &#8220;0&#8221;.<\/li><li>Exclude: nomes de arquivos separados por virgula ou ponto-e-virgula que dever\u00e3o ser ignorados durante a c\u00f3pia para o novo projeto.<\/li><\/ul>\n\n\n\n<p>Ainda h\u00e1 se\u00e7\u00e3o chamada [Variables] onde adicionamos vari\u00e1veis, elas nos permitem controlar os nomes de arquivos, formul\u00e1rios e objetos usados dentro do nosso projeto\/modelo. Adicione ao arquivo <strong>project.ini<\/strong> o seguinte conte\u00fado:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;Variables]\r\nMAINUNIT=Nome para o arquivo unit.pas principal|fprincipal\r\nMAINFORM=Nome do formul\u00e1rio|fmPrincipal<\/code><\/pre>\n\n\n\n<p>Note que ap\u00f3s a descri\u00e7\u00e3o h\u00e1 uma barra vertical conhecida como pipe |, o valor ap\u00f3s ela ser\u00e1 considerado o valor padr\u00e3o.<\/p>\n\n\n\n<p>Vamos a explica\u00e7\u00e3o, quando o modelo for selecionado, o IDE perguntar\u00e1 ao desenvolvedor os valores para MAINUNIT e MAINFORM, essas vari\u00e1veis j\u00e1 vir\u00e3o com os valores pr\u00e9-definidos como respectivamente fprincipal e fmPrincipal que podem ser modificados ou confirmados. Ap\u00f3s a confirma\u00e7\u00e3o, os modelos ser\u00e3o copiados para dentro do projeto, mas onde houver __MAINUNIT __ e __MAINFORM__, dentro do seus arquivos ou fora deles, ser\u00e1 substitu\u00eddo pelos valores informados. Al\u00e9m das vari\u00e1veis que voc\u00ea pode criar, duas vari\u00e1veis que sempre existir\u00e3o:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>ProjDir<\/strong>: Diretorio do projeto<\/li><li><strong>ProjName<\/strong>: Nome do Projeto<\/li><\/ul>\n\n\n\n<p>Voc\u00ea entender\u00e1 melhor o funcionamentos das vari\u00e1veis com o exemplo pr\u00e1tico, mas com a experi\u00eancia saber\u00e1 quando melhorar essa habilidade.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Copie os arquivos necess\u00e1rios<\/h2>\n\n\n\n<p>Copie os arquivos do projeto\/modelo que voc\u00ea deseja que sejam usados (*.lfm, *.pas, *.ico, *.lpi, *.lpr, *.res) para este novo diret\u00f3rio. Apenas uma sugest\u00e3o, depois de copiar o projeto\/modelo para a pasta do reposit\u00f3rio, abra-o e fa\u00e7a as seguintes modifica\u00e7\u00f5es:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Renomeie o projeto para <strong>__ProjName__<\/strong>.lpr. <\/li><li>Renomeie a unidade principal para <strong>__MAINUNIT__<\/strong>.pas e o nome desse formul\u00e1rio como <strong>__MAINFORM__<\/strong>.<\/li><\/ul>\n\n\n\n<p>Muito cuidado com a quantidade de underline(_), s\u00e3o apenas duas antes e depois do nome.<\/p>\n\n\n\n<p>Este projeto dever\u00e1 conter o b\u00e1sico de um projeto como tela de login, principal, configura\u00e7\u00e3o, datamodule, componentes de acesso, imagelist com imagens inclusas, etc&#8230; mas somente o que todo projeto para ser iniciado precisa, evite colocar coisas que nem todo projeto ter\u00e1.<\/p>\n\n\n\n<p>Vai ficar mais ou menos assim:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"704\" height=\"356\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-2.png\" alt=\"\" class=\"wp-image-1667\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-2.png 704w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-2-300x152.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-2-18x9.png 18w\" sizes=\"auto, (max-width: 704px) 100vw, 704px\" \/><figcaption>Pasta do modelo contendo todos os arquivos necess\u00e1rios<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Reinicie o Lazarus<\/h2>\n\n\n\n<p>Os modelos s\u00f3 s\u00e3o visto durante a carga do Lazarus, por isso ter\u00e1 de reiniciar o Lazarus caso ele esteja em execu\u00e7\u00e3o. Ap\u00f3s carregar o Lazarus ent\u00e3o ver\u00e1 os novos modelos que foram adicionados. <\/p>\n\n\n\n<p>Nosso modelo poder\u00e1 ser observado em File|New project from template:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"506\" height=\"192\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-3.png\" alt=\"\" class=\"wp-image-1668\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-3.png 506w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-3-300x114.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-3-18x7.png 18w\" sizes=\"auto, (max-width: 506px) 100vw, 506px\" \/><\/figure>\n\n\n\n<p>E tamb\u00e9m pode ser observado em File|New&#8230; ou Project|New&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"752\" height=\"442\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-5.png\" alt=\"\" class=\"wp-image-1670\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-5.png 752w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-5-300x176.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-5-18x12.png 18w\" sizes=\"auto, (max-width: 752px) 100vw, 752px\" \/><figcaption>Nosso modelo est\u00e1 registrado na IDE<\/figcaption><\/figure>\n\n\n\n<p>Quando voc\u00ea selecionar um modelo, veja o que acontece com as vari\u00e1veis que criamos:<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"541\" height=\"377\" src=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-7.png\" alt=\"\" class=\"wp-image-1672\" srcset=\"https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-7.png 541w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-7-300x209.png 300w, https:\/\/gladiston.net.br\/wp-content\/uploads\/2022\/07\/image-7-18x12.png 18w\" sizes=\"auto, (max-width: 541px) 100vw, 541px\" \/><figcaption>Todas as vari\u00e1veis s\u00e3o confirmadas antes de processar a c\u00f3pia e uso do modelo<\/figcaption><\/figure>\n\n\n\n<p>Isso mesmo, as vari\u00e1veis ser\u00e3o usadas para determinar o nome da unidade e do formul\u00e1rio principal.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">CONCLUS\u00c3O<\/h2>\n\n\n\n<p>Os modelos para projetos agilizam o processo de cria\u00e7\u00e3o de novos projetos. Normalmente n\u00e3o criamos nada, apenas pegamos algo que j\u00e1 fizemos antes e adaptamos, por isso, relat\u00f3rios, consultas REST, exporta\u00e7\u00f5es e importa\u00e7\u00f5es de arquivo, etc&#8230; deveriam ter modelos porque \u00e9 o que fazemos em nosso dia dia. Quando um membro da equipe for incumbido de uma tarefa, saber\u00e1 que h\u00e1 modelos existentes para se basear.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>No artigo anterior explicamos como usufruir de modelos de maneira mais informal, onde \u00e9 uma solu\u00e7\u00e3o simples e pr\u00e1tica para o dia a dia, especialmente quando estamos tratando apenas de arquivos fontes e formul\u00e1rios. No entanto, a informalidade tem seu pre\u00e7o: m\u00e1 documenta\u00e7\u00e3o e organiza\u00e7\u00e3o, por isso \u00e9 bom ter o costume de ser organizado [&hellip;]<\/p>\n","protected":false},"author":4,"featured_media":0,"parent":159,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"templates\/template-full-width.php","meta":{"footnotes":""},"class_list":["post-1644","page","type-page","status-publish","hentry"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1644","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/comments?post=1644"}],"version-history":[{"count":15,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1644\/revisions"}],"predecessor-version":[{"id":1694,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/1644\/revisions\/1694"}],"up":[{"embeddable":true,"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/pages\/159"}],"wp:attachment":[{"href":"https:\/\/gladiston.net.br\/en\/wp-json\/wp\/v2\/media?parent=1644"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}