<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Everson Novka</title>
	<atom:link href="http://www.eversonnovka.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.eversonnovka.com</link>
	<description>Delphi para todos!</description>
	<lastBuildDate>Tue, 06 Oct 2009 23:16:58 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>Novo livro sobre Delphi 2009 em português</title>
		<link>http://www.eversonnovka.com/novo-livro-sobre-delphi-2009-em-portugues/</link>
		<comments>http://www.eversonnovka.com/novo-livro-sobre-delphi-2009-em-portugues/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 23:16:58 +0000</pubDate>
		<dc:creator>Everson Novka</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[delphi 2009]]></category>
		<category><![CDATA[livro]]></category>
		<category><![CDATA[marco cantu]]></category>
		<category><![CDATA[novo]]></category>
		<category><![CDATA[português]]></category>
		<category><![CDATA[recursos avancados]]></category>

		<guid isPermaLink="false">http://www.eversonnovka.com/?p=59</guid>
		<description><![CDATA[A Infopress acaba de lançar a tradução do livro Delphi 2009 Handbook do Marco Cantú, o livro tem o nome Recursos Avançados do Delphi, conta com 416 páginas e é uma boa forma de se atualizar nos recursos do Delphi.]]></description>
			<content:encoded><![CDATA[<p>O livro <strong>Recursos Avançados do Delphi</strong> abrange, em suas 416 páginas, todos os novos recursos do Delphi, como o suporte a Unicode, os tipos genéricos, os métodos anônimos, os controles Ribbon, outros controles novos ou aperfeiçoados, a tecnologia para acesso a bancos de dados DBExpress 4, a nova arquitetura para programas multicamadas DataSnap e as novas funcionalidades do ambiente integrado de programação.<br />
Ao contrário da maioria dos livros sobre Delphi, Recursos Avançados do Delphi não passa 90% do tempo repetindo informações que a grande maioria dos programadores já conhece, e apenas 10% do tempo apresentando informações novas: aqui os assuntos são abordados em muito mais profundidade. É dada ênfase na aplicação dos novos recursos do Delphi, com inúmeros exemplos de como são usados na prática. Os problemas que podem ser encontrados ao atualizar programas escritos em versões anteriores do Delphi (no Delphi 7 ou Delphi 2007, por exemplo), em especial devido à introdução do suporte a Unicode, são discutidos em detalhes.<br />
Recursos Avançados do Delphi é indispensável para todos os desenvolvedores, mesmo iniciantes, já que apresenta informações que não são encontradas em outros livros, e que são necessárias para escrever programas que façam proveito pleno dos novos recursos do Windows XP, Vista e 7.</p>
<p>Compre já o seu: http://www.infopress.com.br/delphi2009/index.html</p>
<p><strong>Sobre o autor</strong></p>
<p>Marco Cantù é o premiado autor da série Dominando o Delphi: a Bíblia, com oito edições, todas traduzidas e publicadas no Brasil, que abrangem todas as versões do Delphi, até o Delphi 2005. Os livros de Marco Cantù são conhecidos mundialmente como referências definitivas sobre o Delphi, são um sucesso de vendas no Brasil e no mundo, e ganharam 4 vezes o prêmio Reader&#8217;s Choice Award da revista Delphi Informant como melhor livro do ano na opinião dos leitores. Ele vive na Itália e é uma autoridade internacional sobre o Delphi, consultor, e frequente conferencista, com apresentações em mais de 10 conferências da Borland/CodeGear nos Estados Unidos, e também em conferências européias da Borland, na EKON (Alemanha), na DCon (Reino Unido), Max (Holanda), entre muitas outras.</p>
<p>Visite o site do autor: www.marcocantu.com</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eversonnovka.com/novo-livro-sobre-delphi-2009-em-portugues/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Carregar imagem de uma URL</title>
		<link>http://www.eversonnovka.com/carregar-imagem-de-uma-url/</link>
		<comments>http://www.eversonnovka.com/carregar-imagem-de-uma-url/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 04:22:54 +0000</pubDate>
		<dc:creator>Everson Novka</dc:creator>
				<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[download]]></category>
		<category><![CDATA[gif]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[imagem]]></category>
		<category><![CDATA[indy]]></category>
		<category><![CDATA[web]]></category>

		<guid isPermaLink="false">http://www.eversonnovka.com/?p=53</guid>
		<description><![CDATA[Este é um exemplo de como carregar uma imagem de uma página web]]></description>
			<content:encoded><![CDATA[<p>Pessoal, este é um exemplo de como carregar uma imagem de um site qualquer. Nessa aplicação utilizei a biblioteca GIFImg e o componente idHttp do pacote Indy. No form de exemplo tem os seguintes componentes:</p>
<p>Button1: TButton;<br />
imgLogoEmbarcadero: TImage;<br />
IdHTTP1: TIdHTTP;</p>
<p>No evento onclick do botão:</p>
<pre name="code" class="pascal">
var
  ImageMem : TMemoryStream;
  ImageGif: TGIFImage;
begin
  ImageMem := TMemoryStream.Create;
  ImageGif := TGIFImage.Create;
  try
    try
      IdHTTP1.Get('http://www.embarcadero.com/images/logo_new.gif', ImageMem);
    except on e: EIdHTTPProtocolException do
      begin
        if e.ErrorCode = 404 then // código de página não encontrada
        begin
          // Não achou!
          Exit;
        end;
      end;
    end;
    ImageMem.Position := 0;
    ImageGif.LoadFromStream(ImageMem);
    imgLogoEmbarcadero.Picture.Assign(ImageGif);
  finally
    ImageGif.Free;
    ImageMem.Free;
  end;
end;
</pre>
]]></content:encoded>
			<wfw:commentRss>http://www.eversonnovka.com/carregar-imagem-de-uma-url/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Exportando dados de um DataSet para o formato JSON</title>
		<link>http://www.eversonnovka.com/exportando-dados-de-um-dataset-para-o-formato-json/</link>
		<comments>http://www.eversonnovka.com/exportando-dados-de-um-dataset-para-o-formato-json/#comments</comments>
		<pubDate>Fri, 25 Sep 2009 20:32:31 +0000</pubDate>
		<dc:creator>Everson Novka</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[DataSet]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Everson Novka]]></category>
		<category><![CDATA[Exemplo]]></category>
		<category><![CDATA[exportação]]></category>
		<category><![CDATA[Exportar]]></category>
		<category><![CDATA[JSON]]></category>
		<category><![CDATA[lkjson]]></category>
		<category><![CDATA[Open Source]]></category>

		<guid isPermaLink="false">http://www.eversonnovka.com/?p=24</guid>
		<description><![CDATA[Neste artigo serão demonstrados algoritmos para exportação de dados de um DataSet para o formato JSON. Até a versão 2009 do Delphi não há nada nativo para manipulação de arquivos JSON, por isso utilizei uma biblioteca Open Source chamada Delphi JSON Library (http://sourceforge.net/projects/lkjson). O que é JSON? JSON (JavaScript Object Notation &#8211; Notação de Objetos [...]]]></description>
			<content:encoded><![CDATA[<p>Neste artigo serão demonstrados algoritmos para exportação de dados de um DataSet para o formato JSON. Até a versão 2009 do Delphi não há nada nativo para manipulação de arquivos JSON, por isso utilizei uma biblioteca Open Source chamada Delphi JSON Library (http://sourceforge.net/projects/lkjson).</p>
<p><strong>O que é JSON?</strong></p>
<p>JSON (JavaScript Object Notation &#8211; Notação de Objetos JavaScript) é uma formatação leve de troca de dados. Para seres humanos, é fácil de ler e escrever. Para máquinas, é fácil de interpretar e gerar. Está baseado em um subconjunto da linguagem de programação JavaScript, Standard ECMA-262 3a Edição -Dezembro &#8211; 1999. JSON é em formato texto e completamente independente de linguagem, pois usa convenções que são familiares às linguagens, incluindo C++, C#, Java, JavaScript, Perl, Python, Delphi e muitas outras. Estas propriedades fazem com que JSON seja um formato ideal de troca de dados.</p>
<p>JSON está constituído em duas estruturas:</p>
<p>•             Uma coleção de pares nome/valor. Em várias linguagens, isto é caracterizado como um object, record, struct, hash table, keyed list, ou arrays associativas;</p>
<p>•             Uma lista ordenada de valores. Na maioria das linguagens, isto é caracterizado como um array, vetor, lista ou sequência.</p>
<p>São estruturas de dados universais. Virtualmente, todas as linguagens de programação modernas as suportam, de uma forma ou de outra. É aceitável que um formato de troca de dados que seja independente de linguagem de programação se baseie nessas estruturas.</p>
<p>Em JSON, os dados são apresentados da seguinte forma:</p>
<p>Um objeto é um conjunto desordenado de pares nome/valor. Um objeto começa com <strong>{</strong> (chave de abertura) e termina com <strong>}</strong> (chave de fechamento). Cada nome é seguido por <strong>:</strong> (dois pontos) e os pares nome/valor são seguidos por <strong>,</strong> (vírgula).</p>
<p><strong>Classes da biblioteca lkjson utilizadas:</strong></p>
<p><strong>TlkJSONobject: </strong>Utilizada para o cabeçalho e itens de lista do arquivo JSON;</p>
<p><strong>TlkJSONlist: </strong>Utilizada para guardar a lista de valores e nomes dos fields do DataSet.</p>
<p><strong>Implementação da classe manipuladora do arquivo JSON:</strong></p>
<pre name="code" class="pascal">
unit DataSetToJsonEngine;

interface

uses DB, uLkJSON;

type
  TCustomDataSetToJson = class
  private
    FJsonObjectMain : TlkJSONobject;
    FDataSet: TDataSet;
    procedure SetDataSet(const Value: TDataSet);
    procedure ValidateDataSet;
  public
    property DataSet : TDataSet read FDataSet write SetDataSet;
    constructor Create(const ADataSet : TDataSet);
    destructor Destroy; override;
    function Convert : WideString;
  end;

  TDataSetToJson = class(TCustomDataSetToJson);

implementation

uses SysUtils;

{ TCustomDataSetToJson }

function TCustomDataSetToJson.Convert: WideString;
var
  JsonList : TlkJSONlist;
  JsonDataFieldList : array of TlkJSONobject;
  I, IdxRecord : Integer;
begin
  ValidateDataSet;
  JsonList := TlkJSONlist.Create;
  try
    // Monto o cabeçalho da string Json
    FJsonObjectMain.Add('DataSetName', FDataSet.Name);
    FJsonObjectMain.Add('DataSetCount', FDataSet.RecordCount);
    with FDataSet do
    begin
      First;
      IdxRecord := 0;
      SetLength(JsonDataFieldList, FDataSet.RecordCount);
      // Adiciono os valores e nomes dos fields em uma lista
      while not EOF do
      begin
        JsonDataFieldList[IdxRecord] := TlkJSONobject.Create;
        for I := 0 to FieldCount - 1 do
          JsonDataFieldList[IdxRecord].Add(Fields[I].FieldName, Fields[i].AsString);
        JsonList.Add(JsonDataFieldList[IdxRecord]);
        Next;
        Inc(IdxRecord);
      end;
      // Atribuo a lista no objeto principal do Json
      FJsonObjectMain.Add('DataFieldList', JsonList);
      Result := TlkJSON.GenerateText(FJsonObjectMain);
    end;
  finally
    FreeAndNil(JsonList);
  end;
end;

constructor TCustomDataSetToJson.Create(const ADataSet: TDataSet);
begin
  FDataSet := ADataSet;
  FJsonObjectMain := TlkJSONobject.Create;
end;

destructor TCustomDataSetToJson.Destroy;
begin
  FJsonObjectMain.Free;
  inherited;
end;

procedure TCustomDataSetToJson.SetDataSet(const Value: TDataSet);
begin
  FDataSet := Value;
end;

procedure TCustomDataSetToJson.ValidateDataSet;
begin
  if FDataSet = nil then
    raise Exception.Create('DataSet não atribuído');
  FDataSet.Active := not(FDataSet.Active);
  if FDataSet.IsEmpty then
    raise Exception.Create('DataSet vazio');
end;

end.</pre>
<p><strong>Consumindo a classe manipuladora:</strong></p>
<p>Criar<strong> </strong>um novo form, adicione um botão e um MEMO. No evento OnClick do botão adicione<strong> </strong>o seguinte código:</p>
<pre name="code" class="pascal">
procedure TfrmDataSetToJsonMain.Button1Click(Sender: TObject);
var
  JsonEngine : TDataSetToJson;
begin
  JsonEngine := TDataSetToJson.Create(SQLQuery1);
  Memo1.Text := JsonEngine.Convert;
end;</pre>
<p><strong>Testando o arquivo JSON gerado:</strong></p>
<p>Neste exemplo o arquivo JSON foi gerando dentro de um campo MEMO, o texto nele contido poderá ser testado em uma ferramenta web, segue link: <a href="http://www.thomasfrank.se/downloadableJS/JSONeditor_example.html">http://www.thomasfrank.se/downloadableJS/JSONeditor_example.html</a></p>
<p style="text-align: center;">
<div id="attachment_35" class="wp-caption aligncenter" style="width: 566px"><img class="size-full wp-image-35  " title="TesteJson" src="http://www.eversonnovka.com/wp-content/uploads/2009/09/TestJSON.jpg" alt="Testando arquivo JSON" width="556" height="441" /><p class="wp-caption-text">Testando arquivo JSON</p></div>
<p><a href="http://www.eversonnovka.com/exemplos/json.rar">Fontes &#8211; Delphi 2009</a></p>
<p>Os dados exportados nesse exemplo está no banco de dados de exemplo do Firebird 2.1. Utilizei uma conexão DBExpress com o driver da Embarcadero <a href="http://groups.google.com/group/dbxfirebird">http://groups.google.com/group/dbxfirebird </a></p>
<p>Este é um pequeno exemplo de como criar arquivos JSON de forma rápida e fácil. No próximo artigo teremos um exemplo de como trocar arquivos JSON via socket com uma aplicação JavaScript.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.eversonnovka.com/exportando-dados-de-um-dataset-para-o-formato-json/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Disponibilizada a apresentação de lançamento do Delphi 2010</title>
		<link>http://www.eversonnovka.com/disponibilizada-a-apresentacao-de-lancamento-do-delphi-2010/</link>
		<comments>http://www.eversonnovka.com/disponibilizada-a-apresentacao-de-lancamento-do-delphi-2010/#comments</comments>
		<pubDate>Mon, 14 Sep 2009 22:22:32 +0000</pubDate>
		<dc:creator>Everson Novka</dc:creator>
				<category><![CDATA[Vídeos]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Delphi 2010]]></category>
		<category><![CDATA[lançamento delphi 2010]]></category>

		<guid isPermaLink="false">http://delphi2010.wordpress.com/?p=16</guid>
		<description><![CDATA[Na última sexta-feira dia 29 de agosto de 2009, tivemos o evento online de lançamento do Delphi 2010, foram quase 1000 desenvolvedores conectados para conhecer as novidades desta que é sem dúvida a melhor versão de todos os tempos.]]></description>
			<content:encoded><![CDATA[<p>Na última sexta-feira dia 29 de agosto de 2009, tivemos o evento online de lançamento do Delphi 2010, foram quase 1000 desenvolvedores conectados para conhecer as novidades desta que é sem dúvida a melhor versão de todos os tempos.</p>
<p>Gostaria de agradecer a todos que prestigiaram o evento, agradecer as centenas de emails que recebi parabenizando a nossa equipe pelo trabalho realizado nesta versão.</p>
<p>Aqueles que não tiveram a oportunidade de participar do evento, podem assistir as apresentações diretamente do seu browser clicando em cada uma das imagens abaixo ou efetuar o download. A apresentação tem em torno de 2:30 minutos e foi dividida em duas partes, desta forma você pode efetuar o download ou assistir uma de cada vez.</p>
<p>Gostaria de lembrar que dia 15 de setembro será realizado o <strong><a href="http://latam.embarcadero.com/br/delphi2010/">minicurso sobre Delphi 2010</a></strong> em São Paulo, o evento é gratuito e iremos fundo nas novidades durante este minicurso, faça sua <strong><a href="http://latam.embarcadero.com/br/delphi2010/">inscrição</a></strong> as vagas são limitadas.</p>
<table border="0" width="650">
<tbody>
<tr>
<td width="50%">
<p style="text-align:center;"><a href="http://cc.embarcadero.com/javascript/play.html?u=y&amp;w=1024&amp;h=768&amp;d=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27213&amp;s=58.1MB&amp;t=Apresenta%C3%A7%C3%A3o%20sobre%20o%20Delphi%202010%20-%20Parte%201&amp;f=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27213%26file%3dDelphi+2010+-+Webinar+Portuguese-Part1.swf&amp;e=n&amp;u=y"><img src="http://blogs.embarcadero.com/files/2009/08/play1_1933.jpg" alt="" width="183" height="139" /></a></p>
</td>
<td>
<p style="text-align:center;"><a href="http://cc.embarcadero.com/javascript/play.html?u=y&amp;w=1024&amp;h=768&amp;d=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27214&amp;s=40.3MB&amp;t=Apresenta%C3%A7%C3%A3o%20sobre%20o%20Delphi%202010%20-%20Parte%202%20%28DataSnap%29&amp;f=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27214%26file%3dDelphi+2010+-+Webinar+Portuguese-Part2.swf&amp;e=n&amp;u=y"><img src="http://blogs.embarcadero.com/files/2009/08/play2_1935.jpg" alt="" width="202" height="135" /></a></p>
</td>
</tr>
<tr>
<td>Primeira parte:</p>
<ul>
<li>IDE</li>
<li>Compilador</li>
<li>Lingugagem</li>
<li>RTL</li>
<li>VCL</li>
<li>Touch</li>
<li>Multi-Touch</li>
<li>Gesture</li>
<li>dbExpress &#8211; suporte nativo ao Firebird</li>
</ul>
<p><a href="http://cc.embarcadero.com/download.aspx?id=27213"><strong>Download</strong></a> ***</td>
<td width="50%">Segunda parte:</p>
<ul>
<li>DataSnap</li>
<li>Filters</li>
<li>Compactação de dados</li>
<li>Criptografia</li>
<li>Comunicação HTTP</li>
<li>Failover</li>
<li>Transferência de objetos</li>
<li>JSON</li>
</ul>
<p><a href="http://cc.embarcadero.com/download.aspx?id=27214"><strong>Download</strong></a> ***</td>
</tr>
</tbody>
</table>
<p>*** Para assistir ou baixar o vídeo é necessário ter uma conta no EDN, ao tentar assistir ou efetuar o download o sistema automaticamente lhe perguntará pelo login e senha ou criar uma conta caso não tenha. É fácil, gratuito e você terá acesso a milhares de artigos e códigos fonte.</p>
<p>Enquanto você assiste a apresentação faça o <strong><a href="https://downloads.embarcadero.com/free/rad_studio">download do trial</a></strong> e conheça na prática as novidades</p>
<p><em>Fonte: http://blogs.embarcadero.com/andreanolanusse</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.eversonnovka.com/disponibilizada-a-apresentacao-de-lancamento-do-delphi-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Novo driver dbExpress para Firebird no Delphi 2010 e C++Builder 2010</title>
		<link>http://www.eversonnovka.com/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/</link>
		<comments>http://www.eversonnovka.com/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 04:04:52 +0000</pubDate>
		<dc:creator>Everson Novka</dc:creator>
				<category><![CDATA[Vídeos]]></category>
		<category><![CDATA[Banco de dados]]></category>
		<category><![CDATA[Dbexpress]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Delphi 2010]]></category>
		<category><![CDATA[Firebird Suporte]]></category>

		<guid isPermaLink="false">http://delphi2010.wordpress.com/?p=5</guid>
		<description><![CDATA[Vídeo de como acessar o Firebird através do Data Explorer, VCL e dbExpress framework utilizando as classes metadata.]]></description>
			<content:encoded><![CDATA[<p>Uma das novidades para banco de dados no Delphi 2010 e C++Builder 2010 é o novo driver dbExpress driver para Firebird, assista este vídeo e saiba como acessar o Firebird através do Data Explorer, VCL e dbExpress framework utilizando as classes metadata.</p>
<p>Mais informações sobre as novidades do RAD Studio 2010 acesse <a title="http://blogs.embarcadero.com/" rel="nofollow" href="http://blogs.embarcadero.com/" target="_blank">http://blogs.embarcadero.com/</a> e também a página dos sneak previews do RAD Studio 2010 em <a title="http://bit.ly/fUdUd" rel="nofollow" href="http://bit.ly/fUdUd" target="_blank">http://bit.ly/fUdUd</a></p>
<p>[youtube=http://www.youtube.com/watch?v=a3CnagkyBWE]</p>
<p><em>Fonte: http://blogs.embarcadero.com/andreanolanusse</em></p>
]]></content:encoded>
			<wfw:commentRss>http://www.eversonnovka.com/novo-driver-dbexpress-para-firebird-no-delphi-2010-e-cbuilder-2010/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Padronização de código</title>
		<link>http://www.eversonnovka.com/padronizacao-de-codigo/</link>
		<comments>http://www.eversonnovka.com/padronizacao-de-codigo/#comments</comments>
		<pubDate>Sun, 13 Sep 2009 05:30:33 +0000</pubDate>
		<dc:creator>Everson Novka</dc:creator>
				<category><![CDATA[Artigos]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Nomenclatura]]></category>
		<category><![CDATA[Padrão de código]]></category>
		<category><![CDATA[Padrão delphi]]></category>

		<guid isPermaLink="false">http://delphi2010.wordpress.com/?p=11</guid>
		<description><![CDATA[Este Artigo tem por finalidade definir padrões de desenvolvimento, no que diz respeito a nomenclatura e melhores práticas, aos elementos a serem utilizados nos projetos que utilizarem Delphi]]></description>
			<content:encoded><![CDATA[<p align="center"><strong>Introdução</strong><br />
Este artigo tem por finalidade definir padrões de desenvolvimento, no que diz respeito a nomenclatura e melhores práticas, aos elementos a serem utilizados nos projetos que utilizarem <strong>Delphi para Windows</strong>.</p>
<p><span style="text-decoration:underline;"><br />
</span></p>
<p><strong>1. Estilos de Capitalização</strong><strong> </strong></p>
<p>Existem três tipos de convenções de nomenclatura. São eles: Pascal Case, Camel Case e Upper Case. Em todas as convenções se refere ao uso de maiúsculas ou minúsculas nos nomes. Todas se aplicam a nomes formados por várias palavras.</p>
<p><strong><em>1.1. Pascal Case</em></strong><strong> </strong></p>
<p>A primeira letra do identificador e as primeiras letras das palavras subseqüentes são maiúsculas.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>B</strong>ack<strong>C</strong>olor</td>
</tr>
</tbody>
</table>
<p><strong><em>1.2. Camel Case</em></strong><strong> </strong></p>
<p>A primeira letra da primeira palavra é em minúscula, e as demais palavras subseqüentes iniciam com maiúscula.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>b</strong>ack<strong>C</strong>olor</td>
</tr>
</tbody>
</table>
<p><strong><em>1.3. Upper Case</em></strong><strong> </strong></p>
<p>Todas as letras são maiúsculas. Usada somente para constantes.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">CHAVE_CRIPTOGRAFIA   = String(‘#F$%A&amp;DH’);</td>
</tr>
</tbody>
</table>
<p><strong>2. Tabela de Regras de Capitalização</strong><strong> </strong><strong> </strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="171" valign="top"><strong>Tipo</strong></td>
<td width="92" valign="top"><strong>Estilo</strong></td>
<td width="286" valign="top"><strong>Obrigatório</strong></td>
</tr>
<tr>
<td width="171" valign="top">Classes</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top">T<strong>C</strong>liente<strong>C</strong>adastro   (Utilizar T no início)</td>
</tr>
<tr>
<td width="171" valign="top">Eventos</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>V</strong>alue<strong>C</strong>hange</td>
</tr>
<tr>
<td width="171" valign="top">Variáveis</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>R</strong>ed<strong>V</strong>alue</td>
</tr>
<tr>
<td width="171" valign="top">Interface</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>ID</strong>isposable</td>
</tr>
<tr>
<td width="171" valign="top">Métodos</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>C</strong>onverte<strong>V</strong>alor()</td>
</tr>
<tr>
<td width="171" valign="top">Nome de   Unit</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>C</strong>liente<strong>C</strong>adastro<strong>F</strong>orm.pas</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade</td>
<td width="92" valign="top">PascaCase</td>
<td width="286" valign="top"><strong>B</strong>ack<strong>C</strong>olor</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade   Public</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>R</strong>ed<strong>V</strong>alue</td>
</tr>
<tr>
<td width="171" valign="top">Parâmetro   de Métodos</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top">A<strong>N</strong>ome<strong>P</strong>arametro</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade   Protected</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>R</strong>ed<strong>V</strong>alue</td>
</tr>
<tr>
<td width="171" valign="top">Propriedade Private</td>
<td width="92" valign="top">PascalCase</td>
<td width="286" valign="top"><strong>D</strong>omain<strong>U</strong>ser</td>
</tr>
<tr>
<td width="171" valign="top">Constantes</td>
<td width="92" valign="top">UpperCase</td>
<td width="286" valign="top"><strong>CODIGO_SISTEMA</strong></td>
</tr>
<tr>
<td width="171" valign="top">Numeradores</td>
<td width="92" valign="top">camelCase</td>
<td width="286" valign="top"><strong>(st</strong>Aberto, <strong>st</strong>Fechado, <strong>st</strong>Desconhecido<strong>)</strong></td>
</tr>
</tbody>
</table>
<p><strong>3. Padrão de Nomenclatura</strong><strong> </strong></p>
<p>Nomear corretamente objetos, componentes, arquivos, pastas, enfim, elementos em geral, é muito importante para um bom entendimento do projeto como um todo. Um simples arquivo nomeado errado, ou sem um padrão definido, pode confundir e prejudicar uma futura manutenção. Portanto, questões importantes devem ser consideradas na nomenclatura do projeto:<br />
· Não utilize notação húngara. A notação é útil somente para nomear componentes e, mesmo assim, quando existe a necessidade de identificação facilitada do mesmo;<br />
· Coloque nomes da forma mais clara possível, visando facilitar a compreensão da finalidade;<br />
· Em nomes compostos, faça combinações entre caracteres maiúsculos e minúsculos para PascalCase;<br />
· Utilize abreviações com responsabilidade, e conforme a necessidade;<br />
· Utilize nomes em português;<br />
· Não utilize espaços, acentos, cedilhas, sublinhas ou caracteres especiais, mesmo que o contexto do que está sendo nomeado permita.</p>
<p><strong><em>3.1. Classes</em></strong><strong> </strong></p>
<p><strong>3.1.1. Classes</strong><strong> Objeto</strong><strong> </strong></p>
<p>· Nomeie classes objeto com nomes/substantivos;<br />
· Use PascalCase;<br />
· Não use prefixo de classe (por exemplo: CFTP);<br />
· Utilize “T” no início do nome da declaração da classe;<br />
· Não use o caractere de sublinha (_).<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="538">TUsuario = Class;<br />
TUsuarioPadrao = TUsuario;<br />
TUsuarioBasico = TUsuario;</td>
</tr>
</tbody>
</table>
<p><strong><em>3.2. Interfaces</em></strong><strong> </strong></p>
<p>· Nomeie interfaces com substantivos ou adjetivos que descrevem o comportamento;<br />
· Use PascalCase;<br />
· Não use o caractere de sublinha (_);<br />
· Coloque a letra I como prefixo, para indicar que o tipo é uma interface;<br />
· Use nomes similares quando definir pares de classes/interfaces, onde a classe é uma implementação padrão das interfaces. O nome deve diferir apenas com a letra I, que é o prefixo do nome da interface.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">IUsuarioBase = <strong>Interface </strong><br />
TppInterfacedObject = <strong>class(TObject, IUnknown)</strong></td>
</tr>
</tbody>
</table>
<p><strong><em>3.3. Parâmetros</em></strong><strong> </strong></p>
<p>· Use nomes de parâmetros descritivos. Nomes de parâmetros devem ser descritivos o suficiente para que se possa, baseado no nome do parâmetro e seu tipo, determinar o que o parâmetro significa;<br />
· Use PascalCase;<br />
· Use nomes baseados no significado do parâmetro e não baseados no tipo do parâmetro;<br />
· Não use parâmetros reservados (por exemplo: params, args, etc);<br />
· Não use notação Húngara.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>procedure </strong>FormataNumero(<strong>AV</strong>alor   : Inteiro);<br />
<strong>function </strong>FormataNumero(<strong>AV</strong>alor   : Inteiro) : Integer;</td>
</tr>
</tbody>
</table>
<p><strong><em>3.4. Variáveis</em></strong><strong> </strong></p>
<p>· Nomeie Variáveis usando substantivos;<br />
· Use PascalCase;<br />
· Nunca utilize o caractere de sublinha (_);<br />
· Quando for variável declarada na interface, utilize “F” no início do nome.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">Private</p>
<p>FNomeUsuario : String;</p>
<p>FSenhaUsuario : String;</p>
<p>Public</p>
<p>FNomeEmpresa   : String;</p>
<p>End;</td>
</tr>
</tbody>
</table>
<p><strong><br />
</strong><strong>Declaração em métodos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">Procedure   <strong>ProcessaUsuario(</strong>ACodigoUsuario : Integer<strong>);</strong></p>
<p><strong>var</strong></p>
<p>ValorTemporario   : Integer;</p>
<p>NomeUsuario   : String;</p>
<p><strong>begin</strong></p>
<p><strong>//</strong></p>
<p><strong>end;</strong></td>
</tr>
</tbody>
</table>
<p><strong><em>3.5. Propriedades</em></strong><strong> </strong></p>
<p>· Nomeie propriedades usando substantivos;<br />
· Use PascalCase;<br />
· Considere ter uma propriedade com o mesmo nome do tipo;<br />
· Quando declarar uma propriedade com o mesmo nome do tipo, defina o mesmo tipo da propriedade;<br />
· Não utilize o “T” no início do nome, “T” é utilizado apenas na declaração de tipos.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">private</p>
<p><strong>FNomeUsuario : String;</strong></p>
<p>public</p>
<p>property <strong>NomeUsuario :   String read FNomeUsuario write FNomeUsuario</strong></td>
</tr>
</tbody>
</table>
<p><strong><em>3.6. Nome para Arquivos (Units)</em></strong><strong></strong></p>
<p>· Use PascalCase para nomear arquivos;<br />
· Para formar o nome, utilize o nome da funcionalidade, o tipo da funcionalidade, e o tipo de formulário (<em>form</em>) que você está utilizando (caso esse arquivo seja de um formulário).<br />
<strong>Exemplos de formulários:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">CategoriaCadastroForm.pas<br />
UsuarioListaForm.pas<br />
EntradaForm.pas<br />
UsuarioPesquisaForm.pas</td>
</tr>
</tbody>
</table>
<p><strong><em>3.7. Prefixo para Objetos de Interface</em></strong><strong></strong></p>
<p>· Esses objetos ainda seguem a notação húngara;<br />
· Use as abreviações, nas tabelas a seguir, como prefixo dos objetos;<br />
· Use CamelCase para nomear objetos de interface;<br />
· Utilize a seguinte regra: Três consoantes + Nome do Objeto. Exemplos:<br />
- <strong>Q</strong>ue<strong>ry</strong> da tabela Banco à qryBanco;<br />
- <strong>C</strong>lient<strong>D</strong>ata<strong>S</strong>et da tabela Banco à cdsBanco;<br />
- <strong>D</strong>ata<strong>S</strong>ou<strong>r</strong>ce ligado ao ClientDataSet à dsrBanco.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">T<strong>B</strong>u<strong>t</strong>to<strong>n   = btnNomeBotao; </strong>(Tentar não repetir consoantes).<br />
TADO<strong>Q</strong>ue<strong>ry</strong> = <strong>qryNomeQuery; </strong><br />
T<strong>S</strong>peed<strong>B</strong>u<strong>t</strong>ton = <strong>sbtNomeBotao;</strong><br />
T<strong>A</strong>ction<strong>L</strong>i<strong>s</strong>t = <strong>alsNomeActionList</strong>;</td>
</tr>
</tbody>
</table>
<p><strong><em>3.8. Prefixo para Formulários (Form) e Módulos de Dados (DataModule)</em></strong><strong></strong></p>
<p>· Use CamelCase;<br />
· Form = utilizar “<strong>frm</strong>” + o nome da funcionalidade;<br />
· DataModule = utilizar “<strong>dmd</strong>” + o nome da funcionalidade.</p>
<p><strong>Exemplos para DataModule:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>dmdClienteProcesso</strong> : TDataModule;<br />
<strong>dmdClienteCadastro</strong> : TDataModule;<br />
<strong>dmdPessoaUsuarioCadastro</strong> : TDataModule;</td>
</tr>
</tbody>
</table>
<p><strong>Exemplos para Form:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557"><strong>frmClienteProcesso</strong> : TFom;<br />
<strong>frmClienteCadastro</strong> : TForm;<br />
<strong>frmPessoaUsuarioCadastro</strong> : TForm;</td>
</tr>
</tbody>
</table>
<p><strong>4. Endentação</strong><strong></strong></p>
<p>A endentação citada é sobre o número de espaços entre os níveis de tabulação. Utilize como padrão 2 espaços. Este padrão pode ser configurado na janela de opções do <strong>Borland Delphi</strong>.</p>
<p>Evite escrever linhas com mais de 80 posições entre espaços e caracteres. A idéia é facilitar a compreensão do código e, se possível, visualizar a linha inteira em seu editor de código. Caso alguns trechos de código fiquem muito extensos, poderá ser feita a quebra da linha, entretanto é necessário seguir os seguintes princípios:<br />
· Quebrar a linha após uma vírgula;</p>
<p>· Quebrar a linha após um operador;</p>
<p>· Alinhar a nova linha no início da expressão no mesmo nível da linha anterior.<br />
<strong>Exemplos:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">calculaArea(expr1,   expr2, expr3,</p>
<p>expr4,   expr5);</p>
<p><em>ou</em></p>
<p>var :=   a *b / (c &#8211; g + f)<strong> + </strong></p>
<p>4 * z;</td>
</tr>
</tbody>
</table>
<p>Outra questão importante é a utilização de espaços em branco para endentação. Utilize espaços em branco para endentação, nunca use tabulação!</p>
<p><strong>5. Comentários</strong><strong></strong></p>
<p>Os comentários são muito importantes, tanto para relembrar você como para orientar outra pessoa sobre a manutenção do código fonte. Comente tudo que puder, da seguinte forma:<br />
· Utilize as duas barras “//” para comentar trechos de código;<br />
· Utilize “{}” para comentar blocos.</p>
<p><strong><em>5.1. Cabeçalho de Arquivos (Units)</em></strong><strong></strong></p>
<p>Comentários de cabeçalho são importantes para saber quem foi o responsável pelo desenvolvimento e as alterações aplicadas na unit. Portanto:<br />
· Descreva o propósito da unit;<br />
· Coloque o nome do programador responsável pelo desenvolvimento inicial da unit;<br />
· Coloque o nome do analista responsável;<br />
· O item Revisões será utilizado quando for feita uma manutenção na unit;<br />
· Comentários adicionais são importantes caso as alterações efetuadas nessa unit possam afetar alguma outra funcionalidade do sistema.</p>
<p><strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">(*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Propósito   da Unit:<br />
Programador:   Data: ??<br />
Analista   Responsável:<br />
Revisões:<br />
Programador:<br />
Data:   Descrição da Revisão<br />
Comentários   adicionais:<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;*)</td>
</tr>
</tbody>
</table>
<p><strong><em>5.2. Cabeçalho de Métodos</em></strong><strong></strong></p>
<p>Ao descrever o cabeçalho de um Método:<br />
· Utilize comentário de bloco;<br />
· Não seja detalhista, tente ser objetivo em seu comentário;<br />
· Comente sobre os parâmetros, caso hajam.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">{&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
*   Propósito do Método: Exibir uma mensagem de Pergunta utilizando MessageBox<br />
*<br />
*   Utilização dos parâmetros:<br />
ATitulo   = Titulo da Mensagem (Caption).<br />
AMensagem   = Mensangem que ira aparecer no corpo do MessageBox.<br />
Result   = Retorna True caso seja selecionado a opção Sim no MessageBox.<br />
* Autor   / Data: Everson R. Novka 09/06/2006<br />
*&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;}<br />
class   function TFWMensagem.Pergunta(const ATitulo,<br />
AMensagem:   String): Boolean;<br />
begin<br />
Result   := (MessageBox(0, PChar(AMensagem), pChar(ATitulo),<br />
MB_ICONQUESTION   or MB_YESNO or MB_DEFBUTTON2) = idYes);<br />
end;</td>
</tr>
</tbody>
</table>
<p><strong><em>5.3. Comentários dentro de métodos</em></strong><strong></strong></p>
<p>· Utilize “//” para comentários de apenas um linha;<br />
· Utilize comentário em bloco ( { &#8230; } ) somente em rotinas para comentários de mais de uma linha, a questão visual é fundamental para um melhor entendimento.<br />
<strong>Exemplo:</strong></p>
<table border="0" cellspacing="0" cellpadding="0" width="480">
<tbody>
<tr>
<td width="557">function TfrmMovPontoManual.tbKeyIsDown(const key: integer): boolean;<br />
begin<br />
//Retorna se a tecla especificada está pressionada.<br />
//Gislaine &#8211; 26/09/2005<br />
Result := GetKeyState(Key) and 128 &gt; 0;<br />
end;<br />
}</td>
</tr>
</tbody>
</table>
]]></content:encoded>
			<wfw:commentRss>http://www.eversonnovka.com/padronizacao-de-codigo/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
