sexta-feira, 17 de fevereiro de 2006

Entendendo Code Templates do Delphi

Para quem não conhece os codetemplates são modelos de códigos feitos para facilitar e agilizar o processo de desenvolvimento na hora em que você está escrevendo seu código.

Basta você pressionar Ctrl+J para que os codetemplates sejão exibidos ou digite o nome de seu codetemplate pressione espaço, que o delphi escrevera todo o código do seu template para que ele seja alterado. Os codetemplates podem também ser configurados para aparecerem no codecompletition do delphi.

Bom chega de papo furado vamos criar nosso codetemplate.

1º - Vá no menu View->Templates abrira uma barra lateral com todos os templates instalados no delphi.

2º - Clique no botão New que fica em cima dos nomes dos templates.

Será criado um novo documento chamado template1.xml com as seguintes tags:

<?xml version="1.0" encoding="utf-8" ?>
<codetemplate xmlns=" http://schemas.borland.com/Delphi/2005/codetemplates " version="1.0.0">
<template name="" invoke="manual">
<description>
</description>
<author>
</author>
<code language=""><![CDATA[]]> </code>
</template>
</codetemplate>

As duas primeiras linhas são apenas de identificação do xml e do codetemplate não precisão ser modificadas. A tag template possui uma propriedade chamada name e é nela que você especificará o nome do seu template, (O que aparecera na IDE) e a propriedade invoke que server para:

invoke="auto": a IDE deverá acionar automaticamente seu template quando o mesmo for digitado.

invoke="manual": será acionado quando for digitado o nome do template e pressionar a tecla TAB ou apenas pressionar Ctrl+J ou Ctrl+Espaço e selecionar da lista de templates.

invoke="none": será acionado apenas quando o usuário pressionar Ctrl+J ou Ctrl+Espaço e selecionar da lista de templates.

*Obrigado pela dica do invoke="none" Leonel :).

A tag description server para você colocar uma descrição sobre o seu template, como abaixo:
<description> Template de teste </description>

E a tag autor serve para você colocar o nome do autor do template, ficando assim:
<autor> Diego M. Garcia </autor>

Antes de entrarmos na tag code temos que conhecer uma outra tag chamada point que serve para indicar os pontos que serão navegáveis através da tecla tab do teclado para que o usuário mude o conteúdo rapidamente.

A tag point deve sempre conter a propriedade name para que na seção code você possa referenciar a tag point, para isso escreva sua tag point como abaixo:

<point name="teste"></point>

Agora precisamos especificar o conteúdo que irá aparecer na tag point escrito no editor, para isso adicione a tag text dentro da tag point como abaixo:

<point name="teste"><text> TextoAserSubstituido </text></point>

é possível também colocar uma outra tag chamada hint para exibir um hint quando o cursor do mouse estiver em cima do texto.
Ex.: <point name="teste">
<text> TextoAserSubstituido
</text>
<hint>Esse é um texto de teste.</hint>

Obs.: seu codetemplate pode ter mais de uma tag point.

Ainda temos mais uma tag que deve ser abordada antes da tag code, esta tag é a script que é utilizada para que a IDE realize diversos tipos de serviços como declarar uma variável e outros, para saber um pouco mais olhe os templates que já vem com o delphi. A tag script possui uma propriedade chamada language que deve ser especificado para que o delphi reconheça o comando, no nosso caso o language será Delphi, na tag script você pode especificar também se o script será executado quando o codetemplate for acionado, setando sua propriedade onenter="true" ou quando o usuário terminar de utilizar o codetemplate setando sua propriedade onleave="true", ficando assim:

<script language=" Delphi" onenter="false" onleave="true">
</script>

O comando DeclareVariable que pode ser utilizado na tag script deve sempre referenciar uma tag point que contenha a definição do nome desta variável em sua tag text como abaixo:
<point name="NomeInternoDaVariavel">
<text>DigiteUmValorInteiro</text>
<hint>Variável que será utilizada.</hint>
</point>

<script language=" Delphi" onenter="false" onleave="true">
DeclareVariable(NomeInternoVariavel);

</script>

Obs.: os caracteres “ “ (Pipes) são utilizados antes e depois do nome da tag point, são delimitadores.

Até o momento não achei um jeito de especificar o tipo da variável, pois o editor automaticamente assume o tipo que foi passado a ele.

A tag code por sua vez é a responsável para que finalmente sejam escritos no editor todo nosso template, ela possui a propriedade language que funciona exatamente como a da tag script e a propriedade delimiter que serve para que você especifique o delimitador que será utilizado na separação dos nomes das tags point, no nosso caso o caractere “” (Pipe), ficando como abaixo:
<code language=”Delphi” delimiter=””>
<![CDATA[]]>
</code>

Repare na tag em gerada automaticamente pela IDE que esta em azul chamada CDATA preste atenção o código a ser exibido na IDE devera ser colocado entre os caracteres [] ou seu código não será exibido.

Vamos então escrever um template para converter um determinado valor para integer.

Para isso adcione o código dentro do CDATA
NomeInternoVariavel := Convert.ToInt32(teste);

Nosso template completo ficou assim:

<?xml version="1.0" encoding="utf-8" ?>
<codetemplate xmlns=" http://schemas.borland.com/Delphi/2005/codetemplates " version="1.0.0">
<template name="TestTemp" invoke="manual">
<description>
Template de teste
</description>
<author>
Diego M. Garcia
</author>
<point name="teste">
<text> TextoAserSubstituido </text>
<hint>Esse é um texto de teste.</hint>
</point>
<point name="NomeInternoDaVariavel">
<text>DigiteUmValorInteiro</text>
<hint>Variável que será utilizada.</hint>
</point>
<script language=" Delphi" onenter="false" onleave="true">
DeclareVariable(NomeInternoVariavel);
</script>
<code language="Delphi" delimiter=””><![CDATA[NomeInternoVariavel := Convert.ToInt32(teste);]]> </code>
</template>
</codetemplate>

Salve e veja seu template na IDE através da tecla Ctrl+J ou caso tenha configurado o invoke como auto digite o nome de seu template e tecle espaço.

Obs.: As vezes o delphi da alguns erros se você estiver editando direto nele e é necessário finalizar o delphi e abri-lo novamente para que suas modificações estejam disponíveis.

Examine os templates do delphi para conhecer outras propriedades disponíveis das tags.

Abraços e espero que tenham gostado,

Diego M. Garcia.

3 comentários:

Anônimo disse...

Bom dia, Diego, venho acompanhando diariamente seu blog e simplesmente suas dicas são de extrema importancia para nos e se possivel gostaria de uma informação. Existe uma maneira de deixar a paleta de controles do DElphi 2009 igual a do Delphi 7.0 ?? Outra coisa, porque quando trago dados de um ClientDataSet com dados “currency”, para popular um DBGrid não é mostrado os valores corretamente na coluna - estou tendo este problema. Se Você puder me ajudar.

Agradeço antecipadamente.

Diego M. Garcia disse...

Legal, obrigado pelo apoio ultimamente estou correndo muito então o tempo ta complicado para postar novidades, mas sempre que da uma folguinha posto algo ;)

Em relação a paleta tem o DDevExtensions que faz justamente isso vc pode baixar neste endereço http://andy.jgknet.de/blog/?page_id=10

Agora em relação a campo currency, faça o seguinte, va no fields editor do seu clientdataset click no campo do tipo currency, e format ele utilizando a propriedade DisplayFormat.

Grande abraço,
Diego M. Garcia

Flávio Carneiro disse...

Muito bom o artigo. Me ajudou bantate. Parabéns