<?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; Technology and Software Development</title>
	<atom:link href="http://www.andreanolanusse.com/en/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.andreanolanusse.com/en</link>
	<description>Where Andreano Lanusse talk about technology, software development, programming techniques, databases, games and more through articles, tutorials and videos</description>
	<lastBuildDate>Sat, 04 Feb 2012 01:01:56 +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>FireMonkey 3D Text Editor</title>
		<link>http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=firemonkey-3d-text-editor</link>
		<comments>http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/#comments</comments>
		<pubDate>Sat, 04 Feb 2012 00:58:59 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Embarcadero]]></category>
		<category><![CDATA[FireMonkey]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=782</guid>
		<description><![CDATA[<p>If you want to learn more about FireMonkey 3D applications, join me on February 14th for the Delphi Birthday Celebration webinar. During this webinar we will have several Delphi experts and members of our R&#38;D team showing great technologies using Delphi. I will be there as well showing something that I have been working for a [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>If you want to learn more about <a href="http://www.embarcadero.com/products/firemonkey" target="_blank">FireMonkey</a> 3D applications, join me on February 14th for the <a href="http://forms.embarcadero.com/forms/AMUSCA1202DelphiBDayCelebration2-14" target="_blank">Delphi Birthday Celebration webinar</a>.</p>
<p>During this webinar we will have several Delphi experts and members of our R&amp;D team showing great technologies using Delphi. I will be there as well showing something that I have been working for a while, the FireMonkey 3D Text Editor, during the webinar I will show you how it was created and share many tips &amp; tricks related with FireMonkey development.</p>
<p>Bellow some screen shots of what I&#8217;m planning to show:</p>
<div id="attachment_783" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2012/02/3DEditor-IDE.png"><img class="size-medium wp-image-783 " title="3D Text Editor in the IDE" src="http://www.andreanolanusse.com/en/wp-content/uploads/2012/02/3DEditor-IDE-300x187.png" alt="" width="300" height="187" /></a><p class="wp-caption-text">3D Text Editor in the IDE</p></div>
<p>&nbsp;</p>
<div id="attachment_784" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2012/02/3DEditor-App.png"><img class="size-medium wp-image-784" title="The 3D Text Editor running on Windows" src="http://www.andreanolanusse.com/en/wp-content/uploads/2012/02/3DEditor-App-300x187.png" alt="" width="300" height="187" /></a><p class="wp-caption-text">The 3D Text Editor running on Windows, it runs on Mac as well <img src='http://www.andreanolanusse.com/en/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p></div>
<p>&nbsp;</p>
<div id="attachment_785" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2012/02/3D-exported-image.png"><img class="size-medium wp-image-785" title="Image generated by the 3D Text Editor" src="http://www.andreanolanusse.com/en/wp-content/uploads/2012/02/3D-exported-image-300x158.png" alt="" width="300" height="158" /></a><p class="wp-caption-text">Image generated by the 3D Text Editor</p></div>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/" title="Using Regular Expression on C++Builder FireMonkey Application">Using Regular Expression on C++Builder FireMonkey Application</a></li><li><a href="http://www.andreanolanusse.com/en/using-dbexpress-framework-on-windows-and-mac-with-cbuilder/" title="Using dbExpress Framework on Windows and Mac with C++Builder">Using dbExpress Framework on Windows and Mac with C++Builder</a></li><li><a href="http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/" title="Connecting to PostgreSQL through dbExpress ODBC driver">Connecting to PostgreSQL through dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/en/creating-xml-files-with-delphi-and-firemonkey-on-mac/" title="Creating XML files with Delphi and FireMonkey on Mac">Creating XML files with Delphi and FireMonkey on Mac</a></li><li><a href="http://www.andreanolanusse.com/en/video-delphi-xe2-and-firemonkey-app-on-windows-mac-and-ios/" title="Video: Delphi XE2 and FireMonkey app on Windows, Mac and iOS">Video: Delphi XE2 and FireMonkey app on Windows, Mac and iOS</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Software Development, technologies and other matters #5</title>
		<link>http://www.andreanolanusse.com/en/software-development-technologies-and-other-matters-5/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=software-development-technologies-and-other-matters-5</link>
		<comments>http://www.andreanolanusse.com/en/software-development-technologies-and-other-matters-5/#comments</comments>
		<pubDate>Mon, 23 Jan 2012 12:00:44 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Monthly Summary]]></category>
		<category><![CDATA[Embarcadero]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=779</guid>
		<description><![CDATA[<p>My monthly summary is back after long time, let&#8217;s try to keep this up to date every month Jailbreak for iPhone 4S and iPad 2 finally available, hackers had a lot of work to break the new Apple A5 devices. If you are interested to know how to use the Cloud to scale your applications, [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>My monthly summary is back after long time, let&#8217;s try to keep this up to date every month <img src='http://www.andreanolanusse.com/en/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<ul>
<li><a href="http://greenpois0n.com/?page_id=18" target="_blank">Jailbreak</a> for iPhone 4S and iPad 2 finally available, hackers had a lot of work to break the new Apple A5 devices.</li>
<li>If you are interested to know how to use the Cloud to scale your applications, the Netflix team posted a really nice article sharing their experience with Amazon <a href="http://techblog.netflix.com/2012/01/auto-scaling-in-amazon-cloud.html" target="_blank">&#8220;Auto Scaling in the Amazon Cloud&#8221;</a></li>
<li>I&#8217;m a iPhone fun, maybe switching for Nokia Lumia 900 (Windows Phone) in the future, and Android is not part of my plan. A few weeks ago I saw this article &#8220;<a href="http://parislemon.com/post/15604811641/why-i-hate-android" target="_blank">Why I Hate Android</a>&#8220;, it is at least interesting.</li>
<li>The browser war continues, <a href="http://mashable.com/2012/01/03/internet-explorer-chrome-browser-wars/" target="_blank">Chrome is winning</a> and IE still the number one, not sure for how long</li>
<li><strong>Delphi Open Source Project of the Month</strong> &#8211; <a href="http://code.google.com/p/delphi-orm/" target="_blank">DORM</a> is an ORM framework for Delphi created by <a href="http://danieleteti.it" target="_blank">Daniele Teti</a></li>
<li>If you need to convert your Delphi and C++Builder VCL projects to FireMonkey, check out this solution called <a href="http://www.midaconverter.com/" target="_blank">Mida</a> a commercial product that convert VCL projects to FireMonkey</li>
<li>TMS Software releases <a href="http://www.tmssoftware.com/site/tmsfmxiw.asp" target="_blank">TMS Instrumentation Workshop</a> for FireMonkey, a set of components for instrumentation and multimedia applications for FireMonkey, it support Windows, Mac and iOS</li>
<li>Great opportunity for Embarcadero customers - <a href="http://www.embarcadero.com/bogo-info" target="_blank">BOGO</a> is back!!! &#8211; Buy One Developer Tool, Get a Second Tool FREE!</li>
<li>Great <a href="http://members.adug.org.au/2011/12/15/how-to-create-your-own-firemonkeyimage-filtereffect-to-use-with-firemonkey/" target="_blank">post</a> showing how to create FireMonkey shader effects</li>
</ul>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/amazon-web-service-aws-is-the-first-choice-for-php-developers/" title="Amazon Web Services (AWS) is the first choice for PHP Developers">Amazon Web Services (AWS) is the first choice for PHP Developers</a></li><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/" title="Using Regular Expression on C++Builder FireMonkey Application">Using Regular Expression on C++Builder FireMonkey Application</a></li><li><a href="http://www.andreanolanusse.com/en/using-dbexpress-framework-on-windows-and-mac-with-cbuilder/" title="Using dbExpress Framework on Windows and Mac with C++Builder">Using dbExpress Framework on Windows and Mac with C++Builder</a></li><li><a href="http://www.andreanolanusse.com/en/merry-christmas-and-a-fantastic-2012-to-everybody/" title="Merry Christmas and a fantastic 2012 to everybody">Merry Christmas and a fantastic 2012 to everybody</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/software-development-technologies-and-other-matters-5/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Amazon Web Services (AWS) is the first choice for PHP Developers</title>
		<link>http://www.andreanolanusse.com/en/amazon-web-service-aws-is-the-first-choice-for-php-developers/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=amazon-web-service-aws-is-the-first-choice-for-php-developers</link>
		<comments>http://www.andreanolanusse.com/en/amazon-web-service-aws-is-the-first-choice-for-php-developers/#comments</comments>
		<pubDate>Thu, 12 Jan 2012 08:58:13 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Technology]]></category>
		<category><![CDATA[Cloud]]></category>
		<category><![CDATA[Embarcadero]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=775</guid>
		<description><![CDATA[<p>Today I was reading the article &#8220;Developers will flock to public cloud in 2012&#8243;, which pretty much goes over some of the results of Zend survey with 3,335 developers, and of course if not all of them the majority PHP developers. This survey brings some interesting information, the first one related with the use of [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Today I was reading the article <a href="http://gigaom.com/cloud/developers-will-flock-to-public-cloud-in-2012/" target="_blank">&#8220;Developers will flock to public cloud in 2012&#8243;</a>, which pretty much goes over some of the results of Zend survey with 3,335 developers, and of course if not all of them the majority PHP developers.</p>
<p>This survey brings some interesting information, the first one related with the use of public cloud where 61 percent said they expect to use a public cloud for their projects.</p>
<p><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/zend_survey2012-1.jpg"><img class="aligncenter size-full wp-image-776" title="Use of public Cloud - Zend Survey" src="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/zend_survey2012-1.jpg" alt="" width="539" height="354" /></a></p>
<p>And, of those going that route, 30 percent named Amazon Web Services as their public cloud of choice; 28 percent did not yet know which cloud they would use; 10 percent named Rackspace; and 6 percent cited Microsoft Azure.  ”Other” public clouds came in at 5 percent and IBM Smart Cloud at 3 percent.</p>
<p><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/zend_survey2012-2.jpg"><img class="aligncenter size-full wp-image-777" title="Which Cloud - Zend survey" src="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/zend_survey2012-2.jpg" alt="" width="589" height="410" /></a></p>
<p>In terms of overall type of projects, 66 percent of respondents said they will be doing mobile development in 2012, this is a great opportunity for them to try <a href="http://www.embarcadero.com/products/radphp" target="_blank">RadPHP XE2</a> which bring integration with PhoneGap, components for jQuery Mobile and everything they need to optimize their web apps to mobile.</p>
<p>Also 45 percent said they will work on social media integration this year, if they are targeting Facebook another opportunity to try RadPHP XE2 and see how they can rapidly integrate web application with Facebook.</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/software-development-technologies-and-other-matters-5/" title="Software Development, technologies and other matters #5">Software Development, technologies and other matters #5</a></li><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/" title="Using Regular Expression on C++Builder FireMonkey Application">Using Regular Expression on C++Builder FireMonkey Application</a></li><li><a href="http://www.andreanolanusse.com/en/using-dbexpress-framework-on-windows-and-mac-with-cbuilder/" title="Using dbExpress Framework on Windows and Mac with C++Builder">Using dbExpress Framework on Windows and Mac with C++Builder</a></li><li><a href="http://www.andreanolanusse.com/en/merry-christmas-and-a-fantastic-2012-to-everybody/" title="Merry Christmas and a fantastic 2012 to everybody">Merry Christmas and a fantastic 2012 to everybody</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/amazon-web-service-aws-is-the-first-choice-for-php-developers/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android apps connected to Delphi DataSnap Server</title>
		<link>http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-apps-connected-to-delphi-datasnap-server</link>
		<comments>http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/#comments</comments>
		<pubDate>Wed, 11 Jan 2012 08:15:55 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DataSnap]]></category>
		<category><![CDATA[Embarcadero]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=771</guid>
		<description><![CDATA[<p>On the following video I&#8217;m showing how you can create DataSnap REST Server in Delphi, expose server methods and call them from an Android application. The video shows all the steps to create the server and the Android application. This is a short recap of the video. In order to have other platforms connecting and [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>On the following video I&#8217;m showing how you can create DataSnap REST Server in Delphi, expose server methods and call them from an Android application. The video shows all the steps to create the server and the Android application.</p>
<p><iframe width="480" height="360" src="http://www.youtube.com/embed/0pM6VjZGqLA" frameborder="0" allowfullscreen></iframe><br />
This is a short recap of the video.</p>
<p>In order to have other platforms connecting and interacting with your DataSnap Server you need to enable the REST Interface, and for mobile platforms you can use the DataSnap Connectors that generate proxy classes for Android, BlackBerry, Windows Phone and iOS. In the video I&#8217;m showing how to create the Server, let&#8217;s take a look at the Server Method implementation.</p>
<p>The first server method called InsertCountry, connect on my InterBase database and add a new record to the Country table, see the implementation below:</p>
<pre class="brush: delphi">function TServerMethods1.InsertCountry(Country, Currency: String;
  out Error: String): Boolean;
var
  Comm: TDBXCommand;
begin

  Result := False;

  DBConn.Open;
  Comm := DBConn.DBXConnection.CreateCommand;
  Comm.CommandType := TDBXCommandTypes.DbxSQL;
  Comm.Text :=
    Format('Insert Into Country (COUNTRY, CURRENCY) Values ( ''%s'', ''%s'')',
    [Country, Currency]);

  if not Comm.IsPrepared then
    Comm.Prepare;

  try
    Comm.ExecuteUpdate;
    Comm.Free;
    Result := True;
  except on E: Exception do
    Error := E.Message;
  end;

end;</pre>
<p>The second server method is called GetCountries, and returns all the records I have in the COUNTRY table on my InterBase database. This method returns a DBXReader and DataSnap will convert this automatically to JSON at the moment the Android app calls this method, but since we will use the new DataSnap Connector to generate the proxy class, we won&#8217;t need to handle the JSON object and I will explain that after.</p>
<p>The following code represents the GetCountries implementation.</p>
<pre class="brush: delphi">
function TServerMethods1.GetCountries: TDBXReader;
var
  Comm: TDBXCommand;
begin

  DBConn.Open;
  Comm := DBConn.DBXConnection.CreateCommand;
  Comm.CommandType := TDBXCommandTypes.DbxSQL;
  Comm.Text := 'Select * from Country';

  if not Comm.IsPrepared then
    Comm.Prepare;

  Result := Comm.ExecuteQuery;

end;
</pre>
<p>The next step is to create the proxy class for Android using the DataSnap connectors, which is a new feature in Delphi XE2. The generation can be done through command line or via HTTP request on your DataSnap server, and in the video I&#8217;m showing how to do that.</p>
<p>The proxy generator generates only the DSProxy.java, all the other files part of the DataSnap Connectors are the representation of DataSnap Framework in Java, for example you won&#8217;t need to parse the DBXReader as JSON object in Java, just because we have the DBXReader class in Java and it parses the JSON object for you.</p>
<p>The first step to create a REST connection with your DataSnap Server, which will give me a instance of DSRESTConnection. If your DataSnap Server requires authentication you can use the methods SetUserName and SetPassword to define the credentials.</p>
<pre class="brush: java">	private DSRESTConnection getConnection() {
		DSRESTConnection conn = new DSRESTConnection();
		conn.setHost("192.168.254.128");
		conn.setPort(8080);
		return conn;
	}</pre>
<p>Now, let&#8217;s take a look and see how to execute the server methods, starting with the InsertCountry method as you can see in the following code.</p>
<p>After instantiation of the DSRESTConnection, we pass the REST connection object to the TServerMethods1&#8242;s instance, which is the client representation of TServerMethods1 on the server, and from there just call InsertCountry.</p>
<p>Since InsertCountry returns Boolean and also the Error message parameter is passed as reference, InsertCountry methods will return a InsertCountryReturns, which is a static class with two parameters: error that represent the error message and returnValue which represent the value return by InsertCountry.</p>
<pre class="brush: java">protected void Insert() {

	DSRESTConnection conn = getConnection();

	TServerMethods1 sm = new TServerMethods1(conn);

	try {
		InsertCountryReturns ret;
		ret = sm.InsertCountry(editCountry.getText().toString(), editCurrency.getText().toString(), "");

		if ( ! ret.returnValue ) {
			System.out.println(ret.error);
		}

	} catch (DBXException e) {
		e.printStackTrace();
	}

	// Hide keyboard
	InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
	imm.hideSoftInputFromWindow(editCountry.getWindowToken(),0);

}</pre>
<p>The next method is GetCountries. We start as before by getting the DSRESTConnection instance. The GetCountries method returns a DBXReader and the way we work with the DBXReader class in Java is very similar the way we work in Delphi, use the Next method to interact through the result, and getValue/GetAsXXXXX to get the column value. See the following code:</p>
<pre class="brush: java">protected void Refresh() {

	DSRESTConnection conn = getConnection();

	TServerMethods1 sm = new TServerMethods1(conn);

	TDBXReader reader;
	try {
		reader = sm.GetCountries();

		ArrayList COUNTRIES = new ArrayList();

		while (reader.next()) {
			COUNTRIES.add(reader.getValue("COUNTRY").GetAsString());
		}

		// Add the COUNTRIES array in to the list view
		list.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, COUNTRIES));

	} catch (DBXException e) {
		e.printStackTrace();
	}

}</pre>
<p>This is just a short tutorial explaining how to use DataSnap Connector with Android, take some time and watch the video where I&#8217;m going through more details.</p>
<p>The source code is available for download <a href="http://cc.embarcadero.com/download.aspx?id=28682" target="_blank">here</a> and download the video from <a href="http://cc.embarcadero.com/download.aspx?id=28683" target="_blank">here</a>.</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/video-connecting-android-applications-with-datasnap-server-delphi-conference-brazil-2010/" title="Video: Connecting Android applications with DataSnap Server – Delphi Conference Brazil 2010">Video: Connecting Android applications with DataSnap Server – Delphi Conference Brazil 2010</a></li><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-cbuilder-datasnap-server/" title="Android apps connected to C++Builder DataSnap Server">Android apps connected to C++Builder DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/en/publishing-providers-when-registering-datasnap-server-class-in-runtime/" title="Publishing providers when registering DataSnap Server Class in runtime">Publishing providers when registering DataSnap Server Class in runtime</a></li><li><a href="http://www.andreanolanusse.com/en/caching-data-on-datasnap-server/" title="Caching data on DataSnap Server">Caching data on DataSnap Server</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Using Regular Expression on C++Builder FireMonkey Application</title>
		<link>http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-regular-expression-on-cbuilder-firemonkey-application</link>
		<comments>http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 22:11:14 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Embarcadero]]></category>
		<category><![CDATA[FireMonkey]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=768</guid>
		<description><![CDATA[<p>Here another C++ example showing how to use the RTL regular expression on C++Builder FireMonkey Application. This example  validate a string content based on four different regular expression, which are: Checks if the given text is a validate e-mail address Checks if the given text contains a valid IP address Checks if the given text [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Here another C++ example showing how to use the RTL regular expression on <a href="http://www.embarcadero.com/products/cbuilder" target="_blank">C++Builder</a> <a href="http://www.embarcadero.com/products/firemonkey" target="_blank">FireMonkey</a> Application.</p>
<p>This example  validate a string content based on four different regular expression, which are:</p>
<ul>
<li>Checks if the given text is a validate e-mail address</li>
<li>Checks if the given text contains a valid IP address</li>
<li>Checks if the given text is a valid date (dd-mm-yyyy)</li>
<li>Checks if the given text is a valid date (mm-dd-yyyy)</li>
</ul>
<p>The follow code shows the four regular expressions used by this application.</p>
<pre class="brush: cpp">void __fastcall TForm1::lbRegExpChange(TObject *Sender) {
	switch (lbRegExp-&gt;ItemIndex) {
	case 0:
		lbType-&gt;Text = "E-mail for validation";

		MemoRegEx-&gt;Text =
			"^((?&gt;[a-zA-Z\d!#$%&amp;''*+\\-/=?^_`{|}~]+\\x20*" "|\"((?=[\\x01-\\x7f])[^\"\\\\]|\\\\[\\x01-\\x7f])*\"\\"
			"x20*)*(?\.?[a-zA-Z\d!" "#$%&amp;''*+\\-/=?^_`{|}~]+)+|\"\"((?=[\\x01-\\x7f])"
			"[^\"\\\\]|\\\\[\\x01-\\x7f])*\")@(((?!-)[a-zA-Z\\d\\" "-]+(?)$";

		break;
	case 1: {
			// Accept IP address between 0..255
			lbType-&gt;Text = "IP address for validation (0..255)";
			MemoRegEx-&gt;Text =
				"\\b(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\" ".(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\."
				"(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\." "(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\b";
			break;

		}
	case 2: {
			// Data interval format mm-dd-yyyy
			lbType-&gt;Text =
				"Date in mm-dd-yyyy format from between 01-01-1900 and 12-31-2099";
			MemoRegEx-&gt;Text =
				"^(0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[" "01])[- /.](19|20)\\d\\d$";
			break;

		}
	case 3: {
			// Data interval format mm-dd-yyyy
			lbType-&gt;Text =
				"Date in dd-mm-yyyy format from between 01-01-1900 and 31-12-2099";
			MemoRegEx-&gt;Text =
				"^(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[01" "2])[- /.](19|20)\\d\\d$";
			break;

		}
	}
	EditTextChangeTracking(EditText);

}</pre>
<p>To execute the validation you can use the method TRegExp::IsMatch as you can see bellow:</p>
<pre class="brush: cpp">void __fastcall TForm1::EditTextChangeTracking(TObject *Sender) {
       // EditText contain the string value and MemoRegEx the regular expression
	if (TRegEx::IsMatch(EditText-&gt;Text, MemoRegEx-&gt;Text)) {
		SEResult-&gt;ShadowColor = TAlphaColors::Green;
	}
	else
		SEResult-&gt;ShadowColor = TAlphaColors::Red;

}</pre>
<p>Since this is a FireMonkey Application, I used a Shadow Effect to show if the Edit box value is valid or not (Green=valid / Red=invalid). The following image shows what happen when you input a invalid e-mail address on Windows and Mac.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/CBuilderRegExpinAction.png"><img class="aligncenter  wp-image-769" title="Reg Expression in Acton on Windows and Mac" src="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/CBuilderRegExpinAction.png" alt="" width="373" height="386" /></a></p>
<p>Now the results when you provide the correct e-mail address.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/CBuilderRegExpinAction-green.png"><img class="aligncenter  wp-image-770" title="Regular Expression in Action with C++Builder" src="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/CBuilderRegExpinAction-green.png" alt="" width="373" height="386" /></a></p>
<p>You can download the source code from <strong><a href="https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/CPP/RTL/RegExpression/" target="_blank">here</a></strong> or just update your local RAD Studio XE2 samples folder from our RAD Studio SVN <a href="http://radstudiodemos.svn.sourceforge.net/radstudiodemos/" target="_blank">repository</a>.</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/using-dbexpress-framework-on-windows-and-mac-with-cbuilder/" title="Using dbExpress Framework on Windows and Mac with C++Builder">Using dbExpress Framework on Windows and Mac with C++Builder</a></li><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/" title="Connecting to PostgreSQL through dbExpress ODBC driver">Connecting to PostgreSQL through dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/en/a-little-bit-about-firemonkey-and-delphi-xe2/" title="A little bit about FireMonkey and Delphi XE2">A little bit about FireMonkey and Delphi XE2</a></li><li><a href="http://www.andreanolanusse.com/en/software-development-technologies-and-other-matters-5/" title="Software Development, technologies and other matters #5">Software Development, technologies and other matters #5</a></li><li><a href="http://www.andreanolanusse.com/en/amazon-web-service-aws-is-the-first-choice-for-php-developers/" title="Amazon Web Services (AWS) is the first choice for PHP Developers">Amazon Web Services (AWS) is the first choice for PHP Developers</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Using dbExpress Framework on Windows and Mac with C++Builder</title>
		<link>http://www.andreanolanusse.com/en/using-dbexpress-framework-on-windows-and-mac-with-cbuilder/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=using-dbexpress-framework-on-windows-and-mac-with-cbuilder</link>
		<comments>http://www.andreanolanusse.com/en/using-dbexpress-framework-on-windows-and-mac-with-cbuilder/#comments</comments>
		<pubDate>Fri, 06 Jan 2012 10:33:58 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[dbExpress]]></category>
		<category><![CDATA[Embarcadero]]></category>
		<category><![CDATA[FireMonkey]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=763</guid>
		<description><![CDATA[<p>During the following weeks I&#8217;m writing a series of C++ examples to demonstrate the use of VCL, FireMonkey, RTL, dbExpress, and others stuff. Each example will have a major focus, but you will be able to learn other stuffs as well. If there is something specific on C++ you would like to see, please let [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>During the following weeks I&#8217;m writing a series of C++ examples to demonstrate the use of VCL, FireMonkey, RTL, dbExpress, and others stuff. Each example will have a major focus, but you will be able to learn other stuffs as well. If there is something specific on C++ you would like to see, please let me know and I will do my best to bring that in one of my following posts.</p>
<p>In this first post I demonstrate how to use dbExpress Framework to run SQL&#8217;s against your database. Since I want to run the application on Windows and Mac, the console application will target <a href="http://www.embarcadero.com/products/firemonkey" target="_blank">FireMonkey</a>.</p>
<p>The Console Application Wizard for C++ has been updated in <a href="http://www.embarcadero.com/products/cbuilder" target="_blank">C++Builder XE2</a>, adding a Target Framework Option as you can see below.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/CPPConsoleWizard.png"><img class=" wp-image-764 aligncenter" title="C++Builder Console Application Wizard" src="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/CPPConsoleWizard.png" alt="" width="253" height="184" /></a></p>
<p>The following code shows how to connect to an <a href="http://www.embarcadero.com/products/interbase" target="_blank">InterBase</a> database, execute a SELECT SQL against the COUNTRY table, and display the results, of course you can use dbExpress Framework to run queries against any database supported by dbExpress, just remember that some dbExpress drivers are not available on Mac in XE2, for example SQL Server and ODBC drivers.</p>
<p>If you are C++ developer you will understand pretty quickly the following code, which has some comments to help you to understand the code.</p>
<pre class="brush: cpp">#include &lt;fmx.h&gt;

#pragma hdrstop
#pragma argsused

#include &lt;tchar.h&gt;
#include &lt;stdio.h&gt;
#include &lt;System.SysUtils.hpp&gt;
#include &lt;Data.DBXDynalink.hpp&gt;
#include &lt;Data.DBXCommon.hpp&gt;
#include &lt;Data.DBXInterbase.hpp&gt;
#include &lt;memory&gt;

int _tmain(int argc, _TCHAR* argv[]) {

	// Get database connection instance
	std::auto_ptr&lt;TDBXConnection&gt;conn
		(TDBXConnectionFactory::GetConnectionFactory()-&gt;GetConnection
		("EMPLOYEE", "sysdba", "masterkey"));

	if (conn.get() != NULL) {

		printf("================= Connection Properties ============\n");

		AnsiString s = conn-&gt;ConnectionProperties-&gt;Properties-&gt;Text + "\n";
		printf(s.c_str());

		// create command and transaction objects to execute the query
		std::auto_ptr&lt;TDBXCommand&gt;command(conn-&gt;CreateCommand());

                // initiate a transaction
		TDBXTransaction *transaction =
			conn-&gt;BeginTransaction(TDBXIsolations::ReadCommitted);

		command-&gt;Text = "SELECT * FROM Country";
		command-&gt;Prepare();

		// execute the query and get the cursor (DBXReader)
		std::auto_ptr&lt;TDBXReader&gt;reader(command-&gt;ExecuteQuery());

		// print number of columns and each record
		printf(AnsiString("Number of Columns:" + IntToStr(reader-&gt;ColumnCount) +
			"\n").c_str());

		// display the list of records
		while (reader-&gt;Next()) {
			printf((reader-&gt;Value[reader-&gt;GetOrdinal("COUNTRY")]-&gt;GetAnsiString
				() + "\n").c_str());
		}

		printf("====================================================\n");

		conn-&gt;CommitFreeAndNil(transaction);
	}

	Sleep(5000);
	return 0;
}</pre>
<p>Before you run this code, make sure you have the dbExpress alias EMPLOYEE setup to connect into the EMPLOYEE.GDB database and the InterBase client installed, if everything is ok just compile and run the program on Windows and Mac, the following image shows this application running on Mac.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/CPPDBXConsoleApp-Mac.png"><img class="wp-image-765 aligncenter" title="C++ application using dbExpress framework on Mac" src="http://www.andreanolanusse.com/en/wp-content/uploads/2012/01/CPPDBXConsoleApp-Mac.png" alt="" width="437" height="515" /></a></p>
<p>There are few things you need to be aware when deploying and running this kind of application on Mac; on my following post I will explain everything about that.</p>
<p>For now we&#8217;ve learned how to use DBX Framework and make the application to compile and run on Windows and Mac.</p>
<p>You can download the source code from <strong><a href="https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/CPP/Database/dbExpress/DBXFramework" target="_blank">here</a></strong> or just update your local RAD Studio XE2 samples folder from our RAD Studio SVN <a href="http://radstudiodemos.svn.sourceforge.net/radstudiodemos/" target="_blank">repository</a>.</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/" title="Using Regular Expression on C++Builder FireMonkey Application">Using Regular Expression on C++Builder FireMonkey Application</a></li><li><a href="http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/" title="Connecting to PostgreSQL through dbExpress ODBC driver">Connecting to PostgreSQL through dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/en/a-little-bit-about-firemonkey-and-delphi-xe2/" title="A little bit about FireMonkey and Delphi XE2">A little bit about FireMonkey and Delphi XE2</a></li><li><a href="http://www.andreanolanusse.com/en/new-dbexpress-driver-for-firebird-in-delphi-2010-and-cbuilder-2010/" title="Video: New dbExpress driver for Firebird in Delphi 2010 and C++Builder 2010">Video: New dbExpress driver for Firebird in Delphi 2010 and C++Builder 2010</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/using-dbexpress-framework-on-windows-and-mac-with-cbuilder/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Merry Christmas and a fantastic 2012 to everybody</title>
		<link>http://www.andreanolanusse.com/en/merry-christmas-and-a-fantastic-2012-to-everybody/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=merry-christmas-and-a-fantastic-2012-to-everybody</link>
		<comments>http://www.andreanolanusse.com/en/merry-christmas-and-a-fantastic-2012-to-everybody/#comments</comments>
		<pubDate>Sun, 25 Dec 2011 09:32:17 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Embarcadero]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=761</guid>
		<description><![CDATA[<p>It&#8217;s Christmas, a special day to all of us and the time to have our families together and celebrate. To all my blog readers Merry Christmas!! In a few days starts a new year, and now is time to review our achievements, mistakes and successes in 2011, make plans to improve, set new goals and [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>It&#8217;s Christmas, a special day to all of us and the time to have our families together and celebrate.</p>
<p>To all my blog readers Merry Christmas!!</p>
<p>In a few days starts a new year, and now is time to review our achievements, mistakes and successes in 2011, make plans to improve, set new goals and be ready to achieve all of them in 2012.</p>
<p>I wish you a prosperous new year and in 2012 you can have the most amazing year of your life.</p>
<p>Regards,<br />
Andreano Lanusse </p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/software-development-technologies-and-other-matters-5/" title="Software Development, technologies and other matters #5">Software Development, technologies and other matters #5</a></li><li><a href="http://www.andreanolanusse.com/en/amazon-web-service-aws-is-the-first-choice-for-php-developers/" title="Amazon Web Services (AWS) is the first choice for PHP Developers">Amazon Web Services (AWS) is the first choice for PHP Developers</a></li><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/" title="Using Regular Expression on C++Builder FireMonkey Application">Using Regular Expression on C++Builder FireMonkey Application</a></li><li><a href="http://www.andreanolanusse.com/en/using-dbexpress-framework-on-windows-and-mac-with-cbuilder/" title="Using dbExpress Framework on Windows and Mac with C++Builder">Using dbExpress Framework on Windows and Mac with C++Builder</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/merry-christmas-and-a-fantastic-2012-to-everybody/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android apps connected to C++Builder DataSnap Server</title>
		<link>http://www.andreanolanusse.com/en/android-apps-connected-to-cbuilder-datasnap-server/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=android-apps-connected-to-cbuilder-datasnap-server</link>
		<comments>http://www.andreanolanusse.com/en/android-apps-connected-to-cbuilder-datasnap-server/#comments</comments>
		<pubDate>Thu, 22 Dec 2011 01:48:16 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[DataSnap]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=747</guid>
		<description><![CDATA[<p>As part of the 31 days of RAD Studio XE2 Tutorials, in today&#8217;s video I&#8217;m showing how you can create DataSnap REST Server in C++Builder, expose server methods and call them from an Android application. The video shows all the steps to create the server and the Android application. This is a short recap of [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>As part of the <a href="http://www.embarcadero.com/31-days-of-december" target="_blank">31 days of RAD Studio XE2 Tutorials</a>, in today&#8217;s video I&#8217;m showing how you can create DataSnap REST Server in C++Builder, expose server methods and call them from an Android application. The video shows all the steps to create the server and the Android application.</p>
<p><iframe src="http://www.youtube.com/embed/zXEuZNc60Hw" frameborder="0" width="480" height="360"></iframe></p>
<p>This is a short recap of the video.</p>
<p>In order to have other platforms connecting and interacting with your DataSnap Server you need to enable the REST Interface, and for mobile platforms you can use the DataSnap Connectors that generate proxy classes for Android, BlackBerry, Windows Phone and iOS. In the video I&#8217;m showing how to create the Server, let&#8217;s take a look at the Server Method implementation.</p>
<p>The first server method called InsertCountry, connect on my InterBase database and add a new record to the Country table, see the implementation below:</p>
<pre class="brush: cpp">bool TServerMethods1::InsertCountry(String country, String currency,
	String &amp;error) {
	TDBXCommand *comm;

	bool result = false;
	DbConn-&gt;Open();
	comm = DbConn-&gt;DBXConnection-&gt;CreateCommand();
	comm-&gt;CommandType = TDBXCommandTypes_DbxSQL;

	TVarRec vr[] = {country, currency};
	comm-&gt;Text =
		Format("Insert Into Country (COUNTRY, CURRENCY) Values ( '%s', '%s')", vr, 2);

	if (!comm-&gt;IsPrepared) {
		comm-&gt;Prepare();
	}

	try {
		comm-&gt;ExecuteUpdate();
		result = true;

	}
	catch (Exception* e) {
		error = e-&gt;Message;
	}
	delete comm;
	return result;

}</pre>
<p>The second server method is called GetCountries, and returns all the records I have in the COUNTRY table on my InterBase database. This method returns a DBXReader and DataSnap will convert this automatically to JSON at the moment the Android app calls this method, but since we will use the new DataSnap Connector to generate the proxy class, we won&#8217;t need to handle the JSON object and I will explain that after.</p>
<p>The following code represents the GetCountries implementation.</p>
<pre class="brush: cpp">TDBXReader* TServerMethods1::GetCountries() {

	TDBXCommand *comm;

	try {
		DbConn-&gt;Open();
		comm = DbConn-&gt;DBXConnection-&gt;CreateCommand();
		comm-&gt;CommandType = TDBXCommandTypes_DbxSQL;
		comm-&gt;Text = "Select * from Country";

		if (!comm-&gt;IsPrepared) {
			comm-&gt;Prepare();
		}
		return comm-&gt;ExecuteQuery();
	}
	catch (Exception* e) {
		return NULL;
	}
}</pre>
<p>The next step is to create the proxy class for Android using the DataSnap connectors, which is a new feature in C++Builder XE2. The generation can be done through command line or via HTTP request on your DataSnap server, and in the video I&#8217;m showing how to do that.</p>
<p>The proxy generator generates only the DSProxy.java, all the other files part of the DataSnap Connectors are the representation of DataSnap Framework in Java, for example you won&#8217;t need to parse the DBXReader as JSON object in Java, just because we have the DBXReader class in Java and it parses the JSON object for you.</p>
<p>The first step to create a REST connection with your DataSnap Server, which will give me a instance of DSRESTConnection. If your DataSnap Server requires authentication you can use the methods SetUserName and SetPassword to define the credentials.</p>
<pre class="brush: java">	private DSRESTConnection getConnection() {
		DSRESTConnection conn = new DSRESTConnection();
		conn.setHost("192.168.254.128");
		conn.setPort(8080);
		return conn;
	}</pre>
<p>Now, let&#8217;s take a look and see how to execute the server methods, starting with the InsertCountry method as you can see in the following code.</p>
<p>After instantiation of the DSRESTConnection, we pass the REST connection object to the TServerMethods1&#8242;s instance, which is the client representation of TServerMethods1 on the server, and from there just call InsertCountry.</p>
<p>Since InsertCountry returns Boolean and also the Error message parameter is passed as reference, InsertCountry methods will return a InsertCountryReturns, which is a static class with two parameters: error that represent the error message and returnValue which represent the value return by InsertCountry.</p>
<pre class="brush: java">protected void Insert() {

	DSRESTConnection conn = getConnection();

	TServerMethods1 sm = new TServerMethods1(conn);

	try {
		InsertCountryReturns ret;
		ret = sm.InsertCountry(editCountry.getText().toString(), editCurrency.getText().toString(), "");

		if ( ! ret.returnValue ) {
			System.out.println(ret.error);
		}

	} catch (DBXException e) {
		e.printStackTrace();
	}

	// Hide keyboard
	InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
	imm.hideSoftInputFromWindow(editCountry.getWindowToken(),0);

}</pre>
<p>The next method is GetCountries. We start as before by getting the DSRESTConnection instance. The GetCountries method returns a DBXReader and the way we work with the DBXReader class in Java is very similar the way we work in C++, use the Next method to interact through the result, and getValue/GetAsXXXXX to get the column value. See the following code:</p>
<pre class="brush: java">protected void Refresh() {

	DSRESTConnection conn = getConnection();

	TServerMethods1 sm = new TServerMethods1(conn);

	TDBXReader reader;
	try {
		reader = sm.GetCountries();

		ArrayList COUNTRIES = new ArrayList();

		while (reader.next()) {
			COUNTRIES.add(reader.getValue("COUNTRY").GetAsString());
		}

		// Add the COUNTRIES array in to the list view
		list.setAdapter(new ArrayAdapter(this, android.R.layout.simple_list_item_1, COUNTRIES));

	} catch (DBXException e) {
		e.printStackTrace();
	}

}</pre>
<p>This is just a short tutorial explaining how to use DataSnap Connector with Android, take some time and watch the video where I&#8217;m going through more details.</p>
<p>The source code is available for download <a href="http://cc.embarcadero.com/download.aspx?id=28677" target="_blank">here</a> and download the video from <a href="http://cc.embarcadero.com/download.aspx?id=28678" target="_blank">here</a>.</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/en/caching-data-on-datasnap-server/" title="Caching data on DataSnap Server">Caching data on DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/video-connecting-android-applications-with-datasnap-server-delphi-conference-brazil-2010/" title="Video: Connecting Android applications with DataSnap Server – Delphi Conference Brazil 2010">Video: Connecting Android applications with DataSnap Server – Delphi Conference Brazil 2010</a></li><li><a href="http://www.andreanolanusse.com/en/datasnap-videos-for-2011-what-would-you-like-to-see/" title="DataSnap videos for 2011 – what would you like to see?">DataSnap videos for 2011 – what would you like to see?</a></li><li><a href="http://www.andreanolanusse.com/en/registering-datasnap-server-class-in-runtime-with-delphi/" title="Registering DataSnap Server Class in runtime with Delphi">Registering DataSnap Server Class in runtime with Delphi</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/android-apps-connected-to-cbuilder-datasnap-server/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>It&#8217;s time to move on</title>
		<link>http://www.andreanolanusse.com/en/its-time-to-move-on/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=its-time-to-move-on</link>
		<comments>http://www.andreanolanusse.com/en/its-time-to-move-on/#comments</comments>
		<pubDate>Wed, 21 Dec 2011 06:31:18 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=744</guid>
		<description><![CDATA[<p>Hi everyone, there are certain things we cannot let go and need to be mention. During the whole year I try to keep my blog posts about software development and other related technologies, but this time I need to mention what is going on here at Embarcadero. Upgrading to Delphi XE2, C++Builder XE2 or RAD [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Hi everyone, there are certain things we cannot let go and need to be mention. During the whole year I try to keep my blog posts about software development and other related technologies, but this time I need to mention what is going on here at Embarcadero. Upgrading to <a href="http://www.embarcadero.com/products/delphi" target="_blank">Delphi XE2</a>, <a href="http://www.embarcadero.com/products/cbuilder" target="_blank">C++Builder XE2</a> or <a href="http://www.embarcadero.com/products/rad-studio" target="_blank">RAD Studio XE2</a> by December 30, 2011, you can get up to $2,935 (USD) in additional tools free! Also you are eligible to take one <a href="http://www.embarcadero.com/certification">Delphi Developer Certification</a> test free of charge.</p>
<table width="80%" border="1" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td align="left"><strong>Buy Delphi, C++Builder or RAD Studio XE2&#8230;</strong></td>
<td align="left"><strong>And receive the following FREE!!!</strong></td>
</tr>
<tr>
<td align="left">Professional edition</td>
<td align="left">
<ul>
<li>Rapid SQL XE2 – FREE!</li>
<li>FastCube – FREE!</li>
<li>One Delphi Developer Certification &#8211; FREE!</li>
</ul>
</td>
</tr>
<tr>
<td align="left">Enterprise edition</td>
<td align="left">
<ul>
<li>Rapid SQL XE2 – FREE!</li>
<li>FastCube – FREE!</li>
<li>DB Optimizer &#8211; FREE!</li>
<li>One Delphi Developer Certification &#8211; FREE!</li>
</ul>
</td>
</tr>
<tr>
<td align="left">Architect edition</td>
<td align="left">
<ul>
<li>Rapid SQL XE2 – FREE!</li>
<li>FastCube – FREE!</li>
<li>DB Optimizer &#8211; FREE!</li>
<li>DB Change Manager &#8211; FREE!</li>
<li>One Delphi Developer Certification &#8211; FREE!</li>
</ul>
</td>
</tr>
</tbody>
</table>
<p>Recently I published the White Paper <a title="White Paper: Reasons to Migrate to Delphi XE2 | What you might have missed since Delphi 7" href="http://www.andreanolanusse.com/en/white-paper-reasons-to-migrate-to-delphi-xe2-what-you-might-have-missed-since-delphi-7/">&#8220;Reasons to Migrate to Delphi XE2 | What you might have missed since Delphi 7&#8243;</a> and can help you to decide to upgrade to XE2.</p>
<p>Remember, this offer expire on December 30, 2011 and you can have more information <a href="http://www.embarcadero.com/radoffer" target="_blank">here</a>.</p>
<p>It&#8217;s time to move on <img src='http://www.andreanolanusse.com/en/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/" title="Connecting to PostgreSQL through dbExpress ODBC driver">Connecting to PostgreSQL through dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/en/update-2-for-delphi-xe2-cbuilder-xe2-and-radphp-xe2-available/" title="Update 2 for Delphi XE2, C++Builder XE2 and RadPHP XE2 available">Update 2 for Delphi XE2, C++Builder XE2 and RadPHP XE2 available</a></li><li><a href="http://www.andreanolanusse.com/en/trial-datasheet-feature-matrix-and-faq-for-xe2-release-available/" title="Trial, Datasheet, Feature Matrix and FAQ for XE2 release available">Trial, Datasheet, Feature Matrix and FAQ for XE2 release available</a></li><li><a href="http://www.andreanolanusse.com/en/a-little-bit-about-firemonkey-and-delphi-xe2/" title="A little bit about FireMonkey and Delphi XE2">A little bit about FireMonkey and Delphi XE2</a></li><li><a href="http://www.andreanolanusse.com/en/rad-studio-xe2-a-new-era-for-delphi-and-cbuilder-developers/" title="RAD Studio XE2 a new era for Delphi and C++Builder Developers">RAD Studio XE2 a new era for Delphi and C++Builder Developers</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/its-time-to-move-on/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>700 Delphi Developers at Delphi Conference Brazil</title>
		<link>http://www.andreanolanusse.com/en/700-delphi-developers-at-delphi-conference-brazil/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=700-delphi-developers-at-delphi-conference-brazil</link>
		<comments>http://www.andreanolanusse.com/en/700-delphi-developers-at-delphi-conference-brazil/#comments</comments>
		<pubDate>Wed, 30 Nov 2011 15:43:51 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Software Development]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=736</guid>
		<description><![CDATA[<p>We are so excited here in Brazil at Delphi Conference 2011, around 700 Delphi Developers learning about all the great stuffs in Delphi. David, Jim and I are here at the Conference talking with customers, community members and our partners. Related PostsFireMonkey 3D Text EditorAndroid apps connected to Delphi DataSnap ServerIt&#8217;s time to move onWhite [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>We are so excited here in Brazil at Delphi Conference 2011, around 700 Delphi Developers learning about all the great stuffs in Delphi.</p>
<p>David, Jim and I are here at the Conference talking with customers, community members and our partners.</p>
<p><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2011/11/DC2011.jpg"><img class="alignleft size-large wp-image-737" title="Delphi Conference 2011" src="http://www.andreanolanusse.com/en/wp-content/uploads/2011/11/DC2011-1024x678.jpg" alt="" width="717" height="475" /></a></p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/its-time-to-move-on/" title="It&#8217;s time to move on">It&#8217;s time to move on</a></li><li><a href="http://www.andreanolanusse.com/en/white-paper-reasons-to-migrate-to-delphi-xe2-what-you-might-have-missed-since-delphi-7/" title="White Paper: Reasons to Migrate to Delphi XE2 | What you might have missed since Delphi 7">White Paper: Reasons to Migrate to Delphi XE2 | What you might have missed since Delphi 7</a></li><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/" title="Connecting to PostgreSQL through dbExpress ODBC driver">Connecting to PostgreSQL through dbExpress ODBC driver</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/700-delphi-developers-at-delphi-conference-brazil/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>White Paper: Reasons to Migrate to Delphi XE2 &#124; What you might have missed since Delphi 7</title>
		<link>http://www.andreanolanusse.com/en/white-paper-reasons-to-migrate-to-delphi-xe2-what-you-might-have-missed-since-delphi-7/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=white-paper-reasons-to-migrate-to-delphi-xe2-what-you-might-have-missed-since-delphi-7</link>
		<comments>http://www.andreanolanusse.com/en/white-paper-reasons-to-migrate-to-delphi-xe2-what-you-might-have-missed-since-delphi-7/#comments</comments>
		<pubDate>Wed, 16 Nov 2011 23:16:39 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=731</guid>
		<description><![CDATA[<p>If you still using Delphi 7 or past versions, I highly recommend you to reserve sometime to read this article. Delphi has really grown with some truly cool things getting added in the time since the Delphi 7. This article gives a few good reasons to migrate, along with an overview of all the new [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</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" target="_blank"><img class="alignleft size-medium wp-image-733" style="border-style: initial; border-color: initial; border-width: 0px; margin: 4px;" title="Download the White Paper: Reasons to migrate to Delphi XE2" src="http://www.andreanolanusse.com/en/wp-content/uploads/2011/11/Reasons_to_migrate_to_DelphiXE2-Cover-232x300.png" alt="" width="232" height="300" /></a></p>
<p>If you still using Delphi 7 or past versions, I highly recommend you to reserve sometime to read this article. Delphi has really grown with some truly cool things getting added in the time since the Delphi 7.</p>
<p>This article gives a few good reasons to migrate, along with an overview of all the new features added to Delphi product releases since version 7, where Delphi was an IDE to build Windows 32-bit applications and became an IDE for Windows 64-bit, Mac and iOS development.</p>
<p>If you already read my article &#8220;Reasons to migrate from Delphi 7 to Delphi 2009&#8243; or &#8220;Reasons to migrate to Delphi XE&#8221;, this is the updated version including Delphi 2010, XE and XE2 new features.</p>
<p>I would like to remind you that migrating to Delphi XE2 gives you access to <a href="http://www.embarcadero.com/products/rad-studio/previous-versions">earlier versions</a> at no extra cost. For example buying Delphi XE2 also gets you Delphi 7, Delphi 2007, Delphi 2009, Delphi 2010 and Delphi XE.</p>
<p>I hope this article answer all of your question, any additional question let us know how.</p>
<p>Article <a href="http://cc.embarcadero.com/download.aspx?id=28627" target="_blank"><strong>download</strong></a>.</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/its-time-to-move-on/" title="It&#8217;s time to move on">It&#8217;s time to move on</a></li><li><a href="http://www.andreanolanusse.com/en/700-delphi-developers-at-delphi-conference-brazil/" title="700 Delphi Developers at Delphi Conference Brazil">700 Delphi Developers at Delphi Conference Brazil</a></li><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/" title="Connecting to PostgreSQL through dbExpress ODBC driver">Connecting to PostgreSQL through dbExpress ODBC driver</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/white-paper-reasons-to-migrate-to-delphi-xe2-what-you-might-have-missed-since-delphi-7/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</title>
		<link>http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=copyreadertoclientdataset-blob-and-the-message-feature-not-implemented</link>
		<comments>http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/#comments</comments>
		<pubDate>Fri, 04 Nov 2011 00:25:18 +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/en/?p=729</guid>
		<description><![CDATA[<p>If you have used the method TDBXDataSetReader.CopyReaderToClientDataSet, you probably came across with the message &#8220;Feature not implemented&#8221;, this exception occurs because the method CopyReaderToClientDataSet can&#8217;t copy Blob fields from the DBXReader to the ClientDataSet. This is no longer a problem, Delphi XE2 Update 2 changed this behavior and now supports Blob fields when using the CopyReaderToClientDataSet method. [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>If you have used the method TDBXDataSetReader.CopyReaderToClientDataSet, you probably came across with the message &#8220;Feature not implemented&#8221;, this exception occurs because the method CopyReaderToClientDataSet can&#8217;t copy Blob fields from the DBXReader to the ClientDataSet.</p>
<p>This is no longer a problem, <a title="Update 2 for Delphi XE2, C++Builder XE2 and RadPHP XE2 available" href="http://www.andreanolanusse.com/en/update-2-for-delphi-xe2-cbuilder-xe2-and-radphp-xe2-available/">Delphi XE2 Update 2</a> changed this behavior and now supports Blob fields when using the CopyReaderToClientDataSet method.</p>
<p>To learn how to use the method CopyReaderToClientDataSet read the article &#8220;<a title="Copying data from ClientDataSet to DBXReader" href="http://www.andreanolanusse.com/en/copying-data-from-clientdataset-to-dbxreader/">Copying data from ClientDataSet to DBXReader</a>&#8220;</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/" title="Connecting to PostgreSQL through dbExpress ODBC driver">Connecting to PostgreSQL through dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/en/caching-data-on-datasnap-server/" title="Caching data on DataSnap Server">Caching data on DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/copying-data-from-clientdataset-to-dbxreader/" title="Copying data from ClientDataSet to DBXReader">Copying data from ClientDataSet to DBXReader</a></li><li><a href="http://www.andreanolanusse.com/en/datasnap-videos-for-2011-what-would-you-like-to-see/" title="DataSnap videos for 2011 – what would you like to see?">DataSnap videos for 2011 – what would you like to see?</a></li><li><a href="http://www.andreanolanusse.com/en/registering-datasnap-server-class-in-runtime-with-delphi/" title="Registering DataSnap Server Class in runtime with Delphi">Registering DataSnap Server Class in runtime with Delphi</a></li><li><a href="http://www.andreanolanusse.com/en/datasnap-xe-and-windows-azure-rad-studio-xe-preview-3/" title="DataSnap XE and Windows Azure – RAD Studio XE Preview #3">DataSnap XE and Windows Azure – RAD Studio XE Preview #3</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Connecting to PostgreSQL through dbExpress ODBC driver</title>
		<link>http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=connecting-to-postgresql-through-dbexpress-odbc-driver</link>
		<comments>http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/#comments</comments>
		<pubDate>Wed, 02 Nov 2011 08:30:27 +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/en/?p=723</guid>
		<description><![CDATA[<p>Delphi XE2 and C + + Builder XE2  introduce the new dbExpress ODBC driver, which enable FireMonkey and VCL applications to connect to any database that provides a ODBC driver. In order to show how it works, I created a FireMonkey project sample that connect to a PostgreSQL database. As first step, you must install the PostgreSQL ODBC driver [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</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/conectando-ao-postgresql-com-dbexpress-odbc-driver/www.embarcadero.com/products/delphi" target="_blank">Delphi</a> XE2 and <a href="http://www.andreanolanusse.com/pt/conectando-ao-postgresql-com-dbexpress-odbc-driver/www.embarcadero.com/products/cbuilder" target="_blank">C + + Builder</a> XE2  introduce the new dbExpress ODBC driver, which enable FireMonkey and VCL applications to connect to any database that provides a ODBC driver.</p>
<p>In order to show how it works, I created a FireMonkey project sample that connect to a PostgreSQL database.</p>
<p>As first step, you must install the PostgreSQL ODBC driver on the machine that will run the application. Second, applications compiled as 32-bit, requires the <a href="http://wwwmaster.postgresql.org/download/mirrors-ftp/odbc/versions/msi/psqlodbc_09_00_0310.zip" target="_blank">32-bit ODBC driver</a>, 64-bit applications will require the 64-bit ODBC driver.</p>
<p>Onde installed the driver, create and configure a User DSN or System DSN on the ODBC Data Source Administrator (odbcad32.exe):</p>
<p><strong>Instructions for windows 64-bit</strong></p>
<ul>
<li>For 32-bit applications use c:\Windows\SysWOW64\odbcad32.exe</li>
<li>For 64-bit applications use o c:\Windows\system32\odbcad32.exe</li>
</ul>
<p><strong>Instructions for windows 32-bit</strong></p>
<ul>
<li>Use  c:\Windows\system32\odbcad32.exe</li>
</ul>
<div><a href="http://www.andreanolanusse.com/en/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/en/wp-content/uploads/2011/11/ODBC-PostgreSQL.png" alt="" width="291" height="399" /></a></div>
<p>The next step is to create an dbExpress ODBC alias on Data Explorer, where the Database Name parameter is the name of the Data Source created earlier, in my example the Data Source is called PostgreSQL35W. The database, username and password was already defined in the Data Source, but you can override the username and password parameters through the SQLConnection.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/en/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/en/wp-content/uploads/2011/11/DataExplorer-PostgreSQL.png" alt="" width="230" height="379" /></a></p>
<p>Assuming you already know how to use the SQLConnection, DataSetProvider and ClientDataSet or SimpleDataSet ,and DataSource components, just connect all  the components as you usually do. The SQLConnection will look like this:</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/en/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/en/wp-content/uploads/2011/11/IDE-ODBC-PostgreSQL.png" alt="" width="732" height="428" /></a></p>
<p>You can use the dbExpress framework when connected to a database through dbExpress ODBC driver. In XE2 the ODBC driver is compatible with Windows, we are evaluating the possibility to support this driver on Mac.</p>
<p>The figure below shows the FireMonkey application connected to PostgreSQL via dbExpress ODBC driver. Now you can connect to any other other database not supported natively by dbExpress.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/en/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/en/wp-content/uploads/2011/11/FMI_dbExpress_ODBC.png" alt="" width="621" height="410" /></a></p>
<p>Download the source code <a href="https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/Delphi/Database/dbExpress/ODBCPostgreSQL" target="_blank">here</a>.</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/using-dbexpress-framework-on-windows-and-mac-with-cbuilder/" title="Using dbExpress Framework on Windows and Mac with C++Builder">Using dbExpress Framework on Windows and Mac with C++Builder</a></li><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/en/a-little-bit-about-firemonkey-and-delphi-xe2/" title="A little bit about FireMonkey and Delphi XE2">A little bit about FireMonkey and Delphi XE2</a></li><li><a href="http://www.andreanolanusse.com/en/new-dbexpress-driver-for-firebird-in-delphi-2010-and-cbuilder-2010/" title="Video: New dbExpress driver for Firebird in Delphi 2010 and C++Builder 2010">Video: New dbExpress driver for Firebird in Delphi 2010 and C++Builder 2010</a></li><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/" title="Using Regular Expression on C++Builder FireMonkey Application">Using Regular Expression on C++Builder FireMonkey Application</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Update 2 for Delphi XE2, C++Builder XE2 and RadPHP XE2 available</title>
		<link>http://www.andreanolanusse.com/en/update-2-for-delphi-xe2-cbuilder-xe2-and-radphp-xe2-available/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=update-2-for-delphi-xe2-cbuilder-xe2-and-radphp-xe2-available</link>
		<comments>http://www.andreanolanusse.com/en/update-2-for-delphi-xe2-cbuilder-xe2-and-radphp-xe2-available/#comments</comments>
		<pubDate>Tue, 01 Nov 2011 22:30:47 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[C++Builder]]></category>
		<category><![CDATA[Delphi]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[HotFix]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=720</guid>
		<description><![CDATA[<p>The Update 2 for the XE2 release of Delphi, C++Builder and RadPHP are available on the following links. You can download Update 2 for Delphi and C++Builder through the &#8220;Check for Updates&#8221; option. RAD Studio XE2 Update 2 Update 2 for Delphi, C++Builder and RAD Studio XE2 - http://cc.embarcadero.com/item/28597 Delphi XE2 and C++Builder XE2 ISO (includes [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>The Update 2 for the XE2 release of Delphi, C++Builder and RadPHP are available on the following links.</p>
<p>You can download Update 2 for Delphi and C++Builder through the &#8220;Check for Updates&#8221; option.</p>
<div class="avia-box alert large  rounded "><span class="avia-innerbox" >If you have your Delphi XE2 or C++Builder XE2 IDE installed on XP, you have to download the Update from the registered user page.</span></div>
<p><strong>RAD Studio XE2 Update 2</strong></p>
<ul>
<li>Update 2 for Delphi, C++Builder and RAD Studio XE2 - <a href="http://cc.embarcadero.com/item/28597" target="_blank">http://cc.embarcadero.com/item/28597</a></li>
<li>Delphi XE2 and C++Builder XE2 ISO (includes Update 2) - <a href="http://cc.embarcadero.com/item/28616" target="_blank">http://cc.embarcadero.com/item/28616</a></li>
<li>Delphi XE2 and C++Builder XE2 Update 2 Bug Fix List -  <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><a href="http://cc.embarcadero.com/item/28613">http://cc.embarcadero.com/item/28613</a></p>
<p><strong>RadPHP XE2 Update 2</strong></p>
<ul>
<li>Update 2 for RadPHP - <a href="http://cc.embarcadero.com/item/28614">http://cc.embarcadero.com/item/28614</a></li>
<li>RadPHP XE2 Update 2 Bug Fix List - <a href="http://edn.embarcadero.com/article/41756">http://edn.embarcadero.com/article/41756</a></li>
</ul>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/hotfix-2-and-help-update-2-for-delphi-xe-cbuilder-xe-and-rad-studio-xe-available/" title="Hotfix 2 and Help Update 2 for Delphi XE, C++Builder XE and RAD Studio XE available">Hotfix 2 and Help Update 2 for Delphi XE, C++Builder XE and RAD Studio XE available</a></li><li><a href="http://www.andreanolanusse.com/en/hotfix-1-for-delphi-xe-cbuilder-xe-and-rad-studio-xe-available/" title="Hotfix 1 for Delphi XE, C++Builder XE and RAD Studio XE available">Hotfix 1 for Delphi XE, C++Builder XE and RAD Studio XE available</a></li><li><a href="http://www.andreanolanusse.com/en/update-1-for-delphi-xe-and-cbuilder-xe-now-available/" title="Update 1 for Delphi XE and C++Builder XE now available">Update 1 for Delphi XE and C++Builder XE now available</a></li><li><a href="http://www.andreanolanusse.com/en/rad-studio-2010-hotfix-2-available/" title="RAD Studio 2010 Hotfix 2 available">RAD Studio 2010 Hotfix 2 available</a></li><li><a href="http://www.andreanolanusse.com/en/its-time-to-move-on/" title="It&#8217;s time to move on">It&#8217;s time to move on</a></li><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/update-2-for-delphi-xe2-cbuilder-xe2-and-radphp-xe2-available/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Creating XML files with Delphi and FireMonkey on Mac</title>
		<link>http://www.andreanolanusse.com/en/creating-xml-files-with-delphi-and-firemonkey-on-mac/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=creating-xml-files-with-delphi-and-firemonkey-on-mac</link>
		<comments>http://www.andreanolanusse.com/en/creating-xml-files-with-delphi-and-firemonkey-on-mac/#comments</comments>
		<pubDate>Thu, 27 Oct 2011 11:19:40 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[FireMonkey]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=717</guid>
		<description><![CDATA[<p>I got some questions about how to manipulate XML files in FireMonkey applications when running on Mac. One of the solution for that is to use the Mac API (Cocoa), there are several class and different ways to work with XML on Mac, in this post I&#8217;m going to show one way to create an [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>I got some questions about how to manipulate XML files in <a href="http://www.embarcadero.com/products/firemonkey" target="_blank">FireMonkey</a> applications when running on Mac.</p>
<p>One of the solution for that is to use the Mac API (Cocoa), there are several class and different ways to work with XML on Mac, in this post I&#8217;m going to show one way to create an XML file, if you are interested to learn more about the XML class available for Mac, visit the Apple documentation <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/NSXML_Concepts/NSXML.html#//apple_ref/doc/uid/TP40001269" target="_blank">website</a>.</p>
<p>Cocoa provide several classes/interfaces to work with XML, the sample project used on this post use <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLDocument_Class/Reference/Reference.html#//apple_ref/occ/cl/NSXMLDocument" target="_blank">NSXMLDocument</a>, <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLElement_Class/Reference/Reference.html#//apple_ref/occ/cl/NSXMLElement" target="_blank">NSXMLElement</a>, <a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSXMLNode_Class/Reference/Reference.html" target="_blank">NSXMLNode</a> and NSData interfaces and related classes, all of them can be found in the Macapi.Foundation unit.</p>
<p>The NSXMLDocument interface and TNSXMLDocument class are the starting point to create the XML Document, where we define the version and encoding for the XML file.</p>
<pre class="brush: delphi">procedure TFrmXml.CreateXMLButtonClick(Sender: TObject);
var
  XmlDoc: NSXMLDocument;
  Root, Book, Author, Publisher: NSXMLElement;
  Data: NSData;
begin

  // Create Xml Document
  XmlDoc := TNSXMLDocument.Create;
  XmlDoc.setVersion(NSSTR('1.0'));
  XmlDoc.setCharacterEncoding(NSSTR('UTF-8'));</pre>
<p>After that we need to define what XML elements (nodes) will be added to the XML, since I&#8217;m going to create several elements I created three helper methods (CreateElement and Attribute) to help me with that.</p>
<p>The CreateElement method has two implementations, the first one is very simple, just create a new TNSXMLElement based on the name and value parameters.</p>
<pre class="brush: delphi">function TFrmXml.CreateElement(Name, Value: String): NSXMLElement;
begin
  Result := TNSXMLElement.Create;
  Result.setName(NSSTR(Name));
  Result.setStringValue(NSSTR(Value));
end;</pre>
<p>The second CreateElement implementation creates a new element which can contain attributes, in order to pass a NSXMLNode that represent a attribute, we will use the Attribute helper method.</p>
<pre class="brush: delphi">function TFrmXml.CreateElement(Name: String; Attr: NSXMLNode): NSXMLElement;
begin
  Result := TNSXMLElement.Create;
  Result.initWithName(NSSTR(Name));

  if Assigned(Attr) then
    Result.addAttribute(Attr);
end;</pre>
<p>Below a short overview about the NSXMLNode class extracted from Apple documentation:</p>
<blockquote><p>Objects of the NSXMLNode class are nodes in the abstract, logical tree structure that represents an XML document. Node objects can be of different kinds, corresponding to the following markup constructs in an XML document: element, attribute, text, processing instruction, namespace, and comment. In addition, a document-node object (specifically, an instance of NSXMLDocument) represents an XML document in its entirety. NSXMLNode objects can also represent document type declarations as well as declarations in Document Type Definitions (DTDs). Class factory methods of NSXMLNode enable you to create nodes of each kind. Only document, element, and DTD nodes may have child nodes.</p>
<p>Among the NSXML family of classes—that is, the Foundation classes with the prefix “NSXML” (excluding NSXMLParser)—the NSXMLNode class is the base class. Inheriting from it are the classes NSXMLElement, NSXMLDocument, NSXMLDTD, and NSXMLDTDNode. NSXMLNode specifies the interface common to all XML node objects and defines common node behavior and attributes, for example hierarchy level, node name and value, tree traversal, and the ability to emit representative XML markup text.</p></blockquote>
<p>NSXMLNode could be a comment, text, element and other types in Cocoa, the Attribute helper method ensure we will receive a NSXMLNode of type attribute.</p>
<pre class="brush: delphi">function TFrmXml.Attribute(Name, Value: String): NSXMLNode;
var
  Node: Pointer;
begin
  Node := TNSXMLNode.OCClass.attributeWithName(NSSTR(Name), NSSTR(Value));
  Result := TNSXMLNode.Wrap(Node);
end;</pre>
<p>&nbsp;</p>
<p>Now is time to use the helper methods to create the XML document and at the end use the NSData object to format and save the XML file. This is what the following code does:</p>
<pre class="brush: delphi">  // Create the root doc element including one attribute
  Root := CreateElement('BookStore', Attribute('url', 'http://www.amazon.com'));
  XmlDoc.initWithRootElement(Root);

  // Create the first Book node
  Book := CreateElement('Book', Attribute('Name', 'Steve Jobs'));

  // Create the Author and Publisher elements
  Author := CreateElement('Author', 'Walter Isaacson');
  Publisher := CreateElement('Publisher', 'Simon Schuster (October 24, 2011)');

  // Add the elements to the XML
  Root.addChild(Book);
  Book.addChild(Author);
  Book.addChild(Publisher);

  // Create the second Book node
  Book := CreateElement('Book', Attribute('Name',
    'Clean Code: A Handbook of Agile Software Craftsmanship'));
  Author := CreateElement('Author', 'Robert C. Martin');
  Publisher := CreateElement('Publisher',
    'Prentice Hall; 1 edition (August 11, 2008)');

  // Add the elements from the second Book node to the XML
  Root.addChild(Book);
  Book.addChild(Author);
  Book.addChild(Publisher);

  // Makes the Xml output more human-readable inserting
  // carriage returns and indenting nested elements
  Data := XmlDoc.XMLDataWithOptions(NSXMLNodePrettyPrint);
  Data.writeToFile(NSSTR(XMLLocation.Text), true);

  XmlContent.Lines.LoadFromFile(XMLLocation.Text);

end;

end.</pre>
<p>Here the resulting app on Mac OS X:</p>
<p><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2011/10/FMX_Creating_XML.png"><img class="aligncenter size-full wp-image-718" title="FireMonkey app creating XML on Mac" src="http://www.andreanolanusse.com/en/wp-content/uploads/2011/10/FMX_Creating_XML.png" alt="" width="558" height="441" /></a></p>
<p>You can download the source code directly from the RAD Studio demos repository <a href="https://radstudiodemos.svn.sourceforge.net/svnroot/radstudiodemos/branches/RadStudio_XE2/FireMonkey/XMLonMac" target="_blank">here</a>.</p>
<p>I originally mention that TXMLDocument was not available for Mac, and this is incorrect, thanks Chris Rolliston for the heads up and to migrate my sample to TXMLDocument.</p>
<p>When you drop a TXMLDocument component on your design the default DOMVendor MSXML, you have to change to ADOM XML v4 to support cross-platform. In case you have the unit Xml.Win.msxmldom added on your form you won&#8217;t be able to compile for Mac, after you set the DOMVendor to ADOM XML v4 remove that unit from your code and everything will be fine.</p>
<p>Here the version using TXMLDocument:</p>
<pre class="brush: delphi">
unit MainForm;

interface

uses
  System.SysUtils, System.Types, System.UITypes, System.Classes,
  System.Variants, XML.XMLDoc, FMX.Dialogs,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Layouts,
  FMX.Memo, FMX.Edit, FMX.Effects, FMX.Objects, Xml.xmldom, Xml.XMLIntf;

type
  TFrmXml = class(TForm)
    CreateXMLButton: TButton;
    XmlContent: TMemo;
    XMLLocation: TEdit;
    Label1: TLabel;
    Image1: TImage;
    procedure CreateXMLButtonClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  end;

var
  FrmXml: TFrmXml;

implementation

{$R *.fmx}

procedure TFrmXml.CreateXMLButtonClick(Sender: TObject);
var
  XmlDoc: IXMLDocument;
  Root, Book, Author, Publisher: IXMLNode;
begin
  // Create Xml Document
  XmlDoc := TXMLDocument.Create(nil);
  XmlDoc.Active := True;
  XmlDoc.Options := XmlDoc.Options + [doNodeAutoIndent];
  XmlDoc.Version := '1.0';

  // Create the root doc element with one attributes
  Root := XmlDoc.CreateNode('BookStore');
  Root.Attributes['url'] := 'http://www.amazon.com';
  XmlDoc.DocumentElement := Root;

  // Create the first Book node
  Book := XmlDoc.CreateNode('Book');
  Book.Attributes['Name'] := 'Steve Jobs';

  // Create the Author and Publisher elements
  Author := XmlDoc.CreateNode('Author');
  Author.Text := 'Walter Isaacson';
  Publisher := XmlDoc.CreateNode('Publisher');
  Publisher.Text := 'Simon Schuster (October 24, 2011)';

  // Add the elements to the XML
  Root.ChildNodes.Add(Book);
  Book.ChildNodes.Add(Author);
  Book.ChildNodes.Add(Publisher);

  // Create the second Book node
  Book := XmlDoc.CreateNode('Book');
  Book.Attributes['Name'] := 'Clean Code: A Handbook of Agile Software Craftsmanship';
  Author := XmlDoc.CreateNode('Author');
  Author.Text := 'Robert C. Martin';
  Publisher := XmlDoc.CreateNode('Publisher');
  Publisher.Text := 'Prentice Hall; 1 edition (August 11, 2008)';

  // Add the elements from the second Book node to the XML
  Root.ChildNodes.Add(Book);
  Book.ChildNodes.Add(Author);
  Book.ChildNodes.Add(Publisher);

  XmlDoc.SaveToFile(XMLLocation.Text);

  XmlContent.Lines.LoadFromFile(XMLLocation.Text);

end;

procedure TFrmXml.FormCreate(Sender: TObject);
begin
  XMLLocation.Text := IncludeTrailingPathDelimiter(GetHomePath) + 'create.xml';
end;

end.
</pre>
<p>With this you have everything you need to manipulate XML file on Windows and Mac.</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/connecting-to-postgresql-through-dbexpress-odbc-driver/" title="Connecting to PostgreSQL through dbExpress ODBC driver">Connecting to PostgreSQL through dbExpress ODBC driver</a></li><li><a href="http://www.andreanolanusse.com/en/video-delphi-xe2-and-firemonkey-app-on-windows-mac-and-ios/" title="Video: Delphi XE2 and FireMonkey app on Windows, Mac and iOS">Video: Delphi XE2 and FireMonkey app on Windows, Mac and iOS</a></li><li><a href="http://www.andreanolanusse.com/en/a-little-bit-about-firemonkey-and-delphi-xe2/" title="A little bit about FireMonkey and Delphi XE2">A little bit about FireMonkey and Delphi XE2</a></li><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/using-regular-expression-on-cbuilder-firemonkey-application/" title="Using Regular Expression on C++Builder FireMonkey Application">Using Regular Expression on C++Builder FireMonkey Application</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/creating-xml-files-with-delphi-and-firemonkey-on-mac/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Publishing providers when registering DataSnap Server Class in runtime</title>
		<link>http://www.andreanolanusse.com/en/publishing-providers-when-registering-datasnap-server-class-in-runtime/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=publishing-providers-when-registering-datasnap-server-class-in-runtime</link>
		<comments>http://www.andreanolanusse.com/en/publishing-providers-when-registering-datasnap-server-class-in-runtime/#comments</comments>
		<pubDate>Tue, 25 Oct 2011 00:13:14 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[DataSnap]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=708</guid>
		<description><![CDATA[<p>A while ago I published a blog post about How to register DataSnap Server Class in runtime with Delphi, after that I got some feedback mentioning the source code I provided just publishes the Server Methods, and not the Providers as part of the Server Module, in other words the client application couldn&#8217;t see the Providers available [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>A while ago I published a blog post about <a href="http://www.andreanolanusse.com/en/registering-datasnap-server-class-in-runtime-with-delphi/">How to register DataSnap Server Class in runtime with Delphi</a>, after that I got some feedback mentioning the source code I provided just publishes the Server Methods, and not the Providers as part of the Server Module, in other words the client application couldn&#8217;t see the Providers available on the DataSnap Server.</p>
<p>The solution for this issue is very simple, we just need to register the TDSProviderDataModuleAdapter class, which is used internally to allow a TProviderDataModule to be exposed to DataSnap clients. TDSProviderDataModuleAdapter acts as a proxy between a server-side TProviderDataModule and client-sides TDSProviderConnection.</p>
<p>We could just update the GetDSClass method implementation as below, it works, but it would not be the best implementation, just because the following code will always publish the IAppServer interface methods to the client side, in case your ServerModule doesn&#8217;t have any Provider, why you will publish the IAppServer? Doesn&#8217;t make sense, right?</p>
<p>Making the publication parameterizable will bring more flexibility and control to the application and the developer, it will be your decision to publish the Providers or not. A new parameter in the TSimpleServerClass constructor is everything we need.</p>
<p><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">function TSimpleServerClass.GetDSClass: TDSClass;</span></p>
<pre class="brush: delphi">begin
  Result := TDSClass.Create(FPersistentClass, False);
  Result := TDSClass.Create(TDSProviderDataModuleAdapter, Result)
end;</pre>
<p>The following code represents the new implementation for the TSimpleServerClass. The change adds a new parameter (ExposeProvider) to the constructor, which will allow the developer to publish the providers (or not).</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>The following code registers 3 classes, where only one exposes the Providers:</p>
<pre class="brush: delphi">procedure RegisterServerClasses(AOwner: TComponent; AServer: TDSServer);
begin
  Assert(AServer.Started = false, 'Can''t add class to non active Server');

  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">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li><li><a href="http://www.andreanolanusse.com/en/caching-data-on-datasnap-server/" title="Caching data on DataSnap Server">Caching data on DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/copying-data-from-clientdataset-to-dbxreader/" title="Copying data from ClientDataSet to DBXReader">Copying data from ClientDataSet to DBXReader</a></li><li><a href="http://www.andreanolanusse.com/en/video-connecting-android-applications-with-datasnap-server-delphi-conference-brazil-2010/" title="Video: Connecting Android applications with DataSnap Server – Delphi Conference Brazil 2010">Video: Connecting Android applications with DataSnap Server – Delphi Conference Brazil 2010</a></li><li><a href="http://www.andreanolanusse.com/en/datasnap-videos-for-2011-what-would-you-like-to-see/" title="DataSnap videos for 2011 – what would you like to see?">DataSnap videos for 2011 – what would you like to see?</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/publishing-providers-when-registering-datasnap-server-class-in-runtime/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ReportBuilder now available for Delphi XE2, VCL Win32 and Win64</title>
		<link>http://www.andreanolanusse.com/en/reportbuilder-now-available-for-delphi-xe2-vcl-win32-and-win64/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=reportbuilder-now-available-for-delphi-xe2-vcl-win32-and-win64</link>
		<comments>http://www.andreanolanusse.com/en/reportbuilder-now-available-for-delphi-xe2-vcl-win32-and-win64/#comments</comments>
		<pubDate>Mon, 24 Oct 2011 05:28:41 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=712</guid>
		<description><![CDATA[<p>Digital Metaphors the creator of ReportBuilder and our technology partner, announced the new release of Report Builder 14, this release support Delphi XE2, VCL Win32 and Win64. The following text is an email from Digital Metaphors, which include all the information about this new release. Subject: Digital Metaphors Corporation announces the release of ReportBuilder 14.0! [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Digital Metaphors the creator of ReportBuilder and our technology partner, announced the new release of Report Builder 14, this release support Delphi XE2, VCL Win32 and Win64.</p>
<p>The following text is an email from Digital Metaphors, which include all the information about this new release.</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">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li><li><a href="http://www.andreanolanusse.com/en/its-time-to-move-on/" title="It&#8217;s time to move on">It&#8217;s time to move on</a></li><li><a href="http://www.andreanolanusse.com/en/700-delphi-developers-at-delphi-conference-brazil/" title="700 Delphi Developers at Delphi Conference Brazil">700 Delphi Developers at Delphi Conference Brazil</a></li><li><a href="http://www.andreanolanusse.com/en/white-paper-reasons-to-migrate-to-delphi-xe2-what-you-might-have-missed-since-delphi-7/" title="White Paper: Reasons to Migrate to Delphi XE2 | What you might have missed since Delphi 7">White Paper: Reasons to Migrate to Delphi XE2 | What you might have missed since Delphi 7</a></li><li><a href="http://www.andreanolanusse.com/en/copyreadertoclientdataset-blob-and-the-message-feature-not-implemented/" title="CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;">CopyReaderToClientDataSet, Blob and the message &#8220;Feature not implemented&#8221;</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/reportbuilder-now-available-for-delphi-xe2-vcl-win32-and-win64/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Shell Extension for Windows 32-bit and 64-bit with Delphi XE2</title>
		<link>http://www.andreanolanusse.com/en/shell-extension-for-windows-32-bit-and-64-bit-with-delphi-xe2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=shell-extension-for-windows-32-bit-and-64-bit-with-delphi-xe2</link>
		<comments>http://www.andreanolanusse.com/en/shell-extension-for-windows-32-bit-and-64-bit-with-delphi-xe2/#comments</comments>
		<pubDate>Fri, 14 Oct 2011 23:37:55 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Cloud]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=702</guid>
		<description><![CDATA[<p>Now that Delphi XE2 compiles for 64-bit, developers can go beyond Windows 32-bit and start creating Windows Shell Extension for Windows 64-bit. Shell Extensions are in-process COM objects which extends the abilities of Windows OS. In this post I&#8217;m going to add two new context menu items in Windows Explorer. The menus will allow users [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>Now that <a href="http://www.embarcadero.com/products/delphi" target="_blank">Delphi XE2</a> compiles for 64-bit, developers can go beyond Windows 32-bit and start creating Windows Shell Extension for Windows 64-bit. Shell Extensions are in-process COM objects which extends the abilities of Windows OS. In this post I&#8217;m going to add two new context menu items in Windows Explorer. The menus will allow users to upload files to Microsoft Azure and Amazon S3. This post will go through how to create the extension, register and compile for 32-bit and 64-bit. I&#8217;m preparing another post, in which I will explain how to upload files to Amazon S3 and Microsoft Azure.</p>
<h3>Creating the CloudUpload Shell Extension</h3>
<p>In order to start creating a Shell Extension in Delphi, you first need to create an ActiveX Library project and after that create a new Automation Object. In the example I use for this post, the project name is CloudUpload and the Automation Object is called TCloudUploadContext. The TCloudUploadContext class must implement the interfaces IShellExtInit and IContextMenu in order to integrate the Context Menu in Windows Explorer.</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>The ShellExtInitialize defines if the Context Menu will appear or not in Windows Explorer. In this sample the context menu only shows up if one file has been selected, otherwise no Context Menu. In case only one file was selected the FFileName variable will receive the name of the file.</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>After the context menu handler is initialized via the IShellExtInit interface, Windows uses the IContextMenu interface to call the other methods of our context menu handler. In this case it will call QueryContextMenu, GetCommandString and InvokeCommand.</p>
<p>The Context Menu options (<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>) will be created through the QueryContextMenu method.</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>When you are in the Windows Explorer and you pass the mouse over one of the Cloud menu items a short help message is displayed in the Windows Explorer status bar, it is defined on the implementation of the method GetCommandString, which returns a string to the Windows Explorer to display.</p>
<p><span class="Apple-style-span" style="font-family: Consolas, Monaco, monospace; font-size: 12px; line-height: 18px; white-space: pre;">function TCloudUploadContextMenu.GetCommandString(idCmd: UINT_PTR; uFlags: UINT;</span></p>
<pre class="brush: delphi">  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>As the user clicks in one of the Cloud menu items, the method InvokeCommand will be called and start the process to upload the selected file to the Cloud selected. At this point we already have the file name and based on the lpici parameters we can identify what menu item the user clicked.</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>In order for the COM object to be created whenever the CloudUpload is loaded, it&#8217;s necessary to create an instance of a class factory that specifically creates an instance of the shell extension object, the factory instance will be created on the initialization section, based on the following code, which is a replacement for the default code created by Delphi.</p>
<pre class="brush: delphi">initialization
  TCloudUploadObjectFactory.Create(ComServer, TCloudUploadContextMenu, CLASS_CloudUploadContextMenu, ciMultiInstance, tmApartment);
end.</pre>
<p>Since the class factory will be responsible to register/unregister the DLL, the methods ApproveShellExtension and UpdateRegistry will be invoked, it will happen when you use the 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>Compile for 32-bit or 64-bit platform</h3>
<p>At this point we just need to compile the extension, for this sample the Win APIs and RTL methods are the same for both platforms, we don&#8217;t need any specific code. You can define the target platform through the Project Manager, by default your project target 32-bit Windows, right click on Target Platforms to add 64-bit Windows.<br />
<a href="http://www.andreanolanusse.com/en/wp-content/uploads/2011/10/Platform3264.png"><img class="aligncenter" title="Delphi XE2 - 32-bit or 64-bit platform" src="http://www.andreanolanusse.com/en/wp-content/uploads/2011/10/Platform3264-209x300.png" alt="" width="209" height="300" /></a></p>
<p>You can&#8217;t register 32-bit dll in 64-bit operation system, and you can not register 64-bit dll in 32-bit operation system. If you are using your develop machine to test, compile for the platform compatible with your OS.</p>
<p>&nbsp;</p>
<h3>Registering the CloudUpload Shell Extension</h3>
<p>First, you must Run as Administrator the application you are going to use to register the shell extensions even if you are the Administrator user.</p>
<p>32-bit shell extensions can be registered through the IDE, and command line (cmd) can be used to register 32-bit and 64-bit.</p>
<p>Here the cmd line to register and unregister:</p>
<p>- Run as Administrator the cmd;</p>
<p>- Register the extension using the following command line: regsvr32 &lt;PATH WHERE IS LOCATED THE DLL&gt;CloudUpload.dll</p>
<p>- To unregister the extension using the following command line: regsvr32 &lt;PATH WHERE IS LOCATED THE DLL&gt;CloudUpload.dll /u</p>
<p>After register the DLL you can open the Windows Explorer, select one file and right click, you will see the new menu &#8220;Send file from Explorer to the Cloud&#8221;. The following screenshot show the shell extension on my Windows 7 64-bit.</p>
<p style="text-align: center;"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2011/10/Cloud-ShellExtension.png"><img class="aligncenter size-full wp-image-703" title="CloudUpload Shell Extension" src="http://www.andreanolanusse.com/en/wp-content/uploads/2011/10/Cloud-ShellExtension.png" alt="" width="554" height="385" /></a></p>
<p>You can download he source code in 2 different ways:</p>
<ul>
<li>Use the <a href="http://www.embarcadero.com/products/rad-studio/downloads" target="_blank">RAD Studio XE2 IDE</a> menu File option &#8220;Open from Version Control&#8221; and set the URL to <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>Update your RAD Studio XE2 local demo repository, in case you use TortoiseSVN just right click on the C:\Users\Public\Documents\RAD Studio\9.0\Samples\Delphi folder and select update;</li>
</ul>
<div>In the next post I will explain the Cloud API part of this sample, in the meantime you can play with full sample.</div>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/microsoft-windows-azure-during-30-days-free/" title="Microsoft Windows Azure during 30 days FREE">Microsoft Windows Azure during 30 days FREE</a></li><li><a href="http://www.andreanolanusse.com/en/test-our-datasnap-xe-live-server-on-amazon-cloud/" title="Test our DataSnap XE Live Server on Amazon Cloud">Test our DataSnap XE Live Server on Amazon Cloud</a></li><li><a href="http://www.andreanolanusse.com/en/datasnap-xe-and-windows-azure-rad-studio-xe-preview-3/" title="DataSnap XE and Windows Azure – RAD Studio XE Preview #3">DataSnap XE and Windows Azure – RAD Studio XE Preview #3</a></li><li><a href="http://www.andreanolanusse.com/en/firemonkey-3d-text-editor/" title="FireMonkey 3D Text Editor">FireMonkey 3D Text Editor</a></li><li><a href="http://www.andreanolanusse.com/en/amazon-web-service-aws-is-the-first-choice-for-php-developers/" title="Amazon Web Services (AWS) is the first choice for PHP Developers">Amazon Web Services (AWS) is the first choice for PHP Developers</a></li><li><a href="http://www.andreanolanusse.com/en/android-apps-connected-to-delphi-datasnap-server/" title="Android apps connected to Delphi DataSnap Server">Android apps connected to Delphi DataSnap Server</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/shell-extension-for-windows-32-bit-and-64-bit-with-delphi-xe2/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Delphi Certification Program and Delphi XE2 release</title>
		<link>http://www.andreanolanusse.com/en/delphi-certification-program-and-delphi-xe2-release/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=delphi-certification-program-and-delphi-xe2-release</link>
		<comments>http://www.andreanolanusse.com/en/delphi-certification-program-and-delphi-xe2-release/#comments</comments>
		<pubDate>Tue, 27 Sep 2011 08:26:50 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Delphi]]></category>
		<category><![CDATA[Certification]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=700</guid>
		<description><![CDATA[<p>During the world tour, lots of Delphi developers ask me if the Delphi Certification Program is up to date with the Delphi XE2 release, the answer is YES. The certification program tests your knowledge in Delphi, we recommend you to use Delphi XE or XE2 release in order to be prepared to answers questions related [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>During the world tour, lots of Delphi developers ask me if the Delphi Certification Program is up to date with the Delphi XE2 release, the answer is YES.</p>
<p>The certification program tests your knowledge in Delphi, we recommend you to use Delphi XE or XE2 release in order to be prepared to answers questions related with the IDE, generics, anonymous methods, DataSnap, unicode, and other areas, which was implemented/improved after 2009 releases.</p>
<div class="avia-box alert   rounded "><span class="avia-innerbox" >You can buy the Delphi Certification from our online shop or local partner, If you purchase or upgrade to <a href="http://www.embarcadero.com/products/delphi" target="_blank">Delphi XE2</a> or <a href="http://www.embarcadero.com/products/rad-studio" target="_blank">RAD Studio XE2</a> by September 30th 2011, you can get a free code to take the Delphi Developer Certification exam.</span></div>
<p>The Delphi Certification program allows you to distinguish yourself from all the other professionals in this increasingly competitive marketplace.</p>
<p>&nbsp;</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/delphi-developer-certification-tips-3/" title="Delphi Developer Certification Tips #3">Delphi Developer Certification Tips #3</a></li><li><a href="http://www.andreanolanusse.com/en/video-delphi-certification-webinar-replay/" title="Video: Delphi Certification Webinar Replay">Video: Delphi Certification Webinar Replay</a></li><li><a href="http://www.andreanolanusse.com/en/free-delphi-certification-for-delphi-xe-and-rad-studio-xe-registered-users/" title="FREE Delphi Certification for Delphi XE and RAD Studio XE registered users">FREE Delphi Certification for Delphi XE and RAD Studio XE registered users</a></li><li><a href="http://www.andreanolanusse.com/en/delphi-developer-certification-tips-2/" title="Delphi Developer Certification Tips #2">Delphi Developer Certification Tips #2</a></li><li><a href="http://www.andreanolanusse.com/en/delphi-developer-certification-tips-1/" title="Delphi Developer Certification Tips #1">Delphi Developer Certification Tips #1</a></li><li><a href="http://www.andreanolanusse.com/en/delphi-certification-program-official-announcement/" title="Delphi Certification Program &#8211; Official Announcement">Delphi Certification Program &#8211; Official Announcement</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/delphi-certification-program-and-delphi-xe2-release/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>My next 2 RAD Studio XE2 Launch stops</title>
		<link>http://www.andreanolanusse.com/en/my-next-2-rad-studio-xe2-launch-stops/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=my-next-2-rad-studio-xe2-launch-stops</link>
		<comments>http://www.andreanolanusse.com/en/my-next-2-rad-studio-xe2-launch-stops/#comments</comments>
		<pubDate>Sun, 11 Sep 2011 10:10:50 +0000</pubDate>
		<dc:creator>Andreano Lanusse</dc:creator>
				<category><![CDATA[Events]]></category>

		<guid isPermaLink="false">http://www.andreanolanusse.com/en/?p=690</guid>
		<description><![CDATA[<p>During the last 30 days I have been in the road launching the new RAD Studio XE2, so far 14 cities located in 6 different countries and almost 50 thousand miles flown. Thank you everyone who attended our events around the world, developers are very excited and impressed with all of the new features in [...]</p><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></description>
			<content:encoded><![CDATA[<p>During the last 30 days I have been in the road launching the new RAD Studio XE2, so far 14 cities located in 6 different countries and almost 50 thousand miles flown.</p>
<p>Thank you everyone who attended our events around the world, developers are very excited and impressed with all of the new features in this release, like: 64-bit, VCL Styles, DataSnap Connectors, Web apps optimized for mobile devices with RadPHP, LiveBinding, FireMonkey and the ability do develop desktop applications for Windows, Mac and iOS, etc.</p>
<p style="text-align: center;"><iframe src="http://maps.google.com/maps/ms?msa=0&amp;msid=205039802295514326412.0004aca57f9b5c7123b9a&amp;ie=UTF8&amp;ll=8.144534,-79.123535&amp;spn=85.627786,88.374024&amp;t=m&amp;vpsrc=6&amp;output=embed" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" width="350" height="375"></iframe></p>
<p style="text-align: center;"><small>View <a style="color: #0000ff; text-align: left;" href="http://maps.google.com/maps/ms?msa=0&amp;msid=205039802295514326412.0004aca57f9b5c7123b9a&amp;ie=UTF8&amp;ll=8.144534,-79.123535&amp;spn=85.627786,88.374024&amp;t=m&amp;vpsrc=6&amp;source=embed" target="_blank">My stops during Rad Studio XE2 World Tour</a> in a larger map</small></p>
<p>My schedule for this weekend:</p>
<ul>
<li>Tuesday (13/Sep) &#8211; Bogota, Colombia &#8211; registration and more info <a href="http://forms.embarcadero.com/forms/AMLATAM1109RADXE2Tour-BogotaColombia" target="_blank">here</a></li>
<li>Thursday (15/Sep) &#8211; Denver, USA &#8211; registration and more info <a href="http://forms.embarcadero.com/forms/RADStudioXE2WorldTour-Denver" target="_blank">here</a></li>
</ul>
<div>Here are some shots from the sessions:</div>
<div class="mceTemp" style="text-align: center;">
<dl id="attachment_695" class="wp-caption  alignnone" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2011/09/2011-XE2-SaoPaulo.jpg"><img class="size-medium wp-image-695" title="São Paulo - RAD Studio XE2 World Tour" src="http://www.andreanolanusse.com/en/wp-content/uploads/2011/09/2011-XE2-SaoPaulo-300x225.jpg" alt="" width="300" height="225" /></a></dt>
<dd class="wp-caption-dd">Sao Paulo, Brazil &#8211; RAD Studio XE2 World Tour</dd>
</dl>
</div>
<div class="mceTemp" style="text-align: center;">
<dl id="attachment_693" class="wp-caption  alignnone" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2011/09/2011-XE2-Mexico-2.jpg"><img class="size-medium wp-image-693" title="Mexico City - RAD Studio XE2 World Tour" src="http://www.andreanolanusse.com/en/wp-content/uploads/2011/09/2011-XE2-Mexico-2-300x198.jpg" alt="" width="300" height="198" /></a></dt>
<dd class="wp-caption-dd">Mexico City &#8211; RAD Studio XE2 World Tour</dd>
</dl>
</div>
<div class="mceTemp" style="text-align: center;">
<dl id="attachment_692" class="wp-caption  alignnone" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2011/09/2011-XE2-Guadalajara.jpg"><img class="size-medium wp-image-692" title="Guadalajara - RAD Studio XE2 World Tour" src="http://www.andreanolanusse.com/en/wp-content/uploads/2011/09/2011-XE2-Guadalajara-300x198.jpg" alt="" width="300" height="198" /></a></dt>
<dd class="wp-caption-dd">Guadalajara, Mexico &#8211; RAD Studio XE2 World Tour</dd>
</dl>
</div>
<div class="mceTemp" style="text-align: center;">
<dl id="attachment_691" class="wp-caption  alignnone" style="width: 310px;">
<dt class="wp-caption-dt"><a href="http://www.andreanolanusse.com/en/wp-content/uploads/2011/09/2011-XE2-Chicago.jpg"><img class="size-medium wp-image-691" title="Chicago - RAD Studio XE2 World Tour" src="http://www.andreanolanusse.com/en/wp-content/uploads/2011/09/2011-XE2-Chicago-300x224.jpg" alt="" width="300" height="224" /></a></dt>
<dd class="wp-caption-dd">Chicago, USA &#8211; RAD Studio XE2 World Tour</dd>
</dl>
</div>
<p style="text-align: center;">There are more 42 stops for the RAD Studio XE2 World Tour, check the list of cities/countries and <a href="http://www.embarcadero.com/world-tour" target="_blank">register</a> today for the city near you.</p>
<h2  class="related_post_title">Related Posts</h2><ul class="related_post"><li><a href="http://www.andreanolanusse.com/en/david-i-keynote-at-delphi-conference-brazil/" title="David I Keynote at Delphi Conference Brazil">David I Keynote at Delphi Conference Brazil</a></li><li><a href="http://www.andreanolanusse.com/en/rad-studio-xe-world-tour-week-in-us/" title="RAD Studio XE World Tour week in US">RAD Studio XE World Tour week in US</a></li><li><a href="http://www.andreanolanusse.com/en/delphi-conference-brazil-rocks/" title="Delphi Conference Brazil Rocks!!!">Delphi Conference Brazil Rocks!!!</a></li><li><a href="http://www.andreanolanusse.com/en/delphi-2010-launch-in-mexico-d-f-record-of-attendance/" title="Delphi 2010 launch in Mexico D.F. RECORD OF ATTENDANCE">Delphi 2010 launch in Mexico D.F. RECORD OF ATTENDANCE</a></li><li><a href="http://www.andreanolanusse.com/en/delphi-2010-launch-in-guadalajara-mexico/" title="Delphi 2010 launch in Guadalajara, Mexico">Delphi 2010 launch in Guadalajara, Mexico</a></li><li><a href="http://www.andreanolanusse.com/en/rad-studio-launch-in-mexico-and-guadalara/" title="RAD Studio launch in Mexico and Guadalajara">RAD Studio launch in Mexico and Guadalajara</a></li></ul><p><a href="http://www.andreanolanusse.com/en">Andreano Lanusse | Technology and Software Development</a><br/>
Follow me on Twitter: <a href="http://twitter.com/andreanolanusse.com">@andreanolanusse</a></p>]]></content:encoded>
			<wfw:commentRss>http://www.andreanolanusse.com/en/my-next-2-rad-studio-xe2-launch-stops/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

