<?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>Andreano Lanusse &#124; Tecnologia e Desenvolvimento de Software &#187; Delphi</title>
	<atom:link href="http://www.andreanolanusse.com/pt/category/tecnologia/delphi/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andreanolanusse.com/pt</link>
	<description>Andreano Lanusse blog - acesse artigos, tutoriais e vídeos sobre tecnologia, desenvolvimento de software, técnicas de programação, banco de dados, jogos e mais.</description>
	<lastBuildDate>Wed, 25 Jan 2012 11:00:24 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Hora de seguir em frente</title>
		<link>http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=hora-de-seguir-em-frente</link>
		<comments>http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 10:00:35 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1420</guid>
		<description><![CDATA[<p>Tem certas coisas que não podemos deixar passar em branco, durante todo o ano tento manter meus artigos relacionados a desenvolvimento de software e tecnologia relacionadas, mas desta vez preciso comentar sobre algo que estamos fazendo aqui na Embarcadero e está relacionado a oportunidade de migrar para XE2 e ainda levar várias ferramentas grátis. Se [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Tem certas coisas que não podemos deixar passar em branco, durante todo o ano tento manter meus artigos relacionados a desenvolvimento de software e tecnologia relacionadas, mas desta vez preciso comentar sobre algo que estamos fazendo aqui na Embarcadero e está relacionado a oportunidade de migrar para XE2 e ainda levar várias ferramentas grátis.</p>
<p>Se você pretende adquirir novas licenças ou ainda não atualizou para <a href="http://www.embarcadero.com/br/products/delphi" target="_blank">Delphi XE2</a>, <a href="http://www.embarcadero.com/br/products/cbuilder" target="_blank">C++Builder XE2</a>, <a href="http://www.embarcadero.com/br/products/rad-studio" target="_blank">RAD Studio XE2</a>, agora é hora. Ao adquirir uma das seguintes edições você pode levar até 4 ferramentas grátis, além de um voucher para a <a href="http://www.embarcadero.com/br/certification" target="_blank">Certificação Delphi Developer</a> para cada licença adquirida.</p>
<table width="80%" border="1" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td align="left"><strong>Adquira Delphi, C++Builder ou RAD Studio XE2&#8230;</strong></td>
<td align="left"><strong>E receba gratuitamente</strong></td>
</tr>
<tr>
<td align="left">Professional edition</td>
<td align="left">
<ul>
<li>Rapid SQL XE2 – GRÁTIS!</li>
<li>FastCube – GRÁTIS!</li>
<li>Uma Certificação Delphi Developer &#8211; GRÁTIS!</li>
</ul>
</td>
</tr>
<tr>
<td align="left">Enterprise edition</td>
<td align="left">
<ul>
<li>Rapid SQL XE2 – GRÁTIS!</li>
<li>FastCube – GRÁTIS!</li>
<li>DB Optimizer &#8211; GRÁTIS!</li>
<li>Uma Certificação Delphi Developer &#8211; GRÁTIS!</li>
</ul>
</td>
</tr>
<tr>
<td align="left">Architect edition</td>
<td align="left">
<ul>
<li>Rapid SQL XE2 – GRÁTIS!</li>
<li>FastCube – GRÁTIS!</li>
<li>DB Optimizer &#8211; GRÁTIS!</li>
<li>DB Change Manager &#8211; GRÁTIS!</li>
<li>Uma Certificação Delphi Developer &#8211; GRÁTIS!</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>Recentemente publiquei o artigo em inglês <a title="White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7" href="http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/">&#8220;Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7&#8243;</a>, que pode lhe ajudar na decisão sobre migrar.</p>
<p>Aproveita porque essa promoção, pois acaba dia 24 de dezembro de 2011, você pode obter mais informações neste <a href="http://www.embarcadero.com/br/radoffer" target="_blank">aqui</a> ou contactar a E do Brasil nosso parceiro no Brasil.</p>
<p>É hora de seguir em frente <img src='http://www.andreanolanusse.com/pt/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/disponibilizado-update-2-para-delphi-xe2-cbuilder-xe2-e-radphp-xe2/" title="Disponibilizado Update 2 para Delphi XE2, C++Builder XE2 e RadPHP XE2">Disponibilizado Update 2 para Delphi XE2, C++Builder XE2 e RadPHP XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/monitoramento-e-controle-de-conexoes-em-datasnap-xe2/" title="Monitoramento e controle de conexões em DataSnap XE2">Monitoramento e controle de conexões em DataSnap XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/disponibilizado-o-trial-datasheet-matriz-de-recursos-e-faq-para-as-versoes-xe2/" title="Disponibilizado o Trial, Datasheet, Matriz de Recursos e FAQ para as versões XE2">Disponibilizado o Trial, Datasheet, Matriz de Recursos e FAQ para as versões XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/delphi-conference-2011-chamada-para-submissao-de-palestras/" title="Delphi Conference 2011 &#8211; chamada para submissão de palestras">Delphi Conference 2011 &#8211; chamada para submissão de palestras</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>White Paper: Razões para migrar para o Delphi XE2 &#124; O que você pode ter perdido desde o Delphi 7</title>
		<link>http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7</link>
		<comments>http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 04:09:17 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1412</guid>
		<description><![CDATA[<p>Se você ainda continua usando Delphi 7 ou alguma das versões anteriores, recomendo que você reserve um tempo na sua agenda e leia este artigo (em inglês), estou trabalhando na versão em português para o final deste ano. Delphi tem crescido muito e a cada ano tem trazido diversas novidades muito interessantes desde a sua [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://cc.embarcadero.com/download.aspx?id=28627"><img class="size-full wp-image-1413 alignleft" style="border-style: initial; border-color: initial; border-width: 0px; margin: 4px;" title="Razões para migrar para o Delphi XE2" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/Reasons_to_migrate_to_DelphiXE2-Cover.png" alt="" width="226" height="291" /></a></p>
<p>Se você ainda continua usando Delphi 7 ou alguma das versões anteriores, recomendo que você reserve um tempo na sua agenda e leia este artigo (em inglês), estou trabalhando na versão em português para o final deste ano. Delphi tem crescido muito e a cada ano tem trazido diversas novidades muito interessantes desde a sua versão Delphi 7.</p>
<p>Este artigo traz várias razões para migrar, além de uma visão geral de todos os novos recursos incorporados desde a versão 7, onde Delphi era um IDE para desenvolvimento de aplicações Windows 32-bit e se tornou um IDE para desenvolvimento Windows 64-bit, Mac e iOS.</p>
<p>Se você já leu o meu artigo &#8220;<a href="http://cc.embarcadero.com/download.aspx?id=26604" target="_blank">Razões para migrar do Delphi 7 para o Delphi 2009</a>&#8221; em português ou o artigo em inglês &#8220;Reasons to migrate to Delphi XE&#8221;, este artigo é uma atualização que inclui os novos recursos das versões Delphi 2010, XE e XE2.</p>
<p>Gostaria de lembrar que ao migrar para o Delphi XE2 você recebe <a href="http://www.embarcadero.com/products/rad-studio/previous-versions">as versões anteriores</a> sem custo adicional. Por exemplo, comprando Delphi XE2 você recebe Delphi 7, Delphi 2007, Delphi 2009, Delphi 2010 e Delphi XE.</p>
<p>Eu espero que esse artigo responda a todas as suas dúvidas, caso ainda fique alguma dúvida comente aqui no post que estarei respondendo.</p>
<p>Faça o download do artigo <a href="http://cc.embarcadero.com/download.aspx?id=28627" target="_blank"><strong>aqui</strong></a>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis para download</a></li><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/vagas-esgotadas-para-o-delphi-conference-2011/" title="Vagas esgotadas para o Delphi Conference 2011">Vagas esgotadas para o Delphi Conference 2011</a></li><li><a href="http://www.andreanolanusse.com/pt/disponibilizado-update-2-para-delphi-xe2-cbuilder-xe2-e-radphp-xe2/" title="Disponibilizado Update 2 para Delphi XE2, C++Builder XE2 e RadPHP XE2">Disponibilizado Update 2 para Delphi XE2, C++Builder XE2 e RadPHP XE2</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</title>
		<link>http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented</link>
		<comments>http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/#comments</comments>
		<pubDate>Thu, 03 Nov 2011 23:57:19 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[dbExpress]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1409</guid>
		<description><![CDATA[<p>Se você já utilizou o método TDBXDataSetReader.CopyReaderToClientDataSet provavelmente já se deparou com a mensagem &#8220;Feature not implemented&#8221;, esta exception ocorre porque o método CopyReaderToClientDataSet não suporta a cópia de campos Blob de um DBXReader para um ClientDataSet. A partir do Delphi XE2 Update 2 isso não é mais problema, o suporte a blob no método CopyReaderToClientDataSet [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Se você já utilizou o método TDBXDataSetReader.CopyReaderToClientDataSet provavelmente já se deparou com a mensagem &#8220;Feature not implemented&#8221;, esta exception ocorre porque o método CopyReaderToClientDataSet não suporta a cópia de campos Blob de um DBXReader para um ClientDataSet.</p>
<p>A partir do <a title="Disponibilizado Update 2 para Delphi XE2, C++Builder XE2 e RadPHP XE2" href="http://www.andreanolanusse.com/pt/disponibilizado-update-2-para-delphi-xe2-cbuilder-xe2-e-radphp-xe2/">Delphi XE2 Update 2</a> isso não é mais problema, o suporte a blob no método CopyReaderToClientDataSet foi implementando.</p>
<p>Para saber como utilizar o método CopyReaderToClientDataSet na prática leia o artigo &#8220;<a title="Copiando estrutura e dados de um DBXReader para ClientDataSet – DataSnap 2010" href="http://www.andreanolanusse.com/pt/copiando-estrutura-e-dados-de-um-dbxreader-para-clientdataset-datasnap-2010/">Copiando estrutura e dados de um DBXReader para ClientDataSet  - DataSnap</a>&#8220;</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/monitoramento-e-controle-de-conexoes-em-datasnap-xe2/" title="Monitoramento e controle de conexões em DataSnap XE2">Monitoramento e controle de conexões em DataSnap XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/implementando-cache-de-dados-em-servidores-datasnap/" title="Implementando cache de dados em servidores DataSnap">Implementando cache de dados em servidores DataSnap</a></li><li><a href="http://www.andreanolanusse.com/pt/exemplos-e-slides-do-delphi-meeting-2011/" title="Exemplos e slides do Delphi Meeting 2011">Exemplos e slides do Delphi Meeting 2011</a></li><li><a href="http://www.andreanolanusse.com/pt/videos-sobre-datasnap-para-2011-o-que-voce-gostaria-de-ver/" title="Vídeos sobre DataSnap para 2011 &#8211; o que você gostaria de ver?">Vídeos sobre DataSnap para 2011 &#8211; o que você gostaria de ver?</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Conectando ao PostgreSQL com dbExpress ODBC driver</title>
		<link>http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=conectando-ao-postgresql-com-dbexpress-odbc-driver</link>
		<comments>http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 07:41:23 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[dbExpress]]></category>
		<category><![CDATA[FireMonkey]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1403</guid>
		<description><![CDATA[<p>dbExpress traz o novo driver ODBC no Delphi XE2 e C++Builder XE2, através este driver você pode conectar a qualquer aplicações FireMonkey e VCL a qualquer base de dados que disponibilize um driver ODBC, este driver é compatível com Windows, estamos avaliando a possibilidade de disponibilizar futuramente para Mac. Para mostrar na prática como funciona, [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>dbExpress traz o novo driver ODBC no <a href="http://www.embarcadero.com/products/delphi" target="_blank">Delphi</a> XE2 e <a href="http://www.embarcadero.com/products/cbuilder" target="_blank">C++Builder</a> XE2, através este driver você pode conectar a qualquer aplicações FireMonkey e VCL a qualquer base de dados que disponibilize um driver ODBC, este driver é compatível com Windows, estamos avaliando a possibilidade de disponibilizar futuramente para Mac.</p>
<p>Para mostrar na prática como funciona, criei uma aplicação <a href="http://www.embarcadero.com/products/firemonkey" target="_blank">FireMonkey</a> que conecta a uma base de dados PostgreSQL.</p>
<p>Como requisito, você precisa instalar na máquina onde a aplicação será executada o driver ODBC do PostgreSQL, que pode ser baixado <a href="http://wwwmaster.postgresql.org/download/mirrors-ftp/odbc/versions/msi/psqlodbc_09_00_0310.zip" target="_blank">aqui</a>. Vale lembrar que aplicações compiladas como 32-bit requerem a versão 32-bit do driver ODBC da base de dados a ser utilizada, para aplicações 64-bit será necessário o driver ODBC 64-bit.</p>
<p>Após instalado o driver, crie e configure o User DSN ou System DSN no ODBC Data Source Administrator (odbcad32.exe):</p>
<p><strong>Instruções para windows 64-bit</strong></p>
<ul>
<li>Para aplicações 32-bit use o c:\Windows\SysWOW64\odbcad32.exe</li>
<li>Para aplicações 64-bit use o c:\Windows\system32\odbcad32.exe</li>
</ul>
<p><strong>Instruções para windows 32-bit</strong></p>
<ul>
<li>Use o c:\Windows\system32\odbcad32.exe</li>
</ul>
<div><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/ODBC-PostgreSQL.png"><img class="aligncenter size-full wp-image-1405" title="Configuração do Data Source ODBC para PostgreSQL" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/ODBC-PostgreSQL.png" alt="" width="291" height="399" /></a></div>
<p>O próximo passe é criar um alias dbExpress ODBC no Data Explorer, onde Database Name é o nome do Data Source criado anteriormente, no meu exemplo este Data Source se chama PostgreSQL35W. Todas as informações relacionada a qual base de dados conectar, usuário e senha já foram configuradas no Data Source, você pode sobrescrever o usuário e senha na conexão dbExpress.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/DataExplorer-PostgreSQL.png"><img class="aligncenter size-full wp-image-1404" title="Data Explorer conectado ao PostgreSQL" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/DataExplorer-PostgreSQL.png" alt="" width="230" height="379" /></a></p>
<p>Supondo que você já saiba como utilizar os componentes SQLConnection, DataSetProvider e ClientDataSet ou SimpleDataSet e DataSource, basta conectá-los da mesma forma que você sempre fez com aplicações que utilizam os componentes dbExpress. A configuração do SQLConnection será configurada conforme abaixo:</p>
<pre>  object SQLConnection1: TSQLConnection
    ConnectionName = 'PostgreSQLOdbc'
    DriverName = 'ODBC'
    LoginPrompt = False
    Params.Strings = (
      'drivername=ODBC'
      'Database=PostgreSQL35W')
  end</pre>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/IDE-ODBC-PostgreSQL.png"><img class="aligncenter size-full wp-image-1407" title="IDE conectando componentes dbExpress" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/IDE-ODBC-PostgreSQL.png" alt="" width="732" height="428" /></a></p>
<p>Além de poder utilizar os componentes dbExpress em aplicações VCL e FireMonkey, você pode utilizar o dbExpress framework para conectar a bancos de dados que não tenham um driver nativo. A figura abaixo mostra a aplicação FireMonkey conectada a PostgreSQL através do dbExpress ODBC driver.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/FMI_dbExpress_ODBC.png"><img class="aligncenter size-full wp-image-1406" title="Aplicação FireMonkey conectada a PostgreSQL com dbExpress ODBC driver" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/11/FMI_dbExpress_ODBC.png" alt="" width="621" height="410" /></a></p>
<p>Download do código fonte disponível <a href="https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/Delphi/Database/dbExpress/ODBCPostgreSQL" target="_blank">aqui</a>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/video-delphi-xe2-e-firemonkey-app-no-windows-mac-e-ios/" title="Vídeo: Delphi XE2 e FireMonkey app no Windows, Mac e iOS">Vídeo: Delphi XE2 e FireMonkey app no Windows, Mac e iOS</a></li><li><a href="http://www.andreanolanusse.com/pt/usando-expressoes-regulares-em-aplicacoes-firemonkey-com-cbuilder/" title="Usando expressões regulares em aplicações FireMonkey com C++Builder">Usando expressões regulares em aplicações FireMonkey com C++Builder</a></li><li><a href="http://www.andreanolanusse.com/pt/usando-dbexpress-framework-no-windows-e-mac-com-cbuilder/" title="Usando dbExpress Framework no Windows e Mac com C++Builder">Usando dbExpress Framework no Windows e Mac com C++Builder</a></li><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis para download</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Disponibilizado Update 2 para Delphi XE2, C++Builder XE2 e RadPHP XE2</title>
		<link>http://www.andreanolanusse.com/pt/disponibilizado-update-2-para-delphi-xe2-cbuilder-xe2-e-radphp-xe2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=disponibilizado-update-2-para-delphi-xe2-cbuilder-xe2-e-radphp-xe2</link>
		<comments>http://www.andreanolanusse.com/pt/disponibilizado-update-2-para-delphi-xe2-cbuilder-xe2-e-radphp-xe2/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 23:20:05 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[RadPHP]]></category>
		<category><![CDATA[Hotfix]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1401</guid>
		<description><![CDATA[<p>O Update 2 para as versões XE2 do Delphi, C++Builder e RadPHP já estão disponíveis para download nos links abaixo. Você pode efetuar o download do Update 2 para Delphi e C++Builder através da opção &#8220;Check for Updates&#8221;. RAD Studio XE2 Update 2 Update 2 para Delphi, C++Builder e RAD Studio XE2 &#8211; http://cc.embarcadero.com/item/28597 ISO [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>O Update 2 para as versões XE2 do Delphi, C++Builder e RadPHP já estão disponíveis para download nos links abaixo.</p>
<p>Você pode efetuar o download do Update 2 para Delphi e C++Builder através da opção &#8220;Check for Updates&#8221;.</p>
<div class="avia-box alert large  rounded "><span class="avia-innerbox" >Se o IDE do Delphi XE2 ou C++Builder XE2 estiver instalado em Windows XP, você terá de efetuar o download do update diretamente da página de usuários registrados.</span></div>
<p><strong>RAD Studio XE2 Update 2</strong></p>
<ul>
<li>Update 2 para Delphi, C++Builder e RAD Studio XE2 &#8211; <a href="http://cc.embarcadero.com/item/28597" target="_blank">http://cc.embarcadero.com/item/28597</a></li>
<li>ISO do Delphi XE2 e C++Builder XE2 (inclui Update 2) &#8211; <a href="http://cc.embarcadero.com/item/28616" target="_blank">http://cc.embarcadero.com/item/28616</a></li>
<li>Lista de bugs resolvidos no Delphi XE2 e C++Builder XE2 Update &#8211; <a href="http://edn.embarcadero.com/article/41750" target="_blank">http://edn.embarcadero.com/article/41750</a></li>
</ul>
<p><strong>RAD Studio XE2 Help Update 1</strong> &#8211; <a href="http://cc.embarcadero.com/item/28613" target="_blank">http://cc.embarcadero.com/item/28613</a></p>
<p><strong>RadPHP XE2 Update 2</strong></p>
<p>Update 2 para o RadPHP &#8211; <a href="http://cc.embarcadero.com/item/28614" target="_blank">http://cc.embarcadero.com/item/28614</a><br />
Lista de bugs resolvidos no RadPHP XE2 Update 2 &#8211; <a href="http://edn.embarcadero.com/article/41756" target="_blank">http://edn.embarcadero.com/article/41756</a></p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/disponibilizado-o-trial-datasheet-matriz-de-recursos-e-faq-para-as-versoes-xe2/" title="Disponibilizado o Trial, Datasheet, Matriz de Recursos e FAQ para as versões XE2">Disponibilizado o Trial, Datasheet, Matriz de Recursos e FAQ para as versões XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/delphi-conference-2011-chamada-para-submissao-de-palestras/" title="Delphi Conference 2011 &#8211; chamada para submissão de palestras">Delphi Conference 2011 &#8211; chamada para submissão de palestras</a></li><li><a href="http://www.andreanolanusse.com/pt/delphi-tour-2011/" title="Delphi Tour 2011">Delphi Tour 2011</a></li><li><a href="http://www.andreanolanusse.com/pt/rad-studio-xe2-uma-nova-era-para-desenvolvedores-delphi-e-cbuilder/" title="RAD Studio XE2 uma nova era para desenvolvedores Delphi e C++Builder">RAD Studio XE2 uma nova era para desenvolvedores Delphi e C++Builder</a></li><li><a href="http://www.andreanolanusse.com/pt/hotfix-2-e-help-update-2-para-delphi-xe-cbuilder-xe-e-rad-studio-xe/" title="Hotfix 2 e Help Update 2 para Delphi XE, C++Builder XE e RAD Studio XE">Hotfix 2 e Help Update 2 para Delphi XE, C++Builder XE e RAD Studio XE</a></li><li><a href="http://www.andreanolanusse.com/pt/hotfix-1-para-delphi-xe-cbuilder-xe-e-rad-studio-xe/" title="Hotfix 1 para Delphi XE, C++Builder XE e RAD Studio XE">Hotfix 1 para Delphi XE, C++Builder XE e RAD Studio XE</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/disponibilizado-update-2-para-delphi-xe2-cbuilder-xe2-e-radphp-xe2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>CloudAPI – Envio de arquivos para Amazon S3 e Windows Azure – Parte 2</title>
		<link>http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-2</link>
		<comments>http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-2/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 21:31:27 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Cloud]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1398</guid>
		<description><![CDATA[<p>Nesta segunda e última parte do artigo sobre envio de arquivos para as nuvens vamos detalhar como funciona o envio de arquivos para o para Amazon S3. Você pode ler os artigos que antecedem estas sequência nos links abaixo, é importante ler estes artigos para melhor entendimento deste artigo: Shell Extension para Windows 32-bt and [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Nesta segunda e última parte do artigo sobre envio de arquivos para as nuvens vamos detalhar como funciona o envio de arquivos para o para Amazon S3.</p>
<p>Você pode ler os artigos que antecedem estas sequência nos links abaixo, é importante ler estes artigos para melhor entendimento deste artigo:</p>
<ul>
<li><a title="Shell Extension para Windows 32-bit e 64-bit com Delphi XE2" href="http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/" target="_blank">Shell Extension para Windows 32-bt and 64-bit com Delphi XE2</a></li>
<li><a title="CloudAPI – Envio de arquivos para Amazon S3 e Windows Azure – Parte 1" href="http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-1/" target="_blank">CloudAPI – Envio de arquivos para Amazon S3 e Windows Azure – Parte 1</a></li>
</ul>
<p>Na primeira parte do artigo descrevo como obter sua conta no Amazon e os significados do Bucket e Blog, considerando que você leu os artigos anteriores nos resta saber como funciona o CloudAPI para envio de arquivos para o Amazon S3, que é bem parecido ao do Windows Azure.</p>
<h3>Envio de arquivos para Amazon S3</h3>
<p>A implementação do Shell Extension utiliza o método UploadtoAmazon (CloudDM.pas) para o envio de arquivos para o Amazon S3, antes de enviar o arquivo temos definir em qual pasta (Bucket) será armazenado este arquivo.</p>
<p>Como o bucket pode não existir, ou o usuário pode querer criar um novo, implementei um formulário que permite o usuário selecionar um bucket já existente ou criar um novo.</p>
<p>Abaixo parte do código responsável pelo envio do arquivo, as linhas em destaque refletem o código que irá listar e criar ou selecionar o bucket.</p>
<p>Ao fazer uma solicitação ao Amazon S3 através do CloudAPI a maioria dos métodos retorna um objeto do tipo TCloudResponseInfo, este objeto contém o status do retorno referente a sua solicitação, todas estas solicitações são chamadas REST.</p>
<p>Para obter a lista de buckets utilizamos o método ListBuckets que é parte do objeto StorageService instanciando anteriormente, todos os serviços relacionados a Storage fazem parte desta classe, assim como a criação do bucket através do método CreateBucket.</p>
<p>Amazon e Windows Azure diferem no que diz respeito ao suporte a metadata na criação do container/bucket, Amazon não suporta metadata enquanto Windows Azure sim.</p>
<pre class="brush: delphi">function TCloud.UploadtoAmazon(FileName: String): TCloudResponseInfo;
var
  StorageService: TAmazonStorageService;
  BucketList, Metadata: TStrings;
  Content: TBytes;
  ResponseList: TCloudResponseInfo;
  FrmList: TFrmContainerList;
  Act: TContainerAction;
  BucketName: String;
  I: Integer;
begin
  Result := TCloudResponseInfo.Create;

  if (FileName = EmptyStr) then
    Exit;

  StorageService := TAmazonStorageService.Create(AmazonConnection);

{$REGION 'Define the Bucket'}
  ResponseList := TCloudResponseInfo.Create;
  BucketList := StorageService.ListBuckets(ResponseList);

  if ResponseList.StatusCode = 200 then
  begin

    // Amazon return date/time information for each Bucket
    // this for is required to remove that information
    for I := 0 to BucketList.Count - 1 do
      BucketList[I] := BucketList.Names[I];

    FrmList := TFrmContainerList.Create(nil, BucketList, TClouds[AmazonIndex]);
    try
      FrmList.ShowModal;
      Act := FrmList.Action;

      case Act of
        caCreate:
          begin
            if StorageService.CreateBucket(FrmList.Container, amzbaNotSpecified,
              amzrNotSpecified, Result) then
              BucketName := FrmList.Container;
          end;
        caUpload:
          begin
            BucketName := FrmList.Container;
          end;
      end;
    finally
      FrmList.Free;
    end;

    if Act = TContainerAction.caNone then
      Exit;

  end;</pre>
<p>&nbsp;</p>
<p>Com o bucket definido podemos adiante e preparar o envio do arquivo.</p>
<p>Para o envio do arquivo utilizamos o método StorageService.UploadObject que contém diversos parâmetros como: nome e o conteúdo do arquivo em TBytes, metadata e alguns outros que não são necessários para este exemplo. Você deve utilizar alguma função para fazer o encode do nome do arquivo, por exemplo  TIdURI.URLEncode(str).</p>
<p>Podemos adicionar metadata ao arquivo, neste exemplo adiciono o nome do computador\usuário e a localização original do arquivo a ser enviado.</p>
<pre class="brush: delphi">    Metadata.Clear;
    Metadata.Values[SMDPath] := ExtractFilePath(FileName);
    Metadata.Values[SMDFrom] := GetComputerandUserName;

    Content := ContentOf(FileName);
    BlobName := ExtractFileName(FileName);</pre>
<p>O método ContentOf retorna o conteúdo do arquivo em TBytes.</p>
<pre class="brush: delphi">function TCloud.ContentOf(const FileName: String;
  RequiredSizeMod: Integer): TBytes;
var
  fs: TFileStream;
begin
  if FileName &lt;&gt; EmptyStr then
  begin
    fs := TFileStream.Create(FileName, fmOpenRead);
    try
      if RequiredSizeMod &lt; 1 then
        SetLength(Result, fs.Size)
      else
        SetLength(Result, ((fs.Size div RequiredSizeMod) + 1) *
          RequiredSizeMod);
      fs.ReadBuffer(Result[0], fs.Size);
    finally
      fs.Free;
    end;
  end
  else
    SetLength(Result, 0);

end;</pre>
<p>O resultado do envio será um parâmetro de saída do tipo TCloudResponseInfo, este contém a propriedade StatusCode, requisições realizadas com sucesso retornam o código 200 ou 201.</p>
<pre class="brush: delphi">    StorageService.UploadObject(BucketName, ExtractFileName(FileName), Content, False, Metadata, nil, amzbaPublicRead, Result);
    ShowResponseInfo(TClouds[AmazonIndex], Result);</pre>
<p>Clique <a href="http://radstudiodemos.svn.sourceforge.net/viewvc/radstudiodemos/branches/RadStudio_XE2/Delphi/CloudAPI/CloudUpload/CloudDM.pas?revision=321&amp;view=markup" target="_blank">aqui</a> para visualizar o código fonte da unit CloudDM.pas.</p>
<p>O código fonte completo está disponível no repositório do RAD Studio XE2 no sourceforge e as informações para efetuar o download dos fontes completo estão disponíveis <a href="http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/">aqui</a>.<br />
Nesta sequência de artigos você pode aprender a criar Shell Extensions, compilar pra 32-bit e 64 bit e utilizar o CloudAPI, vale lembrar que o ClouAPI traz muitas outras API&#8217;s para interagir com as nuvens</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-1/" title="CloudAPI &#8211; Envio de arquivos para Amazon S3 e Windows Azure &#8211; Parte 1">CloudAPI &#8211; Envio de arquivos para Amazon S3 e Windows Azure &#8211; Parte 1</a></li><li><a href="http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/" title="Shell Extension para Windows 32-bit e 64-bit com Delphi XE2">Shell Extension para Windows 32-bit e 64-bit com Delphi XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/microsoft-windows-azure-por-30-dias-gratis/" title="Microsoft Windows Azure por 30 dias GRÁTIS">Microsoft Windows Azure por 30 dias GRÁTIS</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/teste-nosso-servidor-datasnap-xe-instalado-no-amazon-cloud/" title="Teste nosso servidor DataSnap XE instalado no Amazon Cloud">Teste nosso servidor DataSnap XE instalado no Amazon Cloud</a></li><li><a href="http://www.andreanolanusse.com/pt/datasnap-xe-e-windows-azure-preview-3/" title="DataSnap XE e Windows Azure – RAD Studio XE Preview #3">DataSnap XE e Windows Azure – RAD Studio XE Preview #3</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>CloudAPI &#8211; Envio de arquivos para Amazon S3 e Windows Azure &#8211; Parte 1</title>
		<link>http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-1</link>
		<comments>http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-1/#comments</comments>
		<pubDate>Wed, 26 Oct 2011 01:40:13 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Cloud]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1391</guid>
		<description><![CDATA[<p>No meu recente artigo Shell Extension para Windows 32-bit e Windows 64-bit com Delphi XE expliquei passo a passo como criar extensões para o Windows Explorer, possibilitando o envio de arquivo para Amazon S3 e Windows Azure, neste artigo vamos ver como utilizar o Cloud API para enviar os arquivos para Amazon S3 e Windows Azure [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>No meu recente artigo <a title="Shell Extension para Windows 32-bit e 64-bit com Delphi XE2" href="http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/">Shell Extension para Windows 32-bit e Windows 64-bit com Delphi XE</a> expliquei passo a passo como criar extensões para o Windows Explorer, possibilitando o envio de arquivo para Amazon S3 e Windows Azure, neste artigo vamos ver como utilizar o Cloud API para enviar os arquivos para Amazon S3 e Windows Azure Cloud com Delphi XE2, caso você não tenha lido o artigo <a title="Shell Extension para Windows 32-bit e 64-bit com Delphi XE2" href="http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/">anterior</a>, recomendo ler para melhor compreensão deste artigo.</p>
<p>O Cloud API é um conjunto de API&#8217;s que permite a interação com os serviços de tabela, armazenamento e mensagens do Amazon S3 e Windows Azure, está disponível para <a href="http://www.embarcadero.com/products/delphi" target="_blank">Delphi</a> e <a href="http://www.embarcadero.com/products/cbuilder" target="_blank">C++Builder</a>.</p>
<p>Utilizando o exemplo do artigo anterior como ponto inicial, foi implementado no mesmo um DataModule (CloudDM.pas) que contém a configuração para acesso as nuvens através dos componentes AmazonConnection e AzureConnection, além disso os métodos responsáveis pelo envio de arquivos para as nuvens, assim sendo você precisa ter uma conta no Amazon e no Azure para utilizar este exemplo, a baixo um resumo breve para obter sua conta a qual não é gratuita, o custo é bem baixo e baseado no quanto você utiliza.</p>
<h3>Criando uma conta Windows Azure Storage</h3>
<p>Através do link <a href="http://windows.azure.com" target="_blank">http://windows.azure.com</a> você pode criar sua conta Azure Storage seguindo os passos fornecidos na página, abaixo um screenshot da minha conta e onde estão localizados os dois parâmetros (AccountName e AccountKey) requeridos pelo componente AzureConnection.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/10/AzureAccount.png"><img class="aligncenter size-full wp-image-1392" title="Windows Azure Account" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/10/AzureAccount.png" alt="" width="664" height="316" /></a></p>
<p>&nbsp;</p>
<h3>Criando uma conta Amazon  (AWS)</h3>
<p>Criar uma conta no Amazon também é bem simples, acesse o site <a href="https://console.aws.amazon.com/s3/home " target="_blank">https://console.aws.amazon.com/s3/home </a>e siga os passos, para obter o AccountKey e AccountName a ser utilizado no componente AmazonConnection, acesse <a href="https://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key" target="_blank">https://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key</a>, abaixo um screenshot.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/10/AmazonAccount.png"><img class="aligncenter size-full wp-image-1393" title="Amazon Account" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/10/AmazonAccount.png" alt="" width="683" height="413" /></a></p>
<p>&nbsp;</p>
<h3>Arquivo INI para configuração da DLL</h3>
<p>As configurações de acesso as respectivas nuvens estão sendo armazenadas no arquivo ini CloudUpload-Extension.ini localizado no diretório Home de cada usuário, eu não vou detalhar como utilizar arquivos ini aqui, você pode estudar esta parte após baixar os código fonte do exemplo aqui utilizado.</p>
<p>&nbsp;</p>
<h3>Bucket vs Container e Object vs Blob</h3>
<p>Todo arquivo enviado para as nuvens será armazenado em uma pasta, Amazon chama pasta de Bucket e Windows Azure de Container, no final das contas Bucket e Container são pastas, cada nuvem tem suas regras e limitações de como nomear as pastas, por exemplo o nome de uma pastas no Amazon deve ser único em toda a nuvem, isso mesmo não único na sua conta, ou seja, criar um diretório imagens esquece, alguém certamente já criou um.</p>
<p>A diferença de nomenclatura também ocorre para arquivos, que na Amazon é chamado do Object e no Windows Azure chama-se Blog.</p>
<p>Cloud API respeita essas diferenças, assim para criar um Bucket no Amazon usamos o método CreateBucket, para criar um Container no Windows Azure utilizamos o método CreateContainer.</p>
<p>&nbsp;</p>
<h3>Envio de arquivos para Windows Azure</h3>
<p>A implementação do Shell Extension utiliza o método UploadtoAzure (CloudDM.pas) para o envio de arquivos para o Windows Azure, antes de enviar o arquivo temos definir em qual pasta (Container) será armazenado este arquivo.</p>
<p>Como o container pode não existir, ou o usuário pode querer criar um novo, implementei um formulário que permite o usuário selecionar um container já existente ou criar uma nova.</p>
<p>Abaixo parte do código responsável pelo envio do arquivo, as linhas em destaque refletem o código que irá listar e criar ou selecionar o container.</p>
<p>Ao fazer uma solicitação ao Windows Azure através do CloudAPI a maioria dos métodos retorna um objeto do tipo TCloudResponseInfo, este objeto contém o status do retorno referente a sua solicitação, todas estas solicitações são chamadas REST.</p>
<p>Para obter a lista de containers utilizando o método ListContainers que é parte do objeto BlobService instanciando anteriormente, todos os serviços relacionados a Blob fazem parte desta classe, assim como a criação do container através do método Create Container.</p>
<p>No caso da criação do container, podemos passar informações adicionais a qual chamamos de metadata, no exemplo abaixo passamos o nome do computador utilizado para solicitar a criação deste container, esta informação estará disponível como parte do metadata deste container, você pode definir várias outras informações e adiciona-las como parte do seu metadata que é do tipo TStringList;</p>
<pre class="brush: delphi">function TCloud.UploadtoAzure(FileName: String): TCloudResponseInfo;
var
  BlobService: TAzureBlobService;
  SList, Metadata: TStrings;
  ContainerList: TList;
  ContainerObj: TAzureContainer;
  Content: TBytes;
  BlobName, ContainerName: String;
  ResponseList: TCloudResponseInfo;
  FrmList: TFrmContainerList;
  Act: TContainerAction;
begin

  Result := TCloudResponseInfo.Create;

  if (FileName = EmptyStr) then
    Exit;

  BlobService := TAzureBlobService.Create(AzureConnection);
  try
    ResponseList := TCloudResponseInfo.Create;
    ContainerList := BlobService.ListContainers(nil, ResponseList);
    Metadata := TStringList.Create;

    if ResponseList.StatusCode = 200 then
    begin

      SList := TStringList.Create;
      for ContainerObj in ContainerList do
        SList.Add(ContainerObj.Name);
      ContainerList.Free;

      FrmList := TFrmContainerList.Create(nil, SList, TClouds[AzureIndex]);
      try
        FrmList.ShowModal;
        Act := FrmList.Action;

        case Act of
          caCreate:
            begin
              Metadata.Values[SMDCreateby] := GetComputerandUserName;

              if BlobService.CreateContainer(FrmList.Container, Metadata,
                bpaBlob, Result) then
                ContainerName := FrmList.Container;
            end;
          caUpload:
            begin
              ContainerName := FrmList.Container;
            end;
        end;
      finally
        SList.Free;
        FrmList.Free;
      end;

      if Act = TContainerAction.caNone then
        Exit;

    end;</pre>
<p>&nbsp;</p>
<p>Com a definição do container podemos seguir para o próximo passo que é o envio do arquivo.</p>
<p>Para o envio do arquivo utilizamos o método BlobService.PutBlockBlob que contém diversos parâmetros como: nome e o conteúdo do arquivo em TBytes, metadata e alguns outros que não são necessários para este exemplo.</p>
<p>Assim como para containers podemos adicionar metadata ao arquivo, neste exemplo adiciono o nome do computador\usuário e a localização original do arquivo a ser enviado.</p>
<pre class="brush: delphi">    Metadata.Clear;
    Metadata.Values[SMDPath] := ExtractFilePath(FileName);
    Metadata.Values[SMDFrom] := GetComputerandUserName;

    Content := ContentOf(FileName);
    BlobName := ExtractFileName(FileName);</pre>
<p>O método ContentOf retorna o conteúdo do arquivo em TBytes.</p>
<pre class="brush: delphi">function TCloud.ContentOf(const FileName: String;
  RequiredSizeMod: Integer): TBytes;
var
  fs: TFileStream;
begin
  if FileName &lt;&gt; EmptyStr then
  begin
    fs := TFileStream.Create(FileName, fmOpenRead);
    try
      if RequiredSizeMod &lt; 1 then
        SetLength(Result, fs.Size)
      else
        SetLength(Result, ((fs.Size div RequiredSizeMod) + 1) *
          RequiredSizeMod);
      fs.ReadBuffer(Result[0], fs.Size);
    finally
      fs.Free;
    end;
  end
  else
    SetLength(Result, 0);

end;</pre>
<p>O resultado do envio será um parâmetro de saída do tipo TCloudResponseInfo, este contém a propriedade StatusCode, requisições realizadas com sucesso retornam o código 200 ou 201.</p>
<pre class="brush: delphi">    BlobService.PutBlockBlob(ContainerName, BlobName, Content, '', nil,
      Metadata, Result);
    ShowResponseInfo(TClouds[AzureIndex], Result);</pre>
<p>Abaixo a implementação completa da unit CloudDM.pas.</p>
<pre class="brush: delphi">unit CloudDM;

interface

uses
  System.SysUtils, System.Classes, Data.Cloud.AzureAPI, Data.Cloud.CloudAPI,
  Data.Cloud.AmazonAPI, Winapi.Windows, IniFiles, IOUtils,
  System.Generics.Collections;

type
  TCloud = class(TDataModule)
    AzureConnection: TAzureConnectionInfo;
    AmazonConnection: TAmazonConnectionInfo;
  private
    { Private declarations }
    FHandle: HWND;
    function GetComputerandUserName: String;
    function UploadtoAmazon(FileName: String): TCloudResponseInfo;
    function UploadtoAzure(FileName: String): TCloudResponseInfo;
    function ContentOf(const FileName: String;
      RequiredSizeMod: Integer = 0): TBytes;
    procedure ShowResponseInfo(Title: String; Response: TCloudResponseInfo);
  public
    { Public declarations }

    function LoadConfiguration: Boolean;
    function Upload(FileName: String; Cloud: Integer): TCloudResponseInfo;

    class procedure SaveLog(s: String);
    constructor Create(AOWner: TComponent; Handle: HWND); reintroduce; overload;
  end;

var
  Cloud: TCloud;

Const
  AmazonIndex = 0;
  AzureIndex = 1;
  TClouds: Array [0 .. 1] of PWideChar = ('Amazon S3', 'Microsoft Azure');

implementation

uses CloudContainerList;

Const
  SMyAzureKey = 'MyAzureKey'; // do not translate
  SMyAmazonKey = 'MyAmazonKey'; // do not translate
  SInternetConfig = 'Internet Access Configuration'; // do not translate

  SAccountName = 'AccountName'; // do not translate
  SAccountKey = 'AccountKey'; // do not translate
  SProxyHost = 'ProxyHost'; // do not translate
  SProxyPort = 'ProxyPort'; // do not translate

  SStorageEndpoint = 'StorageBlobEndpoint'; // do not translate

  SMDPath = 'originalfilepath';
  SMDFrom = 'uploadfrom';
  SMDCreateby = 'createdby';

{$R *.dfm}
  { TCloudContainer }

function TCloud.ContentOf(const FileName: String;
  RequiredSizeMod: Integer): TBytes;
var
  fs: TFileStream;
begin
  if FileName &lt;&gt; EmptyStr then
  begin
    fs := TFileStream.Create(FileName, fmOpenRead);
    try
      if RequiredSizeMod &lt; 1 then
        SetLength(Result, fs.Size)
      else
        SetLength(Result, ((fs.Size div RequiredSizeMod) + 1) *
          RequiredSizeMod);
      fs.ReadBuffer(Result[0], fs.Size);
    finally
      fs.Free;
    end;
  end
  else
    SetLength(Result, 0);

end;

constructor TCloud.Create(AOWner: TComponent; Handle: HWND);
begin
  inherited Create(AOWner);
  FHandle := Handle

end;

function TCloud.GetComputerandUserName: String;
var
  cName, uName: array [0 .. 255] of char;
  c: DWORD;
begin
  c := SizeOf(cName);

  GetComputerName(cName, c);
  GetUserName(uName, c);

  Result := StrPas(cName) + '\' + StrPas(uName);
end;

function TCloud.LoadConfiguration: Boolean;
var
  IniFile: string;
  Ini: TIniFile;
  Port: Integer;
  SUrl: String;
begin

  IniFile := GetHomePath + '\CloudUpload-Extension.ini';
  Ini := TIniFile.Create(IniFile);

  try
    // The ini file will be created in case it doesn't exist
    if not FileExists(IniFile) then
    begin
      // Azure parameters
      Ini.WriteString(SMyAzureKey, SAccountName, EmptyStr);
      Ini.WriteString(SMyAzureKey, SAccountKey, EmptyStr);
      Ini.WriteString(SMyAzureKey, SStorageEndpoint, EmptyStr);

      // Amazon parameters
      Ini.WriteString(SMyAmazonKey, SAccountName, EmptyStr);
      Ini.WriteString(SMyAmazonKey, SAccountKey, EmptyStr);
      Ini.WriteString(SMyAmazonKey, SStorageEndpoint, EmptyStr);

      // Internet access configuration
      Ini.WriteString(SInternetConfig, SProxyHost, EmptyStr);
      Ini.WriteString(SInternetConfig, SProxyPort, EmptyStr);

      Ini.UpdateFile;
      Result := False;
    end
    else
    begin

      TryStrToInt(Ini.ReadString(SInternetConfig, SProxyPort, '0'), Port);

      with AzureConnection do
      begin
        AccountName := Ini.ReadString(SMyAzureKey, SAccountName, EmptyStr);
        AccountKey := Ini.ReadString(SMyAzureKey, SAccountKey, EmptyStr);

        RequestProxyHost := Ini.ReadString(SInternetConfig, SProxyHost,
          EmptyStr);
        RequestProxyPort := Port;

        SUrl := Ini.ReadString(SMyAzureKey, SStorageEndpoint, EmptyStr);

        UseDefaultEndpoints := SUrl = EmptyStr;
        BlobEndpoint := SUrl;
      end;

      with AmazonConnection do
      begin
        AccountName := Ini.ReadString(SMyAmazonKey, SAccountName, EmptyStr);
        AccountKey := Ini.ReadString(SMyAmazonKey, SAccountKey, EmptyStr);

        RequestProxyHost := Ini.ReadString(SInternetConfig, SProxyHost,
          EmptyStr);
        RequestProxyPort := Port;

        SUrl := Ini.ReadString(SMyAmazonKey, SStorageEndpoint, EmptyStr);

        UseDefaultEndpoints := SUrl = EmptyStr;
        StorageEndpoint := SUrl;
      end;
      Result := True;
    end;

  finally
    Ini.Free;
  end;
end;

class procedure TCloud.SaveLog(s: String);
var
  LogFile: TextFile;
begin
  { open the log file }
  AssignFile(LogFile, 'c:\Shell.txt');
  if FileExists('c:\Shell.txt') then
    Append(LogFile)
  else
    Rewrite(LogFile);

  WriteLn(LogFile, s + #13#10);

  { write and close the logfile }
  CloseFile(LogFile);
end;

procedure TCloud.ShowResponseInfo(Title: String; Response: TCloudResponseInfo);
begin
  case Response.StatusCode of
    200, 201:
      MessageBox(FHandle, 'File Uploaded', PWideChar(Title), MB_OK);
  else
    MessageBox(FHandle, PWideChar('Error ' + Response.StatusMessage),
      PWideChar(Title), MB_ICONWARNING);
  end;
end;

function TCloud.Upload(FileName: String; Cloud: Integer): TCloudResponseInfo;
begin
  case Cloud of
    AmazonIndex:
      Result := UploadtoAmazon(FileName);
    AzureIndex:
      Result := UploadtoAzure(FileName);
  else
    Result := TCloudResponseInfo.Create;
  end;
end;

function TCloud.UploadtoAmazon(FileName: String): TCloudResponseInfo;
var
  StorageService: TAmazonStorageService;
  BucketList, Metadata: TStrings;
  Content: TBytes;
  ResponseList: TCloudResponseInfo;
  FrmList: TFrmContainerList;
  Act: TContainerAction;
  BucketName: String;
  I: Integer;
begin
  Result := TCloudResponseInfo.Create;

  if (FileName = EmptyStr) then
    Exit;

  StorageService := TAmazonStorageService.Create(AmazonConnection);

{$REGION 'Define the Bucket'}
  ResponseList := TCloudResponseInfo.Create;
  BucketList := StorageService.ListBuckets(ResponseList);

  if ResponseList.StatusCode = 200 then
  begin

    // Amazon return date/time information for each Bucket
    // this for is required to remove that information
    for I := 0 to BucketList.Count - 1 do
      BucketList[I] := BucketList.Names[I];

    FrmList := TFrmContainerList.Create(nil, BucketList, TClouds[AmazonIndex]);
    try
      FrmList.ShowModal;
      Act := FrmList.Action;

      case Act of
        caCreate:
          begin
            if StorageService.CreateBucket(FrmList.Container, amzbaNotSpecified,
              amzrNotSpecified, Result) then
              BucketName := FrmList.Container;
          end;
        caUpload:
          begin
            BucketName := FrmList.Container;
          end;
      end;
    finally
      FrmList.Free;
    end;

    if Act = TContainerAction.caNone then
      Exit;

  end;
{$ENDREGION}
  try

    Metadata := TStringList.Create;
    Metadata.Values[SMDPath] := ExtractFilePath(FileName);
    Metadata.Values[SMDFrom] := GetComputerandUserName;

    Content := ContentOf(FileName);

    FileName := StringReplace(FileName, ' ', '%20', [rfReplaceAll, rfIgnoreCase]);

    StorageService.UploadObject(BucketName, ExtractFileName(FileName), Content,
      False, Metadata, nil, amzbaPublicRead, Result);
    ShowResponseInfo(TClouds[AmazonIndex], Result);

  except
    on E: Exception do
    begin
      MessageBox(FHandle, PWideChar('Error ' + E.Message),
        TClouds[AmazonIndex], MB_OK);
    end;
  end;

  FreeAndNil(Metadata);
  FreeAndNil(StorageService);
end;

function TCloud.UploadtoAzure(FileName: String): TCloudResponseInfo;
var
  BlobService: TAzureBlobService;
  SList, Metadata: TStrings;
  ContainerList: TList;
  ContainerObj: TAzureContainer;
  Content: TBytes;
  BlobName, ContainerName: String;
  ResponseList: TCloudResponseInfo;
  FrmList: TFrmContainerList;
  Act: TContainerAction;
begin

  Result := TCloudResponseInfo.Create;

  if (FileName = EmptyStr) then
    Exit;

  BlobService := TAzureBlobService.Create(AzureConnection);
  try

{$REGION 'Define the container'}
    ResponseList := TCloudResponseInfo.Create;
    ContainerList := BlobService.ListContainers(nil, ResponseList);
    Metadata := TStringList.Create;

    if ResponseList.StatusCode = 200 then
    begin

      SList := TStringList.Create;
      for ContainerObj in ContainerList do
        SList.Add(ContainerObj.Name);
      ContainerList.Free;

      FrmList := TFrmContainerList.Create(nil, SList, TClouds[AzureIndex]);
      try
        FrmList.ShowModal;
        Act := FrmList.Action;

        case Act of
          caCreate:
            begin
              Metadata.Values[SMDCreateby] := GetComputerandUserName;

              if BlobService.CreateContainer(FrmList.Container, Metadata,
                bpaBlob, Result) then
                ContainerName := FrmList.Container;
            end;
          caUpload:
            begin
              ContainerName := FrmList.Container;
            end;
        end;
      finally
        SList.Free;
        FrmList.Free;
      end;

      if Act = TContainerAction.caNone then
        Exit;

    end;
{$ENDREGION}

    Metadata.Clear;
    Metadata.Values[SMDPath] := ExtractFilePath(FileName);
    Metadata.Values[SMDFrom] := GetComputerandUserName;

    Content := ContentOf(FileName);
    BlobName := ExtractFileName(FileName);

    BlobService.PutBlockBlob(ContainerName, BlobName, Content, '', nil,
      Metadata, Result);
    ShowResponseInfo(TClouds[AzureIndex], Result);

  except
    on E: Exception do
    begin
      MessageBox(FHandle, PWideChar('Error ' + E.Message),
        TClouds[AzureIndex], MB_OK);
    end;
  end;

  FreeAndNil(ResponseList);
  FreeAndNil(Metadata);
  FreeAndNil(BlobService);

end;

end.</pre>
<p>O código fonte completo está disponível no repositório do RAD Studio XE2 no sourceforge, no <a href="http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/">artigo anterior</a> você pode obter as informações de como obter os fontes.<br />
Até o próximo artigo que irá abordar o envio de arquivos para Amazon S3.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-2/" title="CloudAPI – Envio de arquivos para Amazon S3 e Windows Azure – Parte 2">CloudAPI – Envio de arquivos para Amazon S3 e Windows Azure – Parte 2</a></li><li><a href="http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/" title="Shell Extension para Windows 32-bit e 64-bit com Delphi XE2">Shell Extension para Windows 32-bit e 64-bit com Delphi XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/microsoft-windows-azure-por-30-dias-gratis/" title="Microsoft Windows Azure por 30 dias GRÁTIS">Microsoft Windows Azure por 30 dias GRÁTIS</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/teste-nosso-servidor-datasnap-xe-instalado-no-amazon-cloud/" title="Teste nosso servidor DataSnap XE instalado no Amazon Cloud">Teste nosso servidor DataSnap XE instalado no Amazon Cloud</a></li><li><a href="http://www.andreanolanusse.com/pt/datasnap-xe-e-windows-azure-preview-3/" title="DataSnap XE e Windows Azure – RAD Studio XE Preview #3">DataSnap XE e Windows Azure – RAD Studio XE Preview #3</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-1/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Publicando providers durante o registro dinâmico de DataSnap Server Class</title>
		<link>http://www.andreanolanusse.com/pt/publicando-providers-durante-o-registro-dinamico-de-datasnap-server-class/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=publicando-providers-durante-o-registro-dinamico-de-datasnap-server-class</link>
		<comments>http://www.andreanolanusse.com/pt/publicando-providers-durante-o-registro-dinamico-de-datasnap-server-class/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 23:37:14 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DataSnap]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1384</guid>
		<description><![CDATA[<p>Já faz algum tempo que publiquei aqui no blog sobre registro de DataSnap Server Class em tempo de execução, neste mesmo post surgiu vários comentários relacionados a não publicação dos Provider parte do ServerModule, o código original ao registrar o DSServerClass publicava apenas métodos (Server methods), mas não os Providers. A solução para este problema [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Já faz algum tempo que publiquei aqui no blog sobre registro de <a href="http://www.andreanolanusse.com/pt/registrando-datasnap-server-class-em-tempo-de-execucao-no-delphi/">DataSnap Server Class em tempo de execução</a>, neste mesmo post surgiu vários comentários relacionados a não publicação dos Provider parte do ServerModule, o código original ao registrar o DSServerClass publicava apenas métodos (Server methods), mas não os Providers.</p>
<p>A solução para este problema é bem simples, basta registrar a classe TDSProviderDataModuleAdapter, a qual é usada internamente para permitir que o Provider esteja visível para os clientes DataSnap. TDSProviderDataModuleAdapter atua como um proxy entre TProviderDataModule no lado servidor e o TDSProviderConnection no lado cliente.</p>
<p>Poderíamos apenas mudar a implementação do método GetDSClass conforme abaixo, isso funcionaria, mas não seria a melhor implementação visto que estariamos sempre publicando os métodos da interface IAppServer utilizados pelo Provider e ClientDataSet, não faz sentido publicar esta interface se não há provider no ServerModule.</p>
<p>Tornar a publicação parametrizável traz maior flexbilidade e controle para a aplicação e para o desenvoldedor, fica a seu critério quando publicar ou não os providers, assim sendo precisamos apenas de um novo parâmetro na classe TSimpleServerClass.</p>
<pre class="brush: delphi">function TSimpleServerClass.GetDSClass: TDSClass;
begin
  Result := TDSClass.Create(FPersistentClass, False);
  Result := TDSClass.Create(TDSProviderDataModuleAdapter, Result)
end;</pre>
<p>Abaixo temos o código atualizado, a única alteração foi no constructor que recebeu o novo parâmetro ExposeProvider, desta forma você decide se quer ou não publicar os providers.</p>
<pre class="brush: delphi highlight: [18,19,20,21,31,41,42]">type

unit SimpleServerClass;

interface

uses DSServer, Classes, DSCommonServer, DSReflect;

type

  TSimpleServerClass = class(TDSServerClass)
  private
    FPersistentClass: TPersistentClass;
    FExposeProvider : Boolean;
  protected
    function GetDSClass: TDSClass; override;
  public
    constructor Create(AOwner: TComponent; AServer: TDSCustomServer;
      AClass: TPersistentClass; ExposeProvider: Boolean; ALifeCycle: String);
      reintroduce; overload;
  end;

implementation

constructor TSimpleServerClass.Create(AOwner: TComponent;
  AServer: TDSCustomServer; AClass: TPersistentClass; ExposeProvider: Boolean;
  ALifeCycle: String);
begin
  inherited Create(AOwner);
  FPersistentClass := AClass;
  FExposeProvider  := ExposeProvider;
  Self.Server := AServer;
  Self.LifeCycle := ALifeCycle;

end;

function TSimpleServerClass.GetDSClass: TDSClass;
var
  isAdapted : Boolean;
begin
  isAdapted := FPersistentClass.InheritsFrom(TProviderDataModule);
  Result := TDSClass.Create(FPersistentClass, isAdapted);
  if FExposeProvider and isAdapted then
     Result := TDSClass.Create(TDSProviderDataModuleAdapter, Result)
end;

end.</pre>
<p>Abaixo um exemplo onde são registradas 3 classes e somente uma delas expõe os Providers:</p>
<pre class="brush: delphi">procedure RegisterServerClasses(AOwner: TComponent; AServer: TDSServer);
begin
  Assert(AServer.Started = false, 'Não é possível adicionar classes com o servidor ativo');

  TSimpleServerClass.Create(AOwner, AServer, TGlobal, False, TDSLifeCycle.Server);
  TSimpleServerClass.Create(AOwner, AServer, TCustomer, True, TDSLifeCycle.Session);
  TSimpleServerClass.Create(AOwner, AServer, TObjectPool, False, TDSLifeCycle.Invocation);
end;</pre>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/monitoramento-e-controle-de-conexoes-em-datasnap-xe2/" title="Monitoramento e controle de conexões em DataSnap XE2">Monitoramento e controle de conexões em DataSnap XE2</a></li><li><a href="http://www.andreanolanusse.com/pt/implementando-cache-de-dados-em-servidores-datasnap/" title="Implementando cache de dados em servidores DataSnap">Implementando cache de dados em servidores DataSnap</a></li><li><a href="http://www.andreanolanusse.com/pt/exemplos-e-slides-do-delphi-meeting-2011/" title="Exemplos e slides do Delphi Meeting 2011">Exemplos e slides do Delphi Meeting 2011</a></li><li><a href="http://www.andreanolanusse.com/pt/video-threads-e-datasnap-otimizando-um-servidor-de-aplicacao-delphi-conference-2010-brasil/" title="Vídeo: Threads e DataSnap – otimizando um servidor de aplicação – Delphi Conference 2010 Brasil">Vídeo: Threads e DataSnap – otimizando um servidor de aplicação – Delphi Conference 2010 Brasil</a></li><li><a href="http://www.andreanolanusse.com/pt/video-conectando-aplicacoes-android-com-datasnap-server-no-delphi-conference-2010-brasil/" title="Vídeo: Conectando aplicações Android com DataSnap Server no Delphi Conference 2010 Brasil">Vídeo: Conectando aplicações Android com DataSnap Server no Delphi Conference 2010 Brasil</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/publicando-providers-durante-o-registro-dinamico-de-datasnap-server-class/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Disponibilizado ReportBuilder para Delphi XE2, VCL Win32 e Win64</title>
		<link>http://www.andreanolanusse.com/pt/disponibilizado-reportbuilder-para-delphi-xe2-vcl-win32-e-win64/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=disponibilizado-reportbuilder-para-delphi-xe2-vcl-win32-e-win64</link>
		<comments>http://www.andreanolanusse.com/pt/disponibilizado-reportbuilder-para-delphi-xe2-vcl-win32-e-win64/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 05:35:26 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1387</guid>
		<description><![CDATA[<p>Digital Metaphors a empresa que criou o ReportBuilder e nosso technology partner, anunciou a versão 14 do ReportBuilder, esta nova versão suporte Delphi XE2, VCL Win32 e Win64. Abaixo o conteúdo do email em inglês enviado pela Digital Metaphors o qual traz todas as informações sobre esta nova versão. Subject: Digital Metaphors Corporation announces the [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Digital Metaphors a empresa que criou o ReportBuilder e nosso technology partner, anunciou a versão 14 do ReportBuilder, esta nova versão suporte Delphi XE2, VCL Win32 e Win64.</p>
<p>Abaixo o conteúdo do email em inglês enviado pela Digital Metaphors o qual traz todas as informações sobre esta nova versão.</p>
<p>Subject: Digital Metaphors Corporation announces the release of ReportBuilder 14.0!</p>
<p>ReportBuilder 14.0 includes VCL support for Delphi XE2, Delphi XE, Delphi 2010, 2009, 2007, 2006, and Delphi 7.</p>
<p>Overview: <a href="http://www.digital-metaphors.com/rbwiki/General/What's_New/RB_14" target="_blank">http://www.digital-metaphors.com/rbwiki/General/What&#8217;s_New/RB_14</a></p>
<p>New Feature List: <a href="http://www.digital-metaphors.com/PDF/NewFeatures.pdf" target="_blank">http://www.digital-metaphors.com/PDF/NewFeatures.pdf</a></p>
<p>Pricing: <a href="http://www.digital-metaphors.com/order" target="_blank">http://www.digital-metaphors.com/order</a></p>
<p>Upgrade here! <a href="https://www.digital-metaphors.com/secure" target="_blank">https://www.digital-metaphors.com/secure</a></p>
<p>Version 14.0 &#8211; 10/21/2011<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
- Delphi XE2 support for VCL Win32<br />
- Delphi XE2 support for VCL Win64</p>
<p>Design Layers<br />
&#8212;&#8212;&#8212;&#8212;-<br />
- separate layout elements into logical layers<br />
- load/save design layers (example std header/footer or watermark)<br />
- prevent users from adding, selecting, moving, deleting elements<br />
- prevent users from seeing, selecting, deleting layers<br />
- LayerTypes: Band, Page<br />
- Inactive Layers draw alpha blended behind active layer<br />
- ComponentOptions: Add, Delete, Select, Move<br />
- LayerOptions: Select, Rename, Visible, Delete, Load, Save</p>
<p>Preview<br />
&#8212;&#8212;-<br />
- continuous page scrolling<br />
- single and two-up page display<br />
- background thread report generation<br />
- hand scrolling<br />
- PreviewFormSetings.PageDisplay property<br />
- PreviewFormSettings.PageIncrement propery (control page generation)<br />
- PreviewFormsSettings.SinglePageOnly (forces use of old screen device)<br />
- Viewer.DeadSpace property (control amount of space outside of page)</p>
<p>Output Devices<br />
&#8212;&#8212;&#8212;&#8212;&#8211;<br />
- HTML file device<br />
- PDF/A device (http://en.wikipedia.org/wiki/PDF/A)<br />
- PDFSettings.PDFA boolean property (force PDF to PDF/A standard)<br />
- PDF image compression (automatic jpeg compression)<br />
- PDF image scaling (PDFSettings.ImageCompressionLevel)<br />
- PDF, high quality metafile to bitmap conversion<br />
- DocForm device (exact positioning of lines and text)<br />
- RTFSettings.UseTextBoxes boolean property (exact text positioning)<br />
- RTF/Doc device, support for CodePage and Font.CharSet<br />
- XLS support for AppName, Author, Subject, Title (XLSSEttings)<br />
- Email, Extended Mapi plug-in<br />
- avoid security warnings, Unicode and Html support<br />
- Email, support for HTML messages via Indy 10 Extended Mapi<br />
- Email, EmailSettings.HtmlBody, BodyHtmlAttachments properties<br />
- Email, EmailSettings.StreamAttachments option<br />
- Email, Unicode message body (Unicode VCL w/Indy 10 or Extended Mapi)<br />
- new ScrollableScreenDevice, used by Viewer to implement continuous scrolling<br />
- PrintToFile enhancements<br />
- DefaultFileDeviceType defaults to PDF<br />
- default TextFileName, ArchiveFileName ($MyDocuments)\Report.pdf<br />
- Change default file device, auto-changes default file name<br />
- change output format in print dialog, auto-changes default file name<br />
- support for wildcards in default FileName, ($MyDocuments) is resolved<br />
by print dialog for display to end-user<br />
- change the extension in the print dialog, changes the file</p>
<p>International Language support<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
- added 64-bit language modules</p>
<p>TeeChart support<br />
&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
- enhanced TeeChart Package Builder for 64-bit</p>
<p>RCL<br />
&#8212;<br />
- Variable support for Int64 via dtLargeInt data type<br />
- Groups, PreventOrphans<br />
- prevent group header with no detail at bottom of page<br />
- prevent group footer with no detail at top of page<br />
- Columns, ColumnBalancing<br />
- generate vertical columns in min number of rows<br />
- ColumnFooter, AlignToBottom boolean<br />
- enables column footer to generate immediately after detail<br />
- Band.Background property for all bands<br />
- DrawCommand.AsMetaFile feature for simpler RCL add-on support<br />
- SummaryBand enhanced to print on same page as columns</p>
<p>Engine<br />
&#8212;&#8212;<br />
- enhanced group generation &#8211; PreventOrphans management<br />
- enhanced horizontal and vertical Column generation</p>
<p>EndUser<br />
&#8212;&#8212;-<br />
- DesignLayers<br />
- LayerOptions: use to lock layers, hide layers<br />
- for example, create a visible/invisible water mark layer<br />
- ComponentOptions: prevent users from moving, deleting etc.<br />
- new OnCustomSaveQueryDoc event<br />
- new ShowHelp method &#8211; fires Designer.OnHelp event<br />
- ReportExplorer, invokes Help via new Designer.ShowHelp</p>
<p>RAP<br />
&#8212;<br />
- new Int64 data type<br />
- compiler/parser support for // comments<br />
- enhanced object ref scoping: childreport can access parent report objects<br />
- File functions: FileExists, DirectoryExists, ExtractFileName, etc.<br />
- RTTI for PrintDialog<br />
- RTTI for FileDevice<br />
- RTTI for ObjectList<br />
- RTTI enhanced for Picture, Graphic<br />
- enhanced run-time exception message to display subreport name</p>
<p>Server<br />
&#8212;&#8212;<br />
- added 64-bit windows service (ReportBuilder Services)</p>
<p>*features may vary by ReportBuilder Edition and Delphi version<br />
*RB 14 includes support for seven Delphi versions:<br />
D7, D2006. D2007, D2009, D2010, DXE, DXE2.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis para download</a></li><li><a href="http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/" title="White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7">White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7</a></li><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/vagas-esgotadas-para-o-delphi-conference-2011/" title="Vagas esgotadas para o Delphi Conference 2011">Vagas esgotadas para o Delphi Conference 2011</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/disponibilizado-reportbuilder-para-delphi-xe2-vcl-win32-e-win64/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Shell Extension para Windows 32-bit e 64-bit com Delphi XE2</title>
		<link>http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2</link>
		<comments>http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/#comments</comments>
		<pubDate>Mon, 17 Oct 2011 07:07:12 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Cloud]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1377</guid>
		<description><![CDATA[<p>Com o suporte a compilação para windows 64-bit no Delphi XE2, desenvolvedores passam a poder criar Shell Extensions para Windows 64-bit. Shell Extensions são objetos COM que estendem as capacidades do sistema operacional Windows. Nesta primera parte do artigo explico como criar, compilar para 32-bit e 64-bit e registrar  um shell extension. O exemplo a ser [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Com o suporte a compilação para windows 64-bit no <a href="http://www.embarcadero.com/products/delphi" target="_blank">Delphi XE2</a>, desenvolvedores passam a poder criar Shell Extensions para Windows 64-bit. Shell Extensions são objetos COM que estendem as capacidades do sistema operacional Windows. Nesta primera parte do artigo explico como criar, compilar para 32-bit e 64-bit e registrar  um shell extension. O exemplo a ser utilizado irá adicionar dois menus de contexto ao Windows Explorer, estes novos menus terão como funcionalidade permitir que os usuários façam upload de arquivos para as nuvens Microsoft Azure e Amazon S3. Na segunda parte do artigo irei explicar como fazer o upload de arquivos para o Amazon S3 e Microsoft Azure utilizando o Cloud API.</p>
<h3>Criando o CloudUpload Shell Extension</h3>
<p>Para criar um shell extension em Delphi o primeiro passo é criar um projeto ActiveX Library e em seguinda criar um Automation Object. O exemplo utilizado neste artigo tem como nome de projeto CloudUpload e o Automation Object se chama TCloudUploadContext. Para integrar menus de contexto ao Windows Explorer a classe TCloudUploadContext terá de  implementar as interfaces IShellExtInit e IContextMenu e seus respectivos métodos.</p>
<pre class="brush: delphi">    { IShellExtInit Methods }
    { Initialize the context menu if a files was selected}
    function IShellExtInit.Initialize = ShellExtInitialize;
    function ShellExtInitialize(pidlFolder: PItemIDList; lpdobj: IDataObject;
      hKeyProgID: HKEY): HResult; stdcall;

    { IContextMenu Methods }
    { Initializes the context menu and it decides which items appear in it,
      based on the flags you pass }
    function QueryContextMenu(Menu: HMENU; indexMenu, idCmdFirst, idCmdLast,
      uFlags: UINT): HResult; stdcall;

    { Execute the command, which will be the upload to Amazon or Azure}
    function InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult; stdcall;
    { Set help string on the Explorer status bar when the menu item is selected }
    function GetCommandString(idCmd: UINT_PTR; uFlags: UINT; pwReserved: PUINT;
      pszName: LPSTR; cchMax: UINT): HResult; stdcall;</pre>
<p>O ShellExtInitialize define se o menu de contexto será exibido ou não no Windows Explorer. Neste exemplo o menu de contexto aparece apenas e somente quando um arquivo for selecionado, a partir dai armazenamos o nome do arquivo na variável FFileName.</p>
<pre class="brush: delphi">function TCloudUploadContextMenu.ShellExtInitialize(pidlFolder: PItemIDList;
  lpdobj: IDataObject; hKeyProgID: HKEY): HResult;
var
  DataFormat: TFormatEtc;
  StrgMedium: TStgMedium;
  Buffer: array [0 .. MAX_PATH] of Char;
begin
  Result := E_FAIL;

  { Check if an object was defined }
  if lpdobj = nil then
    Exit;

  { Prepare to get information about the object }
  DataFormat.cfFormat := CF_HDROP;
  DataFormat.ptd := nil;
  DataFormat.dwAspect := DVASPECT_CONTENT;
  DataFormat.lindex := -1;
  DataFormat.tymed := TYMED_HGLOBAL;

  if lpdobj.GetData(DataFormat, StrgMedium) &lt;&gt; S_OK then
    Exit;

  { The implementation now support only one file }
  if DragQueryFile(StrgMedium.hGlobal, $FFFFFFFF, nil, 0) = 1 then
  begin
    SetLength(FFileName, MAX_PATH);
    DragQueryFile(StrgMedium.hGlobal, 0, @Buffer, SizeOf(Buffer));
    FFileName := Buffer;
    Result := NOERROR;
  end
  else
  begin
    // Don't show the Menu if more then one file was selected
    FFileName := EmptyStr;
    Result := E_FAIL;
  end;

  { http://msdn.microsoft.com/en-us/library/ms693491(v=vs.85).aspx }
  ReleaseStgMedium(StrgMedium);

end;</pre>
<p>Depois de inicializado o handle do menu de contexto através da interface IShellExiInit, o Windows utilizar a interface IContextMenu para chamar os outros métodos do handle do menu de contexto, neste caso irá chamar QueryContextMenu, GetCommandString e InvokeCommand.</p>
<p>As opções do menu de contexto (<a href="http://aws.amazon.com/s3/" target="_blank">Amazon S3</a>, <a href="http://www.microsoft.com/windowsazure/features/storage/" target="_blank">Microsoft Azure</a>) serão criadas através do método QueryContextMenu.</p>
<pre class="brush: delphi">function TCloudUploadContextMenu.QueryContextMenu(Menu: HMENU;
  indexMenu, idCmdFirst, idCmdLast, uFlags: UINT): HResult;
var
  CloudMenuItem: TMenuItemInfo;
  MenuCaption: String;
  SubMenu: HMENU;
  uId: UINT;
begin
  { only adding one menu CloudMenuItem, so generate the result code accordingly }
  Result := MakeResult(SEVERITY_SUCCESS, 0, 3);

  { store the menu CloudMenuItem index }
  FMenuItemIndex := indexMenu;

  { specify what the menu says, depending on where it was spawned }
  if (uFlags = CMF_NORMAL) then // from the desktop
    MenuCaption := 'Send file from Desktop to the Cloud'
  else if (uFlags and CMF_VERBSONLY) = CMF_VERBSONLY then // from a shortcut
    MenuCaption := 'Send file from Shourtcut to the Cloud'
  else if (uFlags and CMF_EXPLORE) = CMF_EXPLORE then // from explorer
    MenuCaption := 'Send file from Explorer to the Cloud'
  else
    { fail for any other value }
    Result := E_FAIL;

  if Result &lt;&gt; E_FAIL then
  begin

    SubMenu := CreatePopupMenu;

    uId := idCmdFirst;
    InsertMenu(SubMenu, AmazonIndex, MF_BYPOSITION, uId, TClouds[AmazonIndex]);

    Inc(uId);
    InsertMenu(SubMenu, AzureIndex, MF_BYPOSITION, uId, TClouds[AzureIndex]);

    FillChar(CloudMenuItem, SizeOf(TMenuItemInfo), #0);
    CloudMenuItem.cbSize := SizeOf(TMenuItemInfo);
    CloudMenuItem.fMask := MIIM_SUBMENU or MIIM_STRING or MIIM_ID;
    CloudMenuItem.fType := MFT_STRING;
    CloudMenuItem.wID := FMenuItemIndex;
    CloudMenuItem.hSubMenu := SubMenu;
    CloudMenuItem.dwTypeData := PWideChar(MenuCaption);
    CloudMenuItem.cch := Length(MenuCaption);

    InsertMenuItem(Menu, indexMenu, True, CloudMenuItem);
  end;
end;</pre>
<p>Quando o usuário estiver no Windows Explorer e passar o mouse sobre um dos menus criados, uma mensagem será exibida na barra de status do Windows Explorer, isso acontece devido a implementação do método GetCommandString, o qual retorna a string a ser exibida pelo Windows Explorer.</p>
<pre class="brush: delphi">
function TCloudUploadContextMenu.GetCommandString(idCmd: UINT_PTR; uFlags: UINT;
pwReserved: PUINT; pszName: LPSTR; cchMax: UINT): HResult;
begin
  Result := E_INVALIDARG;

  { Set help string on the Explorer status bar when the menu item is selected }
  if (idCmd in [AmazonIndex, AzureIndex]) and (uFlags = GCS_HELPTEXT) then
  begin
    StrLCopy(PWideChar(pszName), PWideChar('Copy the selected file to ' +
      TClouds[idCmd]), cchMax);
    Result := NOERROR;
  end;

end;</pre>
<p>Assim que usuário clicar no menu referente a nuvem que deseja enviar o arquivo, o método InvokeCommand será chamado e dará inicio o processo para fazer o upload do arquivo selecionado. Neste ponto já temos o nome do arquivo e com base nos parâmetros lpici podemos identificar o qual dos items de menu o usuário clicou.</p>
<pre class="brush: delphi">function TCloudUploadContextMenu.InvokeCommand(var lpici: TCMInvokeCommandInfo): HResult;
var
  Item: Word;
begin
  Result := E_FAIL;

  if HiWord(Integer(lpici.lpVerb)) &lt;&gt; 0 then
    Exit;

  { if the index matches the index for the menu, show the cloud options }
  Item := LoWord(Integer(lpici.lpVerb));

  if Item in [AmazonIndex, AzureIndex] then
  begin
    try
      Upload(lpici.HWND, Item, FFileName);
    except
      on E: Exception do
        MessageBox(lpici.hwnd, PWideChar(E.Message), 'Cloud Upload', MB_ICONERROR);

    end;
    Result := NOERROR;
  end;

end;</pre>
<p>Para que o objeto COM seja criado sempre que o CloudUpload é carregado, é necessário criar uma instância da classe factory o qual irá criar uma instância do objeto shell extension. A instância da classe factory será criada na seção initialization conforme o código abaixo, veja que o código original criado pelo Delphi será substituido por este.</p>
<pre class="brush: delphi">initialization
  TCloudUploadObjectFactory.Create(ComServer, TCloudUploadContextMenu, CLASS_CloudUploadContextMenu, ciMultiInstance, tmApartment);
end.</pre>
<p>Uma vez que a classe factory será responsável por registrar/desregistrar a DLL, os métodos ApproveShellExtension e UpdateRegistry serão chamados, isso vai acontecer quando você usar o regsvr32.exe.</p>
<pre class="brush: delphi">  { the new class factory }
  TCloudUploadObjectFactory = class(TAutoObjectFactory)
  protected
    procedure ApproveShellExtension(&amp;Register: Boolean; const ClsID: string);
    function GetProgID: string; override;
  public
    procedure UpdateRegistry(Register: Boolean); override;
  end;

{ TCloudUploadObjectFactory }

{ Required to registration for Windows NT/2000 }
procedure TCloudUploadObjectFactory.ApproveShellExtension(&amp;Register: Boolean;
  const ClsID: string);
Const
  WinNTRegKey =
    'SOFTWARE\Microsoft\Windows\CurrentVersion\Shell Extensions\Approved';
var
  Reg: TRegistry;
begin
  Reg := TRegistry.Create;

  try
    Reg.RootKey := HKEY_LOCAL_MACHINE;

    if not Reg.OpenKey(WinNTRegKey, True) then
      Exit;

    { register the extension appropriately }
    if &amp;Register then
      Reg.WriteString(ClsID, Description)
    else
      Reg.DeleteValue(ClsID);
  finally
    Reg.Free;
  end;

end;

function TCloudUploadObjectFactory.GetProgID: string;
begin
  { ProgID not required for shell extensions }
  Result := '';
end;

procedure TCloudUploadObjectFactory.UpdateRegistry(Register: Boolean);
Const
  ContextKey = '*\shellex\ContextMenuHandlers\%s';
begin
  { perform normal registration }
  inherited UpdateRegistry(Register);

  { Registration required for Windows NT/2000 }
  ApproveShellExtension(Register, GUIDToString(ClassID));

  { if this server is being registered, register the required key/values
    to expose it to Explorer }
  if Register then
    CreateRegKey(Format(ContextKey, [ClassName]), '', GUIDToString(ClassID),
      HKEY_CLASSES_ROOT)
  else
    DeleteRegKey(Format(ContextKey, [ClassName]));

end;</pre>
<h3>Compilar para plataformas 32-bit ou 64-bit</h3>
<p>A partir daqui preciamos apenas compilar o projeto, neste exemplo as API&#8217;s do Windows e os métodos da RTL são os mesmos para as plataformas 32-bit e 64-bit, assim sendo não precisamos fazer implementações específicas para cada plataforma. Você pode definir para qual plataforma deseja compilar utilizando o Project Manager, o default é 32-bit Windows, use o botão direito do mouse na opção Target Platforms para adicionar 64-bit Windows.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/10/Platform3264.png"><img class="aligncenter size-full wp-image-1378" title="Delphi XE2 - plataforma 32-bit ou 64-bit" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/10/Platform3264.png" alt="" width="235" height="338" /></a></p>
<p>Você não pode registrar dll 32-bit em sistema operacional 64-bit, assim como não pode registrar dll 64-bit em sistema operacional 32-bit. Se você desenvolve, compila e teste seus projeto na sua máquina de desenvolvimento, compile para a plataforma compatível com o sistema operacional em uso.</p>
<p>&nbsp;</p>
<h3>Registrando o Shell Extension CloudUpload</h3>
<p>Primeiro, você tem que executar em modo &#8220;Run as Administrator&#8221; a aplicação que será utilizada para registrar o shell extension, mesmo que seu usuário tenha direitos de Administrador.</p>
<p>Shell extensions 32-bit pode ser registradas através do IDE, linha de comando (cmd) pode ser usada para registrar 32-bit e 64-bit.</p>
<p>Abaixo os passos para registrar e cancelar o registro através de linha de comando:</p>
<p>- &#8220;Run as Administrator&#8221; o cmd;</p>
<p>- Registre a extensão utilizando a linha de comando: regsvr32 &lt;DIRETÓRIO ONDE ESTÁ A DLL&gt;CloudUpload.dll</p>
<p>- Para desregistrar a extensão utilize a seguinte linha de comando: regsvr32 &lt;DIRETÓRIO ONDE ESTÁ A DLL &gt;CloudUpload.dll /u</p>
<p>Efetuado o registro da DLL abra o Windows Explorer, selecione um arquivo e utilize o botão direito do mouse, você verá um novo menu &#8220;Send file from Explorer to the Cloud&#8221;. No screenshot abaixo você pode ver a extensão no Windows 7 64-bit.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/10/Cloud-ShellExtension.png"><img class="aligncenter size-full wp-image-1379" title="CloudUpload Shell Extension" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/10/Cloud-ShellExtension.png" alt="" width="554" height="385" /></a></p>
<p>Você pode obter o código fonte do exemplo aqui utilizado de duas formas:</p>
<ul>
<li>Usando o <a href="http://www.embarcadero.com/products/rad-studio/downloads" target="_blank">IDE do RAD Studio XE2</a>, no menu File selecione a opção &#8220;Open from Version Control&#8221; e configure a URL para <a href="https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/Delphi/CloudAPI/CloudUpload" target="_blank">https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/Delphi/CloudAPI/CloudUpload</a></li>
<li>Atualizando o repositório local de demos do RAD Studio XE2, case você use TortoiseSVN com o botão direito sobre a pasta C:\Users\Public\Documents\RAD Studio\9.0\Samples\Delphi selecione a opção Update;</li>
</ul>
<div>No próximo artigo irei explicar a parte deste exemplo relacionada ao Cloud API, enquanto isso você pode ir estudando o exemplo completo.</div>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-2/" title="CloudAPI – Envio de arquivos para Amazon S3 e Windows Azure – Parte 2">CloudAPI – Envio de arquivos para Amazon S3 e Windows Azure – Parte 2</a></li><li><a href="http://www.andreanolanusse.com/pt/cloudapi-envio-de-arquivos-para-amazon-s3-e-windows-azure-parte-1/" title="CloudAPI &#8211; Envio de arquivos para Amazon S3 e Windows Azure &#8211; Parte 1">CloudAPI &#8211; Envio de arquivos para Amazon S3 e Windows Azure &#8211; Parte 1</a></li><li><a href="http://www.andreanolanusse.com/pt/microsoft-windows-azure-por-30-dias-gratis/" title="Microsoft Windows Azure por 30 dias GRÁTIS">Microsoft Windows Azure por 30 dias GRÁTIS</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2010-disponivel-para-download/" title="Apresentações do Delphi Conference 2010 disponível para download">Apresentações do Delphi Conference 2010 disponível para download</a></li><li><a href="http://www.andreanolanusse.com/pt/teste-nosso-servidor-datasnap-xe-instalado-no-amazon-cloud/" title="Teste nosso servidor DataSnap XE instalado no Amazon Cloud">Teste nosso servidor DataSnap XE instalado no Amazon Cloud</a></li><li><a href="http://www.andreanolanusse.com/pt/datasnap-xe-e-windows-azure-preview-3/" title="DataSnap XE e Windows Azure – RAD Studio XE Preview #3">DataSnap XE e Windows Azure – RAD Studio XE Preview #3</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/shell-extension-para-windows-32-bit-e-64-bit-com-delphi-xe2/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Monitoramento e controle de conexões em DataSnap XE2</title>
		<link>http://www.andreanolanusse.com/pt/monitoramento-e-controle-de-conexoes-em-datasnap-xe2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=monitoramento-e-controle-de-conexoes-em-datasnap-xe2</link>
		<comments>http://www.andreanolanusse.com/pt/monitoramento-e-controle-de-conexoes-em-datasnap-xe2/#comments</comments>
		<pubDate>Sat, 01 Oct 2011 16:59:26 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DataSnap]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1371</guid>
		<description><![CDATA[<p>Uma das grandes novidades relacionadas ao DataSnap no Delphi e C++Builder XE2 é o monitoramento e controle de conexões TCP/IP a partir do servidor DataSnap, uma das grandes solicitações dos usuários de DataSnap, até a versão XE o monitoramente e controlo era possível mas requeria muito código por parte do desenvolvedor. Atende a pedidos isso [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Uma das grandes novidades relacionadas ao DataSnap no Delphi e C++Builder XE2 é o monitoramento e controle de conexões TCP/IP a partir do servidor DataSnap, uma das grandes solicitações dos usuários de DataSnap, até a versão XE o monitoramente e controlo era possível mas requeria muito código por parte do desenvolvedor. Atende a pedidos isso já não é mais necessário, tudo isso é parte do framework e neste artigo vou explicar como funciona.</p>
<p>Aproveitando a oportunidade, dia 30 de Novembro acontece o Delphi Conference 2011, o maior evento de Delphi do Brasil, um dia inteiro para aprimorar seus conhecimento em Delphi e ir a fundo nas mais recentes novidades. Todas as informações no site do evento <a href="HTTP://www.delphiconference.com.br" target="_blank">HTTP://www.delphiconference.com.br</a></p>
<p>Pra começar, toda a implementação do monitoramento e controle foi implementada para protocolo TCP/IP o que permite monitorar e derrubar qualquer conexão, assim sendo o componente TDSTCPServerTransporter recebeu dois novos eventos OnConnect e OnDisconnect, estes eventos são muito importantes, pois através deles gerenciamos a lista de conexões no servidor podendo fazer o que quiser com as mesmas. Além disso toda conexão está associado a um Session ID que é único, o Session ID já está disponível desde as versões anteriores do DataSnap.</p>
<p>Para exemplificar o funcionamento e implementação do monitoramento definimos uma lista (collection) conforme abaixo para armazenar as instâncias de cada conexão (TIdTCPConnection) e protocolo (TDSTCPChannel)</p>
<pre class="brush: delphi">FConnections: TObjectDictionary&lt;TIdTCPConnection,TDSTCPChannel&gt;;</pre>
<p>&nbsp;</p>
<p>A partir dai implementamos os eventos OnConnect e OnDisconnect no TDSTCPServerTransporter. Implementar o evento OnConnect é bem simples, você tem apenas que armazenar as informações referente a conexão na sua lista e caso tenha alguma interface para atualizar com as informações referentes a esta conexão, assim faze-lo.</p>
<p>O código abaixo adiciona a nova conexão utilizando os métodos TMonitor.Enter e TMonitor.Exit para assegurar que nenhuma outra thread irá tentar atualizar esta lista.</p>
<p>Após adicionar a lista utilizamos o método EnableKeepAlive que irei explicar em seguida.</p>
<pre class="brush: delphi">procedure TCMServerForm.CMServerTransportConnectEvent(Event: TDSTCPConnectEventObject);
begin
  System.TMonitor.Enter(FConnections);
  try
    FConnections.Add(TIdTCPConnection(Event.Connection), Event.Channel);
  finally
    System.TMonitor.Exit(FConnections);
  end;

  //Enable Keep-alive for this new connection.
    Event.Channel.EnableKeepAlive(10000);
end;</pre>
<p>A implementação do método OnDisconnect terá que localizar a instância da conexão e remove-la da lista, OnDisconnect será executado quando a aplicação cliente desconectar do servidor, seja de forma natural, queda de rede, etc.</p>
<p>Por padrão, o evento OnDisconnect não será notificado se o cliente de forma abrupta perde sua conexão internet. Isso acontece porque a conexão Socket permanece aberta até que ocorra alguma chamada e esta falhe. Se o sistema operacional está configurado para usar pacotes keep-alive para todas as conexões TCP/IP e com base na sua configuração, você verá o evento OnDisconnect ser notificado. Se você desejar controlar este comportamento para cada conexão, então use os métodos EnableKeepAlive e DisableKeepAlive para cada instância do TDSTCPChannel.</p>
<p>No código acima foi definido para cada conexão o KeepAlive em 10 segundos, isso quer dizer que o server irá enviar um pacote (fazer um ping) no cliente quando o mesmo estiver inativo por mais de 10 segundos, se o cliente não responder o server irá tentar novamente, a quantidade de tentativas é baseada no sistema operacional, por exemplo Windows 7 tenta 10 vezes. Você ainda pode definir o intervalo entre os pings, basta configurar o KeepAliveInterval.</p>
<p>O código abaixo demonstra como remover a instância da conexão da lista e como atualizar a interface do usuário utilizando TThread.Synchronize.</p>
<pre class="brush: delphi">procedure TCMServerForm.CMServerTransportDisconnectEvent(Event: TDSTCPDisconnectEventObject);
var
  Index: Integer;
begin
  if (FConnections = nil) or (Event.Connection = nil) then
    Exit;

  //This is called when a TCP connection is closed, for whatever reason.
  System.TMonitor.Enter(FConnections);
  try
    FConnections.Remove(TIdTCPConnection(Event.Connection));

    TThread.Synchronize(nil, procedure
      begin
        //update the connection list box, removing the connection that was just closed
        Index := ConnectionsList.Items.IndexOfObject(Event.Connection);
        if Index &gt; -1 then
        begin
          ConnectionsList.Items.Delete(Index);

          if ConnectionsList.SelCount = 0 then
            SessionIdList.ClearSelection;
        end;
      end);
  finally
    System.TMonitor.Exit(FConnections);
  end;</pre>
<p>Até aqui sabemos quem está conectado ao servidor, a partir dai podemos derrubar qualquer conexão, visto que temos a instância de cada TDSTCPChannel e este contém o método close que encerra a conexão cliente, ao ser desconectado o lado cliente recebe uma exception quando tentar executar qualquer operação no servidor.<br />
No exemplo abaixo encerramos a conexão selecionada em um ListBox, o método GetSelectedChannel busca a instância do Channel baseado na conexão selecionada no ListBox.</p>
<p>Quando executamos o método Channel.Close o evento OnDisconnect será notificado.</p>
<pre class="brush: delphi">procedure TCMServerForm.ButtCloseSelectedClick(Sender: TObject);
var
  Channel: TDSTCPChannel;
begin
  //Find the selected connection's channel, and then close it.
  Channel := GetSelectedChannel;

  //after calling close, the CMServerTransportDisconnectEvent event will be notified.
  if Channel &lt;&gt; nil then
  begin
    Channel.Close;
  end;
end;
function TCMServerForm.GetSelectedChannel(Conn: TIdTCPConnection): TDSTCPChannel;
begin
  Result := nil;

  //Finds the selected connection
  if Conn = nil then
    Conn := GetSelectedConnection;

  //uses the selected connection to look up the associated channel.
  if Conn &lt;&gt; nil then
    FConnections.TryGetValue(Conn, Result)
end;</pre>
<p>O RAD Studio XE2 traz um exemplo completo sobre o assunto e se você já usa a versão XE2 pode encontrá-lo em C:\Users\Public\Documents\RAD Studio\9.0\Samples\Delphi\DataSnap\DataSnapMonitor ou fazer o download direto do repositório de demos do RAD Studio XE2 <a href="http://radstudiodemos.svn.sourceforge.net/viewvc/radstudiodemos/branches/RadStudio_XE2/Delphi/DataSnap/DataSnapMonitor/" target="_blank">aqui</a>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/implementando-cache-de-dados-em-servidores-datasnap/" title="Implementando cache de dados em servidores DataSnap">Implementando cache de dados em servidores DataSnap</a></li><li><a href="http://www.andreanolanusse.com/pt/exemplos-e-slides-do-delphi-meeting-2011/" title="Exemplos e slides do Delphi Meeting 2011">Exemplos e slides do Delphi Meeting 2011</a></li><li><a href="http://www.andreanolanusse.com/pt/videos-sobre-datasnap-para-2011-o-que-voce-gostaria-de-ver/" title="Vídeos sobre DataSnap para 2011 &#8211; o que você gostaria de ver?">Vídeos sobre DataSnap para 2011 &#8211; o que você gostaria de ver?</a></li><li><a href="http://www.andreanolanusse.com/pt/video-de-lancamento-do-delphi-xe-cbuilder-xe-radphp-xe-e-delphi-prism-xe/" title="Vídeo de lançamento da familia XE do Delphi, C++Builder, RadPHP e Delphi Prism">Vídeo de lançamento da familia XE do Delphi, C++Builder, RadPHP e Delphi Prism</a></li><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/monitoramento-e-controle-de-conexoes-em-datasnap-xe2/feed/</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Disponibilizado o Trial, Datasheet, Matriz de Recursos e FAQ para as versões XE2</title>
		<link>http://www.andreanolanusse.com/pt/disponibilizado-o-trial-datasheet-matriz-de-recursos-e-faq-para-as-versoes-xe2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=disponibilizado-o-trial-datasheet-matriz-de-recursos-e-faq-para-as-versoes-xe2</link>
		<comments>http://www.andreanolanusse.com/pt/disponibilizado-o-trial-datasheet-matriz-de-recursos-e-faq-para-as-versoes-xe2/#comments</comments>
		<pubDate>Fri, 02 Sep 2011 00:13:18 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Delphi Prism (.NET)]]></category>
		<category><![CDATA[RadPHP]]></category>
		<category><![CDATA[Delphi Prism]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1352</guid>
		<description><![CDATA[<p>Chegou a hora de adquirir sua cópia do RAD Studio XE2 que inclui o Delphi XE2, C++Builder XE2, Embarcadero Prism XE2 e RadPHP XE2, entre em contato com o nosso partner local e garanta já sua licença. &#160; DataSheet Matriz de Recursos Perguntas Frequentes Trial RAD Studio XE2 PDF PDF Ler Download Delphi XE2 PDF [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Chegou a hora de adquirir sua cópia do RAD Studio XE2 que inclui o Delphi XE2, C++Builder XE2, Embarcadero Prism XE2 e RadPHP XE2, entre em contato com o nosso partner local e garanta já sua licença.</p>
<p>&nbsp;</p>
<table width="95%">
<tbody>
<tr>
<td align="right"></td>
<td align="center"><strong>DataSheet</strong></td>
<td align="center"><strong>Matriz de Recursos</strong></td>
<td align="center"><strong>Perguntas Frequentes</strong></td>
<td align="center"><strong>Trial</strong></td>
</tr>
<tr>
<td align="right"><strong>RAD Studio XE2</strong></td>
<td align="center"><a title="RAD Studio XE2 Datasheet" href="http://edn.embarcadero.com/article/images/41560/RADStudio_XE2_datasheet.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="RAD Studio XE2 Matriz de Recursos" href="http://edn.embarcadero.com/article/images/41566/RAD_Studio_XE2_Feature_Matrix.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="RAD Studio XE2 perguntas frequentes" href="http://edn.embarcadero.com/article/41577" target="_blank">Ler</a></td>
<td align="center"><a title="RAD Studio XE2 Trial" href="https://downloads.embarcadero.com/free/rad_studio" target="_blank">Download</a></td>
</tr>
<tr>
<td align="right"><strong>Delphi XE2</strong></td>
<td align="center"><a title="Delphi XE2 Datasheet" href="http://edn.embarcadero.com/article/images/41559/Delphi_XE2_datasheet.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="Delphi XE2 Matriz de Recursos" href="http://edn.embarcadero.com/article/images/41563/Delphi_XE2_Feature_Matrix.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="Delphi XE2 perguntas frequentes" href="http://edn.embarcadero.com/article/41570" target="_blank">Ler</a></td>
<td align="center"><a title="Delphi XE2 Trial" href="https://downloads.embarcadero.com/free/delphi" target="_blank">Download</a></td>
</tr>
<tr>
<td align="right"><strong>C++Builder XE2</strong></td>
<td align="center"><a title="C++Builder XE2 Datasheet" href="http://edn.embarcadero.com/article/images/41562/CBuilder_XE2_datasheet.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="C++Builder XE2 Matriz de Recursos" href="http://edn.embarcadero.com/article/images/41564/CBuilder_XE2_Feature_Matrix.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="C++Builder XE2 perguntas frequentes" href="http://edn.embarcadero.com/article/41571" target="_blank">Ler</a></td>
<td align="center"><a title="C++Builder XE2 Trial" href="https://downloads.embarcadero.com/free/cbuilder" target="_blank">Download</a></td>
</tr>
<tr>
<td align="right"><strong>RadPHP XE2</strong></td>
<td align="center"><a title="RadPHP XE2 Datasheet" href="http://edn.embarcadero.com/article/images/41561/RadPHP_XE2_datasheet.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="RadPHP XE2 Matriz de Recursos" href="http://edn.embarcadero.com/article/images/41565/RadPHP_XE2_Feature_Matrix.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="RadPHP XE2 perguntas frequentes" href="http://edn.embarcadero.com/article/41573" target="_blank">Ler</a></td>
<td align="center"><a title="RadPHP XE2 Trial" href="https://downloads.embarcadero.com/free/radphp" target="_blank">Download</a></td>
</tr>
<tr>
<td align="right"><strong>Prism XE2</strong></td>
<td align="center"><a title="Prism XE2 Datasheet" href="http://edn.embarcadero.com/article/images/41560/RADStudio_XE2_datasheet.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="Prism XE2 Feature Matrix" href="http://edn.embarcadero.com/article/images/41567/Embarcadero_Prism_XE2_Feature_Matrix.pdf" target="_blank">PDF</a></td>
<td align="center"><a title="Prism XE2 perguntas frequentes" href="http://edn.embarcadero.com/article/41575" target="_blank">Ler</a></td>
<td align="center"><a title="Prism XE2 Trial" href="https://downloads.embarcadero.com/free/prism" target="_blank">Download</a></td>
</tr>
</tbody>
</table>
<p>Nos planejamos disponibilizar todas as informações no site em breve. O anúncio oficial das ferramentas e do FireMonkey será feito em breve também. Nós achamos que vocês iriam gostar de ter acesso aos softwares um pouco mais cedo.</p>
<p>Agora é hora de se divertir com as novidades!!!</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/delphi-conference-2011-chamada-para-submissao-de-palestras/" title="Delphi Conference 2011 &#8211; chamada para submissão de palestras">Delphi Conference 2011 &#8211; chamada para submissão de palestras</a></li><li><a href="http://www.andreanolanusse.com/pt/rad-studio-xe2-uma-nova-era-para-desenvolvedores-delphi-e-cbuilder/" title="RAD Studio XE2 uma nova era para desenvolvedores Delphi e C++Builder">RAD Studio XE2 uma nova era para desenvolvedores Delphi e C++Builder</a></li><li><a href="http://www.andreanolanusse.com/pt/exemplos-e-slides-do-delphi-meeting-2011/" title="Exemplos e slides do Delphi Meeting 2011">Exemplos e slides do Delphi Meeting 2011</a></li><li><a href="http://www.andreanolanusse.com/pt/video-de-lancamento-do-delphi-xe-cbuilder-xe-radphp-xe-e-delphi-prism-xe/" title="Vídeo de lançamento da familia XE do Delphi, C++Builder, RadPHP e Delphi Prism">Vídeo de lançamento da familia XE do Delphi, C++Builder, RadPHP e Delphi Prism</a></li><li><a href="http://www.andreanolanusse.com/pt/disponibilizada-nova-versao-do-delphi-xe-cbuilder-xe-delphi-prism-xe-e-radphp-xe/" title="Disponibilizada nova versão do Delphi XE, C++Builder XE, Delphi Prism XE e RadPHP XE">Disponibilizada nova versão do Delphi XE, C++Builder XE, Delphi Prism XE e RadPHP XE</a></li><li><a href="http://www.andreanolanusse.com/pt/desenvolvimento-agil-delphi-xe-cbuilder-xe-delphi-prism-xe-radphp-xe/" title="Desenvolvimento Ágil = Delphi XE + C++Builder XE + Delphi Prism XE + RadPHP XE">Desenvolvimento Ágil = Delphi XE + C++Builder XE + Delphi Prism XE + RadPHP XE</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/disponibilizado-o-trial-datasheet-matriz-de-recursos-e-faq-para-as-versoes-xe2/feed/</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
		<item>
		<title>Vídeo: Delphi XE2 e FireMonkey app no Windows, Mac e iOS</title>
		<link>http://www.andreanolanusse.com/pt/video-delphi-xe2-e-firemonkey-app-no-windows-mac-e-ios/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=video-delphi-xe2-e-firemonkey-app-no-windows-mac-e-ios</link>
		<comments>http://www.andreanolanusse.com/pt/video-delphi-xe2-e-firemonkey-app-no-windows-mac-e-ios/#comments</comments>
		<pubDate>Sun, 07 Aug 2011 19:59:06 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[FireMonkey]]></category>
		<category><![CDATA[Vídeo]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1337</guid>
		<description><![CDATA[<p>Após a primeira parada do RAD Studio XE2 World Tour na Nova Zelândia, vemos por toda a internet excelentes comentários sobre o desenvolvimento de aplicações iOS com Delphi XE2 e FireMonkey, além do suporte a Windows 64-bit e Mac. Existem inúmeras possibilidades com FireMonkey e todos os novos recursos do RAD Studio XE2, todas estas [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Após a primeira parada do RAD Studio XE2 World Tour na Nova Zelândia, vemos por toda a internet excelentes comentários sobre o desenvolvimento de aplicações iOS com Delphi XE2 e <a href="http://www.embarcadero.com/br/products/firemonkey" target="_blank">FireMonkey</a>, além do suporte a Windows 64-bit e Mac.</p>
<p>Existem inúmeras possibilidades com FireMonkey e todos os novos recursos do RAD Studio XE2, todas estas novidades estão sendo apresentadas no RAD Studio XE2 World Tour, no Brasil será realizado o Delphi Tour 2011 como parte do World Tour, garanta já o seu lugar no Delphi Tour 2011, fazendo sua inscrição o quanto antes.</p>
<p>Para que você tenha uma idéia das novidades do RAD Studio XE2 e mate um pouquinho da curiosidade, preparei um vídeo de 5 minutos (em inglês) com um preview do <a href="http://www.embarcadero.com/br/products/delphi" target="_blank">Delphi XE2</a> e aplicações HD no FireMonkey rodando em Windows (64-bit), Mac e iOS, além de usar componentes 3D e animações.</p>
<p style="text-align: center;"><a target="_blank" href="http://www.embarcadero.com/world-tour" class="avia-button  light  red large" ><span class="avia-note">Registre-se hoje mesmo para o Delphi Tour 2011</span></a></p>
<p>&nbsp;</p>
<p style="text-align: center;"><iframe src="http://www.youtube.com/embed/JtFIw2YpuQc?hd=1" frameborder="0" width="560" height="349"></iframe></p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/video-de-lancamento-do-delphi-xe-cbuilder-xe-radphp-xe-e-delphi-prism-xe/" title="Vídeo de lançamento da familia XE do Delphi, C++Builder, RadPHP e Delphi Prism">Vídeo de lançamento da familia XE do Delphi, C++Builder, RadPHP e Delphi Prism</a></li><li><a href="http://www.andreanolanusse.com/pt/usando-expressoes-regulares-em-aplicacoes-firemonkey-com-cbuilder/" title="Usando expressões regulares em aplicações FireMonkey com C++Builder">Usando expressões regulares em aplicações FireMonkey com C++Builder</a></li><li><a href="http://www.andreanolanusse.com/pt/usando-dbexpress-framework-no-windows-e-mac-com-cbuilder/" title="Usando dbExpress Framework no Windows e Mac com C++Builder">Usando dbExpress Framework no Windows e Mac com C++Builder</a></li><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis para download</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/video-delphi-xe2-e-firemonkey-app-no-windows-mac-e-ios/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		</item>
		<item>
		<title>Dicas para a Certificação Delphi Developer #3</title>
		<link>http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dicas-para-a-certificacao-delphi-developer-3</link>
		<comments>http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-3/#comments</comments>
		<pubDate>Mon, 01 Aug 2011 21:42:51 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Certificação]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1330</guid>
		<description><![CDATA[<p>Tratamento de exceção (exception handling) é o tema a ser abordado na terceira dica para a Certificação Delphi Developer. Exceções (exceptions em inglês) são condições que requerem um tratamento especial, o tratamento de exceção fornece uma maneira padrão de lidar com erros, quando utilizado permite que você gerencie os erros quando eles aconteçam e decida [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Tratamento de exceção (exception handling) é o tema a ser abordado na terceira dica para a Certificação Delphi Developer.</p>
<p>Exceções (exceptions em inglês) são condições que requerem um tratamento especial, o tratamento de exceção fornece uma maneira padrão de lidar com erros, quando utilizado permite que você gerencie os erros quando eles aconteçam e decida o que fazer.</p>
<p>A documentação do RAD Studio tem um tópico específico que trata de <i>Exception Handling</i>, invista algum na leitura deste <strong><a title="RAD Studio documentation - Exception Handling" href="http://docwiki.embarcadero.com/RADStudio/en/Exception_handling_Index" target="_blank">tópico</a></strong>,  lendo este tópico você estará melhor preparado para responder as perguntas sobre este tema durante a prova..</p>
<p>Além disso, você pode pensar que pelo fato de usar try..except..end no seu desenvolvimento diário é suficiente para responder as perguntas da prova, a resposta é <strong>NÃO</strong>. O programa de certificação tem um banco de dados com muitas perguntas, a prova irá trazer perguntas sobre diferentes aspectos do tratamento de exceção, como: <a title="Documentação RAD Studio - Reraising exceptions" href="http://docwiki.embarcadero.com/RADStudio/en/Reraising_Exceptions" target="_blank">Propagando (Re-raising) exceções</a>, <a title="Documentação RAD Studio - Silent Exceptions" href="http://docwiki.embarcadero.com/RADStudio/en/Silent_Exceptions" target="_blank">Exceções silenciosas (Silent Exceptions)</a> e mais.</p>
<p>Exceção silenciosa é uma forma de levantar (raise) uma exceção sem mostrar a mensagem de erro, o método padrão para levantar uma exceção mostra a mensagem de erro, mas não é só isso.</p>
<ul>
<li>Todas as exceções silenciosas descendem da exceção padrão <em>EAbort</em>.</li>
<li>Delphi tem uma procedure chamada Abort, o qual automaticamente cria e levanta a exception EAbort</li>
</ul>
<div>Quando o assunto é <i>propagar exceções (re-raising exceptions)</i>, a documentação do RAD Studio documentation oferece uma ótima introdução ao tema.</div>
<div>
<p>Propagar exceção é muito útil quando uma procedure ou função tem que executar alguma código adicional após a exceção acontecer e não pode gerenciar a exceção totalmente.</p>
<p>Por exemplo, a função GetFileList aloca um objeto TStringList e preenche o mesmo com nomes de arquivo que atenda condição de busca de um diretório específico:</p>
</div>
<pre class="brush: delphi">function GetFileList(const Path: string): TStringList;
var
  I: Integer;
  SearchRec: TSearchRec;
begin
  Result := TStringList.Create;
  try
    I := FindFirst(Path, 0, SearchRec);
    while I = 0 do
      begin
          Result.Add(SearchRec.Name);
          I := FindNext(SearchRec);
      end;
  except
      Result.Free;
      raise;
  end;
end;</pre>
<p>GetFileList cria um objeto TStringList e então usa as funções FindFirst e FindNext para inicializá-lo. Se a inicialização falhar, por exemplo porque o diretório é inválido ou porque não há memória suficiente para preencher o string list &#8211; será necessário que GetFileList se desfaça do novo string list. Por esta razão, a inicialização do string list ocorre em um bloco try&#8230;except..statement. Se a exceção ocorrer, a parte do código do except irá destruir o string list e assim propagar a exceção com um raise.</p>
<p>A prova irá além dos aspectos que aqui mencionei. A seguir cinco links que irá lhe ajudar a aprender mais sobre tratamento de exceções:</p>
<ul>
<li><a href="http://www.activedelphi.com.br/modules.php?op=modload&#038;name=News&#038;file=article&#038;sid=574" target="_blank">Try..Except..Finally &#8211; Parte 01</a></li>
<li><a href="http://www.activedelphi.com.br/modules.php?op=modload&#038;name=News&#038;file=article&#038;sid=586" target="_blank">Try..Except..Finally &#8211; Parte 02</a></li>
<li><a href="http://www.activedelphi.com.br/modules.php?op=modload&#038;name=News&#038;file=article&#038;sid=594" target="_blank">Try..Except..Finally &#8211; Parte 03</a></li>
<li><a href="http://docwiki.embarcadero.com/RADStudio/en/Exception_handling_Index" target="_blank">RAD Studio documentation &#8211; Exception Handling</a></li>
<li><a href="http://www.delphibasics.co.uk/Article.asp?Name=Exceptions" target="_blank">Delphi Basic &#8211; Exception handling in your code</a></li>
<li><a href="http://www.delphibasics.co.uk/RTL.asp?Name=Raise" target="_blank">Delphi Basic &#8211; Raise</a></li>
</ul>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/video-preparatorio-para-a-certificacao-delphi/" title="Vídeo: Preparatório para a Certificação Delphi">Vídeo: Preparatório para a Certificação Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/webinar-preparatorio-para-a-certificacao-delphi/" title="Webinar preparatório para a Certificação Delphi">Webinar preparatório para a Certificação Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-2/" title="Dicas para a Certificação Delphi Developer #2">Dicas para a Certificação Delphi Developer #2</a></li><li><a href="http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-1/" title="Dicas para a Certificação Delphi Developer #1">Dicas para a Certificação Delphi Developer #1</a></li><li><a href="http://www.andreanolanusse.com/pt/nova-certificacao-delphi-anuncio-oficial/" title="Nova Certificação Delphi &#8211; Anúncio oficial">Nova Certificação Delphi &#8211; Anúncio oficial</a></li><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-3/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Dicas para a Certificação Delphi Developer #2</title>
		<link>http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dicas-para-a-certificacao-delphi-developer-2</link>
		<comments>http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-2/#comments</comments>
		<pubDate>Tue, 14 Jun 2011 17:26:32 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Certificação]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1298</guid>
		<description><![CDATA[<p>Vamos agora a segunda dica para a Certificação Delphi Developer que é sobre constructor. Todo desenvolvedor Delphi deveria saber que toda class teem um método construtor (Constructor), o qual é used para criar objects. A documentação do RAD Studio descreve Constructor assim: A constructor is a special method that creates and initializes instance objects. The declaration [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Vamos agora a segunda dica para a Certificação Delphi Developer que é sobre constructor.</p>
<p>Todo desenvolvedor Delphi deveria saber que toda class teem um método construtor (<em><strong>Constructor</strong></em>), o qual é used para criar objects. A documentação do RAD Studio descreve <a href="http://docwiki.embarcadero.com/RADStudio/en/Methods#Constructors" target="_blank">Constructor</a> assim:</p>
<blockquote><p>A constructor is a special method that creates and initializes instance objects. The declaration of a constructor looks like a procedure declaration, but it begins with the word <em><strong>constructor</strong></em>.</p></blockquote>
<p>A convenção do Delphi nomeia o construtor como Create por padrão, uma classe pode ter mais de um construtor, mas na maioria das vezes vemos apenas um. Assim sendo está claro que a palavra chave <em><strong>constructor</strong></em> define o construtor, assim sendo você pode nomeá-lo como quiser. Existem várias situações onde será necessário o uso de mais de um construtor, e usar múltiplos nomes ajuda a ter um código mais legível e fácil de manter. O exemplo abaixo tem 7 construtores usando três nomes diferentes: Create, New e Update:</p>
<pre class="brush: delphi">  TMyClass = class
  public
    name   : string;
    constructor Create; overload;   // Este constructor é o default
    constructor Create(name : string); overload;
    constructor Create(name : string; age : Integer); overload;
    constructor New(name : string);overload;
    constructor New(name : string; age : Integer);overload;
   constructor Update(name : string);overload;
   constructor Update(name : string; age : Integer);overload;</pre>
<pre class="brush: delphi">  end;</pre>
<pre class="brush: delphi">A class TMyClass pode ser instanciada através de um dos construtores abaixo:

  TMyClass.Create;
  TMyClass.Create('Mike');
  TMyClass.Create('Mike', 50);
  TMyClass.New('Mike');
  TMyClass.New('Mike', 50);
  TMyClass.Update('Mike');
  TMyClass.Update('Mike', 30);</pre>
<p>Há mais que aprender sobre construtores, para começar sugiro os seguintes links:</p>
<ul>
<li><a href="http://docwiki.embarcadero.com/RADStudio/en/Methods" target="_blank">Documentação do RAD Studio &#8211; tópico Method</a></li>
<li><a href="http://www.delphibasics.co.uk/RTL.asp?Name=Constructor" target="_blank">Delphi Basic &#8211; Constructor</a></li>
</ul>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-3/" title="Dicas para a Certificação Delphi Developer #3">Dicas para a Certificação Delphi Developer #3</a></li><li><a href="http://www.andreanolanusse.com/pt/video-preparatorio-para-a-certificacao-delphi/" title="Vídeo: Preparatório para a Certificação Delphi">Vídeo: Preparatório para a Certificação Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/webinar-preparatorio-para-a-certificacao-delphi/" title="Webinar preparatório para a Certificação Delphi">Webinar preparatório para a Certificação Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-1/" title="Dicas para a Certificação Delphi Developer #1">Dicas para a Certificação Delphi Developer #1</a></li><li><a href="http://www.andreanolanusse.com/pt/nova-certificacao-delphi-anuncio-oficial/" title="Nova Certificação Delphi &#8211; Anúncio oficial">Nova Certificação Delphi &#8211; Anúncio oficial</a></li><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Dicas para a Certificação Delphi Developer #1</title>
		<link>http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-1/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dicas-para-a-certificacao-delphi-developer-1</link>
		<comments>http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-1/#comments</comments>
		<pubDate>Fri, 10 Jun 2011 20:48:31 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Certificação]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1293</guid>
		<description><![CDATA[<p>Após 3 dias do lançamento do novo  Programa de Certificação Delphi, vários desenvolvedores Delphi ao redor do mundo se tornaram Certified Delphi Developer. A fim de motivar outros desenvolvedores, decidi começar a publicar aqui no blog dicas para o programa de certificação, o qual tem o objetivo lhe ajudar na preparação para as provas. O [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Após 3 dias do lançamento do novo  <a title="Certification Center" href="http://www.embarcadero.com/certification" target="_blank">Programa de Certificação Delphi</a>, vários desenvolvedores Delphi ao redor do mundo se tornaram <a href="www.embarcadero.com/certification/delphi-developer" target="_blank">Certified Delphi Developer</a>.</p>
<p>A fim de motivar outros desenvolvedores, decidi começar a publicar aqui no blog dicas para o programa de certificação, o qual tem o objetivo lhe ajudar na preparação para as provas. O guia de estudo (Study Guide) para a certificação Developer é o guia oficial e traz todas as informações que você precisa para estar preparado para a prova. As dicas que começarei a publicar devem ser consideradas como um material complementar e não substituirá os Study Guides.</p>
<p>Eu não estarei publicando perguntas e/ou resposta relacionadas a prova, o objetivo é ajudar você a se preparar para a prova, aprender mais sobre Delphi, melhorar suas qualidades como desenvolvedor e aumentar suas chances de se tornar um profissional Delphi Developer Certified.</p>
<p>A prova é inglês, assim sendo é necessário o conhecimento do idioma, estarei obviamente trazendo explicações em português, mas também apontando para materiais em ambos idiomas, especialmente para a documentação do Delphi que é uma das principais fontes de estudo.</p>
<p>Para começar, vamos aprender sobre o tipo de dado System.RawByteString e aprimorar seus conhecimentos sobre o suporte a Unicode, você poderá ser questionado na prova de forma direta ou indireta sobre este tema.</p>
<h1>System.RawByteString</h1>
<p>RawByteString é um dos novos tipos de String incorporados no Delphi 2009 por causa do suporte a Unicode. RawByteString é um AnsiString que não tem code page (código de página) definido como padrão, cada string em Delphi esta asociada a um code page. A runtime library usa esta informação para converter e manipular de forma segura conjuntos de caracteres internacionais. RawByteString pode ser usado como um tipo de variável para armazenar BLOB e deve ser usado como code page agnóstico em parâmetro métodos.</p>
<p>A documentação do RAD Studio (em inglês) descreve <a title="System.RawByteString description" href="http://docwiki.embarcadero.com/VCL/en/System.RawByteString" target="_blank">RawByteString</a> assim:</p>
<blockquote><p>Enables the passing of string data of any code page without doing any codepage conversions.</p>
<p><strong>RawByteString</strong> enables the passing of string data of any code page without doing any codepage conversions. The purpose of RawByteString is to reduce the need for multiple overloads of procedures that read string data. This means that parameters of routines that process strings without regard for the string&#8217;s code page should typically be of type <strong>RawByteString</strong>.</p>
<p>RawByteString should only be used as a parameter type, and only in routines which otherwise would need multiple overloads for AnsiStrings with different codepages. Such routines need to be written with care for the actual codepage of the string at run time.</p>
<p>In general, it is recommended that string processing routines should simply use &#8220;string&#8221; as the string type. Declaring variables or fields of type <strong>RawByteString</strong> should rarely, if ever, be done, because this practice can lead to undefined behavior and potential data loss.</p></blockquote>
<p>Abaixo, 4 links que eu recomendo para leitura:</p>
<ul>
<li><a href="http://www.livrariasaraiva.com.br/produto/2853736" target="_blank">Recursos Avançados do Delphi 2009</a> &#8211; Capitulo sobre Unicode</li>
<li><a href="http://www.embarcadero.com/images/dm/technical-papers/delphi-unicode-migration.pdf" target="_blank">Delphi Unicode Migration for Mere Mortals: Stories and Advice from the Front Lines</a></li>
<li><a href="http://www.micro-isv.asia/2008/08/using-rawbytestring-effectively/" target="_blank">Using RawByteString Effectively</a></li>
<li><a href="http://docwiki.embarcadero.com/RADStudio/en/String_Types" target="_blank">RAD Studio Documentation &#8211; String Types (Delphi) &#8211; already mentioned on the Study Guide</a></li>
</ul>
<p>Com estas informações você estará preparado para responder perguntas relacionadas a RawByteString e Unicode, e o mais importante aprender mais sobre Delphi.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-3/" title="Dicas para a Certificação Delphi Developer #3">Dicas para a Certificação Delphi Developer #3</a></li><li><a href="http://www.andreanolanusse.com/pt/video-preparatorio-para-a-certificacao-delphi/" title="Vídeo: Preparatório para a Certificação Delphi">Vídeo: Preparatório para a Certificação Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/webinar-preparatorio-para-a-certificacao-delphi/" title="Webinar preparatório para a Certificação Delphi">Webinar preparatório para a Certificação Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-2/" title="Dicas para a Certificação Delphi Developer #2">Dicas para a Certificação Delphi Developer #2</a></li><li><a href="http://www.andreanolanusse.com/pt/nova-certificacao-delphi-anuncio-oficial/" title="Nova Certificação Delphi &#8211; Anúncio oficial">Nova Certificação Delphi &#8211; Anúncio oficial</a></li><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-1/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Nova Certificação Delphi &#8211; Anúncio oficial</title>
		<link>http://www.andreanolanusse.com/pt/nova-certificacao-delphi-anuncio-oficial/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=nova-certificacao-delphi-anuncio-oficial</link>
		<comments>http://www.andreanolanusse.com/pt/nova-certificacao-delphi-anuncio-oficial/#comments</comments>
		<pubDate>Tue, 07 Jun 2011 08:06:50 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Certificação]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1286</guid>
		<description><![CDATA[<p>Hoje é um dia muito importante para a comunidade Delphi, hoje nós da Embarcadero anunciamos o novo Programa de Certificação Delphi tão esperado pela comunidade Delphi. Milhões de desenvolvedores Delphi terão a oportunidade de demonstrar suas habilidades e conhecimento aos seus pares, a comunidade de desenvolvedores e potenciais empregadores. O novo programa de certificação é muito mais acessível que a [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class="size-large wp-image-1289 aligncenter" title="Certification Banner" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/06/Certification-Banner-950x201.jpg" alt="" width="585" height="124" /></p>
<p>Hoje é um dia muito importante para a comunidade Delphi, hoje nós da Embarcadero anunciamos o novo Programa de Certificação Delphi tão esperado pela comunidade Delphi. Milhões de desenvolvedores Delphi terão a oportunidade de demonstrar suas habilidades e conhecimento aos seus pares, a comunidade de desenvolvedores e potenciais empregadores.</p>
<p>O novo programa de certificação é muito mais acessível que a certificação anterior, teve a colaboração de vários experts em Delphi ao redor do mundo e difere da certificação anterior onde tinhamos apenas um nível de certificação &#8211; o novo programa de certificação está dividido em dois níveis, conhecidos como Developer e Master Developer.</p>
<p>Já estão disponíveis os Study Guides (guias de estudos) para ambas as certificações; o study guide traz informações sobre os tópicos que serão avaliados durante a prova, links para recursos online e uma lista de livros recomendados para a preparação. Para cada prova você terá 60 minutos para responder 60 perguntas, ao final você saberá qual foi sua pontuação e se passar, receberá o certificado em formato PDF no seu email.</p>
<p>A prova para se tornar Delphi Developer pode ser adquirida através da loja online da Embarcadero a um custo de US$49 e não é moderada, ou seja, você pode fazer a prova de qualquer lugar. Já a prova para se tornar Delphi Master Developer custa US$149 e deve ser adquirida através de um de nossos parceiros. Você terá de agendar a sua prova em um dos <a href="http://www.embarcadero.com/partners/certification" target="_blank">Centros de Certificação</a>, pois esta prova deverá ser assistida por um dos nossos parceiros.</p>
<h2>Certificação Delphi Developer</h2>
<p><img class="size-full wp-image-544 alignleft" style="margin: 4px;" title="Delphi Developer Certification emblem" src="http://www.andreanolanusse.com/blogen/wp-content/uploads/2011/06/DCert_emblem.jpg" alt="" width="81" height="137" /></p>
<p>A prova para se tornar <em>Delphi Certified Developer</em> testa conhecimentos gerais na linguagem delphi, incluindo sintaxe da linguagem, técnicas de programação e conceitos relacionados ao desenvolvimento de aplicações para banco de dados.</p>
<p>Se você possui uma licença registrada do Delphi XE ou RAD Studio XE, <strong>você poderá fazer uma prova Developer gratuitamente</strong>, mais informações na página do Certification Center.</p>
<p>A prova está organizada em 12 seções:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<ul>
<li>Delphi Fundamentals</li>
<li>Data types,        variables, and Constants</li>
<li>Procedures and        Functions</li>
<li>Classes and Objects</li>
<li>Object Interfaces</li>
<li>Generics, Attributes and Anonymous Method</li>
</ul>
</td>
<td>
<ul>
<li>Database Concepts</li>
<li>Standards Routines        and I/O</li>
<li>Libraries and        Packages</li>
<li>Memory Management</li>
<li>Exceptions and        Assertions</li>
<li>Database Concepts</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2>Certificação Delphi Master Developer</h2>
<p><a href="http://www.andreanolanusse.com/blogen/wp-content/uploads/2011/06/MDCert_emblem.jpg"><img class="alignleft size-full wp-image-545" style="margin: 4px;" title="Delphi Master Developer Certification emblem" src="http://www.andreanolanusse.com/blogen/wp-content/uploads/2011/06/MDCert_emblem.jpg" alt="" width="83" height="142" /></a>A prova para se tornar <em>Delphi Certified Master Developer</em> testa conhecimento avançados na linguagem Delphi, seus fundamentos e sintaxe avançada da linguagem, técnicas avançadas de programação, uso do IDE, construção de projetos e grupo de projetos, uso e desenvolvimento de componentes, experiência em arquitetura e conhecimento na construção de aplicações desktop, cliente/servidor, Internet e multi-camadas.</p>
<p>A prova é organizada em 12 seções:</p>
<table border="0" cellpadding="0">
<tbody>
<tr>
<td>
<ul>
<li>Delphi XE Interface and Configuration</li>
<li>Delphi VCL and RTL</li>
<li>Working with Components</li>
<li>Delphi Language and Object-Oriented Programming</li>
<li>Database Concepts/Data Access Techniques</li>
<li>dbExpress</li>
<li>DataSnap</li>
</ul>
</td>
<td>
<ul>
<li>Writing DLLs and Packages</li>
<li>Libraries and Packages</li>
<li>Windows Concepts</li>
<li>Component Design Basics</li>
<li>Internet Programming</li>
<li>XML</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<h2>Guias de Estudo para a certificação (Study Guides)</h2>
<p>Minha recomendação para os interessados em se tornar <em>Delphi Certified</em> é começar lendo o Study Guide, ele é o seu ponto de partida na preparação para se tornar <em>Delphi Certified Developer</em> ou <em>Master Developer</em>.</p>
<p>Caso você esteja em dúvida qual certificação tentar primeiro, eu recomendo que você comece pela certificação <em>Developer</em>, ao final você terá uma boa idéia de como funciona todo o processo, desde a preparação até a prova. Se você preferir, pode ir direto a certificação <em>Master Developer</em>, que requer conhecimento avançado em diversos aspectos do desenvolvimento Delphi e isso requer conhecimento adicional e maior tempo de preparação.</p>
<p>Em ambos os casos, os nossos <a href="http://www.embarcadero.com/partners/training" target="_blank">parceiros de treinamento</a> oferecem vários treinamentos que lhe ajudarão na preparação para a certificação.</p>
<p>Ao passar na prova, você poderá usar o logo &#8220;Delphi Certified&#8221; da respectiva certificação em sua assinatura de email, website, cartão de visita, etc., além de outros benefícios.</p>
<p>&nbsp;</p>
<h2>Certification Center</h2>
<p>A página Certification Center contém todas as informações que você precisa. Eu convido você a visitar os links abaixos e por favor leia o Study Guides e FAQ (Perguntas frequentes), caso após ler as informações do Certification Center você ainda tiver alguma dúvida, por favor envie sua pergunta para <a href="mailto:certification@embarcadero.com">certification@embarcadero.com</a>.</p>
<ul>
<li><a href="http://www.embarcadero.com/certification" target="_blank">Certification Center Home Page</a>
<ul>
<li><a href="http://www.embarcadero.com/certification/delphi-developer" target="_blank">Delphi Developer Certification Page</a></li>
<li><a href="http://www.embarcadero.com/certification/delphi-master" target="_blank">Delphi Master Developer Certification Page</a></li>
<li><a href="http://www.embarcadero.com/certification/delphi-certification-faqs" target="_blank">Delphi Certification &#8211; Perguntas frequentes</a></li>
<li><a href="http://www.embarcadero.com/certification/where-to-buy" target="_blank">Onde comprar</a></li>
</ul>
</li>
</ul>
<p>&nbsp;</p>
<h2>Webinar sobre a certificação</h2>
<p>Em breve estaremos divulgando a data do webinar em português sobre o Programa de Certificação Delphi, onde estarei comentando sobre:</p>
<ul>
<li>
<div>Visão geral do programa de certificação</div>
</li>
<li>
<div>Níveis da certificação: Delphi Developer e Delphi Master</div>
</li>
<li>
<div>Preparação para a prova</div>
</li>
<li>
<div>Dicas para passar na prova</div>
</li>
<li>
<div>Benefícios ao se tornar um desenvolvedor certificado</div>
</li>
<li>
<div>Tirando dúvidas ao vivo para aqueles que estiverem participando do webinar</div>
</li>
</ul>
<p>Enquanto isso, comece a se preparar para a certificação, divirta-se e boa sorte na prova.</p>
<p>&nbsp;</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-3/" title="Dicas para a Certificação Delphi Developer #3">Dicas para a Certificação Delphi Developer #3</a></li><li><a href="http://www.andreanolanusse.com/pt/video-preparatorio-para-a-certificacao-delphi/" title="Vídeo: Preparatório para a Certificação Delphi">Vídeo: Preparatório para a Certificação Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/webinar-preparatorio-para-a-certificacao-delphi/" title="Webinar preparatório para a Certificação Delphi">Webinar preparatório para a Certificação Delphi</a></li><li><a href="http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-2/" title="Dicas para a Certificação Delphi Developer #2">Dicas para a Certificação Delphi Developer #2</a></li><li><a href="http://www.andreanolanusse.com/pt/dicas-para-a-certificacao-delphi-developer-1/" title="Dicas para a Certificação Delphi Developer #1">Dicas para a Certificação Delphi Developer #1</a></li><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/nova-certificacao-delphi-anuncio-oficial/feed/</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Curtindo a comunidade Delphi Brasil no Facebook</title>
		<link>http://www.andreanolanusse.com/pt/curtindo-a-comunidade-delphi-brasil-no-facebook/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=curtindo-a-comunidade-delphi-brasil-no-facebook</link>
		<comments>http://www.andreanolanusse.com/pt/curtindo-a-comunidade-delphi-brasil-no-facebook/#comments</comments>
		<pubDate>Sat, 14 May 2011 08:44:49 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1277</guid>
		<description><![CDATA[<p>Comunidade Delphi, Recentemente devido a mudanças no Facebook mudamos a comunidade Delphi Brasil no Facebook, com isso o endereço da comuniade passou a ser http://www.facebook.com/DelphiBrasil. Esta URL personalizada facilita a divulgação da comunidade para os desenvolvedores Delphi brasileiros. Outra forma de ajudar é curtindo a página, conforme abaixo. E não esqueça o novo link da [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p><a href="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/01/DelphiBrasil.png"><img class="size-medium wp-image-1196 alignleft" title="Delphi Brasil no Facebook" src="http://www.andreanolanusse.com/pt/wp-content/uploads/2011/01/DelphiBrasil-175x175.png" alt="" width="122" height="122" /></a>Comunidade Delphi,</p>
<p>Recentemente devido a mudanças no Facebook mudamos a comunidade Delphi Brasil no Facebook, com isso o endereço da comuniade passou a ser <a href="http://www.facebook.com/DelphiBrasil" target="_blank">http://www.facebook.com/DelphiBrasil</a>.</p>
<p>Esta URL personalizada facilita a divulgação da comunidade para os desenvolvedores Delphi brasileiros.</p>
<p>Outra forma de ajudar é curtindo a página, conforme abaixo.</p>
<div id="fb-root"></div>
<p><script src="http://connect.facebook.net/en_US/all.js#xfbml=1"></script><fb:like-box href="http://www.facebook.com/DelphiBrasil" width="450" show_faces="true" stream="false" header="true"></fb:like-box></p>
<p>E não esqueça o novo link da comunidade Delphi Brasi no Facebook é <a href="http://www.facebook.com/DelphiBrasil" target="_blank">http://www.facebook.com/DelphiBrasil</a>.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis para download</a></li><li><a href="http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/" title="White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7">White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7</a></li><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/vagas-esgotadas-para-o-delphi-conference-2011/" title="Vagas esgotadas para o Delphi Conference 2011">Vagas esgotadas para o Delphi Conference 2011</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/curtindo-a-comunidade-delphi-brasil-no-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dbExpress suporte ao MySQL no Delphi 2010 e XE</title>
		<link>http://www.andreanolanusse.com/pt/dbexpress-suporte-ao-mysql-no-delphi-2010-e-xe/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=dbexpress-suporte-ao-mysql-no-delphi-2010-e-xe</link>
		<comments>http://www.andreanolanusse.com/pt/dbexpress-suporte-ao-mysql-no-delphi-2010-e-xe/#comments</comments>
		<pubDate>Wed, 04 May 2011 09:30:02 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1273</guid>
		<description><![CDATA[<p>Parece ser frequente as dúvidas relacionadas a utilização do driver dbExpress para MySQL, na grande maioria usuários das versões 2010 e XE do Delphi. O arquivo readme.html que está localizado no diretório onde o Delphi foi instalado, documenta as versões de MySQL e dos outros bancos suportados pelo dbExpress. No caso do MySQL o arquivo [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Parece ser frequente as dúvidas relacionadas a utilização do driver dbExpress para MySQL, na grande maioria usuários das versões 2010 e XE do Delphi.</p>
<p>O arquivo readme.html que está localizado no diretório onde o Delphi foi instalado, documenta as versões de MySQL e dos outros bancos suportados pelo dbExpress. No caso do MySQL o arquivo inclui as combinações de versões de server e bilbiotecas clientes suportadas, infelizmente o MySQL a cada nova versão traz inúmeras alterações nas API&#8217;s e acabe dificultando uma pouco nosso trabalho.</p>
<p>Abaixo informações que você deve saber.</p>
<p><strong>Versões de servidores MySQL oficialmente suportadas e testadas.</strong></p>
<p>MySQL 5.1, 5.0.27, 4.1 (Todas) (Driver dbxMYS.dll, Client libmysql.dll)</p>
<p><strong>Combinação das versões de servidores e clientes MySQL que foram testadas</strong></p>
<ul>
<li>LibMySQL.dll (5.1.XX) Client  - DBXMys.dll  MySQL 4.0.XX Server</li>
<li>LibMySQL.dll (5.1.XX) Client  - DBXMys.dll  MySQL 5.0.XX Server</li>
<li>LibMySQL.dll (5.1.XX) Client  - DBXMys.dll  MySQL 5.1.XX Server</li>
</ul>
<p>Em resumo, você tem que instalar a versão do cliente do MySQL 5.1.xx para que sua aplicação cliente funcione com servidores MySQL 4.0.XX, 5.0.XX e 5.1XX</p>
<p><strong>O que fazer caso você tenha outras versões do Delphi na mesma máquina?</strong></p>
<p><!-- p.p1 {margin: 5.0px 0.0px 5.0px 0.0px; font: 12.0px 'Times New Roman'} -->Caso isso aconteça o IDE poderá carregar uma das versões antigas do driver dbExpress para MySQL, isso acontece porque o diretório bin da versão anterior do Delphi está a frente na variável de sistema PATH, para resolver este problema, no menu Tools -&gt; Options -&gt; Environment Variables adicione o PATH da versão atual do Delphi a frente de todas as variáveis. Lembre-se que casa você use a versão anterior instalada na sua máquina, você deverá atualiza a variável de ambiente PATH novamente.</p>
<p>Espero que essas dicas tenham ajudado.</p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis para download</a></li><li><a href="http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/" title="White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7">White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7</a></li><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/vagas-esgotadas-para-o-delphi-conference-2011/" title="Vagas esgotadas para o Delphi Conference 2011">Vagas esgotadas para o Delphi Conference 2011</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/dbexpress-suporte-ao-mysql-no-delphi-2010-e-xe/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
		<item>
		<title>Certificação Delphi &#8211; Programa Beta</title>
		<link>http://www.andreanolanusse.com/pt/certificacao-delphi-programa-beta/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=certificacao-delphi-programa-beta</link>
		<comments>http://www.andreanolanusse.com/pt/certificacao-delphi-programa-beta/#comments</comments>
		<pubDate>Mon, 25 Apr 2011 22:16:11 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/pt/?p=1267</guid>
		<description><![CDATA[<p>Olá comunidade Delphi, Durante os últimos 3 meses temos trabalhando em um importante projeto que irá ajudar os desenvolvedores Delphi a aprimorar seus conhecimentos e habilidades, assim como ser reconhecidos no mercado. Estou falando do programa de Certificação Delphi. O programa irá começar com dois níveis de certificação: Developer &#8211; A certificação Delphi XE Developer [...]</p><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Olá comunidade Delphi,</p>
<p>Durante os últimos 3 meses temos trabalhando em um importante projeto que irá ajudar os desenvolvedores Delphi a aprimorar seus conhecimentos e habilidades, assim como ser reconhecidos no mercado. Estou falando do programa de Certificação Delphi.</p>
<p>O programa irá começar com dois níveis de certificação:</p>
<ul>
<li><strong>Developer</strong> &#8211; A certificação Delphi XE Developer testa seus conhecimentos nos fundamentos da linguagem Delphi, assim como os fundamentos no acesso a banco de dados em Delphi. O teste foi desenhado para que você possa demonstrar as competências básicas usando Delphi.</li>
<li><strong>Master</strong> &#8211; A certificação Delphi XE Master testa o seu verdadeiro domínio em Delphi, você será testado em técnicas complexas de programação Delphi, desenvolvimento de componentes, e outros tópicos avançados.</li>
</ul>
<p>Neste momento estamos abrindo o beta tester para a certificação Master, nosso objetivo é validar o teste para a certificação &#8220;Delphi Master&#8221;.</p>
<p>Nós solicitamos pelo menos dois anos de experiência em desenvolvimento de software com Delphi e que esteja familiarizado com as melhorias em Delphi desde a versão 7, a fim de ser qualificado para participar neste programa beta.</p>
<p>As perguntas do teste estão agrupadas de acordo com as seguintes áreas de conhecimento:</p>
<table>
<tbody>
<tr>
<td>
<ul>
<li>Delphi XE Interface and Configuration</li>
<li>Delphi VCL and RTL</li>
<li>Delphi Language and Object-Oriented Programming</li>
<li>Component Design Basics</li>
<li>Working with Components</li>
<li>Database Concepts/Data Access Techniques</li>
<li>dbExpress</li>
</ul>
</td>
<td>
<ul>
<li>DataSnap</li>
<li>Writing DLLs and Packages</li>
<li>Libraries and Packages</li>
<li>Windows Concepts</li>
<li>Internet Programming</li>
<li>XML</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p>O objetivo nesta fase de validação não é testar se você passou ou não no teste. O objetivo aqui é eliminar qualquer pergunta não bem formulada ou questionável. Isto significa que se todos ou quase todos errarem uma pergunta &#8211; por definição ela é ruim e precisa ser revista.</p>
<p>Se você está interessado em participar, registre-se <strong><a title="Embarcadero Beta registration" href="http://beta.embarcadero.com" target="_blank">aqui</a></strong></p>
<h2  class="related_post_title">Posts relacionados</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/pt/hora-de-seguir-em-frente/" title="Hora de seguir em frente">Hora de seguir em frente</a></li><li><a href="http://www.andreanolanusse.com/pt/apresentacoes-do-delphi-conference-2011-disponivel-para-download/" title="Apresentações do Delphi Conference 2011 disponíveis para download">Apresentações do Delphi Conference 2011 disponíveis para download</a></li><li><a href="http://www.andreanolanusse.com/pt/white-paper-razoes-para-migrar-para-o-delphi-xe2-o-que-voce-pode-ter-perdido-desde-o-delphi-7/" title="White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7">White Paper: Razões para migrar para o Delphi XE2 | O que você pode ter perdido desde o Delphi 7</a></li><li><a href="http://www.andreanolanusse.com/pt/copyreadertoclientdataset-blob-e-a-mensagem-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob e a mensagem &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/" title="Conectando ao PostgreSQL com dbExpress ODBC driver">Conectando ao PostgreSQL com dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/pt/vagas-esgotadas-para-o-delphi-conference-2011/" title="Vagas esgotadas para o Delphi Conference 2011">Vagas esgotadas para o Delphi Conference 2011</a></li></ul><p><a href="http://www.andreanolanusse.com/pt">Andreano Lanusse | Tecnologia e Desenvolvimento de Software</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/pt/certificacao-delphi-programa-beta/feed/</wfw:commentRss>
		<slash:comments>21</slash:comments>
		</item>
	</channel>
</rss>

