<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-8730195</id><updated>2012-01-27T05:30:19.496-08:00</updated><category term='c#'/><category term='objective-c'/><category term='Delphi prism'/><category term='linq'/><category term='TDD'/><category term='xcode'/><category term='ios'/><category term='.NET'/><category term='delphi'/><title type='text'>Coding Power Unleashed</title><subtitle type='html'>Programming blogs containing .NET, C#, LINQ, Objective-C and Delphi experiences</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default?start-index=101&amp;max-results=100'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>240</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-8730195.post-3839384653695786920</id><published>2011-09-18T12:35:00.000-07:00</published><updated>2011-09-18T23:50:31.961-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>Xcode snippet #2: Archiving objects with NSKeyedArchiver</title><content type='html'>Archiving objects with &lt;b&gt;NSKeyedArchiver&lt;/b&gt; is the process of saving your objects to a binary file.  This process is called encoding. In this step-by-step tutorial we will persist a settings object to a file, and bring it back to life using &lt;b&gt;NSKeyedUnArchiver&lt;/b&gt;. Archiving objects is very convenient way for saving small amounts of data like settings in your iPhone app.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 1: Comply with the NSCoding protocol&lt;/b&gt;&lt;br /&gt;The first thing we have to do is to let our object comply with the NSCoding protocol. This protocol adds encoding and decoding methods to our object. Complying is easily done by adding &lt;NSCoding&gt; to the object like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;@&lt;font color="#2040a0"&gt;interface&lt;/font&gt; &lt;font color="#2040a0"&gt;Settings&lt;/font&gt; &lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;NSObject&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;lt;&lt;/font&gt;&lt;font color="#2040a0"&gt;NSCoding&lt;/font&gt;&lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;Step 2: Implement the encodeWithCode and initWithCoder methods&lt;/b&gt;&lt;br /&gt;We have to tell the NSKeyedArchiver object how our object should be encoded. Simply said tell it what our properties are and what types they are etc.&lt;br /&gt;&lt;br /&gt;This is done the &lt;b&gt;encodeWithCoder&lt;/b&gt; method (as implemented by the NSCoding protocol), here under you see an example for an object, boolean and int property.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;strong&gt;void&lt;/strong&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;encodeWithCoder&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;NSCoder&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;coder&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;        &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;coder&lt;/font&gt; &lt;font color="#2040a0"&gt;encodeObject&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;self&lt;/font&gt;.&lt;font color="#2040a0"&gt;name&lt;/font&gt; &lt;font color="#2040a0"&gt;forKey&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;@&lt;font color="#008000"&gt;&amp;quot;name&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;	&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;coder&lt;/font&gt; &lt;font color="#2040a0"&gt;encodeBool&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;self&lt;/font&gt;.&lt;font color="#2040a0"&gt;newsLetter&lt;/font&gt; &lt;font color="#2040a0"&gt;forKey&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;@&lt;font color="#008000"&gt;&amp;quot;newsLetter&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;	&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;coder&lt;/font&gt; &lt;font color="#2040a0"&gt;encodeInt32&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;self&lt;/font&gt;.&lt;font color="#2040a0"&gt;count&lt;/font&gt; &lt;font color="#2040a0"&gt;forKey&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;@&lt;font color="#008000"&gt;&amp;quot;count&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;    &lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;To unarchive our object we have to implement the initWithCoder method: (Make sure that the keys in both the encodeWithCoder and initWithCoder are the same for each property)&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;id&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;initWithCoder&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;NSCoder&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;coder&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;	&lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;self&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;super&lt;/font&gt; &lt;font color="#2040a0"&gt;init&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;br /&gt;	&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;          &lt;font color="#2040a0"&gt;self&lt;/font&gt;.&lt;font color="#2040a0"&gt;name&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;coder&lt;/font&gt; &lt;font color="#2040a0"&gt;decodeObjectForKey&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;@&lt;font color="#008000"&gt;&amp;quot;name&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt; &lt;font color="#2040a0"&gt;retain&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;  &lt;br /&gt;          &lt;font color="#2040a0"&gt;self&lt;/font&gt;.&lt;font color="#2040a0"&gt;newsLetter&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;coder&lt;/font&gt; &lt;font color="#2040a0"&gt;decodeBoolForKey&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;@&lt;font color="#008000"&gt;&amp;quot;newsLetter&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;br /&gt;          &lt;font color="#2040a0"&gt;self&lt;/font&gt;.&lt;font color="#2040a0"&gt;count&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;coder&lt;/font&gt; &lt;font color="#2040a0"&gt;decodeInt32ForKey&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;@&lt;font color="#008000"&gt;&amp;quot;count&amp;quot;&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;    &lt;br /&gt; 	&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;	&lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;self&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;That is pretty much all we have to do before we can archive and unarchive.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Step 3: Implement the archive and unarchive methods&lt;/b&gt;&lt;br /&gt;What is left is to make two methods for un- and archiving. The saveSetting methods has two parameters, namely settings, the object to archive and the name for the file we want to save it to. With help of the getFullFilePath method we get a full file path to the Document directory of our device. To bring our object back to live use the loadSettings method.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;NSString&lt;/font&gt;&lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="#2040a0"&gt;getFullFilePath&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;NSString&lt;/font&gt;&lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;NSArray&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;paths&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;NSSearchPathForDirectoriesInDomains&lt;/font&gt;&lt;br /&gt;       &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;NSDocumentDirectory&lt;/font&gt;, &lt;font color="#2040a0"&gt;NSUserDomainMask&lt;/font&gt;, &lt;font color="#2040a0"&gt;YES&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;	&lt;font color="#2040a0"&gt;NSString&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;savePath&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;paths&lt;/font&gt; &lt;font color="#2040a0"&gt;objectAtIndex&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;NSString&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;theFileName&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;NSString&lt;/font&gt; &lt;font color="#2040a0"&gt;stringWithFormat&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;@&lt;font color="#008000"&gt;&amp;quot;%@.setting&amp;quot;&lt;/font&gt;, &lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;   &lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;savePath&lt;/font&gt; &lt;font color="#2040a0"&gt;stringByAppendingPathComponent&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;theFileName&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;strong&gt;void&lt;/strong&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;saveSetting&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;Settings&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;settings&lt;/font&gt; &lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;NSString&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;NSString&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;filePath&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;self&lt;/font&gt; &lt;font color="#2040a0"&gt;getFullFilePath&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;NSData&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;theData&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;NSKeyedArchiver&lt;/font&gt; &lt;font color="#2040a0"&gt;archivedDataWithRootObject&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;settings&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;NSKeyedArchiver&lt;/font&gt; &lt;font color="#2040a0"&gt;archiveRootObject&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;theData&lt;/font&gt; &lt;font color="#2040a0"&gt;toFile&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;filePath&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;-&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;Settings&lt;/font&gt;&lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;loadSetting&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="#2040a0"&gt;NSString&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt;&lt;font color="#2040a0"&gt;name&lt;/font&gt; &lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;NSString&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;filePath&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;self&lt;/font&gt; &lt;font color="#2040a0"&gt;getFullFilePath&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;name&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;br /&gt;    &lt;font color="#2040a0"&gt;NSData&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;theData&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;NSKeyedUnarchiver&lt;/font&gt; &lt;font color="#2040a0"&gt;unarchiveObjectWithFile&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;filePath&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;Settings&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;settings&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;NSKeyedUnarchiver&lt;/font&gt; &lt;font color="#2040a0"&gt;unarchiveObjectWithData&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;theData&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;strong&gt;return&lt;/strong&gt; &lt;font color="#2040a0"&gt;settings&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt; &lt;br /&gt;    &lt;br /&gt;&lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;b&gt;Saving arrays of objects&lt;/b&gt;&lt;br /&gt;It is also very easy to save lists of objects to file. Suppose we have a list with Settings and want to store them in one file. You can achieve this by archiving a NSMutableArray. For example:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;// &lt;font color="#2040a0"&gt;Archiving&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;NSMutableArray&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;array&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;self&lt;/font&gt;.&lt;font color="#2040a0"&gt;self&lt;/font&gt;.&lt;font color="#2040a0"&gt;settingsList&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;NSKeyedArchiver&lt;/font&gt; &lt;font color="#2040a0"&gt;archiveRootObject&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;font color="#2040a0"&gt;array&lt;/font&gt; &lt;font color="#2040a0"&gt;toFile&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;br /&gt;                      &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;savePath&lt;/font&gt; &lt;font color="#2040a0"&gt;stringByAppendingPathComponent&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;theFileName&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;//&lt;font color="#2040a0"&gt;UnArchiving&lt;/font&gt;&lt;br /&gt;&lt;font color="#2040a0"&gt;NSMutableArray&lt;/font&gt; &lt;font color="4444FF"&gt;*&lt;/font&gt;&lt;font color="#2040a0"&gt;array&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;NSKeyedUnarchiver&lt;/font&gt; &lt;font color="#2040a0"&gt;unarchiveObjectWithFile&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt;&lt;br /&gt;                      &lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;savePath&lt;/font&gt; &lt;font color="#2040a0"&gt;stringByAppendingPathComponent&lt;/font&gt;&lt;font color="4444FF"&gt;:&lt;/font&gt; &lt;font color="#2040a0"&gt;theFileName&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;&lt;strong&gt;if&lt;/strong&gt; &lt;font color="4444FF"&gt;(&lt;/font&gt;&lt;font color="4444FF"&gt;[&lt;/font&gt;&lt;font color="#2040a0"&gt;array&lt;/font&gt; &lt;font color="#2040a0"&gt;count&lt;/font&gt;&lt;font color="4444FF"&gt;]&lt;/font&gt; &lt;font color="4444FF"&gt;&amp;gt;&lt;/font&gt; &lt;font color="#FF0000"&gt;0&lt;/font&gt;&lt;font color="4444FF"&gt;)&lt;/font&gt; &lt;font color="4444FF"&gt;&lt;strong&gt;{&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;    &lt;font color="#2040a0"&gt;self&lt;/font&gt;.&lt;font color="#2040a0"&gt;settingsList&lt;/font&gt; &lt;font color="4444FF"&gt;=&lt;/font&gt; &lt;font color="#2040a0"&gt;array&lt;/font&gt;&lt;font color="4444FF"&gt;;&lt;/font&gt;&lt;br /&gt;    &lt;font color="4444FF"&gt;&lt;strong&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Conclusion, the NSKeyedArchiver and NSKeyedUnarchiver are pretty easy and straight forwarded to use for persisting objects. It is very handy for saving small objects likes settings etc.&lt;br /&gt;More information:&lt;br /&gt;&lt;a href="http://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSKeyedArchiver_Class/Reference/Reference.html"&gt;NSKeyedArchiver Class Reference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Protocols/NSCoding_Protocol/Reference/Reference.html"&gt;NSCoding protocol reference&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3839384653695786920?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3839384653695786920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3839384653695786920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3839384653695786920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3839384653695786920'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2011/09/xcode-snippet-2-archiving-objects-with.html' title='Xcode snippet #2: Archiving objects with NSKeyedArchiver'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3651162843732805937</id><published>2011-04-04T12:27:00.000-07:00</published><updated>2011-04-04T12:44:52.610-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='xcode'/><category scheme='http://www.blogger.com/atom/ns#' term='ios'/><category scheme='http://www.blogger.com/atom/ns#' term='objective-c'/><title type='text'>Xcode snippet #1: Reading the contents of a directory</title><content type='html'>Below you will find a code snippet which reads the contents of a specific directory (in this case the documents directory) from your device. It looks for file with has a suffix .list, stripes the filename from it with the substringToIndex method and adds that name to another array.&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);&lt;br /&gt;NSString *documentsPath = [paths objectAtIndex:0]; &lt;br /&gt;NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:documentsPath error:nil];&lt;br /&gt;for (NSString *dir in dirContents) {&lt;br /&gt;  if ([dir hasSuffix:@".list"]) {&lt;br /&gt;      NSRange range = [dir rangeOfString:@"."];&lt;br /&gt;      NSString *name = [dir substringToIndex:range.location];&lt;br /&gt;      if (![name isEqualToString:@""]) {&lt;br /&gt;          MyListItem *listItem = [[MyListItem alloc] init];&lt;br /&gt;          listItem.name = name;&lt;br /&gt;          [lists addObject:listItem];&lt;br /&gt;          [listItem release];&lt;br /&gt;      }&lt;br /&gt;  }&lt;br /&gt;} &lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3651162843732805937?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3651162843732805937/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3651162843732805937' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3651162843732805937'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3651162843732805937'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2011/04/xcode-snippet-1-reading-contents-of.html' title='Xcode snippet #1: Reading the contents of a directory'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7548837389249200699</id><published>2010-10-27T07:41:00.000-07:00</published><updated>2010-10-27T07:41:38.550-07:00</updated><title type='text'>Developing for the iPad</title><content type='html'>The past months we have been busy with a new challenge: Developing for the iPad.&lt;br /&gt;I can tell you that developing for the iPad is a total different experience compared to Delphi and Visual Studio. Never the less it is great fun! Besides the fact that it is a fun platform to work on it is even more fun to learn a new platform, language and IDE. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;The tools: XCode and Interface builder&lt;/b&gt;&lt;br /&gt;&lt;a href="http://www.beensoft.nl"&gt;We&lt;/a&gt; decided to go the hard way and develop with &lt;a href="http://developer.apple.com/technologies/tools/xcode.html"&gt;Apples native IDE XCode&lt;/a&gt;. As .NET developer an easier approach would be to choose for a Mono solution like &lt;a href="http://monotouch.net/"&gt;MonoTouch&lt;/a&gt;, however we felt that we had to know 'the metal' first. &lt;br /&gt;The main tools you use developing for iPad are XCode and Interface builder. XCode is a good to work with IDE, however compared to Visual Studio it lacks some features. (Must say I still find  new features, even today). One annoying point of XCode is that it opens every file in a new window (when double clicking on a file) so after a while it can be hard to seperate the trees from the forest with all that open files. However if you click once you can keep them in one window but for some reason that is hard to persist. &lt;br /&gt;A big plus for XCode, in my opinion, is that it helps you to work in the &lt;b&gt;MVC design pattern&lt;/b&gt; way which gives you clean code.&lt;br /&gt;XCode does not offer an integrated form designer like VS does instead you make your views (forms) with &lt;a href="http://en.wikipedia.org/wiki/Interface_Builder"&gt;Interface builder&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;The language Objective-C&lt;/b&gt;&lt;br /&gt;The language, &lt;a href="http://nl.wikipedia.org/wiki/Objective-C"&gt;Objective-C&lt;/a&gt;, looks at first very weird with all that brackets but there are great resources online that helped us to get started.&lt;br /&gt;&lt;br /&gt;If you would like to start iPad development take a look at some resources we gathered along the way:&lt;br /&gt;&lt;a href="http://developer.apple.com/"&gt;Apples developer website&lt;/a&gt; (Get yourself a free account)&lt;br /&gt;&lt;a href="http://itunes.apple.com/WebObjects/MZStore.woa/wa/viewiTunesUCollection?id=384233225"&gt;Stanford University lectures on iTunes U&lt;/a&gt; (Highly recommended!!!!)&lt;br /&gt;&lt;a href="http://cocoadevcentral.com/d/learn_objectivec/"&gt;Cocoa Dev Central - Learn Objective-C&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It is likely that I will write some more blogposts about this new adventure in the future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7548837389249200699?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7548837389249200699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7548837389249200699' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7548837389249200699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7548837389249200699'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2010/10/developing-for-ipad.html' title='Developing for the iPad'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-8518817205231895688</id><published>2010-08-17T01:50:00.001-07:00</published><updated>2010-08-18T05:39:45.865-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Fooling around with TWebbrowser compilation post</title><content type='html'>&lt;p&gt;In the statistics of my blog I find a lot of people searching for Delphi’s TWebbrowser solutions and examples. I wrote a few post about some TWebbrowser specific problems and possible solutions.    &lt;br /&gt;Because they are in seperated, non related, posts I thought it would be nice to compilate all the knowledge in one blogpost. Well here it is. :)     &lt;br /&gt;&lt;br /&gt;&lt;a href="http://beensoft.blogspot.com/2006/01/fooling-around-with-twebbrowser.html"&gt;Fooling around with TWebbrowser #1&lt;/a&gt;     &lt;br /&gt;Describes how to use TWebbrowser for editing HTML&lt;/p&gt;&lt;p&gt;&lt;a href="http://beensoft.blogspot.com/2007/09/fooling-around-with-twebbrowser-2.html"&gt;Fooling around with TWebbrowser #2&lt;/a&gt;     &lt;br /&gt;Describes how to retain the browser session within you application&lt;/p&gt;&lt;a href="http://beensoft.blogspot.com/2007/09/fooling-around-with-twebbrowser-3.html"&gt;Fooling around with TWebbrowser #3&lt;/a&gt;   &lt;br /&gt;Describes some TWebbrowser basics like how to get the right popwindowsize, how to fill up a combobox with visited websites, how to enable/disable navigate buttons etcetera.   &lt;p&gt;&lt;a href="http://beensoft.blogspot.com/2007/10/fooling-around-with-twebbrowser-4.html"&gt;Fooling around with TWebbrowser #4&lt;/a&gt;     &lt;br /&gt;Describes two solutions for the Enter key problem.     &lt;br /&gt;&lt;br /&gt;&lt;a href="http://beensoft.blogspot.com/2006/02/posting-data-with-twebbrower.html"&gt;Posting data with TWebbrowser&lt;/a&gt;     &lt;br /&gt;Describes how to post data to websites using TWebbrowser&lt;/p&gt;&lt;p&gt;&lt;a href="http://beensoft.blogspot.com/2006/05/saving-twebbrowser-content-with.html"&gt;Saving TWebbrowser content with IPersistFile&lt;/a&gt;     &lt;br /&gt;Describes two ways to save the content of the current loaded document in the browser.&lt;/p&gt;&lt;p&gt;&lt;a href="http://beensoft.blogspot.com/2010/03/two-way-interaction-with-javascript-in.html"&gt;Two way interaction with Javascript in Winforms using Webbrowser&lt;/a&gt;     &lt;br /&gt;Although about Winforms C# this should be compatible with Delphi TWebbrowser.&lt;/p&gt;&lt;p&gt;Enjoy!    &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-8518817205231895688?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/8518817205231895688/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=8518817205231895688' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8518817205231895688'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8518817205231895688'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2010/08/fooling-around-with-twebbrowser.html' title='Fooling around with TWebbrowser compilation post'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3092642484114392986</id><published>2010-05-19T12:55:00.001-07:00</published><updated>2010-05-20T00:26:58.669-07:00</updated><title type='text'>Using Extension methods on Lists to make it fluent</title><content type='html'>&lt;p&gt;Since C# 3.0 you can write extension methods on any class that you want, even if you don’t have the source code of the class. In other words you can extend a class with your own methods.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Extension methods can only be declared in static classes as static methods.&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Extensions on List&amp;lt;T&amp;gt; classes can be very handy and make your code more readable and fluent.   &lt;br /&gt;Suppose you have this mixed Animal list with Dogs and Cats from &lt;a href="http://beensoft.blogspot.com/2009/11/casting-lists-using-linq-2.html" target="_blank"&gt;this blogpost&lt;/a&gt;.&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Animal&lt;/span&gt;&amp;gt; animalList = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Animal&lt;/span&gt;&amp;gt;(); &lt;br /&gt;animalList.Add(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Dog1&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;ConsoleColor&lt;/span&gt;.Red)); &lt;br /&gt;animalList.Add(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Dog2&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;ConsoleColor&lt;/span&gt;.Green)); &lt;br /&gt;animalList.Add(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Dog3&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;ConsoleColor&lt;/span&gt;.Red)); &lt;br /&gt;animalList.Add(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Cat1&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;ConsoleColor&lt;/span&gt;.Black)); &lt;br /&gt;animalList.Add(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Cat2&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;ConsoleColor&lt;/span&gt;.Black)); &lt;br /&gt;animalList.Add(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Cat&lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;Cat3&amp;quot;&lt;/span&gt;, &lt;span style="color: #2b91af"&gt;ConsoleColor&lt;/span&gt;.Black));&lt;/pre&gt;&lt;br /&gt;(Never mind the ConsoleColor for the animal ;-) )&lt;br /&gt;&lt;br /&gt;&lt;p&gt;Suppose we want all the red dogs from the animalList, we could write our code like:&lt;br /&gt;&lt;span style="color: green"&gt;&lt;br /&gt;    &lt;br /&gt;//Get the Red docs&lt;br /&gt;    &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;&amp;gt; redDogList = animalList.OfType&amp;lt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;&amp;gt;().Where(n =&amp;gt; n.Color == &lt;span style="color: #2b91af"&gt;ConsoleColor&lt;/span&gt;.Red).ToList();&lt;br /&gt;&lt;br /&gt;This works, however everytime we want to get some colored animal we would get the same type of code. We would probably write some static methods to avoid this :&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&amp;#160;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;&amp;gt; redDogList = ListUtils.GetTheDogs(animalList);&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Even better is to make this &lt;strong&gt;static extension methods&lt;/strong&gt; so that the functionality looks to be encapsulated by the list its self. We can then also make the method names more readable, for instant not “GetTheDog”, but “WhichAreDog”.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;For example:&lt;br /&gt;  &lt;span style="color: blue"&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Animal&lt;/span&gt;&amp;gt; WhichAreDog(&lt;span style="color: blue"&gt;this &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Animal&lt;/span&gt;&amp;gt; animalList)&lt;br /&gt;   {&lt;br /&gt;   &amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; animalList.OfType&amp;lt;&lt;span style="color: #2b91af"&gt;Dog&lt;/span&gt;&amp;gt;().Cast&amp;lt;&lt;span style="color: #2b91af"&gt;Animal&lt;/span&gt;&amp;gt;().ToList();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;&lt;span style="color: blue"&gt;&lt;br /&gt;    &lt;br /&gt;public static &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Animal&lt;/span&gt;&amp;gt; HavingColor(&lt;span style="color: blue"&gt;this &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Animal&lt;/span&gt;&amp;gt; animalList, &lt;span style="color: #2b91af"&gt;ConsoleColor &lt;/span&gt;color)&lt;br /&gt;  {&lt;br /&gt;  &amp;#160; &lt;span style="color: blue"&gt;return&lt;/span&gt; animalList.Where(n =&amp;gt; n.Color == color).ToList();&lt;br /&gt;  }&lt;br /&gt;  &lt;br /&gt;The “&lt;span style="color: blue"&gt;this&lt;/span&gt;” before the first parameter of the method indicates that this is an extension method on this parameter, in this case the list with animals.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now getting the red dogs looks like this:&lt;/p&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Animal&lt;/span&gt;&amp;gt; allRedDogs = &lt;br /&gt;animalList.WhichAreDog().HavingColor(&lt;span style="color: #2b91af"&gt;ConsoleColor&lt;/span&gt;.Red);&lt;/pre&gt;&lt;br /&gt;&lt;a href="http://11011.net/software/vspaste"&gt;&lt;/a&gt;Much more readable and fluent!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3092642484114392986?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3092642484114392986/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3092642484114392986' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3092642484114392986'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3092642484114392986'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2010/05/using-extension-methods-on-lists-to.html' title='Using Extension methods on Lists to make it fluent'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2672489881942458583</id><published>2010-05-03T12:31:00.001-07:00</published><updated>2010-05-03T12:37:56.741-07:00</updated><title type='text'>Exploring LINQ #3</title><content type='html'>&lt;p&gt;LINQ keeps amazing me in its power and beauty. So much that for each problem I have to solve (coding problem that is)&amp;#160; I find myself wondering can this be done with LINQ, and how.&lt;/p&gt;  &lt;p&gt;I am working on a rewrite of an old application to C#. For some reason the original designers had put some ‘model’ data into a none relational database. Instead of making a good relational data model the data has been put as follows (simplified record from the database) :    &lt;br /&gt;    &lt;br /&gt;Option1 = “1;2;3”     &lt;br /&gt;Option2 = “A;B”     &lt;br /&gt;Value = 1&lt;/p&gt;  &lt;p&gt;In other words foreach possible combination of option1 and option2 there is a value. (1-A-1, 1-B-1, 2-A-1 etc.) I would prefer a relational set up, but to honor the past this will have to stay that way. For use in our program it&amp;#160; is required to have all possible combinations into a single flat list which we then can query with LINQ.   &lt;br /&gt;Of course it easy to construct some code that would knock this down into a flat list though I don’t think any will be as elegant and as fast to produce as this LINQified solution.    &lt;br /&gt;    &lt;br /&gt;Suppose we read the raw data from the database into a list with raw objects looking like this:&lt;/p&gt;  &lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Raw&lt;/span&gt;&amp;gt; rawList = &lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Raw&lt;/span&gt;&amp;gt;();&lt;br /&gt;rawList.Add(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Raw&lt;/span&gt;() { Option1 = &lt;span style="color: #a31515"&gt;&amp;quot;1;2;3&amp;quot;&lt;/span&gt;, &lt;br /&gt;                        Option2 = &lt;span style="color: #a31515"&gt;&amp;quot;A&amp;quot;&lt;/span&gt;, Value = 1 });&lt;br /&gt;rawList.Add(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Raw&lt;/span&gt;() { Option1 = &lt;span style="color: #a31515"&gt;&amp;quot;4;5&amp;quot;&lt;/span&gt;, &lt;br /&gt;                        Option2 = &lt;span style="color: #a31515"&gt;&amp;quot;A;B&amp;quot;&lt;/span&gt;, Value = 2 });&lt;br /&gt;rawList.Add(&lt;span style="color: blue"&gt;new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Raw&lt;/span&gt;() { Option1 = &lt;span style="color: #a31515"&gt;&amp;quot;1;2;3&amp;quot;&lt;/span&gt;, &lt;br /&gt;                        Option2 = &lt;span style="color: #a31515"&gt;&amp;quot;C&amp;quot;&lt;/span&gt;, Value = 3 });&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;Using LINQ it is easy to combine the original raw list with the “;” splitted list (arrays in fact) from the fields Option1 and Option2. From that a flat list can be constructed which holds all the combinations:&lt;/p&gt;&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: #2b91af"&gt;List&lt;/span&gt;&amp;lt;&lt;span style="color: #2b91af"&gt;Raw&lt;/span&gt;&amp;gt; flatList = (&lt;span style="color: blue"&gt;from &lt;/span&gt;n &lt;span style="color: blue"&gt;in &lt;/span&gt;rawList&lt;br /&gt;                      &lt;span style="color: blue"&gt;from &lt;/span&gt;opt1 &lt;span style="color: blue"&gt;in &lt;/span&gt;n.Option1.Split(&lt;span style="color: #a31515"&gt;';'&lt;/span&gt;)&lt;br /&gt;                      &lt;span style="color: blue"&gt;from &lt;/span&gt;opt2 &lt;span style="color: blue"&gt;in &lt;/span&gt;n.Option2.Split(&lt;span style="color: #a31515"&gt;';'&lt;/span&gt;)&lt;br /&gt;                      &lt;span style="color: blue"&gt;select new &lt;/span&gt;&lt;span style="color: #2b91af"&gt;Raw&lt;br /&gt;                      &lt;/span&gt;{&lt;br /&gt;                        Option1 = opt1,&lt;br /&gt;                        Option2 = opt2,&lt;br /&gt;                        Value = n.Value&lt;br /&gt;                      }).ToList();&lt;br /&gt;flatList.ForEach((n) =&amp;gt; &lt;span style="color: #2b91af"&gt;Console&lt;/span&gt;.WriteLine(n.Option1 + &lt;br /&gt;                        &lt;span style="color: #a31515"&gt;&amp;quot;-&amp;quot; &lt;/span&gt;+ n.Option2 + &lt;br /&gt;                        &lt;span style="color: #a31515"&gt;&amp;quot;-&amp;quot; &lt;/span&gt;+ n.Value.ToString()));&lt;/pre&gt;&lt;br /&gt;Resulting in a ‘flat’ list:&lt;br /&gt;&lt;p&gt;&lt;br /&gt;1-A-1&lt;br /&gt;2-A-1&lt;br /&gt;3-A-1&lt;br /&gt;4-A-2&lt;br /&gt;4-B-2&lt;br /&gt;5-A-2&lt;br /&gt;5-B-2&lt;br /&gt;1-C-3&lt;br /&gt;2-C-3&lt;br /&gt;3-C-3&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Querying this list is now child’s play:&lt;br /&gt;&lt;br /&gt;&lt;span style="color: blue"&gt;int &lt;/span&gt;Result = (&lt;span style="color: blue"&gt;from &lt;/span&gt;n &lt;span style="color: blue"&gt;in &lt;/span&gt;flatList&lt;br /&gt;  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;where &lt;/span&gt;(n.Option1 == &lt;span style="color: #a31515"&gt;&amp;quot;4&amp;quot;&lt;/span&gt;) &amp;amp;&amp;amp; (n.Option2 == &lt;span style="color: #a31515"&gt;&amp;quot;B&amp;quot;&lt;/span&gt;)&lt;br /&gt;  &amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;span style="color: blue"&gt;select &lt;/span&gt;n.Value).FirstOrDefault();&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2672489881942458583?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2672489881942458583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2672489881942458583' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2672489881942458583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2672489881942458583'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2010/05/exploring-linq-3.html' title='Exploring LINQ #3'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7690403672566372876</id><published>2010-03-09T13:06:00.001-08:00</published><updated>2010-03-10T00:13:51.994-08:00</updated><title type='text'>Two way interaction with JavaScript in Winforms using Webbrowser</title><content type='html'>&lt;p&gt;In a recent project I had to integrate Google maps into a Winforms application. To use Google Maps from a desktop client you must be able to call the Javascript in webpage, which can be done with the Webbrowser component.   &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Calling JavaScript from C#     &lt;br /&gt;&lt;/strong&gt;Calling JavaScript in a Webbrowser component is very easy. JavaScript is exposed through the &lt;a href="http://msdn.microsoft.com/en-us/library/aa741505%28VS.85%29.aspx" target="_blank"&gt;IHTMLWindow2 interface&lt;/a&gt; which can be referenced from the &lt;a href="http://msdn.microsoft.com/en-us/library/aa752574%28VS.85%29.aspx" target="_blank"&gt;IHTMLDocument2 interface&lt;/a&gt; through the parentWindow property. &lt;/p&gt;  &lt;pre class="code"&gt;doc = webBrowser1.Document.&lt;br /&gt;                    DomDocument &lt;span style="color: blue"&gt;as &lt;/span&gt;&lt;span style="color: #2b91af"&gt;IHTMLDocument2&lt;/span&gt;;&lt;br /&gt;doc.parentWindow.execScript(&lt;span style="color: #a31515"&gt;&amp;quot;createMapMarker&lt;br /&gt;     &lt;/span&gt;(&lt;span style="color: #a31515"&gt;&amp;quot;52.3738007, 4.8909347&amp;quot;&lt;/span&gt;, 1);&lt;span style="color: #a31515"&gt;&amp;quot;, &amp;quot;&lt;/span&gt;JavaScript&lt;span style="color: #a31515"&gt;&amp;quot;);&lt;br /&gt;&lt;/span&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;Calling C# from JavaScript&lt;br /&gt;&lt;/strong&gt;Calling C# code from JavaScript can be done using the &lt;strong&gt;ObjectForScripting&lt;/strong&gt; property of the Webbrowser component. The object can be called in JavaScript using window.external. The communication is established through COM interop so the class should be visible for COM.&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: green"&gt;//Class example&lt;br /&gt;&lt;/span&gt;[ComVisible(&lt;span style="color: blue"&gt;true&lt;/span&gt;)]&lt;br /&gt;&lt;span style="color: blue"&gt;public class &lt;/span&gt;&lt;span style="color: #2b91af"&gt;ExternalApplication&lt;br /&gt;&lt;/span&gt;{&lt;br /&gt;  &lt;span style="color: blue"&gt;public string &lt;/span&gt;GetApplicationName()&lt;br /&gt;  {&lt;br /&gt;    &lt;span style="color: blue"&gt;return &lt;/span&gt;&lt;span style="color: #a31515"&gt;&amp;quot;The application&amp;quot;&lt;/span&gt;;&lt;br /&gt;  }&lt;br /&gt;}&lt;br /&gt;&lt;span style="color: green"&gt;//Connect it to the webbrowser&lt;br /&gt;&lt;/span&gt;webbrowser1.ObjectForScripting &lt;br /&gt;                 = &lt;span style="color: blue"&gt;new &lt;/span&gt;ExternalApplication();&lt;/pre&gt;&lt;br /&gt;From JavaScript call the external application, our C# app, like this:&lt;br /&gt;  &lt;br /&gt;(Google maps click event example)&lt;br /&gt;&lt;pre class="code"&gt;&lt;span style="color: blue"&gt;function &lt;/span&gt;createMapMarker(lat, lng, html) {&lt;br /&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;point = &lt;span style="color: blue"&gt;new &lt;/span&gt;GLatLng(parseFloat(lat),parseFloat(lng));&lt;br /&gt;&lt;span style="color: blue"&gt;var &lt;/span&gt;marker = &lt;span style="color: blue"&gt;new &lt;/span&gt;GMarker(point);&lt;br /&gt;GEvent.addListener(marker, &lt;span style="color: #a31515"&gt;&amp;quot;click&amp;quot;&lt;/span&gt;, &lt;span style="color: blue"&gt;function&lt;/span&gt;() {&lt;br /&gt;&lt;span style="color: blue"&gt;   var &lt;/span&gt;appname = window.external.GetApplicationName();&lt;br /&gt;   alert(appname);&lt;br /&gt;  });&lt;br /&gt;  map.addOverlay(marker);&lt;br /&gt;  &lt;span style="color: blue"&gt;return &lt;/span&gt;marker;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;For Delphi equivalent code take a look at Steve Trefethen blog serie about Google Maps / Delphi integration &lt;a href="http://www.stevetrefethen.com/blog/UsingGoogleMapsFromAWindowsClientApplication.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7690403672566372876?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7690403672566372876/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7690403672566372876' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7690403672566372876'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7690403672566372876'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2010/03/two-way-interaction-with-javascript-in.html' title='Two way interaction with JavaScript in Winforms using Webbrowser'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-6959763318763458852</id><published>2010-01-20T12:20:00.001-08:00</published><updated>2010-01-20T12:21:47.201-08:00</updated><title type='text'>Connecting (struggling) to Oracle database</title><content type='html'>&lt;p&gt;This week I have been working (read struggling) on connecting a C# .NET application to Oracle. In the end I was trapped between &lt;strong&gt;32 bits vs 64 bits&lt;/strong&gt;, .NET Oracle providers and 32 bit OLE DB providers.&lt;/p&gt;  &lt;p&gt;First of all I challenged this task, not bothered by any knowledge about Oracle. I did know that if you want to connect to an Oracle database you have to install the &lt;strong&gt;Oracle Client&lt;/strong&gt; on the client machine. &lt;a href="http://www.oracle.com/technology/software/index.html" target="_blank"&gt;This only 1,7 Gb (!) download&lt;/a&gt; (Oracle 11g) happily told me that my Windows 7 version (real version 6.1, 64 bits) was not certified for the job. Only Windows 6.0 was.    &lt;br /&gt;    &lt;br /&gt;Huh, now what? &lt;/p&gt;  &lt;p&gt;After some googling found &lt;a href="http://fulopmihaly.wordpress.com/2009/09/17/how-to-install-oracle-client-11g-on-windows-7/" target="_blank"&gt;this blogpost&lt;/a&gt; about how to trick the setup to install on Window 7 (6.1) anyway.    &lt;br /&gt;After that it installed gracefully (some warnings…), time to startup VS to give it a spin!    &lt;br /&gt;    &lt;br /&gt;Well not. That app that I am writing connects besides &lt;strong&gt;Oracle&lt;/strong&gt; and &lt;strong&gt;SQL Server&lt;/strong&gt; to an &lt;strong&gt;Access database&lt;/strong&gt;. Because the Jet OLEDB driver for Access is 32 bits only I am doomed to target the x86 platform for now. No problem, however the 64 bits Oracle client can not connect targeting the x86 platform. Getting a BadImageFormatException:&lt;/p&gt;  &lt;p&gt;&lt;em&gt;[InvalidOperationException: Attempt to load Oracle client libraries threw BadImageFormatException. This problem will occur when running in 64 bit mode with the 32 bit Oracle client components installed.]&lt;/em&gt; &lt;/p&gt;  &lt;p&gt;(Still having the feeling it is the other way around, because I have the 64 bit Oracle client components installed)&lt;/p&gt;  &lt;p&gt;Huh, now what?&lt;/p&gt;  &lt;p&gt;Because the ADO.NET provider for Oracle from Microsoft suits well in the other technologies I tried to google more information. &lt;a href="http://blogs.msdn.com/adonet/archive/2009/06/15/system-data-oracleclient-update.aspx" target="_blank"&gt;As it seems this driver is by the coming of .NET 4.0 deprecated&lt;/a&gt;. So on second thoughts not a good choice after all. Using the .NET provider from Oracle (ODP) then? Can I install 32 bits Oracle client on 64 bits machine? Who knows.&lt;/p&gt;  &lt;p&gt;Fortunately Twitter came to rescue someone pointed out that there are third party solutions, which can connect to an Oracle database &lt;strong&gt;even without the Oracle Client&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;So I tried &lt;a href="http://www.devart.com/dotconnect/oracle/" target="_blank"&gt;Devarts dotConnect&lt;/a&gt;, which indeed can connect without the Oracle Client, isn’t that just great! Within 5 minutes I was connected (either 32 or 64 bits).     &lt;br /&gt;    &lt;br /&gt;So if you want to connect to Oracle on .NET, keep some sparetime afterwards, I would suggest using third party components for it!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-6959763318763458852?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/6959763318763458852/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=6959763318763458852' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6959763318763458852'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6959763318763458852'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2010/01/connecting-struggling-to-oracle.html' title='Connecting (struggling) to Oracle database'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4170351345267603648</id><published>2009-11-06T00:13:00.001-08:00</published><updated>2009-11-09T09:52:57.135-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linq'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Casting lists using LINQ #2</title><content type='html'>&lt;p&gt;In &lt;a href="http://beensoft.blogspot.com/2009/11/casting-lists-using-linq.html"&gt;my previous post&lt;/a&gt; I showed the LINQ way to cast List&amp;lt;SomeDeriveType&amp;gt; to List&amp;lt;SomeBaseObject&amp;gt;.&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:e5aa0a4c-a01e-4b7d-b6bd-7c1f2f520f1d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;BaseObject&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; baseObjects    &lt;br /&gt;             &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; DerivedList.Cast&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;BaseObject&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;Great stuff!&lt;br /&gt;&lt;br /&gt;As &lt;a href="http://twitter.com/jamiei" target="_blank"&gt;@jamiei&lt;/a&gt; &lt;a href="http://beensoft.blogspot.com/2009/11/casting-lists-using-linq.html#comments"&gt;commented&lt;/a&gt; this will raise an exception if the cast fails. &lt;strong&gt;OfType&amp;lt;T&amp;gt;&lt;/strong&gt; will return only the elements of type T despite the fact that you have different derived types in one list. So suppose you have an &lt;strong&gt;Animal &lt;/strong&gt;class and a &lt;strong&gt;Cat&lt;/strong&gt; and &lt;strong&gt;Dog&lt;/strong&gt; class that derive from Animal you could do something like this:&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:0965f3e9-8652-4cc6-9e0b-5d71bcae5d04" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Animal&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; animalList &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Animal&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&lt;br /&gt;animalList.Add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dog(&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Dog1&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;animalList.Add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dog(&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Dog2&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;animalList.Add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dog(&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Dog3&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;animalList.Add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Cat(&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Cat1&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;animalList.Add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Cat(&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Cat2&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;animalList.Add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; Cat(&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000;"&gt;Cat3&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Get the dogs&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Dog&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; dogList &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; animalList.OfType&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Dog&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Get the cats&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Cat&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; catList &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; animalList.OfType&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Cat&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;();&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;LINQ makes it very easy to seperate the Dogs from the Cats!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4170351345267603648?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4170351345267603648/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4170351345267603648' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4170351345267603648'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4170351345267603648'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/11/casting-lists-using-linq-2.html' title='Casting lists using LINQ #2'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-59479135599845446</id><published>2009-11-04T00:05:00.001-08:00</published><updated>2009-11-06T12:00:21.413-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='linq'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>Casting lists using LINQ #1</title><content type='html'>I have been doing lately much work on a .NET 3.5 application using LINQ. LINQ is a great way to manipulate data. I still consider myself a 'LINQ rookie' so I discover everyday something new.&lt;/p&gt;  &lt;p&gt;One thing that floated around my head a while was the problem that you can't cast a List&amp;lt;SomeDerivedObject&amp;gt; to List&amp;lt;SomeBaseObject&amp;gt;.   &lt;br /&gt;A poorman's solution to this was to loop the objects from the one list into the other list. Not an elegant solution though.....&lt;/p&gt;  &lt;p&gt;I discovered that you can do this easily with LINQ. When you use a &lt;strong&gt;IEnumerable&amp;lt;T&amp;gt;&lt;/strong&gt; you can do this like this:&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:3d2ed4fb-5987-4339-9565-2f69418449ae" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;IEnumerable&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;BaseObject&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; baseObjects &lt;br /&gt;                &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; DerivedList.Cast&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;BaseObject&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;Where DerivedList holds objects that inherit from BaseObject.&lt;br /&gt;With a &lt;strong&gt;List&amp;lt;T&amp;gt;&lt;/strong&gt; you could do something like this(copy):&lt;br /&gt;   &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:516d3fb7-54d8-459c-b337-7499bf3ac312" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;BaseObject&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; baseObjects &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;new&lt;/span&gt;&lt;span style="color: #000000;"&gt; List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;BaseObject&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;(DerivedList.Cast&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;BaseObject&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;());&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;A great LINQ resource is &lt;a href="http://msdn.microsoft.com/en-gb/vcsharp/aa336746.aspx" target="_blank"&gt;101 LINQ samples&lt;/a&gt; on MSDN.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-59479135599845446?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/59479135599845446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=59479135599845446' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/59479135599845446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/59479135599845446'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/11/casting-lists-using-linq.html' title='Casting lists using LINQ #1'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-1106787991848385870</id><published>2009-08-05T00:43:00.001-07:00</published><updated>2010-08-22T12:05:04.478-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='delphi'/><title type='text'>Go see Delphi 2010</title><content type='html'>&lt;p&gt;The first Delphi 2010 sneak peek video's showed up on the Internet. &lt;a href="http://www.embarcadero.com/rad-studio-2010/" target="_blank"&gt;The first sneak peek&lt;/a&gt; shows some new IDE features like &lt;strong&gt;IDE insight&lt;/strong&gt;, an everywhere context sensitive IDE navigation system.    &lt;br /&gt;&lt;br /&gt;Anders Ohlsson has a nice sum up of &lt;a href="http://blogs.embarcadero.com/ao/2009/08/04/39017" target="_blank"&gt;all the related Delphi 2010 blogposts&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-1106787991848385870?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/1106787991848385870/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=1106787991848385870' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1106787991848385870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1106787991848385870'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/08/go-see-delphi-2010.html' title='Go see Delphi 2010'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2758797911910747571</id><published>2009-06-30T00:30:00.001-07:00</published><updated>2009-06-30T00:31:54.562-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi prism'/><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><title type='text'>CodeRush for free, not for Delphi Prism</title><content type='html'>&lt;p&gt;As &lt;a href="http://beensoft.blogspot.com/2009/04/coderush-when-code-smells.html" target="_blank"&gt;blogged before&lt;/a&gt; you know that I think DevExpress CodeRush totally rocks!    &lt;br /&gt;Did you know that you can get a lot of this functionality for free?    &lt;br /&gt;    &lt;br /&gt;Mark Miller has got &lt;a href="http://community.devexpress.com/blogs/markmiller/archive/2009/06/25/coderush-xpress-for-c-and-visual-basic-2008.aspx" target="_blank"&gt;a very nice list&lt;/a&gt; of features that are available in &lt;a href="http://www.devexpress.com/Products/Visual_Studio_Add-in/CodeRushX/index.xml" target="_blank"&gt;CodeRush Xpress&lt;/a&gt; for&lt;strong&gt; C#&lt;/strong&gt; and &lt;strong&gt;Visual Basic&lt;/strong&gt; inside &lt;strong&gt;Visual Studio 2008&lt;/strong&gt;. All for free!    &lt;br /&gt;In the full product you will get even more, check out the differences in this article: &lt;a href="http://community.devexpress.com/blogs/markmiller/archive/2008/12/19/differences-between-coderush-xpress-and-coderush.aspx" target="_blank"&gt;Moving up from CodeRus Xpress to CodeRush&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Delphi Prism&lt;/strong&gt;    &lt;br /&gt;The downside of all this good stuff is that &lt;a href="http://www.codegear.com/products/delphi/prism" target="_blank"&gt;Delphi Prism&lt;/a&gt; is not supported. The fact that the original CodeRush was a pure Delphi IDE product, I can not believe that it will not be supported in the future. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2758797911910747571?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2758797911910747571/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2758797911910747571' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2758797911910747571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2758797911910747571'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/06/coderush-for-free-not-for-delphi-prism.html' title='CodeRush for free, not for Delphi Prism'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-8326390907556927941</id><published>2009-06-29T00:39:00.001-07:00</published><updated>2009-06-29T00:39:59.998-07:00</updated><title type='text'>The future of Delphi</title><content type='html'>&lt;p&gt;I haven't had much time lately to follow everything on the Delphi side of the fence, but there is a lot going on.   &lt;br /&gt;Stefaan Lesage has a nice write up on this future, &lt;a href="http://www.devia.be/news/article/the-future-of-delphi-looks-brighter-than-ever-before/" target="_blank"&gt;The future of Delphi looks brighter than ever before&lt;/a&gt;.    &lt;br /&gt;    &lt;br /&gt;A very nice read, sums up everything that is cooking in the labs, including the roadmap.    &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-8326390907556927941?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/8326390907556927941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=8326390907556927941' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8326390907556927941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8326390907556927941'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/06/future-of-delphi.html' title='The future of Delphi'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-8836324858615334692</id><published>2009-05-18T01:06:00.001-07:00</published><updated>2009-05-18T01:33:21.726-07:00</updated><title type='text'>Applying Domain-Driven Design - Book review</title><content type='html'>&lt;p&gt;Before this weekend I got my copy of &lt;a href="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202" target="_blank"&gt;Applying Domain-Driven Design and Patterns&lt;/a&gt; by Jimmy Nilsson.    &lt;br /&gt;&lt;a href="http://www.amazon.com/Applying-Domain-Driven-Design-Patterns-Examples/dp/0321268202" target="_blank"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="148" alt="adddp" src="http://lh6.ggpht.com/_33FNQ5v3xjo/ShEXGbUfGXI/AAAAAAAAAIM/P9Z5mAMHsyc/adddp%5B6%5D.jpg?imgmax=800" width="115" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;Althought the title, in my opinion should be &amp;quot;&lt;strong&gt;Applying Domain-Driven Design, Test Driven Design and Patterns&amp;quot;&lt;/strong&gt;, because beside DDD it covers a great deal of TDD also.    &lt;br /&gt;Design patterns for me were always a bit fuzzy, something from far-far-away land. However lately I am having more and more interest in &lt;a href="http://beensoft.blogspot.com/2009/04/exploring-test-driven-development.html" target="_blank"&gt;Test Driven Devleopment&lt;/a&gt; and that software design method drives you towards better, testable, design, and &lt;a href="http://en.wikipedia.org/wiki/Domain-driven_design" target="_blank"&gt;Domain Driven Design&lt;/a&gt; seems to being just doing that.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Back to book&lt;/strong&gt;    &lt;br /&gt;When you order a book about Design Patterns you expect it to be more a reference then a complete read, because the stuff looks to be boring ('dry stuff' as we say here), without trying it out.    &lt;br /&gt;In this book however the author takes you on a journey of &lt;strong&gt;software architecture&lt;/strong&gt;, &lt;strong&gt;design&lt;/strong&gt; and &lt;strong&gt;decisions&lt;/strong&gt;. The book gives lots of &amp;quot;&lt;strong&gt;Aha!&lt;/strong&gt;&amp;quot;, &amp;quot;&lt;strong&gt;Huh?&lt;/strong&gt;&amp;quot; and &amp;quot;&lt;strong&gt;Done that&lt;/strong&gt;&amp;quot; moments which, I guess, keeps you awake.    &lt;br /&gt;It is loaded with lots of solutions for particular (recognizable) software problems, not just pushing Design Patterns, but making you think more about the right solutions, which &lt;strong&gt;always depends&lt;/strong&gt;....&lt;/p&gt;  &lt;p&gt;In just three days I have read half of the book already! For me that is rare.   &lt;br /&gt;    &lt;br /&gt;So if you are interested in better software design I can highly recommend this book, it reads like a breeze!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-8836324858615334692?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/8836324858615334692/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=8836324858615334692' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8836324858615334692'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8836324858615334692'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/05/applying-domain-driven-design-book.html' title='Applying Domain-Driven Design - Book review'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh6.ggpht.com/_33FNQ5v3xjo/ShEXGbUfGXI/AAAAAAAAAIM/P9Z5mAMHsyc/s72-c/adddp%5B6%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-1787692579740273318</id><published>2009-04-24T12:39:00.001-07:00</published><updated>2009-04-24T12:45:43.882-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='c#'/><category scheme='http://www.blogger.com/atom/ns#' term='TDD'/><title type='text'>Exploring Test Driven Development</title><content type='html'>&lt;p&gt;A few weeks ago I attended a software event organized by the dutch &lt;a href="http://www.sdn.nl" target="_blank"&gt;Software Developer Network&lt;/a&gt; SDN. This time I followed a few sessions about &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank"&gt;Test Driven Development&lt;/a&gt; presented by (among others) &lt;a href="http://www.alexthissen.nl/blogs/main/" target="_blank"&gt;Alex Thissen&lt;/a&gt;, &lt;a href="http://blogs.oosterkamp.nl/blogs/thomas/" target="_blank"&gt;Thomas Huijer&lt;/a&gt; and &lt;a href="http://www.dennisdoomen.net" target="_blank"&gt;Dennis Doomen&lt;/a&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;I must admit that before this sessions I was convinced that automated unit testing was a plus, but it would take just too much time (at least that is what I thought) so that I never actually used it. Triggered by this sessions I started to explore TDD and slowly but surely I am convinced by its pros.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;So what is it?&lt;/strong&gt;     &lt;br /&gt;TDD is not strictly about testing, but it is a &lt;a href="http://en.wikipedia.org/wiki/Software_engineering" target="_blank"&gt;software design method&lt;/a&gt; build upon testing. Check the &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank"&gt;TDD wiki&lt;/a&gt; for all the details, but basically it drills down to the following:     &lt;br /&gt;    &lt;br /&gt;Every new feature in an application &lt;strong&gt;starts with building a test&lt;/strong&gt; around one unit of code (a method or property), because of the fact that the real feature is not yet written that test will fail. After making the test you write the actual method which correctness can be checked by running the test.     &lt;br /&gt;&lt;strong&gt;Kind of strange huh?&lt;/strong&gt; First test, then code. But when you think about it a little more it is a great way to improve your code quality.&lt;/p&gt;  &lt;p&gt;Consider the following:    &lt;br /&gt;- By building a test you are triggered to think more about the &lt;strong&gt;specifications&lt;/strong&gt;, heck by building the test you 'persist' the specifications in your code. (If specification changes, the test changes)    &lt;br /&gt;- It doesn't matter who writes the actual method, as long as the test fails he/she did not comply to the specifications.     &lt;br /&gt;- New features and specifications, which leads to refactoring your code, will be checked against your tests. If the test passes you will be fine.     &lt;br /&gt;In fact in TDD you will first change/refactor your test before refactoring the real code.     &lt;br /&gt;- You will try to keep test as small as possible, thus making smaller methods in your applications, thus making it less complex.    &lt;br /&gt;Less complex means more maintainable in the future. (Less time/costs)&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;&amp;#8220;I don't care how good you think your design is. If I can't walk in and write a test for an arbitrary method of yours in five minutes its not as good as you think it is, and whether you know it or not, you're paying a price for it.&amp;#8221;       &lt;br /&gt;&lt;a href="http://www.michaelfeathers.com/" target="_blank"&gt;Michael Feathers&lt;/a&gt;&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Testing in Visual Studio&lt;/strong&gt;     &lt;br /&gt;Visual Studio 2008 now offers unit testing. You can add a test project in your solution that refers your application/code library.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Making a first TDD application&lt;/strong&gt;&amp;#160; &lt;br /&gt;Suppose we have some class Calculator with methods like Add, Divide etcetera.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Step 1&lt;/strong&gt;     &lt;br /&gt;Create two test methods for the Add and Divide methods. A test method's result is stated by either an Assert, or an expected Exception:&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:ca91995b-5382-4a34-bf31-811e79bd7c87" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;[TestMethod]&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Add()&lt;br /&gt;    {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int2 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Result &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; calculator.Add(Int1, Int2);&lt;br /&gt;      Assert.AreEqual(&lt;/span&gt;&lt;span style="color: #800080;"&gt;5&lt;/span&gt;&lt;span style="color: #000000;"&gt;, Result); &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [TestMethod]&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; Divide()&lt;br /&gt;    {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int2 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;double&lt;/span&gt;&lt;span style="color: #000000;"&gt; Result &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; calculator.Divide(Int1, Int2);&lt;br /&gt;      Assert.AreEqual(&lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;, Result); &lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    [TestMethod]&lt;br /&gt;    [ExpectedException(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;typeof&lt;/span&gt;&lt;span style="color: #000000;"&gt;(DivideByZeroException))]&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;void&lt;/span&gt;&lt;span style="color: #000000;"&gt; DivideByZero()&lt;br /&gt;    {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;6&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int2 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;double&lt;/span&gt;&lt;span style="color: #000000;"&gt; Result &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; calculator.Divide(Int1, Int2);&lt;br /&gt;    }&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;In the test unit we created our Calculator class which we will test. Of course without the actual code this will not compile, so we create the initial method stubs, which will throw a not implemented exception.&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Step 2&lt;/strong&gt; &lt;br /&gt;Run the tests. No supprise they will fail. &lt;br /&gt;  &lt;br /&gt;&lt;strong&gt;Step 3&lt;/strong&gt; &lt;br /&gt;Write the real methods: &lt;br /&gt;  &lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:5c4a7003-9271-4c95-a4d4-8e1e1fbe41bf" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Add(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int1, &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int2)&lt;br /&gt;    {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int2;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;double&lt;/span&gt;&lt;span style="color: #000000;"&gt; Divide(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int1, &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;int&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int2)&lt;br /&gt;    {&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;return&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int1 &lt;/span&gt;&lt;span style="color: #000000;"&gt;/&lt;/span&gt;&lt;span style="color: #000000;"&gt; Int2;&lt;br /&gt;    }&lt;br /&gt;  }&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;strong&gt;Step 4 &lt;br /&gt;&lt;/strong&gt;Run the test. They succeed! Because the not so well choosen parameter names you could easily mismatch them in the method Divide, but your test will check for that! &lt;br /&gt;&lt;p&gt;&lt;strong&gt;What is next? &lt;br /&gt;&lt;/strong&gt;This example is rather simple. Complex codes, with for example database interaction will require some more coding for which you will write &lt;strong&gt;fakes and mocks&lt;/strong&gt;. I will explore them in another post. &lt;br /&gt;  &lt;br /&gt;&lt;strong&gt;Conclusion &lt;br /&gt;&lt;/strong&gt;Although you might think that Test Driven Development takes a lot time in the process I am convinced (now) that it will pay back further on in the development process. Beside that it will boost the quality of your code and give you a base to safely refactor it in the future. &lt;br /&gt;  &lt;br /&gt;The examples where build in C#. I am not sure if this works in Delphi Prism as well, but I expect that it does. &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-1787692579740273318?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/1787692579740273318/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=1787692579740273318' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1787692579740273318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1787692579740273318'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/04/exploring-test-driven-development.html' title='Exploring Test Driven Development'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-8779541425159652628</id><published>2009-04-08T04:28:00.001-07:00</published><updated>2009-04-08T04:28:11.561-07:00</updated><title type='text'>CodeRush, when code smells...</title><content type='html'>&lt;p&gt;At the beginning of this month &lt;a href="http://www.devexpress.com/" target="_blank"&gt;Devexpress&lt;/a&gt; released &lt;a href="http://www.devexpress.com/Products/NET/DXperience/WhatsNew2009v1/" target="_blank"&gt;the new version&lt;/a&gt; of their DXPerience products for .NET (Version 2009.1)    &lt;br /&gt;With the release of this components they also released a new version of their coding assisting tool &lt;a href="http://www.devexpress.com/Products/NET/DXperience/WhatsNew2009v1/index.xml?page=7#autolist16" target="_blank"&gt;CodeRush and Refactor Pro&lt;/a&gt;.     &lt;br /&gt;We use CodeRush for a couple of years now in Visual Studio for our C# work. Strange enough this new version somehow managed to trigger the &amp;quot;&lt;strong&gt;wow&lt;/strong&gt;&amp;quot; factor once again.    &lt;br /&gt;I will not explain every new feature here, (You will find some resources at the end of this post) but one that is &lt;strong&gt;awesome&lt;/strong&gt; in particular is &lt;strong&gt;Code Issues&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;The &lt;strong&gt;Code Issues feature&lt;/strong&gt; analyses your source code while your are working in your code. It gives you hints for &lt;strong&gt;Unused namespace references&lt;/strong&gt;, &lt;strong&gt;unused methods&lt;/strong&gt;, &lt;strong&gt;undisposed local vars&lt;/strong&gt; etc, etc.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;How does it work?&lt;/strong&gt;    &lt;br /&gt;Hints appear in a bar near the scrollbar of the editor when you hover the mouse over the colored lines (each color is a hint category):    &lt;br /&gt;&lt;a href="http://lh5.ggpht.com/_33FNQ5v3xjo/SdyKRSvnwLI/AAAAAAAAAHk/QGhLXNSHxD0/s1600-h/cr2%5B3%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="157" alt="Code Smell" src="http://lh5.ggpht.com/_33FNQ5v3xjo/SdyKR8admqI/AAAAAAAAAHo/8Kt0RwFz2yg/cr2_thumb%5B1%5D.jpg?imgmax=800" width="302" border="0" /&gt;&lt;/a&gt;&amp;#160;&amp;#160; &lt;br /&gt;In this particular example, which seems to be extracted from some farmer application ;-), Coderush hints that a line of code where two strings are concatenated, could be refactored using string.format.    &lt;br /&gt;    &lt;br /&gt;When you hover the code line, it shows you what you could do to improve your code: (or make it smell better)&lt;a href="http://lh4.ggpht.com/_33FNQ5v3xjo/SdyKSBerIxI/AAAAAAAAAHs/eSvuzHTr7ug/s1600-h/cr1%5B3%5D.jpg"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="139" alt="cr1" src="http://lh3.ggpht.com/_33FNQ5v3xjo/SdyKSkfcdEI/AAAAAAAAAHw/GmZeStnw1o8/cr1_thumb%5B1%5D.jpg?imgmax=800" width="402" border="0" /&gt;&lt;/a&gt;     &lt;br /&gt;This is really &lt;strong&gt;an impressive cool feature&lt;/strong&gt;, that will boost the quality of your code.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Delphi Prism     &lt;br /&gt;&lt;/strong&gt;Unfortunately CodeRush only supports &lt;strong&gt;C#&lt;/strong&gt; and &lt;strong&gt;VB.NET&lt;/strong&gt; at this moment. It would be very nice if CodeRush &lt;a href="http://beensoft.blogspot.com/2008/11/devexpress-will-support-delphi-prism.html" target="_blank"&gt;would support Delphi Prism&lt;/a&gt; as well.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;    &lt;br /&gt;Beside the fact that CodeRush helps you to boost your productivity with lots of code templates, it also helps you to track code smells and refactor them out of your software which will eventualy increase the quality of it.    &lt;br /&gt;    &lt;br /&gt;You can find more resources on CodeRush here:    &lt;br /&gt;&lt;a href="http://www.devexpress.com/Products/Visual_Studio_Add-in/Coding_Assistance/" target="_blank"&gt;The Devexpress website&lt;/a&gt;    &lt;br /&gt;Mark Miller blog post &amp;quot;&lt;a href="http://community.devexpress.com/blogs/markmiller/archive/2009/04/01/what-s-new-in-coderush-amp-refactor-pro-9-1.aspx" target="_blank"&gt;What's new in CodeRush &amp;amp; Refactor Pro&lt;/a&gt;&amp;quot;    &lt;br /&gt;&lt;a href="http://rorybecker.blogspot.com/2009/03/coderush-and-refactor-910-beta.html" target="_blank"&gt;This blogpost by Rory Becker&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-8779541425159652628?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/8779541425159652628/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=8779541425159652628' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8779541425159652628'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8779541425159652628'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/04/coderush-when-code-smells.html' title='CodeRush, when code smells...'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_33FNQ5v3xjo/SdyKR8admqI/AAAAAAAAAHo/8Kt0RwFz2yg/s72-c/cr2_thumb%5B1%5D.jpg?imgmax=800' height='72' width='72'/><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-8666957275802234620</id><published>2009-03-12T00:59:00.001-07:00</published><updated>2009-03-12T04:03:48.298-07:00</updated><title type='text'>New release for Delphi Prism</title><content type='html'>&lt;p&gt;There is a new release of Delphi Prism available, according &lt;a href="http://edn.embarcadero.com/article/39408" target="_blank"&gt;this edn article&lt;/a&gt;. The &lt;strong&gt;Delphi Prism February 2009 release&lt;/strong&gt; (Build 3.0.17.591) as it is called (Wasn't it already March? ;-) ) contains the following &lt;a href="http://prismwiki.codegear.com/en/Changes_and_Known_Issues#Changes_and_Resolved__Issues_in_Build_3.0.17.591%22" target="_blank"&gt;changes&lt;/a&gt;. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-8666957275802234620?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/8666957275802234620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=8666957275802234620' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8666957275802234620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8666957275802234620'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/03/new-release-for-delphi-prism.html' title='New release for Delphi Prism'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3187098808457453412</id><published>2009-01-07T02:33:00.001-08:00</published><updated>2009-01-07T02:37:13.616-08:00</updated><title type='text'>TIOBE language of the year not Delphi</title><content type='html'>&lt;p&gt;In october Jim Mckeeth &lt;a href="http://www.delphi.org/2008/10/delphi-language-of-the-year-2008/" target="_blank"&gt;reported&lt;/a&gt; that Delphi could well be the language of the year in the &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" target="_blank"&gt;TIOBE Community language index&lt;/a&gt;.    &lt;br /&gt;Unfortunately this has not happened despite the efforts of the Delphi community putting &amp;quot;Delphi programming&amp;quot; on webpages.    &lt;br /&gt;    &lt;br /&gt;In &lt;a href="http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html" target="_blank"&gt;january&lt;/a&gt; Delphi is fallen slightly one place back to position 10. (Nothing to worry about). Remarkable is that Pascal went up 3 places compared with last year, now holding the 15th position. I predict that Pascal will become the language of the year 2009! ;-)&lt;/p&gt;  &lt;p&gt;Language of the year 2008: C&lt;/p&gt;  &lt;p&gt;For what it is worth........   &lt;br /&gt;    &lt;br /&gt;What is your prediction?&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3187098808457453412?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3187098808457453412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3187098808457453412' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3187098808457453412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3187098808457453412'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/01/tiobe-language-of-year-not-delphi.html' title='TIOBE language of the year not Delphi'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4059008698280608068</id><published>2009-01-06T12:41:00.001-08:00</published><updated>2009-01-06T12:42:15.162-08:00</updated><title type='text'>LINQ with Delphi Prism #2 : Deferred Execution</title><content type='html'>&lt;p&gt;As said in &lt;a href="http://beensoft.blogspot.com/2009/01/linq-with-delphi-prism-1-sequences.html" target="_blank"&gt;this previous post&lt;/a&gt; Delphi Prism supports LINQ all the way so all the LINQ feature just work in Delphi Prism.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Deferred Execution      &lt;br /&gt;&lt;/strong&gt;One of the key features of LINQ is &lt;strong&gt;Deferred Execution&lt;/strong&gt;. That means that a LINQ query does not execute until data is demanded, for except by an iteration through a list. This makes it possible to make a complex query without execution each part of the query seperately.     &lt;br /&gt;    &lt;br /&gt;However, there is one exceptions to the rule, a LINQ query &lt;strong&gt;executes immediately&lt;/strong&gt; when you use a function that must iterate over the list for its result like, for example &lt;strong&gt;Sum(), Count(), ToList()&lt;/strong&gt; etc.     &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:691b3a09-5fed-441d-a173-7049265a41cf" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Example of deferred execution or lazy execution&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;-------------------------------------------&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; Numbers :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; new List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  Numbers.Add(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; DoubledList : sequence &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;of&lt;/span&gt;&lt;span style="color: #000000;"&gt; integer &lt;br /&gt;                      :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Numbers.Select(n&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;n&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Query not yet executed!&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Add another number to the list&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  Numbers.Add(&lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;At this point query is executed&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Result &amp;quot;2--4&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; i : Integer &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; DoubledList &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;      Result :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Result &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; i.ToString &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;--&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  MessageBox.Show(Result);&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Example of direct execution&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;-------------------------------------------&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; Numbers :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; new List&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;integer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  Numbers.Add(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  Numbers.Add(&lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Query executed here&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; Sum :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Numbers.Select(n&lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;n&lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;)).Sum();&lt;br /&gt;  Numbers.Add(&lt;/span&gt;&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  Numbers.Add(&lt;/span&gt;&lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Would expect 20, but result is only 6&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  MessageBox.Show(Sum.ToString);    &lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4059008698280608068?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4059008698280608068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4059008698280608068' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4059008698280608068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4059008698280608068'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/01/linq-with-delphi-prism-2-deferred.html' title='LINQ with Delphi Prism #2 : Deferred Execution'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-6932688402384221632</id><published>2009-01-05T12:40:00.001-08:00</published><updated>2009-01-05T12:56:30.120-08:00</updated><title type='text'>LINQ with Delphi Prism #1 : Sequences</title><content type='html'>&lt;p&gt;I have been digging into LINQ this christmas. LINQ is a cool way to query data, whether it is an &lt;strong&gt;array&lt;/strong&gt;, a &lt;strong&gt;list&lt;/strong&gt; or a &lt;strong&gt;remote datasource&lt;/strong&gt;.     &lt;br /&gt;LINQ is a new feature of &lt;strong&gt;C# 3.0&lt;/strong&gt; that comes with Visual Studio 2008, but guess what, &lt;a href="http://www.codegear.com/products/delphi/prism" target="_blank"&gt;Delphi Prism&lt;/a&gt;, also supports LINQ all the way. &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;If you want to play/test LINQ queries syntax you can download and install &lt;a href="http://www.linqpad.net/"&gt;LinqPad&lt;/a&gt;, a free tool to use LINQ querys against a SQL Server database. (You could drop Management Studio for that). &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;The only disadvantage I found (IMO) on LINQ so far is that quering remote datasources is bound to Microsoft SQL Server database. (Maybe this will be extended in the future)   &lt;br /&gt;That involves, the so called &amp;quot;&lt;strong&gt;LINQ to SQL&lt;/strong&gt;&amp;quot; methods, which is, I believe, allready deprecated. &lt;/p&gt;  &lt;p&gt;As said before &lt;strong&gt;Delphi Prism completely supports LINQ&lt;/strong&gt;. Starting a 3.5 framework application will give you a reference to &lt;strong&gt;System.Linq&lt;/strong&gt;, the namespace, where LINQ lives.&lt;/p&gt;  &lt;p&gt;In this series I will explore LINQ using Delphi Prism: &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;1. Using LINQ on a sequence&lt;/strong&gt;     &lt;br /&gt;LINQ, in Delphi Prism, works on so called &lt;strong&gt;sequences&lt;/strong&gt;, which is a new type described in the &lt;a href="http://prismwiki.codegear.com/"&gt;Delphi Prism Wiki&lt;/a&gt; as: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;Sequences are a special type in the language and can be thought of as a collection of elements, similar to an array. &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Declare a sequence like this: &lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:ea535058-4b9e-4e7c-a499-99eb8a282a13" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 437px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  Names : sequence &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;of&lt;/span&gt;&lt;span style="color: #000000;"&gt; String :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;     [&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mickey&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Dick&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Roland&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Delphi&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Harry&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;With LINQ it is very easy to query a collection, like this sequence. You can do this in two ways, namely: &lt;br /&gt;1.&lt;strong&gt; Using Lambda expressions&lt;/strong&gt; &lt;br /&gt;2. &lt;strong&gt;Using query comprehension syntax&lt;/strong&gt; (Query Syntax)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;With &lt;a href="http://prismwiki.codegear.com/en/Lambda_Expressions" target="_blank"&gt;Lambda expressions&lt;/a&gt; you can write rather small expressions to query the data, with the &lt;a href="http://prismwiki.codegear.com/en/Query_Expressions" target="_blank"&gt;query syntax&lt;/a&gt; they become more readable (read less magic ;-)). &lt;br /&gt;By the way the compiler (at least in C#) will translate the query syntax into lambda expressions. Both techniques are complementary. (I think the Oxygene compiler also does this....)&lt;/p&gt; &lt;br /&gt;&lt;p&gt;Suppose we want to have all the names from our sequence which have more then 4 characters, containing an &amp;quot;a&amp;quot; and sorted in upper case. &lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:bc14fc14-f145-48df-98ef-fc5d929aea21" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Using Lambda syntax&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; FilteredNames :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Names&lt;br /&gt;                       .Where (n &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; (n.Length &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;br /&gt;                              &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt; n.Contains(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;a&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;                       .OrderBy (n &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; n)&lt;br /&gt;                       .Select (n &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; n.ToUpper());&lt;br /&gt;                               &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Using query comprehension syntax&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt; FilteredNames :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; from n &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; Names&lt;br /&gt;                       where ((n.Length &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;4&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;br /&gt;                               &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt; n.Contains(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;a&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;))&lt;br /&gt;                       order by n&lt;br /&gt;                       select n.ToUpper;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Note we don't have to declare FilteredNames&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Iterate through the filterednames to show them in a messagebox:&lt;br /&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:1775656e-5886-41e6-8c6d-2f60f60d7562" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; s : string &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; FilteredNames &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;     FilteredOnes :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; FilteredOnes &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; s &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;--&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;quot; &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;  MessageBox.Show(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;FilteredOnes: &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; FilteredOnes) &lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Note that the original collection, Names in this case, is still holding all the elements.&lt;/br&gt;&lt;br /&gt;Conclusion LINQ is a, in basic, simple way to query collections the SQL way. Delphi Prism supports them complete. Choosing Lambda expression or Query syntax will be mostly a personal preference.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-6932688402384221632?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/6932688402384221632/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=6932688402384221632' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6932688402384221632'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6932688402384221632'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2009/01/linq-with-delphi-prism-1-sequences.html' title='LINQ with Delphi Prism #1 : Sequences'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7573216336364559310</id><published>2008-11-20T05:24:00.001-08:00</published><updated>2008-11-20T05:24:43.946-08:00</updated><title type='text'>DevExpress will support Delphi Prism</title><content type='html'>&lt;p&gt;Now that Delphi for .NET (now Delphi Prism) has become a Visual Studio plugin it is possible to use all the .NET components out there.   &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://www.devexpress.com" target="_blank"&gt;DevExpress&lt;/a&gt;, which btw started as a Delphi shop, has a great component set called &lt;a href="http://www.devexpress.com/Products/NET/DXperience/" target="_blank"&gt;DXperience&lt;/a&gt; for ASP.NET and Winforms development. Until now they only supported the Visual Studio IDE's.    &lt;br /&gt;You could use this components also in Delphi for .NET however they were not officialy supported. (No installation and technical support)&lt;/p&gt;  &lt;p&gt;According to &lt;a href="http://community.devexpress.com/blogs/ctodx/archive/2008/11/19/dxperience-and-delphi-prism.aspx" target="_blank"&gt;this blogpost&lt;/a&gt; by Julian Bucknall the CTO of DevExpress, it looks like they will &lt;strong&gt;support Delphi Prism in the official sense of the word&lt;/strong&gt;.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The story is that we shall be supporting Delphi Prism with DXperience and we're evaluating what we need to do to make that work. As it happens: not very much -- it installs just fine and, on first blush, seems to work just fine. There are more exhaustive tests to complete, obviously.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Of course this is not an official statement......&lt;/p&gt;  &lt;p&gt;We use the DXPerience components daily in our C# projects, and they are just great. We feel that Visual Studio with C#/VB.NET/Delphi Prism + DXPerience gives the developer the same power as Delphi for Win32 as we know it for so long. (For Winforms developement).&lt;/p&gt;  &lt;p&gt; In my opinion this is great step for Delphi Prism in the .NET world. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7573216336364559310?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7573216336364559310/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7573216336364559310' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7573216336364559310'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7573216336364559310'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/11/devexpress-will-support-delphi-prism.html' title='DevExpress will support Delphi Prism'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-6012061352085745682</id><published>2008-10-27T12:14:00.000-07:00</published><updated>2008-10-27T14:12:36.565-07:00</updated><title type='text'>Delphi Prism, some first thoughts</title><content type='html'>Delphi Prism is announced in &lt;a href="http://www.codegear.com/products/delphi/prism"&gt;this Embarcadero press release&lt;/a&gt;. Delphi Prism is based on Oxygene from &lt;a href="http://www.remobjects.com"&gt;Remobjects&lt;/a&gt;, so I think you could say &lt;a href="http://www.codegear.com/products/delphi/prism"&gt;Delphi Prism &lt;/a&gt;is Remobject's &lt;a href="http://www.remobjects.com/oxygene.aspx"&gt;Oxygene&lt;/a&gt;. Read &lt;a href="http://www.remobjects.com/oxygene.aspx"&gt;Remobjects press release here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Added: &lt;a href="http://www.bitwisemag.com/2/Delphi-Prism-Visual-Studio-Pascal"&gt;Interview with marc hoffman&lt;/a&gt;, Chief Architect at Remobjects on Bitwise Magazine.&lt;br /&gt;&lt;br /&gt;After five years of several solutions and directions, it looks like Delphi for .NET has finally found a good home.&lt;br /&gt;&lt;br /&gt;Although Delphi .NET only exists for only about four years, there have been a lot of changes in the strategy executed by Borland, Borland/CodeGear and now Embarcadero. So let's take a brief look at the Delphi for .NET history:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2004 - Delphi 8 (Borland)&lt;/strong&gt;&lt;br /&gt;Delphi for .NET is born for the .NET Framework version 1.1. Delphi for .NET is positioned as a &lt;strong&gt;first class .NET citizen&lt;/strong&gt;. It offers .NET 1.1 development for Winforms, ASP.NET and VCL.NET, which is the .NET variant of the VCL, offering a highly compatible framework based on .NET.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2005 - Delphi 2005 (Borland)&lt;/strong&gt;&lt;br /&gt;Delphi 2005 offers the same as Delphi 8 but Delphi 2005 has a lot improvements in quality.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2006 - Delphi 2006 (Borland)&lt;/strong&gt;&lt;br /&gt;Delphi 2006 still has support for the .NET Framework 1.1 (Winforms, ASP.NET and VCL.NET) Delphi 2006 offers a stable IDE for this developments. The fact that it does not support .NET 2.0 shows the trouble that Borland had to keep up with Microsoft.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2007 - Delphi 2007 (CodeGear/Borland)&lt;/strong&gt;&lt;br /&gt;Delphi 2007 finally supports .NET 2.0, but unfortunately &lt;a href="http://beensoft.blogspot.com/2007/06/codegear-to-drop-winforms-designer-in.html"&gt;the Winforms support is dropped&lt;/a&gt;. (Only ASP.NET and VCL.NET is supported)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2008 - Delphi 2008 (Embarcadero)&lt;/strong&gt;&lt;br /&gt;Delphi 2009 has become a Visual Studio Plugin based on Oxygene (formely known as Chrome) offering support for all available Microsoft .NET technology's (2.0, 3.0, 3.5))&lt;br /&gt;Unfortunately it looks like VCL.NET is dropped.&lt;br /&gt;&lt;br /&gt;It is not likely that the Delphi for .NET product strategy will be nominated for best executed product strategy ever. &lt;g&gt;&lt;br /&gt;&lt;br /&gt;However this is a &lt;strong&gt;very strong sign &lt;/strong&gt;of the new spirit that Embarcadero is bringing to Delphi. It proofs that &lt;strong&gt;the buyout by Embarcadero is the best thing &lt;/strong&gt;that happened to Delphi (and of course CodeGear) in the last five years.&lt;br /&gt;&lt;br /&gt;Back to Delphi Prism:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Delphi Prism the pros&lt;/strong&gt;&lt;br /&gt;1. Instant support for all Microsoft .NET technologies.&lt;br /&gt;2. The Delphi language is now at same level as C#, VB.NET, so the choice for the Delphi language can be made much easier. (Hack it is the same IDE)&lt;br /&gt;3. Delphi for Win32 can focus on Win32 again, will not be hold back by .NET technologies.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Delphi Prism the cons&lt;/strong&gt;&lt;br /&gt;1. Less compatibilty with Delphi Win32 technologies, due to pure .NET and languages changes/additions. (Compared to VCL-VCL.NET, VCL-Winforms)&lt;br /&gt;2. After Winforms, now VCL.NET dropped, and that will not please every body.&lt;br /&gt;&lt;br /&gt;All with all the pros weigh more than the cons in my opinion.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Why use Delphi Prism?&lt;/strong&gt;&lt;br /&gt;This question is not answered easily. I think a lot of Delphi developers went for C# in the last four years. For example we decided in 2007 to standarize our .NET development on Visual Studio C# due to the dropping of Winforms in Delphi 2007 (Basicaly due to the mixed/confusing messages by Borland).  &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;Although we don't know all the ins and outs yet (sure will hear a lot more the coming week) this is by far the best thing ever that happened to Delphi for .NET.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-6012061352085745682?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/6012061352085745682/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=6012061352085745682' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6012061352085745682'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6012061352085745682'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/10/delphi-prism-some-first-thoughts.html' title='Delphi Prism, some first thoughts'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7322927454563694077</id><published>2008-10-22T00:00:00.001-07:00</published><updated>2008-10-22T03:14:48.699-07:00</updated><title type='text'>Exploring anonymous methods</title><content type='html'>&lt;p&gt;New in Delphi 2009 are anonymous methods. Anonymous methods are methods without a name, which are able to do something on local variables where they are implemented. In fact they are &lt;strong&gt;a reference to a method&lt;/strong&gt;.    &lt;br /&gt;Anonymous methods are a &lt;strong&gt;bit magic&lt;/strong&gt;, at least they were to me, and hard to explain.    &lt;br /&gt;A nice place to use them is together with generics types. For instance the Sort method of a &lt;a href="http://beensoft.blogspot.com/2008/09/simple-generic-list-tlist.html"&gt;TList&amp;lt;T&amp;gt;&lt;/a&gt; is &lt;strong&gt;a natural place&lt;/strong&gt; to use them: &lt;/p&gt;&lt;p&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:e2de5690-92c7-4bf1-a7f3-fb5d9bde112a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;  PersonsList.Sort(TComparer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Construct(&lt;br /&gt;     &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;const&lt;/span&gt;&lt;span style="color: #000000;"&gt; Item1, Item2: TPerson): Integer&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;         Result :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; CompareText(Item1.LastName, &lt;br /&gt;                            Item2.LastName);&lt;br /&gt;       &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;A cool thing about anonymous methods is that &lt;strong&gt;it can execute your code (incl. local vars) in another place&lt;/strong&gt;. This can be &lt;strong&gt;another unit&lt;/strong&gt; or even &lt;strong&gt;another thread&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Implementing them in your daily code however is another thing. How to do that? Well here are &lt;strong&gt;my first explorations&lt;/strong&gt;: Let's say we have this simple application that has a TStringList where we want to do some searching on the strings, based on the users input. I came up with this:&lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:70517719-f929-4c70-a9d6-fd0c6fe497af" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Declaration of the anon reference &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;The passed string will be searched on&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;type&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;   TAnonStrProc &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;       reference &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;to&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;(s : string) : Integer;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Implement a method to execute &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;1. Ask a string to search&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;2. Execute the referenced method &amp;quot;proc&amp;quot;&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm4.FindString(proc: TAnonStrProc)&lt;br /&gt;                             : Integer;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  SearchStr : string;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  Result :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; InputQuery(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Search&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Search a string&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;br /&gt;                 SearchStr) &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;then&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    Result :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; proc(SearchStr);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Create a string list&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm4.Button1Click(Sender: TObject);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  sla : TStrings;&lt;br /&gt;  i,j : Integer;&lt;br /&gt;  Index, Count : integer;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  sla :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TStringList.Create;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;   sla.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;One&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;   sla.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Two&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;   sla.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Three&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;   sla.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Two&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Call the FindString method with anon method&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;to get the index of string in the list&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Note that it does someting with our local&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;variable sla&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;   Index :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; FindString(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;(s : string) : Integer&lt;br /&gt;                       &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;                         Result :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; sla.IndexOf(s);&lt;br /&gt;                       &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;   ShowMessage(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Index: &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; IntToStr(Index));&lt;br /&gt; &lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Call the FindString method with anon method&lt;br /&gt;   &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;to get the count of a searched string&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;   Count :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; FindString(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;(s : string) : Integer&lt;br /&gt;                       &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;                         str : string;&lt;br /&gt;                         i : integer;&lt;br /&gt;                       &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;                         Result :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                         &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; str &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; sla &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;                           &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; str &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; s &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;then&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;                             Inc(Result);&lt;br /&gt;                         &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;                       &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;   ShowMessage(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Count: &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; IntToStr(Count));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;   sla.Free;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Please note that this example probably &lt;strong&gt;won't make it in the daily code&lt;/strong&gt;, but it shows in a simple manner how they work. Because of the fact that our anonymouse method can take any method as long that it has a string as parameter you can call one method FindString with different implementations by passing different methods.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Well I think anonymous methods are cool. Implement them in your daily code wisely is not that simple. The working however, which seems magic at first, is after some exploring not that hard to follow.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7322927454563694077?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7322927454563694077/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7322927454563694077' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7322927454563694077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7322927454563694077'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/10/exploring-anonymous-methods.html' title='Exploring anonymous methods'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7520888137387162452</id><published>2008-10-20T23:52:00.001-07:00</published><updated>2008-10-20T23:52:09.283-07:00</updated><title type='text'>Round the table Podcast@Delphi.org</title><content type='html'>&lt;p&gt;&lt;a href="http://www.delphi.org/2008/10/episode-11-more-roundtable/"&gt;The 11th Episode&lt;/a&gt; on the &lt;a href="http://www.delphi.org/"&gt;the podcast @ delphi.org&lt;/a&gt; dicusses some interesting things like anonymous methods, Garbage Collection (&amp;quot;To Dispose() or not to Dispose() ) and the speed of the TStringbuilder.    &lt;br /&gt;    &lt;br /&gt;Great stuff! Enjoy!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7520888137387162452?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7520888137387162452/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7520888137387162452' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7520888137387162452'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7520888137387162452'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/10/round-table-podcastdelphiorg.html' title='Round the table Podcast@Delphi.org'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5641222420804724771</id><published>2008-10-06T12:40:00.000-07:00</published><updated>2008-10-06T13:08:35.947-07:00</updated><title type='text'>Speculating on .NET plans #3</title><content type='html'>Although there are not much details unveiled yet, &lt;a href="http://blogs.codegear.com/nickhodges/"&gt;Nick Hodges&lt;/a&gt; made some statements about a new CodeGear product/project/plan called &lt;strong&gt;Delphi Prism &lt;/strong&gt;at the SDN Conference in the Netherlands.&lt;br /&gt;&lt;a href="http://blog.marcocantu.com/"&gt;Marco Cantu&lt;/a&gt; was the first &lt;a href="http://blog.marcocantu.com/blog/nick_announces_delphi_prism.html"&gt;to blog about this statements&lt;/a&gt;, soon followed by &lt;a href="http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:2771"&gt;Bob Swart&lt;/a&gt;, and &lt;a href="http://www.itwriting.com/blog/954-prism-official-delphi-language-comes-to-visual-studio.html"&gt;Tim Anderson&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;But no official statement yet! As it looks the official announcement will be made during the PDC Conference by the end of this month. (According to &lt;a href="http://blogs.codegear.com/abauer/2008/10/06/38874"&gt;Allen Bauer's blogpost&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;What we know now is that &lt;strong&gt;Delphi Prism &lt;/strong&gt;will be a Visual Studio plugin, which I think is great news. As you might know I speculated somewhat over the Delphi .NET (That was the former name of the product) roadmap in previous blogposts, &lt;a href="http://beensoft.blogspot.com/2008/08/speculating-on-net-plans-2.html"&gt;here&lt;/a&gt;(#2), &lt;a href="http://beensoft.blogspot.com/2008/08/tiburon-win32-only-speculating-on-net.html"&gt;here&lt;/a&gt; and &lt;a href="http://beensoft.blogspot.com/2008/07/return-of-winforms-in-delphi-for-net-or.html"&gt;here&lt;/a&gt;. Looks like my speculations were pretty accurate. :-P&lt;br /&gt;&lt;br /&gt;I guess this will be the end of the speculation part although there are much questions unanswered, which I am sure will be answered in the near future.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5641222420804724771?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5641222420804724771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5641222420804724771' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5641222420804724771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5641222420804724771'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/10/speculating-on-net-plans-3.html' title='Speculating on .NET plans #3'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-1854243426464703987</id><published>2008-09-30T03:27:00.001-07:00</published><updated>2008-09-30T03:30:56.917-07:00</updated><title type='text'>A simple Generic Dictionary: TDictionary</title><content type='html'>&lt;p&gt;A new generic type in Delphi 2009 is &lt;strong&gt;TDictionary&lt;/strong&gt;. TDictionary offers a way to store values based on a key into a list. TDictionary is declared as &lt;strong&gt;TDictionary&amp;lt;TKey, TValue&amp;gt;.&lt;/strong&gt;     &lt;br /&gt;TDictionary in fact is what a hashtable is in C#. It allows you to store/structure data based on any key type and any value type.     &lt;br /&gt;    &lt;br /&gt;Suppose we want to track our persons, from the &lt;a href="http://beensoft.blogspot.com/2008/09/simple-generic-list-tlist.html" target="_blank"&gt;previous blogpost&lt;/a&gt;, on their social security number, we could put them in TDictionary like this: (using a very simple social security number....)&lt;/p&gt;  &lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:462564fc-76ee-431a-8970-9c84de016dc4" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm4.Button2Click(Sender: TObject);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  Dic : TDictionary&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Integer,TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  p : TPerson;&lt;br /&gt;  i : integer;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Create dictionary&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  Dic :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TDictionary&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;Integer,TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Create;&lt;br /&gt;  Dic.Add(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;, TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Delphi&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mr&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  Dic.Add(&lt;/span&gt;&lt;span style="color: #800080;"&gt;2&lt;/span&gt;&lt;span style="color: #000000;"&gt;, TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Generic&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Bill&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  Dic.Add(&lt;/span&gt;&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;, TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;nonymous&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;An&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Travel the strings&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; p &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dic.Values  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    ShowMessage(p.FullName);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt; &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Travel the keys&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; i &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dic.Keys &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    ShowMessage(IntToStr(i) &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;: &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;                             Dic.Items[i].FullName);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt; &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Find some key&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dic.TryGetValue(&lt;/span&gt;&lt;span style="color: #800080;"&gt;3&lt;/span&gt;&lt;span style="color: #000000;"&gt;, p) &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;then&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    ShowMessage(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Found it!: &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; p.FullName);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt; &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; p &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dic.Values &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;      p.Free;&lt;br /&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Also free Values and KeyCollection&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;other wise you have a memoryleak&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Is this a bug?&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    Dic.Values.Free;&lt;br /&gt;    Dic.Keys.Free;&lt;br /&gt; &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Free the dictionary&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    Dic.Free;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;I noticed that if you free the Dictionary in above scenario you must also free the Values and Keys collection to avoid a memory leak. This looks like a bug to me. (Will investigate this further) &lt;br /&gt;  &lt;br /&gt;In this sample I used an integer type as the key value, so this has not much benefit compared to an array. You can however use &lt;strong&gt;any type&lt;/strong&gt; to be the key value!&lt;br /&gt;&lt;br /&gt;Because we can store any type, we can take this a step further and put a TList&amp;lt;T&amp;gt; in our Dictionary: &lt;br /&gt;&lt;br /&gt;Suppose we want to put our Personlist into a dictionary based on, let's say their gender. You could do that something like this: &lt;br /&gt;&lt;/p&gt;&lt;br /&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:b76cc00d-7510-4453-8b19-28af72934fb7" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;type&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  PersonKind &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; (pkMale, pkFemale);&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm4.Button3Click(Sender: TObject);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  Dic : TDictionary&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;PersonKind,TList&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  MPersonsList : TList&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  FPersonsList : TList&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  pList : TList&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  p : TPerson;&lt;br /&gt; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; MPersonsList :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TList&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Create;&lt;br /&gt; FPersonsList :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TList&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Create;&lt;br /&gt; Dic :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TDictionary&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;PersonKind,TList&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Create;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Fill male list&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  MPersonsList.Add(TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Delphi&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mr&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  MPersonsList.Add(TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Generic&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Bill&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  MPersonsList.Add(TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Nymous&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Ano&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Fill female list&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  FPersonsList.Add(TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Delphi&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mrs&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  FPersonsList.Add(TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Nymous&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Anna&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Add to dictionary&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  Dic.Add(pkMale, MPersonsList);&lt;br /&gt;  Dic.Add(pkFemale, FPersonsList);&lt;br /&gt;  &lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Travel&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; p &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dic[pkMale] &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    ShowMessage(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;This is a man: &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; p.FullName);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; p &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; Dic[pkFemale] &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    ShowMessage(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;This is a female: &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #000000;"&gt;+&lt;/span&gt;&lt;span style="color: #000000;"&gt; p.FullName);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Free Persons and Personlist&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; p &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; MPersonsList &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; p.Free;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; p &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; FPersonsList &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; p.Free;&lt;br /&gt;    MPersonsList.Free;&lt;br /&gt;    FPersonsList.Free;&lt;br /&gt; &lt;br /&gt;    Dic.Free;&lt;br /&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;TDatadictionary is a &lt;strong&gt;very powerfull&lt;/strong&gt;, yet in basic &lt;strong&gt;easy to use&lt;/strong&gt;, generic type. It allows you to build simple, but also complex data structures. (What about a TDictionary with TDictionary's in it? ;-) ) &lt;br /&gt;&lt;br /&gt;Again a very nice language addition to Delphi!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-1854243426464703987?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/1854243426464703987/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=1854243426464703987' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1854243426464703987'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1854243426464703987'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/09/simple-generic-dictionary-tdictionary.html' title='A simple Generic Dictionary: TDictionary'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4688201347656605302</id><published>2008-09-25T00:08:00.001-07:00</published><updated>2008-09-25T02:02:53.836-07:00</updated><title type='text'>A simple Generic List: TList&lt;T&gt;</title><content type='html'>&lt;p&gt;Delphi 2009 has support for generics, and has 'built in' generic types like TList, TArrays etc. If you want to use them you must add &lt;strong&gt;Generics.Collections&lt;/strong&gt; to your uses clause.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Generic List: TList      &lt;br /&gt;&lt;/strong&gt;Suppose we want a list with persons representing the TPerson class:     &lt;br /&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:6373bc24-ee90-4152-8723-7c97c646f509" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Our class TPerson&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;type&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  TPerson &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;   FFirstName : string;&lt;br /&gt;   FLastName : string;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetFullName: string;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;published&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;constructor&lt;/span&gt;&lt;span style="color: #000000;"&gt; Create(ALastName : String; &lt;br /&gt;                            AFirstName : string);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;property&lt;/span&gt;&lt;span style="color: #000000;"&gt; FirstName : string read FFirstName &lt;br /&gt;                             write FFirstName;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;property&lt;/span&gt;&lt;span style="color: #000000;"&gt; LastName : string read FLastName &lt;br /&gt;                             write FLastName;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;property&lt;/span&gt;&lt;span style="color: #000000;"&gt; FullName : string read GetFullName;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Define the generic list&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;PersonsList : TList&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Method to fill the list&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm4.btnPopulateClick(Sender: TObject);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Filll the personslist&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  PersonsList.Add(TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Delphi&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;James&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  PersonsList.Add(TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Generic&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;,&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Mister&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  PersonsList.Add(TPerson.Create(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Anon&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Method&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;etc.&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Traveling this list to fill a TListBox&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm4.FillListBox;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  p : TPerson;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  ListBox1.Items.Clear;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; p &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;in&lt;/span&gt;&lt;span style="color: #000000;"&gt; PersonsList &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    ListBox1.Items.Add(p.FullName);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;As you can see, no rocking science needed to implement a generic list!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Sorting a generic TList&lt;br /&gt;&lt;/strong&gt;The next step is to implement a sorting method to sort the list on, for example, the Lastname property.&lt;br /&gt;  &lt;br /&gt;A TList has a Sort property which has an &lt;strong&gt;IComparer interface&lt;/strong&gt; that can be implemented like this using an anonymous method: &lt;br /&gt;  &lt;br /&gt;(You will have to add &lt;span style="font-weight:bold;"&gt;generics.default&lt;/span&gt; to your uses clause)&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:391879a3-befd-4997-bcb7-90817279130b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm4.btnSortClick(Sender: TObject);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  PersonsList.Sort(TComparer&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;TPerson&lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;.Construct(&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt;(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;const&lt;/span&gt;&lt;span style="color: #000000;"&gt; Item1,Item2:TPerson): Integer&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;         Result :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;          CompareText(Item1.LastName, Item2.LastName);&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;));&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;Generics is a great new feature of Delphi 2009. Just as in C# you will use them all the time. In this context, the use of &lt;span style="font-weight:bold;"&gt;anonymous methods&lt;/span&gt; is great.&lt;br /&gt;&lt;br /&gt;Besides TList Delphi has more standard generics typs including TArray, TEnumarable and more, so there is always more to explore!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update 25-09-2008 10:58&lt;/strong&gt;&lt;br /&gt;As animal commented you must of course create the list first, which I did not include in the code snippets. &lt;br /&gt;&lt;br /&gt;PersonsList:= TList&lt;TPerson&gt;.Create;&lt;br /&gt;&lt;br /&gt;And you will have to free it also at sometime. (Don't forget to free the TPerson objects as well!)&lt;br /&gt;&lt;br /&gt;for p in PersonsList do begin&lt;br /&gt;  p.free;&lt;br /&gt;end;&lt;br /&gt;PersonsList.Free;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4688201347656605302?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4688201347656605302/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4688201347656605302' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4688201347656605302'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4688201347656605302'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/09/simple-generic-list-tlist.html' title='A simple Generic List: TList&amp;lt;T&amp;gt;'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-1795980039029818518</id><published>2008-09-22T06:19:00.001-07:00</published><updated>2008-09-22T06:22:53.321-07:00</updated><title type='text'>"Cast on News" episode at Delphi.org</title><content type='html'>&lt;p&gt;Last Friday I had a really fun experience, because &lt;a href="http://www.delphi.org/" target="_blank"&gt;Jim McKeeth&lt;/a&gt; invited me to be on &lt;a href="http://www.delphi.org/2008/09/episode-6-cast-on-news/" target="_blank"&gt;the sixth episode on The Podcast at Delphi.org&lt;/a&gt; - &amp;quot;&lt;strong&gt;Cast on News&lt;/strong&gt;.&amp;quot;&amp;#160; &lt;br /&gt;    &lt;br /&gt;Also invited were &lt;a href="http://blogs.remobjects.com/blogs/mh" target="_blank"&gt;marc hoffman&lt;/a&gt; from Remobjects, and &lt;a href="http://www.deltics.co.nz/" target="_blank"&gt;Jolyon Smith&lt;/a&gt; from the Te Waka o Delphi blog. Together with host Jim McKeeth we talked about the new Delphi 2009 and Delphi in general. It turned out to be a good and fun talk.&lt;/p&gt;  &lt;p&gt;'Speaking up' instead of 'Writing up' is a total different experience, I can tell you now ;-).&amp;#160; Make sure you don't miss it, you can 'hear' &lt;a href="http://www.delphi.org/2008/09/episode-6-cast-on-news/" target="_blank"&gt;this podcast&lt;/a&gt; on the &lt;a href="http://www.delphi.org/" target="_blank"&gt;Delphi.org website&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-1795980039029818518?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/1795980039029818518/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=1795980039029818518' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1795980039029818518'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1795980039029818518'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/09/on-news-episode-at-delphiorg.html' title='&amp;quot;Cast on News&amp;quot; episode at Delphi.org'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-414903781066444282</id><published>2008-09-21T13:05:00.000-07:00</published><updated>2008-09-21T13:15:13.954-07:00</updated><title type='text'>Those tiny little details...</title><content type='html'>It are the tiny little details that makes a new release so interesting.&lt;br /&gt;Take for instance the code completion popup window of Delphi 2009, it now shows deprecated functions and properties in the color dark gray.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://4.bp.blogspot.com/_33FNQ5v3xjo/SNaqinnx_QI/AAAAAAAAAE0/QvdAnzbh50w/s1600-h/ci.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_33FNQ5v3xjo/SNaqinnx_QI/AAAAAAAAAE0/QvdAnzbh50w/s320/ci.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5248569927475002626" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-414903781066444282?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/414903781066444282/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=414903781066444282' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/414903781066444282'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/414903781066444282'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/09/those-tiny-little-details.html' title='Those tiny little details...'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_33FNQ5v3xjo/SNaqinnx_QI/AAAAAAAAAE0/QvdAnzbh50w/s72-c/ci.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-9054627372287599979</id><published>2008-09-16T12:41:00.001-07:00</published><updated>2008-09-16T13:05:38.949-07:00</updated><title type='text'>Delphi 2009 very first impressions</title><content type='html'>Today the SA announcements finally hit the doorstep. Here are some very first impressions:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Installation&lt;/strong&gt;&lt;br /&gt;Installation improved a lot! Installing Delphi 2009, so not C++ Builder, only took &lt;strong&gt;13 minutes&lt;/strong&gt;. &lt;br /&gt;The installation of the documentation, which is a separate install took about &lt;strong&gt;17 minutes&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. First startup&lt;/strong&gt;&lt;br /&gt;Start up time (cold) is on my machine approx. 10 seconds. A warm start however only takes 6 seconds. (Personally I don't care a lot about startup times, at least as it does not take too long ;-), but is a nice measure point)&lt;br /&gt;&lt;br /&gt;My machine: Intel Core 2 duo 1,86 Ghz. 2GB Ram, Windows Vista Business.&lt;br /&gt;&lt;br /&gt;So the installation experience is &lt;strong&gt;a lot better &lt;/strong&gt;then before. (remember &gt; 1 hour installations...).&lt;br /&gt;For my real projects I will have to wait for Devexpress, who are now &lt;a href="http://community.devexpress.com/blogs/ctodx/archive/2008/08/25/devexpress-vcl-products-support-for-tibur-243-n.aspx"&gt;working on Delphi 2009 support&lt;/a&gt;, before I can upgrade, but I guess until then there is a lot to explore.....generics, unicode....etc. By the way, Dr Bob has this &lt;a href="http://www.drbob42.com/tiburon/index.htm"&gt;nice overview with lots of blogpost and resources&lt;/a&gt; about Delphi 2009.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-9054627372287599979?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/9054627372287599979/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=9054627372287599979' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9054627372287599979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9054627372287599979'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/09/delphi-2009-very-first-impressions.html' title='Delphi 2009 very first impressions'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2017924939595332735</id><published>2008-09-02T07:17:00.001-07:00</published><updated>2008-09-02T07:17:27.714-07:00</updated><title type='text'>Delphi a secret weapon..........</title><content type='html'>&lt;p&gt;Nice article by &lt;a href="http://www.itwriting.com/blog/" target="_blank"&gt;Tim Anderson&lt;/a&gt;:&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.itjoblog.co.uk/2008/08/delphi-a-secret-weapon-for-win.html" target="_blank"&gt;Delphi: a secret weapon for Windows developers&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;Don't keep it a secret! ;-)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2017924939595332735?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2017924939595332735/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2017924939595332735' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2017924939595332735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2017924939595332735'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/09/delphi-secret-weapon.html' title='Delphi a secret weapon..........'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5014149281665461464</id><published>2008-08-28T00:59:00.001-07:00</published><updated>2008-08-28T01:05:57.597-07:00</updated><title type='text'>Speculating on .NET plans #2</title><content type='html'>&lt;p&gt;&lt;a href="http://www.delphi.org/" target="_blank"&gt;Jim McKeeth&lt;/a&gt; asks himself, and us, &lt;a href="http://www.delphi.org/2008/08/delphi-win32-and-net-diverging/" target="_blank"&gt;in this blogpost&lt;/a&gt; what we think about the upcoming .NET roadmap.    &lt;br /&gt;Jim quotes, from &lt;a href="http://www.delphi.org/2008/08/episode-2-nick-hodges/" target="_blank"&gt;his podcast&lt;/a&gt; with &lt;a href="http://blogs.codegear.com/nickhodges/" target="_blank"&gt;Nick Hodges&lt;/a&gt;, which I will quote here again:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Historically one of our strong .NET stories has been close compatibility with the .NET and Win32 compilers.&amp;#160; But as we have evaluated that we have found that doing that is kind of holding both compilers back to a certain degree.&amp;#160; And that compatibility story not as compelling as it necessarily was.&amp;#160; And so what we are looking at instead is a solution that departs or sort of begins to diverge away from that compatibility story.&amp;#160; And starts heading more towards &lt;strong&gt;complete support for the .NET framework &lt;/strong&gt;kind of thing.&amp;#160; And so you&amp;#8217;ll be seeing more information about that in the coming weeks.&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;He wonders if it is &lt;strong&gt;huge news&lt;/strong&gt;? Well I think is! I have speculated somewhat about this plans in &lt;a href="http://beensoft.blogspot.com/2008/08/tiburon-win32-only-speculating-on-net.html" target="_blank"&gt;this&lt;/a&gt;, and &lt;a href="http://beensoft.blogspot.com/2008/07/return-of-winforms-in-delphi-for-net-or.html" target="_blank"&gt;this&lt;/a&gt; blogpost.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;This is what I think!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I could think of a possible scenario:    &lt;br /&gt;&lt;em&gt;Disclaimer, this is what I think without any information or whatsoever.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The scenario: Delphi .NET as a Visual Studio plugin     &lt;br /&gt;&lt;/strong&gt;CodeGear splits Delphi into two seperate products, let say &amp;quot;&lt;strong&gt;Delphi VCL&amp;quot;&lt;/strong&gt; and &amp;quot;&lt;strong&gt;Delphi .NET&amp;quot;&lt;/strong&gt;.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Delphi VCL     &lt;br /&gt;&lt;/strong&gt;Besides the Win32 part of this product, which is now called &lt;a href="http://www.codegear.com/products/delphi/win32" target="_blank"&gt;Delphi 2009&lt;/a&gt;, VCL.NET will be added. Offering a complete Win32/.NET compatible framework called VCL/(VCL.NET). (Let's call this one &amp;quot;&lt;strong&gt;RAD Studio VCL&lt;/strong&gt;&amp;quot;)    &lt;br /&gt;So Delphi as we know it, since Delphi 1 bundled with a 100% compatible .NET part. So for anyone who took the VCL.NET path as it's .NET path it is business as usual.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Delphi .NET     &lt;br /&gt;&lt;/strong&gt;This product is offered as a Visual Studio plugin, offering Delphi (Pascal) (read the compiler) as fully fledged .NET language. Possible offering VCL.NET compatibility.    &lt;br /&gt;(So our old &lt;a href="http://beensoft.blogspot.com/2007/06/codegear-to-drop-winforms-designer-in.html" target="_blank"&gt;Delphi .NET 1.1 Winforms&lt;/a&gt; might have a future!)    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;The benefits:     &lt;br /&gt;Delphi VCL&lt;/strong&gt; get's his own roadmap, is not delayed by the next Microsoft technology to be added to the .NET part. However offering VCL.NET as compatible .NET framework it will be a complete Windows development environment. Maybe not offering the 'latest and possible greatest' Microsoft technology but more than enough for 80% (? wild guess ;-) ) of the current Delphi users.    &lt;br /&gt;    &lt;br /&gt;Putting Delphi as a language into Visual Studio has the benefit that it can use the Microsoft designers, so it can always be on the edge of the future developments. &lt;/p&gt;  &lt;p&gt;In my humble opinion this is the only way to offer &lt;strong&gt;complete support for the .NET framework&lt;/strong&gt;.    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;Again what do you think?   &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5014149281665461464?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5014149281665461464/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5014149281665461464' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5014149281665461464'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5014149281665461464'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/08/speculating-on-net-plans-2.html' title='Speculating on .NET plans #2'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-6948908003781780553</id><published>2008-08-27T02:58:00.001-07:00</published><updated>2008-08-27T02:58:33.995-07:00</updated><title type='text'>Delphi 2009 Compatible components</title><content type='html'>&lt;p&gt;With the &lt;a href="http://www.embarcadero.com/news/press_releases/delphicppbuilder.html" target="_blank"&gt;announcement&lt;/a&gt; and availability of &lt;a href="http://www.codegear.com/products/delphi/win32" target="_blank"&gt;Delphi 2009&lt;/a&gt;, it is time to think about your upgrade strategy.    &lt;br /&gt;One of the most important issue is the availability of the third-party components that you use for the new compiler.    &lt;br /&gt;CodeGear has &lt;a href="http://dn.codegear.com/article/38459" target="_blank"&gt;a list with compatible third party tools and components&lt;/a&gt;, which helps a lot.    &lt;br /&gt;    &lt;br /&gt;One company that you may miss on this list is &lt;a href="http://www.devexpress.com" target="_blank"&gt;Devexpress&lt;/a&gt;. As you &lt;a href="http://community.devexpress.com/blogs/ctodx/archive/2008/08/25/devexpress-vcl-products-support-for-tibur-243-n.aspx" target="_blank"&gt;can read in this blogpost&lt;/a&gt; they are working on it!&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;However, there is more to this support than meets the eye, so let me expound a little on the subject.&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;The biggest change, at least as far as we're concerned, is the new support for Unicode in Delphi 2009. I really don't want to go into the issues too deeply here, but will instead state that the Unicode support is pervasive. The default string type is now Unicode and not Ansi as before. Although CodeGear have done a remarkable job in making the porting of normal application code to Delphi 2009 as seamless as possible, it is not the same with some of the code we have in our codebase.&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-6948908003781780553?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/6948908003781780553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=6948908003781780553' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6948908003781780553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6948908003781780553'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/08/delphi-2009-compatible-components.html' title='Delphi 2009 Compatible components'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2384843423675906706</id><published>2008-08-25T07:57:00.001-07:00</published><updated>2008-08-25T07:57:55.614-07:00</updated><title type='text'>Delphi 2009 available!</title><content type='html'>&lt;p&gt;As expected, today 25 august Delphi 2009, as well as C++ Builder, is available for purchase or upgrade.   &lt;br /&gt;    &lt;br /&gt;Some interesting links:    &lt;br /&gt;&lt;a href="http://www.embarcadero.com/news/press_releases/delphicppbuilder.html" target="_blank"&gt;The official Embarcadero press release&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.codegear.com/products/delphi/win32" target="_blank"&gt;The Delphi 2009 page&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.codegear.com/products/delphi/win32/whats-new/" target="_blank"&gt;What is new?&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://www.codegear.com/article/38548/images/38548/Delphi2009FAQ.pdf" target="_blank"&gt;Frequently asked questions&lt;/a&gt;     &lt;br /&gt;Video: &lt;a href="http://dn.codegear.com/article/38441" target="_blank"&gt;What is new in the Delphi 2009 IDE&lt;/a&gt;    &lt;br /&gt;Video: &lt;a href="http://dn.codegear.com/article/38383" target="_blank"&gt;What is new in the VCL&lt;/a&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2384843423675906706?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2384843423675906706/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2384843423675906706' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2384843423675906706'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2384843423675906706'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/08/delphi-2009-available.html' title='Delphi 2009 available!'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5439500658694577016</id><published>2008-08-19T23:55:00.001-07:00</published><updated>2008-08-19T23:56:57.739-07:00</updated><title type='text'>Delphi and C++ builder release dates announced</title><content type='html'>&lt;p&gt;In &lt;a href="http://www.eweek.com/c/a/Application-Development/Embarcadero-Plans-New-Delphi-CBuilder-Releases/" target="_blank"&gt;this e-week article&lt;/a&gt; Embarcadero announced the release of Delphi and C++ Builder to be on 25 augustus 2008. No official press release on the &lt;a href="http://www.codegear.com" target="_blank"&gt;CodeGear&lt;/a&gt;/&lt;a href="http://www.embarcadero.com/" target="_blank"&gt;Embarcadero&lt;/a&gt; website yet.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;em&gt;Embarcadero Technologies, which acquired CodeGear from Borland, plans to deliver new releases of Delphi and C++Builder. Delphi 2009 and C++Builder 2009 for Windows development will ship Aug. 25.&lt;/em&gt; &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Note that it is not Delphi 2008, but &lt;strong&gt;Delphi 2009&lt;/strong&gt;!&lt;/p&gt;  &lt;p&gt;As always this will be the best Delphi ever! ;-)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5439500658694577016?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5439500658694577016/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5439500658694577016' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5439500658694577016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5439500658694577016'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/08/delphi-and-c-builder-release-dates.html' title='Delphi and C++ builder release dates announced'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3834742326090930388</id><published>2008-08-14T23:59:00.001-07:00</published><updated>2008-08-15T00:00:46.976-07:00</updated><title type='text'>Tiburon win32 only, speculating on the .NET plans</title><content type='html'>&lt;p&gt;Nick Hodges laid out Tiburon in his blogpost &lt;a href="http://blogs.codegear.com/nickhodges/2008/08/14/39102" target="_blank"&gt;Tiburon - All about native code&lt;/a&gt;. As it seems Tiburon will &lt;strong&gt;only be Win32&lt;/strong&gt;, so &lt;strong&gt;no .NET personality&lt;/strong&gt;.     &lt;br /&gt;    &lt;br /&gt;Other notes:    &lt;br /&gt;- Delphi and C++ Builder will be &lt;strong&gt;two seperat products&lt;/strong&gt; (Don't worry If you have SA you will get both)    &lt;br /&gt;- Besides the known &lt;strong&gt;Professional&lt;/strong&gt; and &lt;strong&gt;Enterprise &lt;/strong&gt;edition there will be an &lt;strong&gt;Architect edition&lt;/strong&gt; containing &lt;a href="http://www.embarcadero.com/products/erstudio/" target="_blank"&gt;ER/Studio&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;The .NET plans&lt;/strong&gt;    &lt;br /&gt;Quote from the post:    &lt;br /&gt;&lt;em&gt;&amp;quot;We will be coming out with an updated roadmap for our .Net solution that we believe will be feature rich and very compelling.&amp;#160; It will include up to date support for the latest Microsoft .NET based frameworks and other CLR-based technologies.&amp;quot;&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;I don't know what it is, but there is something strange with this .NET plans.&amp;#160; In July &lt;a href="http://beensoft.blogspot.com/2008/07/return-of-winforms-in-delphi-for-net-or.html" target="_blank"&gt;I also blogged about the .NET plans&lt;/a&gt; quoting Michael Swindell.     &lt;br /&gt;One particular line in that quote:    &lt;br /&gt;    &lt;br /&gt;&lt;em&gt;&amp;quot;So we have been working on a more aggressive .NET approach that focuses &lt;strong&gt;less on being a .NET clone of the native Delphi &lt;/strong&gt;implementation and more of an open approach that will make more frameworks, platforms, and features available and in a more timely manner.&amp;quot;      &lt;br /&gt;&lt;/em&gt;    &lt;br /&gt;makes me wonder. What would be the plan?    &lt;br /&gt;&lt;em&gt;     &lt;br /&gt;&lt;/em&gt;&amp;lt;speculation&amp;gt;    &lt;br /&gt;Don't tell me they will be coming up with a Visual Studio plugin! ;-)    &lt;br /&gt;&amp;lt;/speculation&amp;gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3834742326090930388?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3834742326090930388/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3834742326090930388' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3834742326090930388'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3834742326090930388'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/08/tiburon-win32-only-speculating-on-net.html' title='Tiburon win32 only, speculating on the .NET plans'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4850016771059224638</id><published>2008-08-05T04:24:00.001-07:00</published><updated>2008-08-05T04:24:05.072-07:00</updated><title type='text'>Tiburon Sneak peek preview videos</title><content type='html'>&lt;p&gt;Tiburon, the next version of Delphi, is hitting the doorstep. Embarcadero, or CodeGear will publish &lt;a href="http://dn.codegear.com/article/38383" target="_blank"&gt;sneak peek videos&lt;/a&gt; in the coming weeks about the new and enhanced features.    &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://video.codegear.com/Tiburon/WhatsNewInTheVCL_English/WhatsNewInTheVCL_English.html" target="_blank"&gt;What&amp;#8217;s new in the VCL for Delphi and C++Builder 2009&lt;/a&gt;, is the first issue, which shows some new components that will be available in Tiburon. CodeGear is definitely updating the VCL components. For me this is not that interesting because I decided to use the &lt;a href="http://www.devexpress.com/" target="_blank"&gt;DevExpress&lt;/a&gt; components, as a standard for my GUI work a long time ago, however these are nice improvements.&lt;/p&gt;  &lt;p&gt;More videos to come, so subscribe to the page.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Unicode     &lt;br /&gt;&lt;/strong&gt;Marco Cantu has published two videos &lt;a href="http://blog.marcocantu.com/blog/tiburon_unicode_video_1.html" target="_blank"&gt;(#1&lt;/a&gt;, &lt;a href="http://blog.marcocantu.com/blog/tiburon_unicode_video_2.html" target="_blank"&gt;#2&lt;/a&gt;) on Unicode on his weblog.&amp;#160; &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4850016771059224638?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4850016771059224638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4850016771059224638' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4850016771059224638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4850016771059224638'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/08/tiburon-sneak-peek-preview-videos.html' title='Tiburon Sneak peek preview videos'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4321092011968635242</id><published>2008-08-05T04:12:00.001-07:00</published><updated>2008-08-05T04:12:57.752-07:00</updated><title type='text'>Some more about the Office UI ribbon license</title><content type='html'>&lt;p&gt;Almost two years ago I blogged about the license that Microsoft has on the Office UI Ribbon, finding it a bit of a silly license. If you want to use the ribbon control you will have &lt;a href="http://msdn.microsoft.com/en-us/office/aa973809.aspx" target="_blank"&gt;to sign a license with Microsoft&lt;/a&gt;.    &lt;br /&gt;    &lt;br /&gt;&lt;a href="http://weblogs.asp.net/fbouma/" target="_blank"&gt;Frans Bouma&lt;/a&gt; takes it a bit further down the line with his &lt;a href="http://weblogs.asp.net/fbouma/archive/2008/07/20/the-evil-of-the-office-ui-ribbon-license.aspx" target="_blank"&gt;The evil of the Office UI ribbon license&lt;/a&gt; blogpost.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4321092011968635242?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4321092011968635242/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4321092011968635242' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4321092011968635242'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4321092011968635242'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/08/some-more-about-office-ui-ribbon.html' title='Some more about the Office UI ribbon license'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5215503730233284850</id><published>2008-07-03T12:02:00.000-07:00</published><updated>2008-07-03T12:29:55.913-07:00</updated><title type='text'>The return of Winforms in Delphi for .NET, or not?</title><content type='html'>&lt;a href="http://www.marcocantu.com"&gt;Marco Cantu&lt;/a&gt;, today had &lt;a href="http://blog.marcocantu.com/blog/delphi_dotnet_plans_swindell.html"&gt;an interesting blogpost&lt;/a&gt;, where he quotes Michael Swindell, the brand new head of productmanagement at &lt;a href="http://www.embarcadero,com"&gt;Embarcadero&lt;/a&gt;, on his feedback on another post about Delphi for .NET plans.&lt;br /&gt;&lt;br /&gt;A quote from Michael's feedback:&lt;br /&gt;&lt;em&gt;"In the beginning with .NET we put most of our energy into compatibility and replicating the Delphi language and VCL intact in a first class way for CLR, with the goal to make moving to .NET seamless for those applications that would be well suited on .NET"&lt;/em&gt;&lt;br /&gt;That is correct, &lt;a href="http://beensoft.blogspot.com/2007/06/codegear-to-drop-winforms-designer-in.html"&gt;the winforms designer was dropped in Delphi 2007 &lt;/a&gt;(leaving existing Delphi .NET winforms apps in .NET 1.1).&lt;br /&gt;The motto in that days was pretty much &lt;a href="http://blog.marcocantu.com/blog/delphi_is_vcl.html"&gt;Delphi is VCL&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;He continues:&lt;br /&gt;&lt;em&gt;"Today things like supporting more of the .NET framework flavors (Silverlight, WPF, etc) and keeping up with the latest language and framework releases is of much higher importance. So we have been working on a more aggressive .NET approach that focuses &lt;strong&gt;less on being a .NET clone of the native Delphi &lt;/strong&gt;implementation and more of an open approach that will make more frameworks, platforms, and features available and in a more timely manner. "&lt;/em&gt;&lt;br /&gt;The quote "less on being a .NET clone of the native Delphi" makes imo the statement Delphi is VCL false. (At least on the .NET side of the fence)&lt;br /&gt;&lt;br /&gt;It even gets better:&lt;br /&gt;&lt;em&gt;"So in a nutshell expect less focus on compatibility between native and .NET and more support for performance and rich UI oriented packaged/desktop/workstation features (ie GUI, DB and CPU) in the native tools, and more support for other .NET frameworks beyond just Winforms and ASP.NET ie WPF, Silverlight, Open source and others - in the .NET tools."&lt;/em&gt;&lt;br /&gt;All with all this is great news, isn't it?&lt;br /&gt;One could think that even support for a winforms .NET 2.0 designer could be on the radar. Until the .NET roadmap is published this is, of course, pure speculation. &lt;br /&gt;&lt;br /&gt;What do you think?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5215503730233284850?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5215503730233284850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5215503730233284850' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5215503730233284850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5215503730233284850'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/07/return-of-winforms-in-delphi-for-net-or.html' title='The return of Winforms in Delphi for .NET, or not?'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3477036185854832114</id><published>2008-06-10T05:05:00.001-07:00</published><updated>2008-06-10T05:14:56.924-07:00</updated><title type='text'>Users' Choice IDEs - 2008</title><content type='html'>&lt;p&gt;&lt;a href="http://www.evansdata.com" target="_blank"&gt;Evans Data&lt;/a&gt; published their annual 'Users' Choice IDEs' survey.    &lt;br /&gt;You can get a free copy of it &lt;a href="http://www.evansdata.com/reports/2008IDE.php?rid=QXJ003" target="_blank"&gt;here&lt;/a&gt;.    &lt;br /&gt;    &lt;br /&gt;In this survey IDE users rated several features/functions of their favorite IDE.    &lt;br /&gt;So the report shows the &lt;strong&gt;satisfaction rate of users&lt;/strong&gt; about their IDE.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Delphi     &lt;br /&gt;&lt;/strong&gt;From the eight rated EDIs, Delphi holds the sixth place.    &lt;br /&gt;Features where Delphi has relative high score are the &lt;strong&gt;compiler performance&lt;/strong&gt;, &lt;strong&gt;ease of use&lt;/strong&gt;, &lt;strong&gt;performance resulting applications&lt;/strong&gt;, &lt;strong&gt;debugger&lt;/strong&gt;, &lt;strong&gt;editor&lt;/strong&gt; and &lt;strong&gt;integrated third party tools&lt;/strong&gt;.     &lt;br /&gt;The Delphi compiler performance has the highest rate in the survey.     &lt;br /&gt;Among the lowest rated features is the documentation, which will be no suprise.    &lt;br /&gt;    &lt;br /&gt;If you want to read all information/rates, go &lt;a href="http://www.evansdata.com/reports/2008IDE.php?rid=QXJ003" target="_blank"&gt;get the report&lt;/a&gt;.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3477036185854832114?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3477036185854832114/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3477036185854832114' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3477036185854832114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3477036185854832114'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/06/users-choice-ides-2008.html' title='Users&amp;#39; Choice IDEs - 2008'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2430082327238725315</id><published>2008-06-06T02:14:00.001-07:00</published><updated>2008-06-06T02:29:02.324-07:00</updated><title type='text'>Mixing Forms and Windows authentication in ASP.NET</title><content type='html'>&lt;p&gt;In ASP.NET it is easy to set the prefered authentication method in the web.config file.   &lt;br /&gt;For external websites this is set mostly to &lt;strong&gt;Forms authentication&lt;/strong&gt; through a own &lt;strong&gt;Login.aspx&lt;/strong&gt;. When you use &lt;strong&gt;Windows authentication&lt;/strong&gt; the authentication is handled by Windows, and you will get a Windows logon window automatically if the authentication failed.    &lt;br /&gt;In forms authentication users will be logged in based on, for example credentials which are located in the applications database. With windows authentication users are logged in based on their Windows domain account.    &lt;br /&gt; &lt;strong&gt;How can you mix those two?&lt;/strong&gt;&amp;#160; &lt;br /&gt;In this situtation a client wanted to enable Windows authentication for the domain users, and Forms authentication for external users.    &lt;br /&gt;You can't do this through the web.config file. Let's first look at methods:    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Windows authentication&lt;/strong&gt;    &lt;br /&gt;If you choose Windows authentication you can get the user name with the&amp;#160; server variable LOGON_USER.&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:9d123d49-da1e-4f89-bd80-04fde81f161d" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;string&lt;/span&gt;&lt;span style="color: #000000;"&gt; user &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Request.ServerVariables[&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #800000;"&gt;LOGON_USER&lt;/span&gt;&lt;span style="color: #800000;"&gt;&amp;quot;&lt;/span&gt;&lt;span style="color: #000000;"&gt;];&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If the user, is not autorized a IIS 401 security error page will appear. The server variable is then an empty string.&lt;br /&gt;&lt;br/&gt;&lt;strong&gt;Forms authentication&lt;br /&gt;&lt;/strong&gt;With forms authentication the user will be redirected to given login page. (Mostly likely login.aspx). In this page you can check the user in you database and authenticate it based on that result.&lt;br /&gt;  &lt;br /&gt;&lt;strong&gt;In the mix&lt;/strong&gt;&lt;br /&gt;If you mix those two you probably want to match the Windows user with the application users. However first you must setup your application to accept both users.&lt;br /&gt;  &lt;br /&gt;I &lt;a href="http://msdn.microsoft.com/en-us/library/ms972958.aspx" target="_blank"&gt;found a solution here&lt;/a&gt;. Basically it drills down to the following:&lt;br /&gt;  &lt;br /&gt;1. &lt;strong&gt;Set Forms authentication in you web.config&lt;br /&gt;    &lt;br /&gt;&lt;/strong&gt;2. &lt;strong&gt;Create an extra login page&lt;/strong&gt;, Winlogin.aspx and let that be the forms login page. (in the web.config)&lt;br /&gt;  &lt;br /&gt;3. In IIS set security on &lt;strong&gt;Winlogin.aspx &lt;/strong&gt;so, that it &lt;strong&gt;won't allow&lt;/strong&gt; anonymous users.&lt;br /&gt;  &lt;br /&gt;4. In Winlogin.aspx determine if the user is authenticated based on his windows account. If you have the user you can also (if needed) check if he is in your own database, and if OK, redirect from this page:&lt;br /&gt;&lt;br /&gt;FormsAuthentication.RedirectFromLoginPage(UserId, false);&lt;br /&gt;&lt;br /&gt;5. If the user is &lt;strong&gt;not authenticated&lt;/strong&gt;, the &lt;strong&gt;IIS 401 security error&lt;/strong&gt; will be shown. You can hower redirect to your own HTML page in IIS, by setting the custom error redirect.&lt;br /&gt;&lt;br /&gt;6. In your &lt;strong&gt;OwnRedirect401.html&lt;/strong&gt; redirect to the your 'normal' Login.aspx with for example a META redirect, like this:&lt;br /&gt;&lt;br /&gt;&amp;lt;meta http-equiv=&amp;quot;refresh&amp;quot; content=&amp;quot;0;URL=Login.aspx&amp;quot; /&amp;gt;&lt;br /&gt;&lt;br /&gt;Note that you must exclude login.aspx as a protected page in you web,config. I.o.w allow anonymous users, other wise you will end up again on your Winlog.aspx.&lt;br /&gt;&amp;lt;location path=&amp;quot;login.aspx&amp;quot;&amp;gt;&lt;br /&gt;&amp;#160; &amp;lt;system.web&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;authorization&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &amp;lt;allow users=&amp;quot;?&amp;quot;/&amp;gt;&lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &amp;lt;/authorization&amp;gt;&lt;br /&gt;&amp;#160; &amp;lt;/system.web&amp;gt;&lt;br /&gt;&amp;lt;/location&amp;gt; &lt;br /&gt;&lt;strong&gt;Some references:&lt;br /&gt;&lt;/strong&gt;&lt;a href="http://msdn.microsoft.com/en-us/library/ms972958.aspx" target="_blank"&gt;Above method described in detail (MSDN article)&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.pluralsight.com/blogs/craig/archive/2006/06/19/28435.aspx" target="_blank"&gt;A alternate approach to the problem&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2430082327238725315?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2430082327238725315/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2430082327238725315' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2430082327238725315'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2430082327238725315'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/06/mixing-forms-and-windows-authentication.html' title='Mixing Forms and Windows authentication in ASP.NET'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5344815631351992727</id><published>2008-05-08T03:49:00.001-07:00</published><updated>2008-05-08T03:49:06.354-07:00</updated><title type='text'>EmbarraWhat?, Embarcedar, Embarcadero...</title><content type='html'>&lt;p&gt;Well, not quite breaking news (anymore after one day), &lt;a href="http://en.wikipedia.org/wiki/CodeGear" target="_blank"&gt;CodeGear&lt;/a&gt; is sold to &lt;a href="http://www.embarcadero.com/" target="_blank"&gt;Embarcadero Technologies&lt;/a&gt;. &lt;/p&gt;  &lt;p&gt;I have mixed feelings with this sell, at one hand it is great that CodeGear finally sails &lt;strong&gt;into a safe harbour&lt;/strong&gt; on the other hand it is sad that the &lt;a href="http://en.wikipedia.org/wiki/Borland" target="_blank"&gt;Borland&lt;/a&gt; brand link with development now is vanished. Borland, the company that brought us &lt;a href="http://en.wikipedia.org/wiki/Turbo_Pascal" target="_blank"&gt;Turbo Pascal&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Borland_Delphi" target="_blank"&gt;Delphi&lt;/a&gt;, (to name a few) and all that other exciting stuff.    &lt;br /&gt;    &lt;br /&gt;Did you know that &lt;a href="http://en.wikipedia.org/wiki/Embarcadero" target="_blank"&gt;Embarcadero&lt;/a&gt; is a &lt;a href="http://en.wikipedia.org/wiki/Wharf" target="_blank"&gt;wharf,&lt;/a&gt; which appears to be a pier where ships can land? Well if that is not a safe harbour!    &lt;br /&gt;    &lt;br /&gt;Although I don't know the company Embarcadero (still not a very easy name to remember;-) ) it looks like a &lt;strong&gt;good deal&lt;/strong&gt; for both CodeGear and Embarcadero &lt;strong&gt;and&lt;/strong&gt; CodeGear tools users. Time will tell.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Congrats CodeGear!&lt;/strong&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5344815631351992727?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5344815631351992727/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5344815631351992727' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5344815631351992727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5344815631351992727'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/05/embarrawhat-embarcedar-embarcadero.html' title='EmbarraWhat?, Embarcedar, Embarcadero...'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-171017169829899444</id><published>2008-04-25T02:49:00.001-07:00</published><updated>2008-04-25T03:00:04.089-07:00</updated><title type='text'>Linq to SQL</title><content type='html'>&lt;p&gt;Inside that other Development tool that I use, I found an interesting link to &lt;a href="http://blogs.msdn.com/lucabol/" target="_blank"&gt;Luca Bolognese's&lt;/a&gt;&amp;#160; blogpost about &lt;a href="http://blogs.msdn.com/lucabol/archive/2008/03/03/linq-to-sql-overview-video.aspx" target="_blank"&gt;Linq to SQL&lt;/a&gt;. You really should watch &lt;a href="http://www.microsoft.com/emea/msdn/spotlight/sessionh.aspx?videoid=716" target="_blank"&gt;the video&lt;/a&gt; where he shows how it works in C#.     &lt;br /&gt;    &lt;br /&gt;Linq to SQL is about accessing relational data with LINQ. (Language Integrated Query).&lt;/p&gt;  &lt;p&gt;I find this really amazing stuff. It looks very easy to map data from a database to objects in your code.    &lt;br /&gt;    &lt;br /&gt;The video gives a good intro on how this new stuff works. If you want to know more about LINQ, like me, you should check out Charlie Calvert's blogpost &amp;quot;&lt;a href="http://blogs.msdn.com/charlie/archive/2006/10/05/Links-to-LINQ.aspx" target="_blank"&gt;Links to Linq&lt;/a&gt;&amp;quot; with a whole bunch of links and information.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-171017169829899444?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/171017169829899444/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=171017169829899444' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/171017169829899444'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/171017169829899444'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/04/linq-to-sql.html' title='Linq to SQL'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7644090904844950050</id><published>2008-04-24T01:47:00.001-07:00</published><updated>2008-04-24T01:49:56.600-07:00</updated><title type='text'>Delphi roadmap update</title><content type='html'>&lt;p&gt;&lt;a href="http://dn.codegear.com/article/36620" target="_blank"&gt;The Delphi and C++ Roadmap&lt;/a&gt; has been updated. It contains only updates for the native side of the fence. According to &lt;a href="http://blogs.codegear.com/nickhodges/2008/04/23/39051" target="_blank"&gt;Nick's blogpost&lt;/a&gt; a separate update is in the make for .NET.    &lt;br /&gt;    &lt;br /&gt;In short &lt;strong&gt;Tiburon&lt;/strong&gt; is planned for second half 2008, focusing on:&lt;/p&gt;  &lt;p&gt;1. Connectivity (Enhanced Datasnap)   &lt;br /&gt;2. International development (read Unicode)    &lt;br /&gt;3. Delphi language Enhancements&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Commodore&lt;/strong&gt; is planned for mid 2009 and will focus (among other things) on native 64bit compilation and parallelization in the RTL.&amp;#160; &lt;br /&gt;    &lt;br /&gt;For all the details go checkout the &lt;a href="http://dn.codegear.com/article/36620" target="_blank"&gt;roadmap&lt;/a&gt;.    &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7644090904844950050?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7644090904844950050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7644090904844950050' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7644090904844950050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7644090904844950050'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/04/delphi-roadmap-update.html' title='Delphi roadmap update'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-6921058741164461288</id><published>2008-04-06T23:50:00.001-07:00</published><updated>2008-04-06T23:54:53.614-07:00</updated><title type='text'>Blaise Pascal Magazine</title><content type='html'>&lt;p&gt;There is &lt;a href="http://www.blaisepascal.eu/" target="_blank"&gt;a new international magazine&lt;/a&gt; about Delphi and related languages! The magazine has it's root in the HCC (Hobby Computer Club) from the Netherlands. &lt;a href="http://www.hcc-pgg.nl/" target="_blank"&gt;The Pascal Usergroup&lt;/a&gt; (PGG) section of this club offers for many years a magazine in ducth about Delphi languages for &lt;strong&gt;beginner&lt;/strong&gt;, &lt;strong&gt;intermediate&lt;/strong&gt; and &lt;strong&gt;expert&lt;/strong&gt; users.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;They now have gone international with an &lt;a href="http://www.blaisepascal.eu/" target="_blank"&gt;englisch version&lt;/a&gt;!&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;According to their website there will be a &lt;strong&gt;printed&lt;/strong&gt; and a &lt;strong&gt;free&lt;/strong&gt; download version:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;The printed version contains 40 pages and entitles you to download all the code free of charge.     &lt;br /&gt;You will receive all issues for one year for only &amp;#8364; 40,00.      &lt;br /&gt;A subscription to the download version is free, but you must pay for each code -or programm with code- download.&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;I think this is great news for Delphi!   &lt;br /&gt;You will find the table of contents of their first issue &lt;a href="http://www.blaisepascal.eu/content2.php" target="_blank"&gt;here&lt;/a&gt;.    &lt;br /&gt;    &lt;br /&gt;Go get it here: &lt;a title="http://www.blaisepascal.eu/" href="http://www.blaisepascal.eu/"&gt;http://www.blaisepascal.eu/&lt;/a&gt;.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-6921058741164461288?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/6921058741164461288/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=6921058741164461288' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6921058741164461288'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6921058741164461288'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/04/blaise-pascal-magazine.html' title='Blaise Pascal Magazine'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4591235830233720767</id><published>2008-03-24T11:19:00.000-07:00</published><updated>2008-03-24T12:41:00.395-07:00</updated><title type='text'>Tiburion: A smooth Unicode shift...</title><content type='html'>Nick Hodges &lt;a href="http://blogs.codegear.com/nickhodges/2008/03/24/39041"&gt;talks about the Unicode Shift&lt;/a&gt; in the new coming Delphi release code name Tiburon.&lt;br /&gt;He talks about the (four) steps that were taken to get everything unicode compliant, which resulted in :&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;em&gt;1. A new compiler with new inherent UnicodeString type &lt;br /&gt;2. A new RTL using new string type routines (i.e. many new compiler helper functions in System.pas). &lt;br /&gt;3. An updated VCL using the new RTL that allows the string type to easily "float" to the UnicodeString type &lt;br /&gt;4. A fully functional IDE compiling with the new Unicode Compiler, RTL, and VCL. &lt;/em&gt;&lt;/blockquote&gt;&lt;br /&gt;Looks like it is going to be a smooth shift...&lt;br /&gt;Anyway one of the first things coming out for the new release and an interesting read!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4591235830233720767?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4591235830233720767/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4591235830233720767' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4591235830233720767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4591235830233720767'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/03/smooth-unicode-shift.html' title='Tiburion: A smooth Unicode shift...'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3910410776155372027</id><published>2008-03-20T07:03:00.001-07:00</published><updated>2008-03-20T07:05:47.380-07:00</updated><title type='text'>What is wrong with this code?</title><content type='html'>&lt;p&gt;   &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:d27d128c-e317-48d2-a255-89baeff92162" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;unit&lt;/span&gt;&lt;span style="color: #000000;"&gt; Unit3;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;interface&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;uses&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  Windows, Messages, SysUtils, Variants,&lt;br /&gt;  Classes, Graphics, Controls, Forms,&lt;br /&gt;  Dialogs, StdCtrls;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;type&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  TForm3 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;(TForm)&lt;br /&gt;    Button1: TButton;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; Button1Click(Sender: TObject);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;/span&gt;&lt;span style="color: #008000;"&gt; Private declarations &lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;/span&gt;&lt;span style="color: #008000;"&gt; Public declarations &lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; MyFunction(x : string);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  Form3: TForm3;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;implementation&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;/span&gt;&lt;span style="color: #008000;"&gt;$R *.dfm&lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.Button1Click;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  MyFunction(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;test&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;)&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.MyFunction;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  ShowMessage(x);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;Well after using Delphi for more then a decade I would say that this code would not compile because of the fact that both &lt;strong&gt;MyFunction&lt;/strong&gt; and &lt;strong&gt;Button1Click&lt;/strong&gt; misses their parameterlist in the implementation section.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;But in fact it is perfect Delphi code as it compiles without a problem!&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Never, ever I have seen code like this before, until today in a project that I do maintenance for.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Don't try this at home, because it makes,imo, your code &lt;strong&gt;a nightmare to read&lt;/strong&gt;.&lt;br /&gt;  &lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3910410776155372027?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3910410776155372027/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3910410776155372027' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3910410776155372027'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3910410776155372027'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/03/what-is-wrong-with-this-code.html' title='What is wrong with this code?'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-6098838017544698635</id><published>2008-03-13T02:01:00.001-07:00</published><updated>2008-03-13T02:01:29.081-07:00</updated><title type='text'>European Online Webinars</title><content type='html'>&lt;p&gt;CodeGear Europe, is running (and has been running) a nice serie of Webinars. &lt;a href="http://www.codegear-events.eu/" target="_blank"&gt;In april they are running 6 webinars&lt;/a&gt; about, among other things, &lt;strong&gt;XML, SOA&lt;/strong&gt; and &lt;strong&gt;Webservices&lt;/strong&gt; with &lt;strong&gt;Delphi&lt;/strong&gt;.    &lt;br /&gt;Besides Delphi there are also webinars about &lt;strong&gt;Delphi for PHP&lt;/strong&gt;, &lt;strong&gt;Blackfish&lt;/strong&gt;, &lt;strong&gt;C++ Builder&lt;/strong&gt;, &lt;strong&gt;JBuilder&lt;/strong&gt; and &lt;strong&gt;3rdRail&lt;/strong&gt;.    &lt;br /&gt;    &lt;br /&gt;On the &lt;a href="http://www.codegear-events.eu/" target="_blank"&gt;CodeGear European Event Calendar&lt;/a&gt; you will find both, the scheduled events and playback of the recorded webinars. &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-6098838017544698635?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/6098838017544698635/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=6098838017544698635' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6098838017544698635'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6098838017544698635'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/03/european-online-webinars.html' title='European Online Webinars'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-514758502527263766</id><published>2008-02-19T03:36:00.001-08:00</published><updated>2008-02-19T03:38:09.970-08:00</updated><title type='text'>Using Assert</title><content type='html'>&lt;p&gt;In a project that I herited there is massive use of Assert. Personally I did not use Assert that much, but it has some&lt;strong&gt; nice advantages during developing&lt;/strong&gt; an application. (More info on &lt;a href="http://en.wikipedia.org/wiki/Assertion_%28computing%29#Assertions_for_run-time_checking" target="_blank"&gt;Assertion&lt;/a&gt; in general)    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;What does it do?      &lt;br /&gt;&lt;/strong&gt;Assert can be used as a &lt;strong&gt;debug tool&lt;/strong&gt;. Assert tests boolean expression, and will halt execution if that expression is not true. If that happens, it will raise an EAssertionFailed exception.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;How to use it?&lt;/strong&gt;     &lt;br /&gt;This is an example, how you can use Assert in your code.     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:4b224563-89b3-4967-8943-2ef5b696e56e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.DoIt(AStringList : TStrings);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  Assert(Assigned(AStringList), &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Test &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  ShowMessage(AStringList.Text);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.Button1Click(Sender: TObject);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  DoIt(&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;nil&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Clicking the button will raise the EAssertionFailed exception: &lt;br /&gt;  &lt;br /&gt;&lt;a href="http://lh4.google.com/beensoft/R7q_OpH7CzI/AAAAAAAAADU/g7NW3heqxZ4/assert3"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="130" alt="assert" src="http://lh6.google.com/beensoft/R7q_PJH7C0I/AAAAAAAAADc/f8rSUZFWF-s/assert_thumb1" width="237" border="0" /&gt;&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;Generally you don't want that the end users see this message. Therefor you can disable/enable assertion throug the &lt;strong&gt;$C directive &lt;/strong&gt;or your project options dialog. If you disable Assertion, the example code will lead to an Acces violation, so normal exception tracking is needed anyhow. &lt;br /&gt;&lt;br /&gt;The Delphi help about Assert:&lt;/p&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;  &lt;p&gt;The &lt;strong&gt;$C&lt;/strong&gt; directive enables or disables the generation of code for assertions in a Delphi source file. {&lt;strong&gt;$C+&lt;/strong&gt;} is the default. &lt;/p&gt;&lt;br /&gt;&lt;br /&gt;  &lt;p&gt;Since assertions are not usually used at runtime in shipping versions of a product, compiler directives that disable the generation of code for assertions are provided. {&lt;strong&gt;$C-&lt;/strong&gt;} will disable assertions.&lt;/p&gt;&lt;/blockquote&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-514758502527263766?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/514758502527263766/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=514758502527263766' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/514758502527263766'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/514758502527263766'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/02/using-assert.html' title='Using Assert'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7020786818891877243</id><published>2008-01-14T01:25:00.001-08:00</published><updated>2008-01-14T01:25:34.385-08:00</updated><title type='text'>More on going virtual, more experience</title><content type='html'>&lt;p&gt;As I told you in &lt;a href="http://beensoft.blogspot.com/2007/12/2008-some-thoughts-on-going-virtual.html" target="_blank"&gt;this blogpost&lt;/a&gt; I was thinking about moving my production environment into a virtual machine. I got some &lt;a href="http://beensoft.blogspot.com/2007/12/2008-some-thoughts-on-going-virtual.html#comments" target="_blank"&gt;really great feedback&lt;/a&gt; on that post, thanks for that!     &lt;br /&gt;    &lt;br /&gt;Executing on that thought, I made two VM's. Here is my experience so far:     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;My hosting Laptop&lt;/strong&gt;     &lt;br /&gt;My laptop (Dell Inspiron 9300) is two years old with the following specifications:     &lt;br /&gt;- Windows XP pro     &lt;br /&gt;-Processor: Intel running at 1,86 Ghz (Don't know exact type)     &lt;br /&gt;-&lt;strong&gt;1,5 GB&lt;/strong&gt; memory     &lt;br /&gt;-Max memory available for VM &lt;strong&gt;512MB&lt;/strong&gt;     &lt;br /&gt;I do most of my development on this laptop.     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;My hosting PC&lt;/strong&gt;     &lt;br /&gt;-Window Vista Business     &lt;br /&gt;-Processor: Intel Duo Core     &lt;br /&gt;-&lt;strong&gt;2GB&lt;/strong&gt; memory     &lt;br /&gt;-Max memory available for VM &lt;strong&gt;1024MB&lt;/strong&gt;     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;My Delphi VM (Windows XP pro)&lt;/strong&gt;     &lt;br /&gt;I made a 'Delphi' VM with Delphi 7 (for older projects), BDS2006 (for Winforms development) and &lt;a href="http://www.codegear.com/delphi" target="_blank"&gt;RAD Studio 2007&lt;/a&gt;.     &lt;br /&gt;Currently I am using &lt;a href="http://www.microsoft.com/windows/products/winfamily/virtualpc/default.mspx" target="_blank"&gt;Microsoft Virtual PC 2007&lt;/a&gt; to make the virtual machine. Why? Simply because it is free and I am still in &lt;strong&gt;an experience state&lt;/strong&gt; here, just making the big picture on going virtual. I believe &lt;a href="www.vmware.com/ " target="_blank"&gt;VMWare&lt;/a&gt; has more options, and, as I found out, Virtual PC is no good for Linux distributions. (Use &lt;a href="http://www.virtualbox.org/" target="_blank"&gt;Virtual box&lt;/a&gt; for that).     &lt;br /&gt;I installed all that was necessary for Delphi, the IDE, third party components etcetera in the VM.     &lt;br /&gt;I use &lt;strong&gt;Visual SourceSafe&lt;/strong&gt; for version control and keep the source files within the VM because I had some trouble keeping the shared folders alive. This was probably a low memory issue. So my &lt;strong&gt;source database&lt;/strong&gt; is on my hosting laptop, which is backed up as usual.     &lt;br /&gt;Currently I 'synchronize' the sources through SourceSafe between the VM and the host. (I still develop on the host...)    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Performance&lt;/strong&gt;    &lt;br /&gt;On my hosting laptop (512MB) Delphi 7 works fine, but BDS2006 and RAD Studio 2007 are slow. Most annoying in BDS2006 and RAD Studio is the slow typing, which makes it kind of unworkable.     &lt;br /&gt;On my hosting PC, with twice the available memory RAD Studio performance is OK.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;My Ubuntu VM (Ubuntu 7.1)      &lt;br /&gt;&lt;/strong&gt;Well since we are going virtual it is easy to test some OS from the other side of the fence. Installing Ubuntu into Virtual PC did not work (black screen). So I used &lt;a href="http://www.virtualbox.org/" target="_blank"&gt;Virtual Box&lt;/a&gt; instead, as someone suggested in the feedback of the last post.     &lt;br /&gt;Installing Ubuntu is amazingly easy, did not expect that so I was suprised.     &lt;br /&gt;&lt;strong&gt;Kylix 3:      &lt;br /&gt;&lt;/strong&gt;I tried to install Kylix 3, but with no luck so far. This has probably most to do with my (missing) Linux skills. ;-) (Have to investigate this further)    &lt;br /&gt;&lt;strong&gt;Lazarus:      &lt;br /&gt;&lt;/strong&gt;I managed to install lazarus pretty easy. Cool I can make an application for Linux now. ;-)     &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;     &lt;br /&gt;At this moment I will not go virtual completely. First I will have to upgrade the internal memory of my laptop upto at least 2 GB. But more memory, of course, would be better. (4GB?)    &lt;br /&gt;However&lt;strong&gt; it is nice to know&lt;/strong&gt; that if my laptop, or installation, crashes I now have a&lt;strong&gt; complete installed development environment&lt;/strong&gt; as backup, making the downtime almost zero.     &lt;br /&gt;The choice for the right virtual machine software is depending on what you do within the VM. However you could use more than one product. Virtual Box is a great alternative for both Windows and Linux VM's.    &lt;br /&gt;&lt;em&gt;Possible future scenario:&lt;/em&gt;     &lt;br /&gt;Buy a new laptop &lt;strong&gt;without&lt;/strong&gt; a preinstalled Windows (Vista). Install Ubuntu (or another Linux distro) on that laptop and run Windows XP in a VM..........    &lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7020786818891877243?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7020786818891877243/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7020786818891877243' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7020786818891877243'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7020786818891877243'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2008/01/more-on-going-virtual-more-experience.html' title='More on going virtual, more experience'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2006283889100372879</id><published>2007-12-27T03:19:00.001-08:00</published><updated>2007-12-27T03:25:02.491-08:00</updated><title type='text'>2008: Some thoughts on going virtual</title><content type='html'>&lt;p&gt;One of the goals for me in 2008 is to bring my production environment over to a virtual machine.&amp;#160; &lt;br /&gt;    &lt;br /&gt;That should give the following benefits:     &lt;br /&gt;1. Complete installations can be backed up, so if a future update fails, it is easy to step back in time. (Less downtime)    &lt;br /&gt;2. It is easy to make multiple backups, with multiple states of the installation.     &lt;br /&gt;3. It is easy to take you complete production environment with you.     &lt;br /&gt;4. More flexible for setting up new software without hurting your existing software. (Testing new technologies etc.)    &lt;br /&gt;    &lt;br /&gt;The benefits are clear, more secure, less downtime in case of an event, and more flexible.    &lt;br /&gt;First question that comes to mind thinking about going virtual is:    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;How to set up a VM environment as efficient as possible?&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;The answer to this question is, of course, specific for each situation. Because I have never done this, I will share with you how I think about settings things up. If you have any tips, please step in!   &lt;br /&gt;    &lt;br /&gt;I use, the two major IDE's in the market today, for my development, namely &lt;a href="http://www.codegear.com/delphi" target="_blank"&gt;CodeGear RAD Studio&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/vstudio/default.aspx" target="_blank"&gt;Microsoft Visual Studio&lt;/a&gt;. The latter is for .NET development only, and mostly ASP.NET development.    &lt;br /&gt;So I think about setting up &lt;strong&gt;two seperate VM's&lt;/strong&gt;: (They will be based on Windows XP pro)    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;1. Delphi VM&lt;/strong&gt;     &lt;br /&gt;- Delphi 7 (for older projects)     &lt;br /&gt;- BDS 2006 (.NET personality for Winforms .NET 1.1 development)     &lt;br /&gt;- RAD Studio 2007     &lt;br /&gt;- Delphi third party components     &lt;br /&gt;- Visual SourceSafe for version control    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;2. Visual Studio VM&lt;/strong&gt;     &lt;br /&gt;- Visual Studio 2005 (Winforms/ASP.NET developement)    &lt;br /&gt;- Visual Studio 2008 (future...)    &lt;br /&gt;- Third party components    &lt;br /&gt;- Visual SourceSafe for version control    &lt;br /&gt;    &lt;br /&gt;On each VM I completely install all necessary software and components. After that I will backup those VM's as&lt;strong&gt; the basic production environment setups&lt;/strong&gt;. With each future update (IDE, components), I will update those basic environments also, keeping them&lt;strong&gt; up-to-date&lt;/strong&gt;. If an update fails there is no problem, just use the last backed up clean environment.    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;The source code and SourceSafe&lt;/strong&gt;    &lt;br /&gt;On the hosting machine, my laptop by default, I will install all other necessary applications, like Microsoft SQL Server, Office etcetera.     &lt;br /&gt;I will &lt;strong&gt;keep my application source codes located on the hosting machine&lt;/strong&gt;, which I can reach in my VM through shared folders. Doing this, I can backup them as usual. With Visual SourceSafe in VM, I can check out files on my laptop, and alter them within the VM. &lt;/p&gt;  &lt;p&gt;Well just some thoughts about setting up a development VM.   &lt;br /&gt;    &lt;br /&gt;Happy new year!!&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2006283889100372879?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2006283889100372879/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2006283889100372879' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2006283889100372879'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2006283889100372879'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/12/2008-some-thoughts-on-going-virtual.html' title='2008: Some thoughts on going virtual'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-9084244493548210771</id><published>2007-12-18T01:02:00.001-08:00</published><updated>2007-12-18T01:02:11.128-08:00</updated><title type='text'>RAD Studio 2007 December update released!</title><content type='html'>&lt;p&gt;CodeGear just released the December update for RAD Studio 2007, as well as the update for Delphi 2007 and C++ Builder 2007.   &lt;br /&gt;    &lt;br /&gt;Looks like there are a lot of fixes.    &lt;br /&gt;&lt;a href="http://dn.codegear.com/article/37350" target="_blank"&gt;284 Core bugfixes&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://dn.codegear.com/article/37483" target="_blank"&gt;93 Delphi 2007 fixes&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://dn.codegear.com/article/37484" target="_blank"&gt;46 C++ Builder fixes&lt;/a&gt;    &lt;br /&gt;&lt;a href="http://dn.codegear.com/article/37486" target="_blank"&gt;157 Delphi 2007 .NET fixes&lt;/a&gt;    &lt;br /&gt;    &lt;br /&gt;According Nick Hodges &lt;a href="http://blogs.codegear.com/nickhodges/2007/12/17/38994" target="_blank"&gt;blogpost about the upgrade&lt;/a&gt; it should not be a too long update this time. Because of the fact that it is a binary update,&lt;strong&gt; all unofficial patches that were applied should be uninstalled&lt;/strong&gt;.     &lt;br /&gt;    &lt;br /&gt;Chris Pattinson looks back at 2007, from a QA stand point of view, in his blogpost &lt;a href="http://blogs.codegear.com/chrispattinson/2007/12/17/38894"&gt;CodeGear Quality Review 2007&lt;/a&gt;. 7006 defects are fixed since 1 january 2007!    &lt;br /&gt;    &lt;br /&gt;You can download the update at the &lt;a href="http://www.codegear.com/downloads/regusers" target="_blank"&gt;registered users download&lt;/a&gt; page. Or check for updates within the IDE.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-9084244493548210771?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/9084244493548210771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=9084244493548210771' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9084244493548210771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9084244493548210771'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/12/rad-studio-2007-december-update.html' title='RAD Studio 2007 December update released!'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-55273530771067900</id><published>2007-12-17T01:47:00.001-08:00</published><updated>2007-12-17T02:02:54.553-08:00</updated><title type='text'>Programming in Delphi sins #3</title><content type='html'>&lt;p&gt;&lt;em&gt;In this serie I will tell you, what we find a sin, in Delphi programming.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Using published properties of components from another class      &lt;br /&gt;&lt;/strong&gt;When you place components on forms and datamodules in Delphi they are published by default. In other words you can use components in your form that belong to other forms/datamodules. If you do this, those forms will be tightly coupled and therefor this is not quite a good OOP practice.     &lt;br /&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:663c9a9e-b282-49ac-8538-1ae015b48ce6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;type&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  TdmMain &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;(TDataModule)&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;These components are published and direct &lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; accesable by other forms/datamodules&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;    SomeDataSet: TADOTable;&lt;br /&gt;    adsAnotherDataSet: TADODataSet;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;/span&gt;&lt;span style="color: #008000;"&gt; Private declarations &lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;/span&gt;&lt;span style="color: #008000;"&gt; Public declarations &lt;/span&gt;&lt;span style="color: #008000;"&gt;}&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Suppose you have a form that uses a datamodule with some dataset on it and you want to show some field value in a label on your form. You could do it like this:&lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:4c6b328b-189f-4294-ac04-e60c3abf9a72" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 441px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.SetCaption;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; SomeLabel.Caption :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt; dmMain.SomeDataSet.FieldByName(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;SomeField&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;).AsString;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;This is bad practice. Suppose that, something simple as the name of the field changes, you would have change both your datamodule, and your form. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Solution: &lt;br /&gt;  &lt;br /&gt;&lt;/strong&gt;Use properties and functions (getters), not properties from published components. &lt;br /&gt;&lt;br /&gt;In the datamodule: &lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:73e429aa-c3f6-4146-939c-e939ff4469ce" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 435px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;property&lt;/span&gt;&lt;span style="color: #000000;"&gt; SomField : string read GetSomeField;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TdmMain.GetSomeField : String;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  Result :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;br /&gt;  SomeDataSet.FieldByName(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;SomeField&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;).AsString;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;In your form: &lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:3f1cac6d-53d3-4b60-afea-409f631d0877" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 320px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.SetCaption;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  SomeLabel.Caption :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; dmMain.SomeField;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;A more dramatic way to avoid use of published properties is to move all published properties into the &lt;strong&gt;private section&lt;/strong&gt; of the class. &lt;br /&gt;&lt;br /&gt;This gives you best practice, however if you use dataware controls, you then should couple them manually. &lt;br /&gt;&lt;br /&gt;So for the sake of dataware controls we keep them published, but always write properties or getter functions to get values in code.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-55273530771067900?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/55273530771067900/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=55273530771067900' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/55273530771067900'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/55273530771067900'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/12/programming-in-delphi-sins-3.html' title='Programming in Delphi sins #3'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5824192465331131454</id><published>2007-12-11T01:31:00.001-08:00</published><updated>2007-12-11T01:37:37.637-08:00</updated><title type='text'>Programming in Delphi sins #2</title><content type='html'>&lt;p&gt;In the &lt;a href="http://beensoft.blogspot.com/2007/12/programming-in-delphi-sins-1.html" target="_blank"&gt;first episode of this serie&lt;/a&gt; I talked about avoiding the default auto-create function for forms and datamodules in Delphi.    &lt;br /&gt;As &lt;a href="http://delphi.about.com/" target="_blank"&gt;Zarko Gajic (delphi.about.com)&lt;/a&gt; pointed out in the comments I made another sin ;-) in the example code. Always something to learn! Thanks for the tip Zarko!    &lt;br /&gt;    &lt;br /&gt;Well here it goes #2:    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Never use a owner if you create a component/form yourself and free it instantly     &lt;br /&gt;&lt;/strong&gt;So don't do this: &lt;strong&gt;TForm3.Create(self);&lt;/strong&gt;&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:35ed2235-5e54-4ac5-aef5-f0bd90ed20c1" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;procedure TForm5.Button1Click(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;  MyForm : TForm3;&lt;br /&gt;begin&lt;br /&gt;  MyForm :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.Create(self);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    MyForm.ShowModal;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    MyForm.Free;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;But do this: &lt;strong&gt;TForm3.Create(nil);&lt;br /&gt;  &lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:2395fbec-5b76-4e7a-80d9-56afc341f703" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;procedure TForm5.Button1Click(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;  MyForm : TForm3;&lt;br /&gt;begin&lt;br /&gt;  MyForm :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.Create(nil);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    MyForm.ShowModal;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    MyForm.Free;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;If you pass &lt;strong&gt;self &lt;/strong&gt;(in this case Form5) as the owner you rely on Form5 to free it when form5 is destroyed. Beside maintenance confusion it also has a backdraft on performance.&lt;br /&gt;&lt;br /&gt;Zarko has a great article on this:&lt;br /&gt;&lt;br /&gt; &lt;a href="http://delphi.about.com/od/kbcurt/ss/dynamiccreateno.htm" target="_blank"&gt;A warning on dynamically instantiating components&lt;/a&gt; &lt;br /&gt;&lt;strong&gt;&lt;br /&gt;Always great to learn something new!&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5824192465331131454?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5824192465331131454/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5824192465331131454' title='9 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5824192465331131454'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5824192465331131454'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/12/programming-in-delphi-sins-2.html' title='Programming in Delphi sins #2'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>9</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3275016525690007941</id><published>2007-12-10T01:24:00.001-08:00</published><updated>2007-12-10T01:26:43.021-08:00</updated><title type='text'>Programming in Delphi sins #1</title><content type='html'>&lt;p&gt;&lt;em&gt;In this serie I will tell you, what we find a sin, in Delphi programming. &lt;/em&gt;    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Using auto create forms and datamodules      &lt;br /&gt;&lt;/strong&gt;Standard Delphi will create automatically all forms and datamodules for you. This gives you a &lt;strong&gt;headstart&lt;/strong&gt; when you are first learning Delphi, but in the end it will give you a &lt;strong&gt;headache&lt;/strong&gt;! &lt;/p&gt;  &lt;p&gt;Sooner or later you begin to wonder where that 'Form1' object is coming from. (It is in fact a variable in the interface section of his own unit)    &lt;br /&gt;Other issues:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Your program becomes &lt;strong&gt;slower, consuming more memory&lt;/strong&gt; then needed with many forms created. &lt;/li&gt;    &lt;li&gt;Bugs will &lt;strong&gt;be harder to track&lt;/strong&gt;, because you just can not know the state of all your forms and datamodules. Code could run, without you knowing about it.       &lt;br /&gt;      &lt;br /&gt;&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;Solution:      &lt;br /&gt;Turn off auto creation of forms&lt;/strong&gt; in the options Dialog-VCL Designer tab, and create your forms/datamodules when you need them, and free it when you are done with it. In existing projects remove those forms from the auto create forms list in the project options.     &lt;br /&gt;    &lt;br /&gt;Create a form when you need it, using your own variable:&lt;/p&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:36aaac18-ca22-40ba-b5c7-b50f74d36fe6" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;procedure TForm5.Button1Click(Sender: TObject);&lt;br /&gt;var&lt;br /&gt;  MyForm : TForm3;&lt;br /&gt;begin&lt;br /&gt;  MyForm :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.Create(self);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    MyForm.ShowModal;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    MyForm.Free;&lt;br /&gt;  end;&lt;br /&gt;end;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;p&gt;Remove the 'global' var in unit of the newly created forms and datamodules, you just don't need them: &lt;br /&gt;  &lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E6:5562318a-8148-416d-bfd2-c36e93acbc84" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;unit Unit3;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;interface&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;&lt;br /&gt;uses&lt;br /&gt;  Windows, Messages, SysUtils, Variants, Classes, &lt;br /&gt;Graphics, Controls, Forms,  Dialogs;&lt;br /&gt;&lt;br /&gt;type&lt;br /&gt;  TForm3 &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;class&lt;/span&gt;&lt;span style="color: #000000;"&gt;(TForm)&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;private&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    { Private declarations }&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;public&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    { Public declarations }&lt;br /&gt;  end;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Remove this global var, which is &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;the instance that is created with&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;the auto create forms option turned on&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;var&lt;br /&gt;  Form3: TForm3;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;--&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;implementation&lt;br /&gt;&lt;br /&gt;{$R &lt;/span&gt;&lt;span style="color: #000000;"&gt;*&lt;/span&gt;&lt;span style="color: #000000;"&gt;.dfm}&lt;br /&gt;&lt;br /&gt;end.&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3275016525690007941?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3275016525690007941/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3275016525690007941' title='12 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3275016525690007941'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3275016525690007941'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/12/programming-in-delphi-sins-1.html' title='Programming in Delphi sins #1'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>12</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2571259844099680117</id><published>2007-11-30T03:18:00.001-08:00</published><updated>2007-11-30T03:18:57.664-08:00</updated><title type='text'>String parameters tip</title><content type='html'>&lt;p&gt;&lt;a href="http://chrisbensen.blogspot.com/" target="_blank"&gt;Chris Bensen&lt;/a&gt; has a 'small' tip, which in fact is a &lt;strong&gt;great tip&lt;/strong&gt;.    &lt;br /&gt;He suggest to always pass strings as &lt;strong&gt;const &lt;/strong&gt;or &lt;strong&gt;var&lt;/strong&gt;. If you pass them by value extra (unnecessary) assembly is being generated.&lt;/p&gt;  &lt;p&gt;Read his blogpost &lt;a href="http://chrisbensen.blogspot.com/2007/11/string-parameters-in-delphi.html" target="_blank"&gt;String parameters in delphi&lt;/a&gt; (Don't forget the comments)&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2571259844099680117?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2571259844099680117/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2571259844099680117' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2571259844099680117'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2571259844099680117'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/11/string-parameters-tip.html' title='String parameters tip'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4791308042263675050</id><published>2007-11-22T03:15:00.001-08:00</published><updated>2007-11-22T03:26:43.823-08:00</updated><title type='text'>Some memory leak pitfalls</title><content type='html'>&lt;p&gt;Just installed the professional version of &lt;a href="http://www.eurekalog.com/" target="_blank"&gt;Eurekalog&lt;/a&gt;, which is, imo, a must have tool for tracking exceptions and memory leaks in your Delphi Win32 applications.     &lt;br /&gt;This tool, and of course any other tool out there that does the same, really helps you to track down exceptions fast. For me, even more important, is the fact that it helps you track down memory leaks as well. &lt;/p&gt;  &lt;p&gt;No matter how secure you program, sooner or later, you will loose some memory. Here some pitfalls:    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;1. Let it be clear where, and who, will free the object      &lt;br /&gt;&lt;/strong&gt;It must be clear where objects are created (read memory for the object is allocated) because otherwise you are in danger for memory leaks.     &lt;br /&gt;Functions that create their result are dangerous in this manner. Suppose a function that creates a TStringList, and returns it as it's result:    &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:15537b93-cbfd-4764-8dc6-7f10da565ec2" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; width: 396px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;function&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.GetSomeStringList : TStrings;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  Result :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TStringList.Create;&lt;br /&gt;  Result.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;one&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  Result.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;two&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:d1b15532-9115-4423-b947-f508d6371e10" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;white-space:-moz-pre-wrap; white-space: -pre-wrap; white-space: -o-pre-wrap; white-space: pre-wrap; word-wrap: break-word;;overflow: none;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.DoSomethingWithaStringlist;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  MyStringList : TStrings;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  MyStringList :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; GetSomeStringList;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    ShowMessage(MyStringList.Text);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    MyStringList.Free; &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Free it!&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;In this case, the calling method, and the developer must realize that it &lt;strong&gt;must free the stringlist&lt;/strong&gt;, after it is ready with it. This is &lt;strong&gt;not&lt;/strong&gt; &lt;strong&gt;always clear in this scenario&lt;/strong&gt;. A better solution would be to pass your own created Stringlist to the function. Like this:&lt;br /&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:e967e1bf-2893-40a3-afae-c2e31439a47a" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: none;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.GetSomeStringList(&lt;br /&gt;                    AStringList : TStrings);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  AStringList.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;one&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;  AStringList.Add(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;two&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:3dea2642-ad46-4659-b559-839c388fcc75" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: none;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.DoSomethingWithaStringlist; &lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  MyStringList : TStrings;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  MyStringList :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TStringList.Create;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;    GetSomeStringList(MyStringList);&lt;br /&gt;    ShowMessage(MyStringList.Text);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;     MyStringList.Free; &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt;Free it!&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It is better to have both, the &lt;strong&gt;Create&lt;/strong&gt; and &lt;strong&gt;Free&lt;/strong&gt; in the same &lt;strong&gt;try finally block&lt;/strong&gt; if possible. Can't go wrong if you code it like this.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;2. Always free your own objects nobody else does it for you&amp;#xA0; &lt;br /&gt;&lt;/strong&gt;Sometimes it is easy to add to, for example a listbox, also an extra object with more information of the selected item. When filling the items (a TStringlist) you pass on a reference to the listbox item. Later you can use that information to do, whatever you want to do.&lt;br /&gt;&lt;br /&gt;  &lt;br /&gt;Your code could look like this:&lt;br /&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:5dd17b99-3314-4aa9-8015-cb2e03999499" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TForm3.Button1Click(Sender: TObject);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt; obj : TSomeObject;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;begin&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  obj :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TSomeObject.Create;&lt;br /&gt;  obj.SomeInfo :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;This is number one&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  ListBox1.Items.AddObject(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;one&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, obj);&lt;br /&gt;  obj :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; TSomeObject.Create;&lt;br /&gt;  obj.SomeInfo :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;This is number two&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;br /&gt;  ListBox1.Items.AddObject(&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;Two&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt;, obj);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;end&lt;/span&gt;&lt;span style="color: #000000;"&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;To read the data on the selection you can then read the extra info like this (just an example here):&lt;br /&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:c70c672f-4a7f-4368-84f4-3527e485326b" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt; ShowMessage(&lt;br /&gt;   (ListBox1.Items.Objects[ListBox1.ItemIndex]&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;as&lt;/span&gt;&lt;span style="color: #000000;"&gt; TSomeObject).SomeInfo);&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;What you must &lt;strong&gt;not forget&lt;/strong&gt; in this situation is to free all the objects when the application or form is destroyed! &lt;strong&gt;The Listbox does not do that for you!&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;  So in the destroy of your form, free all the objects in the listbox like this:&lt;br /&gt;  &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:3289a1db-06e9-4a72-9161-be123bf4d23e" style="padding-right: 0px; display: inline; padding-left: 0px; float: none; padding-bottom: 0px; margin: 0px; padding-top: 0px"&gt;&lt;pre style="background-color:White;;overflow: auto;"&gt;&lt;div&gt;&lt;!--&lt;br /&gt;&lt;br /&gt;Code highlighting produced by Actipro CodeHighlighter (freeware)&lt;br /&gt;http://www.CodeHighlighter.com/&lt;br /&gt;&lt;br /&gt;--&gt;&lt;span style="color: #000000;"&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;for&lt;/span&gt;&lt;span style="color: #000000;"&gt; i :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; to ListBox1.Items.Count &lt;/span&gt;&lt;span style="color: #000000;"&gt;-&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;do&lt;/span&gt;&lt;span style="color: #000000;"&gt; begin&lt;br /&gt;    Listbox1.Items.Objects[i].Free;&lt;br /&gt;  end;&lt;/span&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!-- Code inserted with Steve Dunn's Windows Live Writer Code Formatter Plugin.  http://dunnhq.com --&gt;&lt;/div&gt;&lt;br /&gt;Conclusion is that a &lt;strong&gt;good coding style&lt;/strong&gt; helps you to avoid memory leaks. Tools like Eurekalog helps you to trace them easily and are a great learning resource for where you enter memory pitfalls&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4791308042263675050?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4791308042263675050/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4791308042263675050' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4791308042263675050'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4791308042263675050'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/11/some-memory-leak-pitfalls.html' title='Some memory leak pitfalls'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-426724095272660028</id><published>2007-11-14T10:03:00.000-08:00</published><updated>2007-11-14T10:08:41.809-08:00</updated><title type='text'>Time to shift to second gear</title><content type='html'>CodeGear exists one year!&lt;br /&gt;&lt;br /&gt;I could sum up everything that happened this year, but Marco Cantu did a great job in his blogpost &lt;a href="http://blog.marcocantu.com/blog/one_year_codegear.html"&gt;One year for CodeGear&lt;/a&gt;. (Very nice read!)&lt;br /&gt;&lt;br /&gt;CodeGear congrats! And let's shift to second Gear shall we?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-426724095272660028?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/426724095272660028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=426724095272660028' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/426724095272660028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/426724095272660028'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/11/time-to-shift-to-second-gear.html' title='Time to shift to second gear'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3737293083443127621</id><published>2007-11-07T11:43:00.000-08:00</published><updated>2007-11-07T12:55:44.935-08:00</updated><title type='text'>BugNET review, download, install and track your issues!</title><content type='html'>Bug tracking is a very important part of software development. We do projects for a lot of different company's which almost all have their own way of bugtracking, if they have it all.&lt;br /&gt;Basically bugtracking is maintaining a list of issues, administering some dates, like report date to solved dates.&lt;br /&gt;When you work in small teams (&lt;3 person) a simple Excel list will do it, but in greater teams, on different locations it just becomes a mess. &lt;br /&gt;&lt;br /&gt;Time to investigate a better solution, a &lt;a href="http://en.wikipedia.org/wiki/Bugtracker" target="_blank"&gt;bugtracking system&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;We had a few requirements:&lt;br /&gt;- The tool should be web based (Running on IIS)&lt;br /&gt;- Projects with team members and roles&lt;br /&gt;- Projects/Users only available for assigned persons&lt;br /&gt;- Possibility to add fields for a specific project on the fly&lt;br /&gt;- E-mail notifications for status changes etc.&lt;br /&gt;- Not only suitable for bugtracking, but issue tracking in general&lt;br /&gt;- If open source then ASP.NET C# as first choice&lt;br /&gt;- Fast and nice looking&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;BugNET&lt;/strong&gt;&lt;br /&gt;The first open source project we tried was &lt;a href="http://www.bugnetproject.com/"  target="_blank"&gt;BugNET&lt;/a&gt;&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;&lt;em&gt;BugNET is an issue tracking and project issue management solution built using the ASP.NET web application framework. Email notifications, reporting and per project configuration of fields and values allows efficient management of bugs, feature requests, and other issues for projects of any scale.&lt;/em&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;We downloaded it, installed it and loved it! Within 10 minutes we had an Issue tracking solution that met all of our requirements!&lt;br /&gt;&lt;br /&gt;In BugNET you can create projects, assign team members to it giving them a standard role from &lt;strong&gt;Project Manager &lt;/strong&gt;to &lt;strong&gt;Reader&lt;/strong&gt;. You can also create own roles per project. A project can have &lt;strong&gt;categories&lt;/strong&gt; (for instance the modules of an application) and &lt;strong&gt;versions&lt;/strong&gt; that can be used as &lt;strong&gt;milestones&lt;/strong&gt; for the issues. Those milestones easily translates themselves into a &lt;strong&gt;roadmap&lt;/strong&gt;.&lt;br /&gt;The &lt;strong&gt;project summary page&lt;/strong&gt; gives a good overview with, from left to right, open issues per milestone, per category, per assignee, per status, per priority and type.&lt;br /&gt;Issues can have:&lt;br /&gt;- Comments&lt;br /&gt;- Attachments&lt;br /&gt;- Related issues&lt;br /&gt;- and even time tracking&lt;br /&gt;&lt;br /&gt;Issue changes can be notified by e-mail, and even RSS.&lt;br /&gt;BugNET also supports a report solution which allows you to report to screen, &lt;strong&gt;PDF&lt;/strong&gt; and &lt;strong&gt;Excel&lt;/strong&gt;. &lt;br /&gt;The user interface is looking nice, clean and to the point.&lt;br /&gt;&lt;br /&gt;BugNET has the following requirements:&lt;br /&gt;- IIS 5 or later&lt;br /&gt;- Microsoft .NET Framework v2.0 Redistributable&lt;br /&gt;- Microsoft Report Viewer Redistributable 2005 &lt;br /&gt;- Microsoft ASP.NET AJAX 1.0&lt;br /&gt;- Microsoft SQL Server&lt;br /&gt;&lt;br /&gt;More on the installation can be found on the &lt;a href="http://www.bugnetproject.com/Documentation/tabid/57/topic/Installation/Default.aspx" target="_blank"&gt;BugNET documentation page&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;If you are looking for a issue(bug) tracking management solution you really should give &lt;a href="http://www.bugnetproject.com/"  target="_blank"&gt;BugNET&lt;/a&gt; a try!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3737293083443127621?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3737293083443127621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3737293083443127621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3737293083443127621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3737293083443127621'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/11/bugnet-review-download-install-and.html' title='BugNET review, download, install and track your issues!'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3426041058608990640</id><published>2007-10-22T05:21:00.001-07:00</published><updated>2007-10-22T05:21:17.689-07:00</updated><title type='text'>Watch your memory</title><content type='html'>&lt;p&gt;Delphi has a nice feature (since version ??) to check whether you leak some memory in your project. All you have to do is set the &lt;strong&gt;ReportMemoryLeaksOnShutDown &lt;/strong&gt;property to true in your project file.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;begin&lt;/strong&gt;       &lt;br /&gt;&amp;#xA0; ReportMemoryLeaksOnShutdown := true;       &lt;br /&gt;&amp;#xA0; Application.Initialize;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;If you forget to free an object you will get an unexpected memory leak exception when you close your application.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh4.google.com/beensoft/RxyVt9pQvGI/AAAAAAAAACE/D6iYCbAHMic/memleak2.jpg"&gt;&lt;img id="id" style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="73" alt="memleak" src="http://lh6.google.com/beensoft/RxyVudpQvHI/AAAAAAAAACM/1LsYCkHaseY/memleak_thumb.jpg" width="244" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;This is nice, however we always release allocated memory, don't we?;-)    &lt;br /&gt;    &lt;br /&gt;Although it is nice to know that you leak some memory the messagebox does not help us to find out where it happens. It only reports the type of object, and the spilled memory in bytes.     &lt;br /&gt;In the marketplace there are several tools that can be used to signal memory leaks. One in particular, which I am evaluating right now, is &lt;a href="http://www.eurekalog.com/" target="_blank"&gt;Eurekalog&lt;/a&gt;.     &lt;br /&gt;You can use this tool to &lt;strong&gt;catch exceptions and memory leaks&lt;/strong&gt; in your application. A detailed log file, with &lt;strong&gt;call stack&lt;/strong&gt;, will tell you exactly the location (&lt;strong&gt;unit&lt;/strong&gt; and &lt;strong&gt;linenumber&lt;/strong&gt;) in the source of the unfreed object. Double clicking a line in the call stack opens the unit at that line in the IDE.     &lt;br /&gt;Another nice feature of Eurekalog is that you can activate it within your application, so that whenever your user hits an unexpected exception, or memory leak he/she can send the report to you by e-mail or even sent it to your bug tracking system.&lt;/p&gt;  &lt;p&gt;The Eurekalog log file for the above memory leak looks like this:   &lt;br /&gt;&lt;a href="http://lh4.google.com/beensoft/RxyVu9pQvII/AAAAAAAAACU/r5RXwJ5La74/eureka%5B5%5D.jpg"&gt;&lt;img id="id" style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="294" alt="eureka" src="http://lh6.google.com/beensoft/RxyVvdpQvJI/AAAAAAAAACc/3rBBZRSqeWY/eureka_thumb%5B3%5D.jpg" width="447" border="0" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Although we always free memory, use the &lt;strong&gt;try&lt;/strong&gt;...&lt;strong&gt;finally&lt;/strong&gt; construct, you will leak memory sooner or later. Tools like Eurekalog can help you tracking them down easily. Do you know more sophisticated tools, like Eurekalog, to track down memory leaks?&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3426041058608990640?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3426041058608990640/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3426041058608990640' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3426041058608990640'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3426041058608990640'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/10/watch-your-memory.html' title='Watch your memory'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4203094580753633542</id><published>2007-10-19T02:21:00.001-07:00</published><updated>2007-10-19T03:00:48.338-07:00</updated><title type='text'>.NET Enumerator basics</title><content type='html'>&lt;p&gt;I hereby declare this week as the week of the enumerator. ;-)    &lt;br /&gt;&lt;a href="http://hallvards.blogspot.com/" target="_blank"&gt;Hallvard Vassbotn&lt;/a&gt; started this week with &lt;a href="http://hallvards.blogspot.com/2007/10/more-fun-with-enumerators.html" target="_blank"&gt;an excellent post&lt;/a&gt; on using &lt;strong&gt;enumerators patterns&lt;/strong&gt; on your own collections. You should really give this &lt;em&gt;high School&lt;/em&gt; enumeration stuff, a read!     &lt;br /&gt;    &lt;br /&gt;The .NET Framework it self offers a lot of basic functionality for enumerators. It is friday so let's take a look on some basics here:     &lt;br /&gt;    &lt;br /&gt;Sometimes it is necessary to let a user pick a value from a enumerator type. For example you want the user to pick some property value of a component, which is enumerator. You could, of course, fill a combox with string values by hand (keeping the order), but in future releases the list could extended, having you to alter your code.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Looping an enumerator&lt;/strong&gt;     &lt;br /&gt;It is easier then to simply loop through the enumerator type.&lt;strong&gt; Update!&lt;/strong&gt; In Delphi win32 this is not possible. &lt;strong&gt;This is false&lt;/strong&gt;! Uli commented that it can in Delphi Win32!, using the Typinfo unit. (See the code in the comments)&lt;/p&gt;  &lt;p&gt;In .NET however this is possible using the Enum.GetNames method.    &lt;br /&gt;&amp;#xA0; &lt;br /&gt;In C# you code looks like this:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;foreach ( string s in Enum.GetNames(typeof(SeriesChartType)) )      &lt;br /&gt;{       &lt;br /&gt;&amp;#xA0;&amp;#xA0; Messagbox.Show(s);       &lt;br /&gt;} &lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;the equivalent code in Delphi .NET is:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;strong&gt;for&lt;/strong&gt; s &lt;strong&gt;in&lt;/strong&gt; Enum.GetNames(TypeOf(SeriesChartType)) &lt;strong&gt;do begin&lt;/strong&gt;       &lt;br /&gt;&amp;#xA0;&amp;#xA0; MessageBox.Show(s);       &lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;strong&gt;Exists a value?      &lt;br /&gt;&lt;/strong&gt;Check if a enumerator value exists in a enumerator type with the &lt;strong&gt;IsDefined&lt;/strong&gt; method.     &lt;br /&gt;Delphi .NET code:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;     &lt;br /&gt;s := 'Point';       &lt;br /&gt;&lt;strong&gt;if &lt;/strong&gt;Enum.IsDefined(TypeOf(SeriesChartType), s) &lt;strong&gt;then&lt;/strong&gt;       &lt;br /&gt;&amp;#xA0; MessageBox.Show('Yes')       &lt;br /&gt;&lt;strong&gt;else&lt;/strong&gt;       &lt;br /&gt;&amp;#xA0; MessageBox.Show('No');&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;Conclusion, the .NET framework&lt;strong&gt; Enum class&lt;/strong&gt;, which is the base class for all the enumerator types, adds valueable methods to the basic enumerator types.     &lt;br /&gt;More information can be found on MSDN &lt;a href="http://msdn2.microsoft.com/en-us/library/system.enum(VS.71).aspx" target="_blank"&gt;here&lt;/a&gt;.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4203094580753633542?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4203094580753633542/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4203094580753633542' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4203094580753633542'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4203094580753633542'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/10/net-enumerator-basics.html' title='.NET Enumerator basics'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7152538215357164065</id><published>2007-10-05T02:01:00.001-07:00</published><updated>2007-10-05T02:10:22.201-07:00</updated><title type='text'>Fooling around with TWebbrowser #4</title><content type='html'>&lt;p&gt;&lt;strong&gt;TWebbrowser and the Enter key&lt;/strong&gt;&lt;br /&gt;For some reason the &lt;strong&gt;Enter key&lt;/strong&gt; in TWebbrowser does not work. This is very annoying, because users can't use the enter key to &lt;strong&gt;submit&lt;/strong&gt; a form or, even worse, can not go to the next line in a &lt;strong&gt;textarea&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Searching the Internet I found two solutions to this problem:    &lt;br /&gt;    &lt;br /&gt;&lt;strong&gt;Solution1: Use your applications MessageHandler; &lt;br /&gt;&lt;/strong&gt;The best solution,imo, &lt;a href="http://www.swissdelphicenter.ch/en/showcode.php?id=1055" target="_blank"&gt;is this one provided by SwissDelphiCenter&lt;/a&gt;. This solution 'listens' through the application's messagehandler to handle the keystrokes of your webbrowser. (Webbrowser1 in this case).     &lt;br /&gt;In my multitab browser I had to tweak this a little bit to give the handler the active webbrowser. (Don't forget to nil the FOleInPlaceObject when you switch TWebbrowser objects).&lt;/p&gt;  &lt;pre&gt;&lt;strong&gt;if&lt;/strong&gt; AWebbrowser &amp;lt;&amp;gt; ActiveWebbrowser &lt;strong&gt;then begin&lt;/strong&gt;&amp;#xA0;&amp;#xA0; &lt;br /&gt; FOleInPlaceActiveObject := nil; &lt;br /&gt;  Webbrowser1:= ActiveWebbrowser; &lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt; &lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;p&gt;This works just fine! Kind of magic to me, but it works. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How to handle popup browsers?&lt;/strong&gt;&lt;br /&gt;As told in a &lt;a href="http://beensoft.blogspot.com/2007/09/fooling-around-with-twebbrowser-2.html" target="_blank"&gt;previous episode of this serie&lt;/a&gt;, it is sometimes necessary to invoke the &lt;strong&gt;NewWindow2 event to handle popup-browsers&lt;/strong&gt;. This is typicaly necessary when you need to retain a browser &lt;strong&gt;session&lt;/strong&gt;. &lt;br /&gt;&lt;br /&gt;In the NewWindow2 event a new form of you application is popped up &lt;strong&gt;modeless&lt;/strong&gt; to hold the webbrowsers popup. To get the active webbrowser for your messagehandler in this scenario gets a little complicated, because there could be more popups open at the same time, and a popup could have one or more popups. The next solution seems to be more appropiate for that.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;Solution 2: Use the Keybd_Event message&lt;/strong&gt; &lt;br /&gt;Well the Enter key might not work in textarea's, &lt;strong&gt;CONTROL + M&lt;/strong&gt; seems to be doing just what we need, inserting a new line in the textarea. &lt;br /&gt;&lt;br /&gt;So we must send a CTRL + M to our webbrowser. &lt;a href="http://www.delphi3000.com/articles/article_4222.asp?SK=" target="_blank"&gt;Here a solution, as found on Delphi3000&lt;/a&gt;, using the &lt;strong&gt;Keybd_event function&lt;/strong&gt;. This function can be used to synthesize keystrokes. So send the CONTROL + M when an enter key is hit and we are done. (Supposing there is only a webbrowser on your popup form).&lt;br /&gt;&lt;br /&gt;However there is one side effect with this solution, if you have a textarea and a submit button on your popup webpage, the page will also be submitted if you enter a new line in the textarea. Simple solution for this is to send the CANCEL event after the handling, so this is the code with the extra line (looks a bit messy):&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;font size="2"&gt;&lt;strong&gt;procedure&lt;/strong&gt; TfrmPopUpBrowser.FormKeyPress(Sender: TObject; &lt;br /&gt;      var Key: Char);&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt; &lt;br /&gt;  //Don't forget ot set the Keypreview property &lt;br /&gt;  //of the form to true!&lt;br /&gt;  &lt;strong&gt;if&lt;/strong&gt; (Key=#13) &lt;strong&gt;then begin&lt;/strong&gt; &lt;br /&gt;    Key := #0; &lt;br /&gt;    Keybd_Event(VK_LCONTROL, 0, 0, 0); //Ctrl key down &lt;br /&gt;    Keybd_Event(Ord('M'), MapVirtualKey(Ord('M'), 0), &lt;br /&gt;        0, 0); // 'M' key down &lt;br /&gt;    Keybd_Event(Ord('M'), MapVirtualKey(Ord('M'), 0), &lt;br /&gt;        KEYEVENTF_KEYUP, 0); // 'M' Key up &lt;br /&gt;    Keybd_Event(VK_LCONTROL, 0, KEYEVENTF_KEYUP, &lt;br /&gt;        0); // Ctrl key up &lt;br /&gt;    Keybd_Event(VK_CANCEL, 0, 0, 0);&lt;br /&gt;  &lt;strong&gt;end; &lt;br /&gt;end;&lt;/strong&gt;&lt;/font&gt;&lt;/pre&gt;&lt;br /&gt;More info on how use Keybd_event function take a look &lt;a href="http://msdn2.microsoft.com/en-us/library/ms646304.aspx" target="_blank"&gt;at the msdn article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Well in my case it was a little harder to tackle this problem, but it works now just fine. Hope this usefull for others as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7152538215357164065?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7152538215357164065/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7152538215357164065' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7152538215357164065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7152538215357164065'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/10/fooling-around-with-twebbrowser-4.html' title='Fooling around with TWebbrowser #4'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7351835260334983399</id><published>2007-10-04T02:33:00.001-07:00</published><updated>2007-10-04T02:39:40.135-07:00</updated><title type='text'>.NET Framework sourcecode will be free</title><content type='html'>&lt;p&gt;According to &lt;a href="http://blogs.msdn.com/charlie/archive/2007/10/03/net-framework-source-code-to-ship-with-orcas.aspx"&gt;this blogpost&lt;/a&gt;, by ex Borlander &lt;a href="http://blogs.msdn.com/charlie/about.aspx"&gt;Charlie Calvert&lt;/a&gt;, Microsoft will ship the source code of the .NET framework with the next Visual Studio release 2008.&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;He says:      &lt;br /&gt;&lt;em&gt;Here is a piece of wonderful news: Scott Guthrie has announced today that we will be releasing the source code to the .NET framework when we ship Visual Studio 2008 later this year!&lt;/em&gt;&lt;/p&gt;    &lt;p&gt;&lt;em&gt;An option will be made available to allow you to step directly into the source from your own code, so you can see exactly what is happening in the .NET framework. This is exactly what developers need, and it will greatly improve the experience of developing on the .NET Framework .&lt;/em&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;a href="http://weblogs.asp.net/scottgu/archive/2007/10/03/releasing-the-source-code-for-the-net-framework-libraries.aspx" target="_blank"&gt;Scott's announcement&lt;/a&gt;.&lt;/p&gt;  &lt;p&gt;This is really &lt;strong&gt;great news&lt;/strong&gt;. As Delphi Developers we always had the sourcecode of the VCL (since 1995). Having the sourcecode of any framework is indeed a &lt;strong&gt;great learning resource&lt;/strong&gt;!&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7351835260334983399?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7351835260334983399/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7351835260334983399' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7351835260334983399'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7351835260334983399'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/10/net-framework-sourcecode-will-be-free.html' title='.NET Framework sourcecode will be free'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7052341076942039745</id><published>2007-09-25T03:11:00.001-07:00</published><updated>2007-09-25T03:11:01.675-07:00</updated><title type='text'>Blog searching</title><content type='html'>&lt;p&gt;Blogger offers the posibility to search a specific blog with a query, which will return all the blogposts that meets the criteria.&lt;/p&gt;  &lt;p&gt;For instance &lt;a title="http://beensoft.blogspot.com/search?q=TWebbrowser" href="http://beensoft.blogspot.com/search?q=TWebbrowser"&gt;http://beensoft.blogspot.com/search?q=TWebbrowser&lt;/a&gt; will return all my blogposts about TWebbrowser including the &lt;strong&gt;Fooling around with&lt;/strong&gt; series. Did not know that, thought I let you know!&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7052341076942039745?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7052341076942039745/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7052341076942039745' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7052341076942039745'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7052341076942039745'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/09/blog-searching.html' title='Blog searching'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7056645988153611440</id><published>2007-09-20T02:14:00.000-07:00</published><updated>2007-09-20T02:43:38.295-07:00</updated><title type='text'>On with RAD Studio 2007 with mixed feelings</title><content type='html'>Yesterday I installed the RAD Studio 2007, over my existing Delphi 2007 for Win32 (Update 3) installation.&lt;br /&gt;Installation gave no problem, except for a few packages that needed to be recompiled. Although I don't need RAD Studio 2007 anymore (since it does not have a winform designer), I was curious about the new ECO IV for VCL.NET.&lt;br /&gt;Well it looks that ECO is only available in the Architect edition, which it was in the BDS2005 erra, as I recall. In BDS2006 it was introduced in all the SKU's at different levels.&lt;br /&gt; &lt;br /&gt;Anyway I have mixed feelings for this release, at one hand it &lt;strong&gt;fast&lt;/strong&gt;, &lt;strong&gt;stable&lt;/strong&gt; (iow &lt;strong&gt;it rocks!&lt;/strong&gt;), but on the other hand it  misses important features compared to BDS2006.&lt;br /&gt;&lt;br /&gt;Go Delphi for Win32!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7056645988153611440?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7056645988153611440/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7056645988153611440' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7056645988153611440'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7056645988153611440'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/09/on-with-rad-studio-2007-with-mixed.html' title='On with RAD Studio 2007 with mixed feelings'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5480027847351335875</id><published>2007-09-14T00:12:00.001-07:00</published><updated>2007-09-14T01:40:13.961-07:00</updated><title type='text'>Fooling around with TWebbrowser #3</title><content type='html'>Some more tips to make a webbrowser application that rocks!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Get the right popupwindow size&lt;/strong&gt;&lt;br /&gt;In &lt;a href="http://beensoft.blogspot.com/2007/09/fooling-around-with-twebbrowser-2.html"&gt;episode #2&lt;/a&gt; we managed to retain the ASP.NET Session for popup windows in our TWebbrowser application.&lt;br /&gt;Initially we don't know what the size of our popup form must be. Fortunately TWebbrowser has two events for that, so that we can size our window accordingly.&lt;br /&gt;Use the &lt;strong&gt;OnWindowSetHeight&lt;/strong&gt; and &lt;strong&gt;OnWindowSetWidth&lt;/strong&gt; event to do this.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;procedure&lt;/strong&gt; TfrmPopUpBrowser.WebBrowser1WindowSetHeight(&lt;br /&gt;    ASender: TObject; Height: Integer);&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;br /&gt;  Self.Height := WebBrowser1.Height + 20;&lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;procedure&lt;/strong&gt; TfrmPopUpBrowser.WebBrowser1WindowSetWidth(&lt;br /&gt;    ASender: TObject; Width: Integer);&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;br /&gt;  Self.Width := WebBrowser1.Width + 20;&lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;The additional distance of 20, is to avoid scrollbars.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Filling up a combobox with the visited websites&lt;/strong&gt;&lt;br /&gt;If you use a combobox to harvest the visited websites, just like Internet Explorer then you could use the &lt;strong&gt;OnDocumentComplete&lt;/strong&gt; event to get the complete URL and then add it to your combobox. I use this event for three reasons:&lt;br /&gt;&lt;br /&gt;1. It gives you a complete URL (not www.codegear.com not http://www.codegear.com but http://www.codegear.com/)&lt;br /&gt;2. If the typed address is not available (a non existing website) the &lt;strong&gt;OnNavigateError&lt;/strong&gt; event will trigger, so you could then decide not to add the URL to the webbrowser.&lt;br /&gt;3. Having a good URL gives the ability to locate the URL in combobox again if the user navigates back to the page.&lt;br /&gt;&lt;br /&gt;You don't have this advantages if you add the URL into the combobox directly after input. &lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;procedure&lt;/strong&gt; TfrmPopUpBrowser.WebBrowser1DocumentComplete(&lt;br /&gt;    ASender: TObject;&lt;br /&gt;  &lt;strong&gt;const&lt;/strong&gt; pDisp: IDispatch; &lt;br /&gt;&lt;strong&gt;var&lt;/strong&gt; URL: OleVariant);&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;br /&gt;  AddAddressToCombobox(URL);&lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;procedure&lt;/strong&gt; TfrmPopUpBrowser.AddAddressToCombobox(&lt;br /&gt;    Adres : string);&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;br /&gt;  Adres := LowerCase(Adres);&lt;br /&gt;  &lt;strong&gt;If&lt;/strong&gt; (Adres &lt;&gt; '') &lt;br /&gt;  &lt;strong&gt;and&lt;/strong&gt; (cboAddress.Items.IndexOf(Adres) = -1) &lt;strong&gt;then begin&lt;/strong&gt;&lt;br /&gt;        cboApplication.Items.Add(Adres);&lt;br /&gt;     &lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;  &lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;Enable/Disable navigatebuttons (back/forward) automatically&lt;/strong&gt;&lt;br /&gt;If you put two buttons on your form to navigate back and forward in the webbrowser you will get an error if there is no page to go back to. (Webbrowser1.GoBack and  Webbrowser1.GoForward methods)&lt;br /&gt;You can use the &lt;strong&gt;OnCommandChange&lt;/strong&gt; event to make this buttons 'case sensitive':&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;procedure&lt;/strong&gt; TfrmPopUpBrowser.WebBrowser1CommandStateChange(&lt;br /&gt;    ASender: TObject; Command: Integer; Enable: WordBool);&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;br /&gt;  &lt;strong&gt;case&lt;/strong&gt; Command &lt;strong&gt;of&lt;/strong&gt;    &lt;br /&gt;    CSC_NAVIGATEBACK: tbApplicationBack.Enabled := Enable;&lt;br /&gt;    CSC_NAVIGATEFORWARD: tbApplicationNext.Enabled := Enable;&lt;br /&gt; &lt;strong&gt; end;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;Add a progress bar to your application&lt;/strong&gt;&lt;br /&gt;If you want to see the load progress of a page then use the &lt;strong&gt;OnProgressChange&lt;/strong&gt; event.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;procedure&lt;/strong&gt; TfrmPopUpBrowser.WebBrowser1ProgressChange(&lt;br /&gt;    ASender: TObject; Progress, ProgressMax: Integer);&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;br /&gt;    ProgressBar.Max := ProgressMax;&lt;br /&gt;    ProgressBar.Min := 0;&lt;br /&gt;    ProgressBar.Position := Progress;&lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;strong&gt;Have the url in your statusbar or label&lt;/strong&gt;&lt;br /&gt;Use the OnStatusChange event to show the navigated address in a label or statusbar.&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;procedure&lt;/strong&gt; TfrmPopUpBrowser.WebBrowser1StatusTextChange(&lt;br /&gt;    ASender: TObject;  const Text: WideString);&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;br /&gt;  StatusBar.SimpleText := Text;&lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5480027847351335875?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5480027847351335875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5480027847351335875' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5480027847351335875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5480027847351335875'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/09/fooling-around-with-twebbrowser-3.html' title='Fooling around with TWebbrowser #3'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-865388432473880593</id><published>2007-09-13T04:57:00.000-07:00</published><updated>2007-09-13T06:06:14.363-07:00</updated><title type='text'>SA or not SA</title><content type='html'>&lt;strong&gt;Is SA worth while?&lt;/strong&gt;&lt;br /&gt;This is what Bruce McGee asks himself (and us) in &lt;a href="http://glooscapsoftware.blogspot.com/2007/09/is-software-assurance-worth-while.html"&gt;this blogpost&lt;/a&gt;.&lt;br /&gt;From a financial point of view it is a good deal. Personally I am very disappointed with my first SA experience. &lt;br /&gt;&lt;br /&gt;Together with the &lt;a href="http://www.codegear.com/products/delphi/win32"&gt;Delphi 2007 for Win32 edition &lt;/a&gt;I bought software assurance because I tend to use the Delphi .NET personality for my winforms development (What was I thinking?). At that time nothing indicated that the winforms designer was not in the &lt;a href="http://www.codegear.com/products/radstudio"&gt;RAD Studio&lt;/a&gt; later that year.&lt;br /&gt;Now that &lt;a href="http://www.codegear.com/products/radstudio"&gt;RAD Studio &lt;/a&gt;is out, it is kind of funny (ahum sad) that there is no reason, for me, to even install it. The Update 3 is all I need. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Is SA worth while?&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-865388432473880593?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/865388432473880593/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=865388432473880593' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/865388432473880593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/865388432473880593'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/09/sa-or-not-sa.html' title='SA or not SA'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-6891015332514143763</id><published>2007-09-12T01:16:00.000-07:00</published><updated>2007-09-12T01:41:43.715-07:00</updated><title type='text'>Fooling around with TWebbrowser #2</title><content type='html'>In &lt;a href="http://beensoft.blogspot.com/2006/01/fooling-around-with-twebbrowser.html"&gt;the last episode &lt;/a&gt;of this serie (9 january 2006) we talked about the fact that we could use the TWebbrowser component to display simple webpages within our Delphi application.&lt;br /&gt;Recently this project extended and was used to hold a complex ASP.NET webapplication, which gave some additional problems with the ASP.NET &lt;strong&gt;Session&lt;/strong&gt; object. The problem is that this webapplication popups several windows (Internet Explorer windows) which looses the session of the webapplication. &lt;br /&gt;As a result the user must login on every browser, which is a showstopper of course.&lt;br /&gt;&lt;br /&gt;The cause of this is that the webserver sees our application as a different process compared to Internet Explorer. (ASP.NET sessions are process dependent) Different process, different session. The solution of this was rather simple, although a little hard to find.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How to retain the browser session within your application&lt;/strong&gt;&lt;br /&gt;The trick is to get the popup to run into the same process as our application, so basically to run it in our application.&lt;br /&gt;TWebbrowser has a &lt;strong&gt;NewWindow2 &lt;/strong&gt;event for this. In this event you can specify the application to be used throught the&lt;strong&gt; ppDisp (IDispatch) parameter&lt;/strong&gt;. (our application, in this event)&lt;br /&gt;&lt;br /&gt;Suppose you have a second form, Form2, containing another TWebbrowser, you could 'redirect' the new window like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;procedure &lt;/strong&gt;TForm1.WebBrowser1NewWindow2(ASender: TObject; &lt;br /&gt;var ppDisp: IDispatch; &lt;strong&gt;var&lt;/strong&gt; Cancel: WordBool);&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;br /&gt;  ppDisp := Form2.WebBrowser1.Application;&lt;br /&gt;  Form2.Show;&lt;br /&gt;&lt;strong&gt;end&lt;/strong&gt;;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Quite simple, isn't it?&lt;br /&gt;To let our form act in the window-name resolution it is wise to set the &lt;strong&gt;RegisterAsBrowser &lt;/strong&gt;property to &lt;strong&gt;true&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;More information can be found on knAlertz:&lt;br /&gt;&lt;a href="http://www.kbalertz.com/Feedback_932474.aspx"&gt;How to maintain the ASP.NET session state&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.kbalertz.com/Feedback.aspx?kbNumber=311282"&gt;How to use the WebBrowser control NewWindow2 event in Visual Basic .NET&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-6891015332514143763?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/6891015332514143763/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=6891015332514143763' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6891015332514143763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6891015332514143763'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/09/fooling-around-with-twebbrowser-2.html' title='Fooling around with TWebbrowser #2'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4512596353057677291</id><published>2007-09-10T05:51:00.000-07:00</published><updated>2007-09-21T04:25:16.866-07:00</updated><title type='text'>VB developers, now is the time to shift to Delphi</title><content type='html'>Every now and then the discussion on how do we get '&lt;a href="http://www.donationcoder.com/Forums/bb/index.php?PHPSESSID=33e312a51b6e4dd93b904c28dcbbadb1&amp;topic=9759"&gt;the abandoned VB6 developer&lt;/a&gt;' into Delphi community &lt;a href="http://delphi.newswhat.com/geoxml/forumgetthread?groupname=borland.public.delphi.non-technical&amp;messageid=46e09bba@newsgroups.borland.com&amp;displaymode=all"&gt;pops up&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;If you are VB developer, who wants to get into Delphi, now is the time to move to Delphi! If you do, and you should, you might find one of the following links usefull:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Delphi versus VB&lt;/strong&gt;&lt;br /&gt;- &lt;a href="http://delphi.about.com/od/beginners/a/vb2delphi.htm"&gt;Delphi for Visual Basic developers&lt;/a&gt; by Delphi About&lt;br /&gt;- &lt;a href="http://www.cyber-matrix.com/vb2delphi.html"&gt;VB to Delphi&lt;/a&gt; at Cyber Matrix.&lt;br /&gt;- &lt;a href="http://dn.codegear.com/article/images/26225/vbtodelphi.pdf"&gt;Migrating from VB to Delphi&lt;/a&gt; Whitepaper (PDF) by CodeGear.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Delphi the IDE, and the language&lt;/strong&gt; &lt;br /&gt;- &lt;a href="http://www.marcocantu.com/epascal/default.htm"&gt;Marco Cantu's essential Pascal&lt;/a&gt; all about the basics of Object Pascal, the language used in Delphi.&lt;br /&gt;- &lt;a href="http://www.marcocantu.com/edelphi/default.htm"&gt;Marco Cantu's all about Delphi&lt;/a&gt; Essential Delphi the IDE combined with the language.&lt;br /&gt;- &lt;a href="http://delphi.about.com"&gt;Zarko Gajic's delphi.about.com&lt;/a&gt;, with lot's of tutorials and sources.&lt;br /&gt;- &lt;a href="http://www.delphiland.com/"&gt;Delphiland&lt;/a&gt; offers online lessons for beginners and intermediate users&lt;br /&gt;- &lt;a href="http://www.delphibasics.co.uk/"&gt;Delphi basics&lt;/a&gt; provides help and reference for the fundamentals of the Delphi language.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Delphi the community&lt;/strong&gt;&lt;br /&gt;- &lt;a href="http://www.codegear.com/products/delphi/win32"&gt;CodeGear Delphi product page&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://dn.codegear.com/delphi"&gt;CodeGear Developer Network Delphi&lt;/a&gt;&lt;br /&gt;- &lt;a href="http://delphi.newswhat.com/geoxml/home"&gt;Delphi Newswhat Newsgroups and Blog aggregator&lt;/a&gt; &lt;br /&gt;- Also via &lt;a href="http://newsgroups.codegear.com/"&gt;newsgroups.codegear.com&lt;/a&gt;.&lt;br /&gt;Tip! Don't miss the &lt;a href="http://delphi.newswhat.com/geoxml/forumlistthreads?groupname=borland.public.delphi.non-technical"&gt;Delphi non-technical newsgroup&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Books on Lulu&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.lulu.com/browse/search.php?_shopSearch=http%3A%2F%2Fwww.lulu.com%2Fbrowse%2Fsearch.php&amp;_helpSearch=http%3A%2F%2Fwww.lulu.com%2Fhelp%2Fsearch.php&amp;_forumSearch=http%3A%2F%2Fwww.lulu.com%2Fforums%2Fsearch.php%3Fmode%3Dresults&amp;search_forum=-1&amp;search_cat=2&amp;show_results=topics&amp;return_chars=200&amp;search_keywords=&amp;keys=&amp;fSearch=delphi&amp;fSearchFamily=0"&gt;All Delphi books on Lulu&lt;/a&gt;&lt;br /&gt;&lt;a href="http://stores.lulu.com/marcocantu"&gt;Marco Cantu's Delphi books on Lulu&lt;/a&gt;&lt;br /&gt;&lt;a href="http://stores.lulu.com/drbob42"&gt;Bob Swart's books on Lulu&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Delphi wikis&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://delphi.wikia.com/wiki/Delphi_Videos"&gt;Delphi Video's&lt;/a&gt;&lt;br /&gt;&lt;a href="http://delphi.wikia.com/wiki/Useful_Sites"&gt;Delphi Useful sites&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Delphi blogs&lt;/strong&gt;&lt;br /&gt;&lt;a href="http://www.delphifeeds.com"&gt;Delphifeeds blog aggregator&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;More resources?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4512596353057677291?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4512596353057677291/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4512596353057677291' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4512596353057677291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4512596353057677291'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/09/vb-developers-now-is-time-to-shift-to.html' title='VB developers, now is the time to shift to Delphi'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-9014398571141989209</id><published>2007-09-05T07:08:00.000-07:00</published><updated>2007-09-06T00:25:47.489-07:00</updated><title type='text'>CodeGear RAD Studio 2007 announced</title><content type='html'>CodeGear announced in &lt;a href="http://www.codegear.com/article/36896"&gt;this press release &lt;/a&gt;the upcoming new version of BDS 2006 / Delphi 2007 for Win32, now called &lt;strong&gt;CodeGear RAD Studio 2007&lt;/strong&gt;, to be available this month.&lt;br /&gt;&lt;br /&gt;More information can be found on the&lt;a href="http://www.codegear.com/products/radstudio/"&gt; RAD Studio product page&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update!&lt;/strong&gt; Technical datasheet is available &lt;a href="http://www.codegear.com/article/36898/images/36898/radstudio-2007-datasheet.pdf"&gt;here&lt;/a&gt;.&lt;br /&gt;Much more links (product pdf's etcetera) can be found on &lt;a href="http://blogs.codegear.com/davidi/archive/2007/09/05/38722.aspx"&gt;David I's blog here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-9014398571141989209?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/9014398571141989209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=9014398571141989209' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9014398571141989209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9014398571141989209'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/09/codegear-rad-studio-2007-announced.html' title='CodeGear RAD Studio 2007 announced'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4404770350912234017</id><published>2007-08-31T05:49:00.000-07:00</published><updated>2007-08-31T05:53:09.780-07:00</updated><title type='text'>Delphi for PHP Update #2</title><content type='html'>Delphi for PHP Update 2 is available!&lt;br /&gt;Download it &lt;a href="http://dn.codegear.com/article/36864"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Go get it! It contains fixes, &lt;strong&gt;improved documentation!&lt;/strong&gt; and an updated VCL for PHP.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4404770350912234017?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4404770350912234017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4404770350912234017' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4404770350912234017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4404770350912234017'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/08/delphi-for-php-update-2.html' title='Delphi for PHP Update #2'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-8894822371482055080</id><published>2007-08-29T06:29:00.000-07:00</published><updated>2007-08-30T03:31:02.519-07:00</updated><title type='text'>ADODB Promptdatasource in .NET</title><content type='html'>In Delphi Win32 it is very easy to use the standard Windows OleDB datalink connection dialog to build Connectionstrings at runtime.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp3.blogger.com/_33FNQ5v3xjo/Rtab8FuHBwI/AAAAAAAAAA8/sKicrbQ7m5A/s1600-h/conn.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp3.blogger.com/_33FNQ5v3xjo/Rtab8FuHBwI/AAAAAAAAAA8/sKicrbQ7m5A/s320/conn.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5104438684301068034" /&gt;&lt;/a&gt;&lt;br /&gt;It is as simple as this, use ADODB and you have the &lt;strong&gt;PromptDataSource&lt;/strong&gt; function:&lt;br /&gt;&lt;br /&gt;ConnString := PromptDataSource(Handle, ConnString);&lt;br /&gt;&lt;br /&gt;In .NET however it is a little more complex. To make a function that can do this, you must first add references to both the  Microsoft ActiveX Data Objects 2.8 Library (=ADODB namespace) and the Microsoft OLE DB Service Component 1.0 Type Library (=MSDASC namespace). In C# the code looks something like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;private string PromptDataSource()&lt;br /&gt;{&lt;br /&gt;  MSDASC.DataLinks dataLinks = new MSDASC.DataLinksClass();&lt;br /&gt;  ADODB.Connection connection = new ADODB.ConnectionClass();&lt;br /&gt;  object oConnection = (object)connection;&lt;br /&gt;  if (dataLinks.PromptEdit(ref oConnection))&lt;br /&gt;    return connection.ConnectionString;&lt;br /&gt;  else&lt;br /&gt;    return "";&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;In Delphi .NET the code looks like this:&lt;br /&gt;&lt;pre&gt;&lt;br /&gt;&lt;strong&gt;uses&lt;/strong&gt; ADODB, MSDASC; (Add to your uses clause).&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;function&lt;/strong&gt; TForm1.PromptDatasource : &lt;strong&gt;string&lt;/strong&gt;;&lt;br /&gt;&lt;strong&gt;var&lt;/strong&gt;&lt;br /&gt;  Datalinks : DataLinksClass;&lt;br /&gt;  ADOConnection : Connection;&lt;br /&gt;  oConnection : TObject;&lt;br /&gt;&lt;strong&gt;begin&lt;/strong&gt;&lt;br /&gt;  Result := '';&lt;br /&gt;  Datalinks := DataLinksClass.Create;&lt;br /&gt;  ADOConnection := ADODB.ConnectionClass.Create;&lt;br /&gt;  oConnection := TObject(ADOConnection);&lt;br /&gt;  &lt;strong&gt;if&lt;/strong&gt; Datalinks.PromptEdit(oConnection) &lt;strong&gt;then begin&lt;/strong&gt;&lt;br /&gt;    Result := ADOConnection.ConnectionString;&lt;br /&gt;  &lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;end;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;In Delphi .NET it is wise to remove the namespace prefixing. &lt;br /&gt;Default there is a prefix Borland.VCL. If you don't remove that the compiler will use the Borland.VCL.ADODB namespace instead of the ADODB namespace from the COM import. &lt;br /&gt;You can do this in the options dialog under Tools. &lt;br /&gt;(Or alter your project specific namespace prefixes in the project options)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-8894822371482055080?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/8894822371482055080/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=8894822371482055080' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8894822371482055080'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8894822371482055080'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/08/adodb-promptdatasource-in-net.html' title='ADODB Promptdatasource in .NET'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_33FNQ5v3xjo/Rtab8FuHBwI/AAAAAAAAAA8/sKicrbQ7m5A/s72-c/conn.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5443360095630489121</id><published>2007-08-29T00:30:00.000-07:00</published><updated>2007-08-29T00:54:56.839-07:00</updated><title type='text'>Highlander, can't take that long, can it?</title><content type='html'>It just can not be taking that much longer (in time) that Highlander (Rad Studio 2007) will hit the doorsteps. There is a lot going on, like &lt;a href="http://www.delphifeeds.com/go/s/22426/"&gt;the beta blogging&lt;/a&gt;, and sheduled &lt;a href="http://www.delphifeeds.com/go/s/22445/"&gt;RAD 2007 Chats&lt;/a&gt; and sheduled &lt;a href="http://www.delphifeeds.com/go/s/22444/"&gt;RAD Studio 2007 Developer Days&lt;/a&gt;. &lt;br /&gt;(Taking place 5, 12, 13 september)&lt;br /&gt;&lt;br /&gt;There are some nice beta blogging entry about the new kid on the blog.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Generics:&lt;/strong&gt;&lt;br /&gt;Bob Swart &lt;a href="http://www.bobswart.nl/Weblog/Blog.aspx?RootId=5:1498"&gt;shows some generics&lt;/a&gt;&lt;br /&gt;Hallvard Vassbotn has a &lt;a href="http://hallvards.blogspot.com/2007/08/highlander2-beta-generics-in-delphi-for.html"&gt;very detailed overview of generics &lt;/a&gt;and other new language features.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ECO IV:&lt;/strong&gt;&lt;br /&gt;Peter Morris has &lt;a href="http://mrpmorris.blogspot.com/2007/08/eco-iv.html"&gt;a detailed overview of ECO IV&lt;/a&gt;&lt;br /&gt;Dave Clegg shows, in this CDN video, &lt;a href="http://dn.codegear.com/article/36846"&gt;ECO IV with VCL.NET&lt;/a&gt;&lt;br /&gt;Olaf Monien &lt;a href="http://blogs.atozed.com/Olaf/20070826.en.aspx"&gt;shows XAML coding using .NET 3.0/WPF&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Blackfish&lt;/strong&gt;:&lt;br /&gt;John MosHakis &lt;a href="http://community.moshine.com/blogs/johnmoshakis/default.aspx"&gt;has some information about Blackfish SQL&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Intresting CodeGear blogposts&lt;/strong&gt;&lt;br /&gt;Dee Elling &lt;a href="http://blogs.codegear.com/DeeElling/archive/2007/08/21/38290.aspx"&gt;talks about the improved help&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;No, no doubt RAD Studio 2007 is coming! (Real soon now?)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5443360095630489121?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5443360095630489121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5443360095630489121' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5443360095630489121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5443360095630489121'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/08/highlander-cant-take-that-long-can-it.html' title='Highlander, can&apos;t take that long, can it?'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-4387978400572286622</id><published>2007-08-17T02:14:00.000-07:00</published><updated>2007-08-17T02:15:48.387-07:00</updated><title type='text'>Highlander, the preview</title><content type='html'>Nick Hodges shows the new release of Delphi code name "Highlander".&lt;br /&gt;&lt;a href="http://dn.codegear.com/article/36839"&gt;Watch or download it here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-4387978400572286622?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/4387978400572286622/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=4387978400572286622' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4387978400572286622'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/4387978400572286622'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/08/highlander-preview.html' title='Highlander, the preview'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-509993807784324431</id><published>2007-08-06T01:21:00.000-07:00</published><updated>2007-08-06T02:05:46.168-07:00</updated><title type='text'>Back online, catching up and the human compiler</title><content type='html'>After spending three weeks in Italy (Adriano-Ravenna) on the Adriatico coast, touching no computer at all (except my PDA) it is now time to start things up again.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Catching up the Delphi scene&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;It looks like &lt;a href="http://delphi.newswhat.com/geoxml/forumgetthread?groupname=borland.public.delphi.non-technical&amp;messageid=46afcbc6$1@newsgroups.borland.com&amp;displaymode=all"&gt;Delphi update 2 is coming real soon now&lt;/a&gt;. (It seems someone slipped some readme file)&lt;/li&gt;&lt;br /&gt;&lt;br /&gt;Nick Hodges reveals the things &lt;a href="http://blogs.codegear.com/nickhodges/archive/2007/07/16/37451.aspx"&gt;that are not on the roadmap&lt;/a&gt;, with, of course, the stopped .NET 2.0 Winform designer which &lt;a href="http://beensoft.blogspot.com/2007/06/codegear-to-drop-winforms-designer-in.html"&gt;I blogged about &lt;/a&gt;sometime ago. He talks about why development was stopped, which is understandable from their standpoint of view. Developers who does not use Delphi .NET winforms are, of course, happy about it. However for those that used  Delphi .NET for Winforms since Delphi 8 they will have to move away from Delphi for that type of applications. But you know: &lt;em&gt;Sh*t happens, step over it&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;There is a nice (new?) site called &lt;a href="http://www.codegearguru.com/"&gt;codegearguru.com &lt;/a&gt;with a lot of video tutorials. Have not dived into it, but it looks good.&lt;br /&gt;&lt;br /&gt;Marco Cantu is working on a &lt;a href="http://blog.marcocantu.com/blog/delphi2007handbook_coming.html"&gt;Delphi 2007 handbook&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://stevepeacocke.blogspot.com/"&gt;Steve Peacocke &lt;/a&gt;has some nice blogposts about the history of Delphi/Pascal.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The human brain is a cool compiler&lt;/strong&gt;&lt;br /&gt;I tend to read some, not computer related books, on holidays. This year I had some book about the human brain and how it works.&lt;br /&gt;Did you know that the human brain does not have to read all the letters in a word to understand the meaning of the word? Only the first and last character of a word must be in the right place. Let see if this is true, can you read this?&lt;br /&gt;&lt;br /&gt;&lt;em&gt;So Ceagoder is cionmg rael soon now wtih udptae 2 of Dlehpi. Is tihs not amnzaig? If tihs cuold be ileemepnmtd in teh coepimlr it wuold gvie lses erorrs on tpoys!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Well OK, back to work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-509993807784324431?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/509993807784324431/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=509993807784324431' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/509993807784324431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/509993807784324431'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/08/back-online-catching-up-and-human.html' title='Back online, catching up and the human compiler'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-9182471441349401623</id><published>2007-07-05T23:52:00.000-07:00</published><updated>2007-07-06T00:25:16.761-07:00</updated><title type='text'>Some IDE Experts</title><content type='html'>Triggered by some comments in &lt;a href="http://beensoft.blogspot.com/2007/06/some-ide-enhancements-to-consider.html"&gt;my previous post &lt;/a&gt;I have digged a little into some available Delphi IDE Experts.&lt;br /&gt;So far I found and used (not completed tested) the following:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.twodesk.com/castalia/index.html"&gt;1. Castalia&lt;/a&gt;&lt;br /&gt;Castalia has two comboboxes on top of the Delphi editor, with the classes and methods of the current unit, which are great for navigating your source. Another nice feature is structural highlighting, where lines are placed between the begin and end blocks of your source. A free Castalia version is available for registered BDS 2006 users.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.gexperts.org/"&gt;2. GExperts&lt;/a&gt;&lt;br /&gt;GExperts offers lots of extra functions in the editor. To name a few: Find procedure, reverse statement, replace and rename component functions. The rename component function helps you to use your component naming convention wisely.&lt;br /&gt;GExperts is open source.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://andy.jgknet.de/dspeedup/builds/"&gt;3. DDevExtensions&lt;/a&gt;&lt;br /&gt;DDevExtensions offers some nice, more technical, functions. If you don't like the BDS 2005-2006 and Delphi 2007 tool palette, DDevextensions allows you to use the old style tabbed tool palette. DDevExtensions is freeware.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.cnpack.org/index.php?lang=en"&gt;4. cnPack&lt;/a&gt;&lt;br /&gt;I have not yet used it very much, but it offers lot's of functions to help you to be more productive. cnPack is freeware.&lt;br /&gt;&lt;br /&gt;Anyhow IDE experts can help you be even more productive in the Delphi environment. &lt;br /&gt;&lt;br /&gt;I am sure there will be more out there, so if you have/know another one please leave a comment! (I will add it to this list)&lt;br /&gt;&lt;br /&gt;Btw if you want to make your own expert, these links are a good start point:&lt;br /&gt;&lt;a href="http://delphi.about.com/od/objectpascalide/a/wizardsexperts.htm"&gt;Experts and Wizards in Delphi&lt;/a&gt; (delphi.about)&lt;br /&gt;&lt;a href="http://www.mustangpeak.net/opentoolsape.htm"&gt;Delphi Open Tools API&lt;/a&gt; Nice overview and tutorial by Mustangpeak.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-9182471441349401623?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/9182471441349401623/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=9182471441349401623' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9182471441349401623'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9182471441349401623'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/07/some-ide-experts.html' title='Some IDE Experts'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2377207868655894506</id><published>2007-06-29T01:23:00.000-07:00</published><updated>2007-06-29T01:54:30.011-07:00</updated><title type='text'>Some IDE enhancements to consider...</title><content type='html'>The Tool Palette has this great option of filtering its content. Give it the focus (or click the filter button) and start typing. For example you will find all the type of buttons when you type 'butt'.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp1.blogger.com/_33FNQ5v3xjo/RoTDmv49HuI/AAAAAAAAAAs/EMU2LUZStaQ/s1600-h/tp.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp1.blogger.com/_33FNQ5v3xjo/RoTDmv49HuI/AAAAAAAAAAs/EMU2LUZStaQ/s320/tp.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5081401350038560482" /&gt;&lt;/a&gt;&lt;br /&gt;This is just great!&lt;br /&gt;&lt;br /&gt;Today I had to search a unit for specific functions, and you can search the code structure with the &lt;strong&gt;structure pane &lt;/strong&gt;which is a list of all the components and methods of a unit in alphabetic order.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_33FNQ5v3xjo/RoTEh_49HvI/AAAAAAAAAA0/YIwi_XMum70/s1600-h/struc.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://bp2.blogger.com/_33FNQ5v3xjo/RoTEh_49HvI/AAAAAAAAAA0/YIwi_XMum70/s320/struc.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5081402367945809650" /&gt;&lt;/a&gt;&lt;br /&gt;Would it not be nice to have a filtering option on the stucture panel too? Just type 'Formc' and you have your FormCreate event.&lt;br /&gt;&lt;br /&gt;Taking this idea a step further, also the &lt;strong&gt;Object Inspector &lt;/strong&gt;and &lt;strong&gt;Project Mangager &lt;/strong&gt;could benefit from such an option.&lt;br /&gt;&lt;br /&gt;I am not sure if anybody already came up with this, but if it is in Quality Central I sure would like to vote for it. (Did not find it yet)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2377207868655894506?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2377207868655894506/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2377207868655894506' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2377207868655894506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2377207868655894506'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/06/some-ide-enhancements-to-consider.html' title='Some IDE enhancements to consider...'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_33FNQ5v3xjo/RoTDmv49HuI/AAAAAAAAAAs/EMU2LUZStaQ/s72-c/tp.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3423010868581735681</id><published>2007-06-27T05:51:00.000-07:00</published><updated>2007-06-27T06:42:16.483-07:00</updated><title type='text'>The day after...more options?</title><content type='html'>Ok, &lt;a href="http://beensoft.blogspot.com/2007/06/codegear-to-drop-winforms-designer-in.html"&gt;CodeGear drops Winforms&lt;/a&gt;. It is now clear that I belong to an exclusive group of Delphi .NET Winforms developers out there. That sounds cool, but they now have a little problem, driving their applications into the future. I am not happy about this affaire, but live goes on. Time to sort out my options.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What was I thinking, doing Winforms development in Delphi .NET?&lt;/strong&gt;&lt;br /&gt;As I told you before I use(d) Delphi .NET Winforms for only few applications belonging to the same project.&lt;br /&gt;This project is a VCL Win32 project, built up in a couple of modules (read seperate applications) which I started two years ago. Why VCL Win32? Simple &lt;a href="http://blog.marcocantu.com/blog/delphi_is_vcl.html"&gt;Delphi is VCL&lt;/a&gt;&lt;br /&gt;The last two modules needed Gauges and Charts. At first I builded this in VCL Win32 with &lt;a href="http://www.tmssoftware.com/"&gt;TMS Software's Instrumentation workshop&lt;/a&gt;, however my client came up with the &lt;a href="http://www.dundas.com/"&gt;Dundas Gauges and Charts&lt;/a&gt;. And he was right, these are a class on their own.&lt;br /&gt;Of course this were .NET components, which I could not use in Delphi Win32. So a decision had to be made. Basically there were two options Delphi for .NET Winforms, or VS C#. (I tried to wrap them into VCL.NET, but that did not work)&lt;br /&gt;Although the controls were built for VS.NET (and supported), I choose for Delphi .NET for the simple fact that I could reuse my coreclasses by sharing them between my Win32 and .NET projects.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Bringing my Delphi for .NET Winforms apps into the future&lt;/strong&gt;&lt;br /&gt;No panic, however at some point in time I probably have to upgrade my applications to 'something else' (Or I will have to install BDS2006, and .NET 1.1 framework, for the rest of my life ;-))&lt;br /&gt;&lt;br /&gt;At this point I think that &lt;strong&gt;my only option &lt;/strong&gt;is to bring the projects over into VS C#. &lt;br /&gt;&lt;br /&gt;More options?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3423010868581735681?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3423010868581735681/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3423010868581735681' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3423010868581735681'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3423010868581735681'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/06/day-aftermore-options.html' title='The day after...more options?'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-9122782594327964020</id><published>2007-06-23T02:16:00.000-07:00</published><updated>2007-06-25T00:09:54.112-07:00</updated><title type='text'>CodeGear to drop winforms designer in Highlander</title><content type='html'>Early june the roadmap for Delphi and C++ Builder was published. &lt;a href="http://beensoft.blogspot.com/2007/06/delphi-c-builder-roadmap.html"&gt;At first sight &lt;/a&gt;I found it a good roadmap.&lt;br /&gt;It became even better with the &lt;a href="http://dn.codegear.com/article/36620"&gt;updated one&lt;/a&gt;, where the nice codename Commodore for a 64 bit Delphi was introduced.&lt;br /&gt;I first became a bit worried by &lt;a href="http://community.devexpress.com/blogs/ctodx/archive/2007/06/19/fahrenheit-vcl.aspx"&gt;a blogpost of Devexpress CTO Julian Bucknall &lt;/a&gt;who somehow managed to read between the lines. What he read was that C# Builder and Winforms support was dropped (Kaput as he says). His exact words:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;There's no mention of the WinForms designer. Indeed, as I understand it, it's kaput. You should be using the forms designer that targets VCL.NET. &lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Huh? Let's take a further look at the roadmap, it says:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;"Highlander" is a planned release that is both &lt;strong&gt;a major upgrade &lt;/strong&gt;to Delphi .NET and a roll up of Delphi 2007 for Win32 and C++Builder 2007 into the complete 2007 RAD Studio. Highlander is planned to &lt;strong&gt;enhance&lt;/strong&gt; Delphi's .NET support up to .Net v2.0 including both framework, &lt;strong&gt;design&lt;/strong&gt;, and language enhancements. &lt;br /&gt;&lt;br /&gt;Delphi developers will be able to develop rich, full-featured websites using RAD techniques and ASP.NET 2.0. VCL developers will be able to easily migrate code to managed code using VCL.NET. Delphi developers will also be able to use model-driven development to drastically improve their productivity. &lt;br /&gt;&lt;br /&gt;Specific areas of focus under consideration for Highlander are: ... etc&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;OK search the roadmap for Winforms and, yes, it is not mentioned. But highlights in the above quote: &lt;em&gt;major upgrade to Delphi .NET, &lt;strong&gt;enhance&lt;/strong&gt; Delphi's .NET support up to .Net v2.0 including both framework, &lt;strong&gt;design&lt;/strong&gt;, and language enhancements&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Oh well Julian must be wrong, it will all have to do with C# Builder. Dropping C# Builder, hmmm I can imagine such a decision. Because C# Builder is in fact the Microsoft C# compiler and C# syntax = C# syntax.&lt;br /&gt;&lt;br /&gt;Well he was not wrong, in fact he had it right. After reading &lt;a href="http://delphi.newswhat.com/geoxml/forumgetthread?groupname=borland.public.delphi.non-technical&amp;messageid=46790f2c$1@newsgroups.borland.com&amp;displaymode=all"&gt;this non.tech thread &lt;/a&gt;it was all clear to me, someone asks:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Will there continue to be a Winforms designer for Delphi for .Net?  Because, &lt;br /&gt;that's what our ECO applications are using and we are using DevExpress .Net Winforms components. Especially, after reading Julian's blog entry of &lt;br /&gt;yesterday.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;and Nick Hodges from CodeGear replies:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;&gt; Will there continue to be a Winforms designer for Delphi for .Net? &lt;br /&gt;No -- we aren't going to be supporting Winforms going forward.&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Shock, WTF, no more winforms support???&lt;br /&gt;How can a roadmap talk about &lt;strong&gt;design enhancements&lt;/strong&gt;, but in fact drop it?&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Delphi .NET, the history&lt;/strong&gt;&lt;br /&gt;Before I continue it is good to take a brief look at the history of Delphi in the .NET world.&lt;br /&gt;Delphi entered the .NET world, announced as a &lt;strong&gt;first class .NET citizen&lt;/strong&gt; read about it &lt;a href="http://dn.codegear.com/sv/article/29952"&gt;here&lt;/a&gt;. First class with everything on it. It was a evolution, instead of the revolution, so Delphi developers could embrace .NET the easy way. Well it turned out that Borland/CodeGear had to play catch up with Microsoft. .NET 2.0 support is still not here.&lt;br /&gt;I remember once at a Delphi launch, here in the Netherlands, that someone asked when will Delphi support .NET 2.0? The anwser: Within a few months after its release. OK we know that a few month became a few month more, but what the hack we can wait, we want to do Delphi, also in .NET!&lt;br /&gt;&lt;br /&gt;Finally its there, but it is crippled without the winforms designer support. &lt;Bummer&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What does this mean for Delphi.NET Winform developers?&lt;/strong&gt;&lt;br /&gt;This one is not hard to answer. Delphi .NET and C# programmers will have no form designer if they move forward to .NET 2.0 and beyond. Be assured you can manually code your design (Yeah, yeah I am looking forward to that...) and compile your code. So basically they are forced to move to either VCL.NET or VS. The first option, VCL.NET, is, imo, not a real option because the lack of thirdparty components. So the only valid option looks to be, to move on to VS. This will drive those developers away from Delphi, is that the goal? I doubt that.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What does this all mean for Delphi as a product?&lt;/strong&gt; &lt;br /&gt;Well I can only write down &lt;strong&gt;my own opinion &lt;/strong&gt;here, but I think it is a bad mistake. Whether we like it or not .NET will become more and more the synoniem for Windows Development. Win32 will be supported for a long, long time but from a business point of view as well from a personal point of view (jobs) you can't deny .NET when you development has a focus on Windows. You just can't.&lt;br /&gt;&lt;br /&gt;What for appeal has a .NET IDE with only ASP.NET support?&lt;br /&gt;Personally I think it is more logic to have an IDE that support both.&lt;br /&gt;&lt;br /&gt;Is VCL.NET a true alternative for Winforms?&lt;br /&gt;I don't think so. I don't know if it is used often, but it seriously lacks thirdparty support. &lt;br /&gt;&lt;br /&gt;I think that Delphi will continue to be strong on native Win32/64, but its .NET participation will decline.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;What does this mean for me?&lt;/strong&gt; &lt;br /&gt;I always tried to pick &lt;a href="http://beensoft.blogspot.com/2006_07_01_archive.html"&gt;the right tools for the right job&lt;/a&gt;. At this moment I do projects in Delphi 2007 Win32(60%), Delphi .NET(10%) and Visual Studio 2005 C# ASP.NET(30%).&lt;br /&gt;In the long term I will probably move my Delphi .NET applications to VS C#. Fortunately they are not that big, but it will cost me some time. I think it is a pitty, because VS2005 has also it's quirks. Even now I find that Delphi .NET (the IDE) has &lt;a href="http://beensoft.blogspot.com/2005/05/unofficial-comparison-between-vs-and.html"&gt;some advantages &lt;/a&gt;compared to VS. (Still can't get used to the endless list of tabs in VS)&lt;br /&gt;Delphi will stay to be my number one tool in the Win32/64 native development world, but on .NET it will be another story.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;The roadmap&lt;/strong&gt;&lt;br /&gt;Nevertheless &lt;a href="http://dn.codegear.com/article/36620"&gt;the roadmap &lt;/a&gt;has &lt;strong&gt;some great things &lt;/strong&gt;for the near future (Unicode, Win64). However I find it a bad sign that the roadmap is not clear on the Winforms departure, which has great impact on the developers using it. &lt;br /&gt;It seems that messages from CodeGear now, and Borland in the past, are still driving confusion, and that will affect its customers, and eventually CodeGear self.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-9122782594327964020?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/9122782594327964020/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=9122782594327964020' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9122782594327964020'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9122782594327964020'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/06/codegear-to-drop-winforms-designer-in.html' title='CodeGear to drop winforms designer in Highlander'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-7779817435996125308</id><published>2007-06-10T05:33:00.000-07:00</published><updated>2007-06-10T05:48:33.657-07:00</updated><title type='text'>Trouble installing update #1, frozen Collecting Information page?</title><content type='html'>Installing Delphi update #1 on my desktop machine was smooth and rather fast ( less than a hour). On my laptop however it was a different story. :-(&lt;br /&gt;The installation was "frozen" on the &lt;strong&gt;Collection Information page&lt;/strong&gt;. Something that took only 5 seconds or so on my desktop PC.&lt;br /&gt;After waiting for 3 hours I killed the process and downloaded the 700 Mb installation from CodeGear &lt;a href="http://downloads.codegear.com/default.aspx?productid=2012"&gt;here&lt;/a&gt;.&lt;br /&gt;Again all "hanged" on the Collecting information page. Having not that much patient anymore I killed the setup process within a hour.&lt;br /&gt;&lt;br /&gt;Fortunately Robert M. Lincoln had just posted &lt;a href="http://delphi.newswhat.com/geoxml/forumgetthread?groupname=borland.public.delphi.non-technical&amp;messageid=466a16b0$1@newsgroups.borland.com&amp;amp;displaymode=all"&gt;a thread in the non-tech &lt;/a&gt;that he had the same problem and solved it by disabling all the startup apps using the MSConfig.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;(3)  This time, I ran MSCONFIG, and disabled allstartup programs (using "Selective Startup", uncheck"Load startup items", leave checked "Load SystemServices", "Use original boot configuration" is checkedand greyed out).  After rebooting, I ran as in (2) aboveusing the DVD from the ISO file.This time, success!&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Installation was just as fast as on my desktop PC!  :-)&lt;br /&gt;Now wondering what app blocked the installation?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-7779817435996125308?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/7779817435996125308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=7779817435996125308' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7779817435996125308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/7779817435996125308'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/06/trouble-installing-update-1-frozen.html' title='Trouble installing update #1, frozen Collecting Information page?'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2324552716181517814</id><published>2007-06-09T04:23:00.000-07:00</published><updated>2007-06-09T04:40:59.167-07:00</updated><title type='text'>Delphi / C++ Builder roadmap</title><content type='html'>&lt;a href="http://dn.codegear.com/article/36620"&gt;The Delphi and C++Builder roadmap&lt;/a&gt; is available on the Developer Network.&lt;br /&gt;&lt;br /&gt;Basically it drills down to this:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Second half 2007: Delphi "Highlander"&lt;/strong&gt;&lt;br /&gt;Containing support for .NET 2.0 en .NET 3.0 compatibility. All personalities will be in the &lt;strong&gt;Rad Studio 2007&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;First half 2008: Delphi "Tiburón"&lt;/strong&gt;&lt;br /&gt;This version is about Unicode and Generics&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Somewhere in 2009&lt;/strong&gt;: &lt;strong&gt;Delphi "Tiburón +"&lt;/strong&gt;&lt;br /&gt;Native 64 bit support (VCL for Win64)&lt;br /&gt;Support for multi-core/multi-threaded development&lt;br /&gt;&lt;br /&gt;The direction of this roadmap seems to be OK. But that all depends strongly on what technologies you use.  Overall I think it is a good roadmap.&lt;br /&gt;&lt;br /&gt;All the details in the &lt;a href="http://dn.codegear.com/article/36620"&gt;roadmap&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2324552716181517814?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2324552716181517814/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2324552716181517814' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2324552716181517814'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2324552716181517814'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/06/delphi-c-builder-roadmap.html' title='Delphi / C++ Builder roadmap'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-8160566172280649202</id><published>2007-06-07T03:31:00.000-07:00</published><updated>2007-06-07T08:09:29.463-07:00</updated><title type='text'>Delphi 2007 update #1 is available</title><content type='html'>&lt;div align="left"&gt;Delphi 2007 Update #1 is available for registered Delphi 2007 users. It will come through the automatic update function, or in the traditional way as a download &lt;a href="http://downloads.codegear.com/default.aspx?productid=2012"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;/div&gt;&lt;p align="center"&gt;&lt;a href="http://bp2.blogger.com/_33FNQ5v3xjo/RmffNyAieyI/AAAAAAAAAAk/pBeXyzYRNMw/s1600-h/d2007update.JPG"&gt;&lt;img id="BLOGGER_PHOTO_ID_5073268933111479074" style="CURSOR: hand" alt="" src="http://bp2.blogger.com/_33FNQ5v3xjo/RmffNyAieyI/AAAAAAAAAAk/pBeXyzYRNMw/s320/d2007update.JPG" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p align="left"&gt;As you can see the update will uninstall you current Delphi 2007 installation, and then reinstall the one with the update. First question that raises is:&lt;/p&gt;&lt;p align="left"&gt;&lt;em&gt;Now I will have to reinstall all components again?&lt;br /&gt;&lt;br /&gt;&lt;/em&gt;The answer is &lt;strong&gt;No&lt;/strong&gt;, &lt;strong&gt;you don't have to reinstall all components&lt;/strong&gt;, as stated by Nick Hodges in this non-tech newsgroup &lt;a href="http://delphi.newswhat.com/geoxml/forumgetthread?groupname=borland.public.delphi.non-technical&amp;messageid=46670870$1@newsgroups.borland.com&amp;amp;displaymode=all"&gt;thread&lt;/a&gt;. His exact words: "&lt;em&gt;Nope -- all your settings will be retained&lt;/em&gt;. " .&lt;/p&gt;&lt;p align="left"&gt;Another tip, have your &lt;strong&gt;serialnumber available&lt;/strong&gt;, because it is required for the install. (In case you are at home and the serials are in your office ;-) )&lt;br /&gt;&lt;strong&gt;&lt;span style="color:#cc0000;"&gt;Updated:&lt;/span&gt; &lt;/strong&gt;Argg I did not read the Installation notes properly, as Dave Keighan says in the comments it is not necessary to have your serials. (Only for new installation I guess) I could install update 1 immediately after all. ;0&lt;/p&gt;&lt;p align="left"&gt;More info in the &lt;a href="http://dn.codegear.com/article/36573"&gt;Installation Notes for Delphi® 2007 for Win32® Update 1&lt;/a&gt; document.&lt;/p&gt;&lt;p align="left"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-8160566172280649202?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/8160566172280649202/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=8160566172280649202' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8160566172280649202'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8160566172280649202'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/06/delphi-2007-update-1-is-available.html' title='Delphi 2007 update #1 is available'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_33FNQ5v3xjo/RmffNyAieyI/AAAAAAAAAAk/pBeXyzYRNMw/s72-c/d2007update.JPG' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-8023120093946295382</id><published>2007-06-04T23:58:00.000-07:00</published><updated>2007-06-05T00:03:01.383-07:00</updated><title type='text'>Delphi 2007 update #1, coming soon</title><content type='html'>&lt;a href="http://gp.codegear.com/authors/edit/3467.aspx"&gt;Chris Pattinson&lt;/a&gt; posted the QC list for the Delphi 2007 Update #1.&lt;br /&gt;More then 300! fixes is this update.&lt;br /&gt;&lt;br /&gt;Read the complete list at this &lt;a href="http://dn.codegear.com/article/36589"&gt;CDN article&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The update should come automatically for registered users through the new installer function, "Check for updates"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-8023120093946295382?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/8023120093946295382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=8023120093946295382' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8023120093946295382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8023120093946295382'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/06/delphi-2007-update-coming-soon.html' title='Delphi 2007 update #1, coming soon'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2345956054090024214</id><published>2007-05-24T02:31:00.000-07:00</published><updated>2007-05-24T03:57:51.638-07:00</updated><title type='text'>So what are generics anyway?</title><content type='html'>A lot Delphi developers 'demand' generics to be added to the Delphi language, or should I say Object Pascal. Question that pops up is, What are generics anyway?&lt;br /&gt;&lt;br /&gt;Generics where introduced in .NET framework 2.0 in the C# language. Simply said they are collections(lists) which are type safe, i.o.w. you can detect type mismatches at compile time. With other structures (arrays etc) you must check the type in runtime and then type cast to the appropiate type. So generics will make your apps more robust in a way.&lt;br /&gt;&lt;br /&gt;Lately I have used the C# language a lot so I learned the power of generics.&lt;br /&gt;Let's take a look at it!&lt;br /&gt;&lt;br /&gt;A generic list is declared like this:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;System.Collections.Generic.&lt;span style="color:#339999;"&gt;List&lt;/span&gt;&lt;&lt;span style="color:#339999;"&gt;MyItem&lt;/span&gt;&gt;&lt;myitem&gt; MyItems;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Between the brackets you specify the name of the class which will be hold by the list. The compiler expects objects of this type. If you add a different type you will get a compiler error.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;An example:&lt;/strong&gt;&lt;br /&gt;Suppose you have a class MyItem which looks like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#3333ff;"&gt;public class&lt;/span&gt; &lt;span style="color:#339999;"&gt;MyItem&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt; &lt;span style="color:#3333ff;"&gt;string&lt;/span&gt; FName;&lt;br /&gt; &lt;span style="color:#3333ff;"&gt;public&lt;/span&gt; MyItem()&lt;br /&gt; {&lt;br /&gt; }&lt;br /&gt;&lt;br /&gt; &lt;span style="color:#3333ff;"&gt;public string&lt;/span&gt; Name&lt;br /&gt; {&lt;br /&gt;  &lt;span style="color:#3333ff;"&gt;get&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   return FName;&lt;br /&gt;  }&lt;br /&gt;  &lt;span style="color:#3333ff;"&gt;set&lt;/span&gt;&lt;br /&gt;  {&lt;br /&gt;   FName = value;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/span&gt;&lt;/pre&gt;You can now fill the collection(or should I say List?) FItems like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;MyItem Item = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;MyItem&lt;/span&gt;();&lt;br /&gt;Item.Name = "First";&lt;br /&gt;FItems.Add(Item);&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;/span&gt;MyItem Item = &lt;span style="color:#3333ff;"&gt;new&lt;/span&gt; &lt;span style="color:#339999;"&gt;MyItem&lt;/span&gt;();&lt;br /&gt;Item.Name = "Second";&lt;br /&gt;FItems.Add(Item);&lt;/span&gt;&lt;/pre&gt;We now have a list with two MyItem objects.&lt;br /&gt;&lt;br /&gt;You can search within the list using the &lt;a href="http://msdn2.microsoft.com/en-us/library/d9hy2xwa.aspx"&gt;Find&lt;/a&gt; and &lt;a href="http://msdn2.microsoft.com/en-us/library/1kkxfxdd.aspx"&gt;Findall&lt;/a&gt; methods.&lt;br /&gt;Suppose you want the second object you could find it like this:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color:#339999;"&gt;MyItem&lt;/span&gt; SearchedItem = MyItems.Find(&lt;span style="color:#3333ff;"&gt;delegate&lt;/span&gt;(&lt;span style="color:#339999;"&gt;MyItem&lt;/span&gt; SItem)&lt;br /&gt;{&lt;br /&gt; &lt;span style="color:#3333ff;"&gt;return&lt;/span&gt; SItem.Name == "Second";&lt;br /&gt;});&lt;/span&gt;&lt;/pre&gt;Through a &lt;a href="http://msdn.microsoft.com/msdnmag/issues/04/05/C20/"&gt;anonymous delegate &lt;/a&gt;it returns the object which matches the criteria. The Findall method returns a list with objects, for example all objects where a specific attribute matches.&lt;br /&gt;There is a lot more to explore, for more information look at the &lt;a href="http://msdn2.microsoft.com/en-us/library/512aeb7t(VS.80).aspx"&gt;MSDN website&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Generics and Delphi&lt;/strong&gt;&lt;br /&gt;Generics are planned for the Delphi Highlander release, later this year (&lt;a href="http://blogs.codegear.com/JimDouglas/archive/2007/05/21/34709.aspx"&gt;Roadmaps coming in june!&lt;/a&gt;). In september 2006 &lt;a href="http://blogs.codegear.com/NickHodges/"&gt;Nick Hodges&lt;/a&gt; showed at the &lt;em&gt;EKon 10 / BorCon Europe conference&lt;/em&gt; a &lt;strong&gt;preview&lt;/strong&gt; of the syntax. &lt;a href="http://www.drbob42.com/"&gt;Bob Swart&lt;/a&gt; has published a few notes about it &lt;a href="http://www.drbob42.net/examines/examin82.htm"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2345956054090024214?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2345956054090024214/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2345956054090024214' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2345956054090024214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2345956054090024214'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/05/so-what-are-generics-anyway.html' title='So what are generics anyway?'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5286502796946449904</id><published>2007-05-09T09:47:00.000-07:00</published><updated>2007-05-09T09:54:40.467-07:00</updated><title type='text'>Delphi for PHP Update 1 is out there</title><content type='html'>&lt;a href="http://dn.codegear.com/article/36406"&gt;Delphi for PHP update 1 is out&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;According to the CDN article fixes in this update are:&lt;br /&gt;&lt;br /&gt;-Fix to the IDE to ensure correct storage of UTF-8 strings in the .xml.php&lt;br /&gt;-Fix to VCL for PHP to parse .xml.php in UTF-8 mode&lt;br /&gt;-Save Project As... fixed (&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43580"&gt;QC 43580&lt;/a&gt;)&lt;br /&gt;-Updated sourcecode documentation for the VCL&lt;br /&gt;-Fixed problem with PHP 5.2.1. The Input Filter extension is out of beta and function for filter data was changed to a new name, so Input object now takes that into account (&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43607"&gt;QC 43607&lt;/a&gt;)&lt;br /&gt;Fixed problem with vcl-bin folder. The alias is set to be a root alias, making it easier to configure on deployment&lt;br /&gt;-Added global var to specify if properties are html_decoded when read from the .xml.php&lt;br /&gt;-Corrected support phone list .txt file&lt;br /&gt;&lt;br /&gt;Go get it &lt;a href="http://dn.codegear.com/article/36406"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5286502796946449904?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5286502796946449904/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5286502796946449904' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5286502796946449904'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5286502796946449904'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/05/delphi-for-php-update-1-is-out-there.html' title='Delphi for PHP Update 1 is out there'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-6663475506410008327</id><published>2007-05-08T10:25:00.000-07:00</published><updated>2007-05-08T10:44:53.123-07:00</updated><title type='text'>A hyperdrive factory, or how to get a cat out of a tree</title><content type='html'>&lt;a href="http://www.stevetrefethen.com"&gt;Steven Trefethen&lt;/a&gt; has &lt;a href="http://www.stevetrefethen.com/blog/IsMicrosoftExpandingTheAPIWar.aspx"&gt;very good blogpost &lt;/a&gt;about the endless stream of new technologies coming from Redmond.&lt;br /&gt;&lt;br /&gt;He says:&lt;br /&gt;&lt;em&gt;Will there ever be some sort of stabilization period where apps can mature and the technology settles into a known state where developers are comfortable about the foundation from which their working?&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;It definitly is very difficult to keep up with all the new stuff, before knowing the 'old' stuff entirely.  &lt;br /&gt;(.NET 1.1 stuff is suddenly 'deprecated' in .NET 2.0, oh well move on...)&lt;br /&gt;&lt;br /&gt;He asks:&lt;br /&gt;&lt;em&gt;What about you, how are you dealing with all of this? Or are you dealing with it?&lt;/em&gt;&lt;br /&gt;&lt;em&gt;&lt;/em&gt;&lt;br /&gt;Well not really. Although I keep an eye on the new technology and occasionaly play with it. But mostly, I think, it is &lt;em&gt;better to watch the cat out of the tree&lt;/em&gt;. (That is a dutch saying "&lt;a href="http://www.dbnl.org/tekst/stoe002nede01/stoe002nede01_1107.htm"&gt;De kat uit de boom kijken&lt;/a&gt;") It basically means you can do a lot to get the cat out of the tree, but if you wait a little longer the cat may decide to come out of tree itself.&lt;br /&gt;&lt;br /&gt;And you know what?&lt;br /&gt;The more things change, the more they stay the same!'&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-6663475506410008327?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/6663475506410008327/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=6663475506410008327' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6663475506410008327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/6663475506410008327'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/05/hyperdrive-factory-or-how-to-get-cat.html' title='A hyperdrive factory, or how to get a cat out of a tree'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2390888360854050781</id><published>2007-05-02T00:03:00.000-07:00</published><updated>2007-05-02T00:13:26.856-07:00</updated><title type='text'>It must be spring...</title><content type='html'>It must be spring, it looks like everyone (not an understatement here ;- ) ) is cleaning/pimping up their website.&lt;br /&gt;&lt;a href="http://www.codegear.com"&gt;CodeGear&lt;/a&gt; launched yesterday their new website, with their new logo. Content looks the same, but I think it looks great!&lt;br /&gt;&lt;br /&gt;Also &lt;a href="http://www.delphifeeds.com"&gt;Delphifeeds.com&lt;/a&gt; changed the look of their website, providing more functionality like a new &lt;a href="http://www.delphifeeds.com/delphiforum/"&gt;Delphi forum&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Great work guys!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2390888360854050781?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2390888360854050781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2390888360854050781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2390888360854050781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2390888360854050781'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/05/it-must-be-spring.html' title='It must be spring...'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-5517318178650711110</id><published>2007-04-25T01:16:00.000-07:00</published><updated>2007-04-25T02:13:35.631-07:00</updated><title type='text'>On with Delphi 2007, BDS2006 Win32 personality retires from the scene</title><content type='html'>Well I finally converted all my projects from BDS 2006 to Delphi 2007. As promissed by CodeGear there were no fatal issues involved because of the so called 'binary compatability', Besides the usual stuff like installing updated third-party libraries and adding search pathes etcetera everything worked fine.&lt;br /&gt;It is a good thing to make an installation protocol, because installations of the package (sometimes) need to be installed in the proper order. A protocol makes the process even smoother. (It is scary how fast you forget the installation order)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;One issue&lt;/strong&gt; I have had was a problem with the Help after installing my &lt;a href="http://www.devexpress.com"&gt;devexpress components&lt;/a&gt;. After installing these components there is an issue regarding the Filtering in the Help which then shows only the devexpress help, which is a pitty because the Delphi Help &lt;strong&gt;is so much improved&lt;/strong&gt;. Fortunately Devexpress has an temporary solution which you can find &lt;a href="https://www.devexpress.com/Support/Center/ViewIssue.aspx?issueid=AB12388"&gt;here&lt;/a&gt;. (Issue AB12388)&lt;br /&gt;&lt;br /&gt;All with all a smooth transition with no fatal ('Oh oh......') moments. ;-)&lt;br /&gt;&lt;br /&gt;Now I only use BDS2006 for my .NET related projects. It is a bit strange to have two seperated Delphi's again just as with Delphi 7 and 8, but BDS2007 is on its way so that should be temporary.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Update&lt;/strong&gt;: I noticed that BDS2006 is not shown in the taskbar. I am not sure that this has to do with the installation of Delphi 2007. Easy to solve anyway, minimize once and it is back.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-5517318178650711110?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/5517318178650711110/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=5517318178650711110' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5517318178650711110'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/5517318178650711110'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/04/on-with-delphi-2007-bds2006-win32.html' title='On with Delphi 2007, BDS2006 Win32 personality retires from the scene'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3818390020821543167</id><published>2007-04-13T06:59:00.000-07:00</published><updated>2007-04-23T07:50:27.616-07:00</updated><title type='text'>Back to Delphi 5</title><content type='html'>Well I am back to Delphi 5. I have had it.......;-) No, no, just kidding :-).&lt;br /&gt;I am &lt;a href="http://www.codegear.com/Products/Delphi/Delphi2007forWin32/tabid/236/Default.aspx"&gt;very happy with Delphi 2007&lt;/a&gt;, but for a new project, I should say, a new, exsisting project, I will have to use Delphi 5. This project has some librarys in Delphi for which the source code is not available so there is no choice for the short term.&lt;br /&gt;Delphi 5 was released around 2000 as I recall, so that was somewhat in the Windows 98 erra. I installed it on a rather old machine with XP (PIV 2,4 GHz, 512Mb)&lt;br /&gt;First thing I noticed was its speed. Wow this runs fast on a clean installed machine. With no libraries installed it runs like Formule 1 car!&lt;br /&gt;And yes &lt;a href="http://beensoft.blogspot.com/2007/02/delphi-still-more-to-explore.html"&gt;component templates &lt;/a&gt;already exists in Delphi 5 just as &lt;a href="http://beensoft.blogspot.com/2005/11/incremental-searchsupprise.html"&gt;incremental searching&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Well it is fun to step back in time, but I instantly miss the most of recent added features like Tool palette filtering (there are a lot tabs in the old style tool palette), code templates, refactoring etcetera. Will plan for upgrading the project soon :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3818390020821543167?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3818390020821543167/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3818390020821543167' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3818390020821543167'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3818390020821543167'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/04/back-to-delphi-5.html' title='Back to Delphi 5'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-8143818932799559068</id><published>2007-04-02T13:12:00.000-07:00</published><updated>2007-04-03T12:59:10.773-07:00</updated><title type='text'>D4PHP database connections with ADOdb</title><content type='html'>In my quest to setup a DSN less connection to an Access database I found &lt;a href="http://adodb.sourceforge.net/"&gt;ADOdb on sourceforge &lt;/a&gt;which apparently is used by &lt;a href="http://www.codegear.com/Products/Delphi/DelphiforPHP/tabid/237/Default.aspx"&gt;Delphi for PHP&lt;/a&gt;.&lt;br /&gt;Here you will find lots of information on getting connected to *any* database.&lt;br /&gt;See this &lt;a href="http://phplens.com/adodb/supported.databases.html"&gt;nice overview with all possible database connections&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;span style="font-size:85%;"&gt;Update 3-4-2007:&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;You can setup a DSN less connection to an Access database:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Database.DriverName = "access";&lt;/span&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Database.Host = "Driver={Microsoft Access Driver (*.mdb)};Dbq=c:\\phptest\phptest.mdb;"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;This should also work, using the jet OLDB provider, but somehow it did not work for me:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:85%;"&gt;Database.DriverName = "ado_access";&lt;br /&gt;Database.Host = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=c:\\phptest\phptest.mdb;USER ID=;PASSWORD=;";&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-8143818932799559068?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/8143818932799559068/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=8143818932799559068' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8143818932799559068'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/8143818932799559068'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/04/d4php-database-connections-with-adodb.html' title='D4PHP database connections with ADOdb'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-1221693682314823486</id><published>2007-03-31T10:01:00.000-07:00</published><updated>2007-04-01T12:48:12.939-07:00</updated><title type='text'>D4PHP a first impressions review</title><content type='html'>As a non PHP programmer, let's say a PHP rookie, I was excited that &lt;a href="http://www.codegear.com/Products/Delphi/DelphiforPHP/tabid/237/Default.aspx"&gt;Delphi for PHP &lt;/a&gt;hit the doorstep this week. I always wanted to use/learn PHP but for several reasons that had not happen, until now. Delphi for PHP seems to be a very good start point for learning PHP as a Delphi programmer.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Installation&lt;/strong&gt;&lt;br /&gt;Installation gave, as expected, no problems. The installation is a little different to Delphi 2007 for Win32 which we now might consider the sister or brother of Delphi for PHP.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Using Delphi for PHP&lt;/strong&gt;&lt;br /&gt;After starting Delphi for PHP you will feel right at home because the IDE is almost similar to Delphi 2007. It is all there, the &lt;strong&gt;Code Explorer&lt;/strong&gt;, the &lt;strong&gt;Object Inspector&lt;/strong&gt;, the &lt;strong&gt;Project Manager&lt;/strong&gt; and the &lt;strong&gt;Toolpalette&lt;/strong&gt;. Also the welcome page is present.&lt;br /&gt;The look and feel is the same, however the working of some elements are slightly different compared to Delphi 2007. (For example Code Insight and debugging 'feel' different)&lt;br /&gt;Delphi for PHP comes with a lot of samples. The sample projects are located on a, not that, obvious location namely "C:\Program Files\CodeGear\Delphi for PHP\1.0\VCL\Samples". After some searching I found this link via the "Sample and Demos" link on the Welcome page.&lt;br /&gt;&lt;br /&gt;The componentset, offered on the Tool Palette, is amazingly similar to the Delphi 2007 standard set. You will recognize lots of components, from Button and Edit, to Actionlist and PageControl. Also the Database control, like DataSource, Table and Query are available.&lt;br /&gt;This really gives Delphi programmers a headstart!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;My first PHP webapplication&lt;/strong&gt;&lt;br /&gt;OK, time to build my first PHP application.&lt;br /&gt;Armed with my &lt;a href="http://www.computer-books.us/php_2.php"&gt;free PHP 5.0 power programming book&lt;/a&gt; I started some basic coding. PHP syntax is similar to C syntax, but that is another story. Using the VCL and its controls is a known experience:&lt;br /&gt;Drop a Listbox, drop an Edit and a Button, double click the button and the ButtonClick event appears in the code just as in Delphi. The IDE is a little slow on drawing the controls on the design interface, but it is not disturbing me.&lt;br /&gt;Debugging the code is easy although it does not show parameter values in a hint when placing your mouse on it. I suppose this will be improved in later versions.&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Where is the HTML?&lt;/em&gt;&lt;br /&gt;Using ASP.NET HTML is immediately generated on the design page. In Delphi for PHP you will not find any HTML (at least I did not find it yet, is it there?).&lt;br /&gt;At first it is a bit strange and scary that there is no HTML (we are building a website, aren't we?) and gives you the feeling that D4PHP is mainly for pure application type websites instead of fancy HTML websites.&lt;br /&gt;But D4PHP offers a template model for HTML files which can be used to "inject" your PHP components and code into HTML.&lt;br /&gt;Big difference to ASP.NET, but I think I may like this. It seems to divide code and layout even more then ASP.NET. (First impression, have to investigate this much more)&lt;br /&gt;Nice side effect here is that the IDE can't mess around with the HTML which happens a lot when you use ASP.NET IDE's like Delphi or Visual Studio.&lt;br /&gt;&lt;br /&gt;There is a nice template demo in the sample projects which shows this technology.&lt;br /&gt;A HTML page with D4PHP injected PHP looks like this:&lt;br /&gt;&lt;a href="http://bp0.blogger.com/_33FNQ5v3xjo/Rg6csykx1gI/AAAAAAAAAAM/COg0-z66EUA/s1600-h/d4phptemplates.jpg"&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://bp2.blogger.com/_33FNQ5v3xjo/Rg6c7Skx1hI/AAAAAAAAAAU/vrmFTC_j98E/s1600-h/d4phptemplates.jpg"&gt;&lt;img id="BLOGGER_PHOTO_ID_5048144774741218834" style="FLOAT: left; MARGIN: 0px 10px 10px 0px; CURSOR: hand" alt="" src="http://bp2.blogger.com/_33FNQ5v3xjo/Rg6c7Skx1hI/AAAAAAAAAAU/vrmFTC_j98E/s320/d4phptemplates.jpg" border="0" /&gt;&lt;/a&gt;{$lbMessage} is a label on your PHP page, just as {$RichEdit1} and {$btnSendContens}. On your page you code the button click, in this case the text of the RichEdit control is placed into the label lbMessage.&lt;br /&gt;&lt;br /&gt;When the application runs the PHP controls are injected into the template and code runs just normal.&lt;br /&gt;&lt;br /&gt;Looks pretty flexible to me.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Using databases&lt;/strong&gt;&lt;br /&gt;D4PHP offers a, almost endless, list of possible database connections. Two of them, MySQL and Interbase, are supported by the Data Explorer, and can be used to drag-and-drop database connections, tables and fields.&lt;br /&gt;I tried to setup a connection to an Access database which I happen to use for my website, but I have not yet been able to get it to work.&lt;br /&gt;HELP (F1)?&lt;br /&gt;Press F1 and help is executed immediately. The Help however is a bit dissapointing. It is context sensitive and finds the right property, but gives information like this:&lt;br /&gt;&lt;br /&gt;&lt;em&gt;This is getConnected, a member of class Database&lt;/em&gt;&lt;br /&gt;&lt;br /&gt;Well we knew that, didn't we? We would like to have information on how to use it!&lt;br /&gt;A good alternative is the&lt;a href="http://vcl4php.sourceforge.net/vcldoc/li_VCL.html"&gt; sourceforge help &lt;/a&gt;which seems to give more information.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;br /&gt;Delphi for PHP is a real member of the Delphi family. The IDE and VCL will be very familiar to Delphi programmers. Coding in D4PHP is like coding in Delphi, quick, clean and easy.&lt;br /&gt;Its alternate approach (I compare this to ASP.NET) is refreshing and the more I think about it the more I like it! Using Templates with PHP injection seems to be a very flexible and clean solution.&lt;br /&gt;The help and documentation is &lt;strong&gt;not good&lt;/strong&gt; and needs huge improvement.&lt;br /&gt;Considering that it is a 1.0 product I think it is a great piece of work. It inspires me to dive into PHP 'the Delphi way'.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;&lt;/strong&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-1221693682314823486?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/1221693682314823486/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=1221693682314823486' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1221693682314823486'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1221693682314823486'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/03/d4php-first-impressions-review.html' title='D4PHP a first impressions review'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_33FNQ5v3xjo/Rg6c7Skx1hI/AAAAAAAAAAU/vrmFTC_j98E/s72-c/d4phptemplates.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-9187352919921366683</id><published>2007-03-28T11:47:00.000-07:00</published><updated>2007-03-28T12:10:46.511-07:00</updated><title type='text'>Wow! This is VCL</title><content type='html'>CodeGear released this week &lt;a href="http://www.codegear.com/Products/Delphi/DelphiforPHP/tabid/237/Default.aspx"&gt;Delphi 4 PHP&lt;/a&gt;. Read the &lt;a href="http://www.codegear.com/LinkClick.aspx?link=251&amp;tabid=225"&gt;press release&lt;/a&gt;.&lt;br /&gt;Today I found out that the documentation of the Open Source class library, which Delphi uses, &lt;a href="http://sourceforge.net/projects/vcl4php"&gt;VCL for PHP&lt;/a&gt; is available on SourceForge. You can find it &lt;a href="http://vcl4php.sourceforge.net/vcldoc/li_VCL.html"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A quick scan shows that &lt;strong&gt;this is VCL&lt;/strong&gt; as we know it!&lt;br /&gt;Object, Persistent, Control they are all there!&lt;br /&gt;&lt;br /&gt;Can not be to difficult to learn PHP this way, can it?&lt;br /&gt;There is also a one day (One day?)  trial available for download &lt;a href="http://www.codegear.com/Downloads/TrialandFreeVersions/Delphi/DelphiforPHP/tabid/250/Default.aspx"&gt;here&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-9187352919921366683?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/9187352919921366683/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=9187352919921366683' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9187352919921366683'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/9187352919921366683'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/03/wow-this-is-vcl.html' title='Wow! This is VCL'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-3903612805191224415</id><published>2007-03-23T11:00:00.000-07:00</published><updated>2007-03-23T11:27:29.611-07:00</updated><title type='text'>Trouble viewing blogs.codegear.com on Vista?</title><content type='html'>Recently I discovered that I could &lt;strong&gt;not&lt;/strong&gt; view the &lt;a href="http://blogs.codegear.com"&gt;blogs.codegear.com &lt;/a&gt;website on my new (very fresh) Vista computer. It was not IE related because also in FireFox the website was not shown. After setting virusscanner, firewalls, parental control(?) on and off it still did not work. (Bummer :-$ )&lt;br /&gt;&lt;br /&gt;Finally I &lt;a href="http://delphi.newswhat.com/geoxml/forumgetthread?groupname=borland.public.delphi.non-technical&amp;messageid=4602e1e0@newsgroups.borland.com&amp;amp;displaymode=all"&gt;asked in the delphi.non-tech newsgroup&lt;/a&gt;, and guess what? As always it was fortunately not just me, but a common encountered problem. :-)&lt;br /&gt;Thanks to Roddy Pratt I finally found the solution, which also comes in play by registring Delphi 7 and Delphi 2006. You can find &lt;a href="http://support.borland.com/entry.jspa?externalID=6294&amp;categoryID=90"&gt;the solution on the Borland support site&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;I don't know what the exact problem is but it looks like a TCP/IP problem between Vista and the CodeGear server. It is very strange that some Vista installs do not have this problem. More information on this issue through &lt;a href="http://www.google.nl/search?hl=nl&amp;amp;q=netsh+interface+tcp+set+global+autotuninglevel%3Ddisabled&amp;amp;meta="&gt;Google&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;By the way, just found out about this new dutch Delphi for PHP forum &lt;a href="http://www.delphiforphpforum.nl/"&gt;http://www.delphiforphpforum.nl/&lt;/a&gt; (in dutch)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-3903612805191224415?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/3903612805191224415/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=3903612805191224415' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3903612805191224415'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/3903612805191224415'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/03/trouble-viewing-blogscodegearcom.html' title='Trouble viewing blogs.codegear.com on Vista?'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-1199274630922222621</id><published>2007-03-23T08:02:00.000-07:00</published><updated>2007-03-23T08:06:23.549-07:00</updated><title type='text'>CodeRage session replays available</title><content type='html'>Did you miss a few sessions on CodeRage? I know I did.&lt;br /&gt;Well that is no problem: The CodeRage session replays are now available on the &lt;a href="http://dn.codegear.com/article/34187"&gt;CodeGear Developer Network&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-1199274630922222621?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/1199274630922222621/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=1199274630922222621' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1199274630922222621'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/1199274630922222621'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/03/coderage-session-replays-available.html' title='CodeRage session replays available'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-433330858314306445</id><published>2007-03-20T11:23:00.000-07:00</published><updated>2007-03-20T14:56:32.391-07:00</updated><title type='text'>My 5 favorites in Delphi 2007 for Win32</title><content type='html'>OK, so I have been blog-tagged by &lt;a href="http://blogs.codegear.com/pawelglowacki/archive/2007/03/20/33303.aspx"&gt;Pawel Glowacki &lt;/a&gt;to tell about my 5 favorites in Delphi for Win32.&lt;br /&gt;&lt;br /&gt;To make my life easy I could list all the things that already have been listed by several bloggers, and beta bloggers. Here is a quick list of favorites I could come up with:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.andrearaimondi.net/index.php?m=02&amp;y=07&amp;amp;entry=entry070227-104837"&gt;Delphi's speed &lt;/a&gt;&lt;br /&gt;2. &lt;a href="http://www.shareware-beach.com/2007/02/delphi-2007-for-win32/"&gt;Delphi's stability&lt;/a&gt;&lt;br /&gt;3. &lt;a href="http://dcleggsblog.blogspot.com/2007/03/hang-on-help-is-on-its-way.html"&gt;The improved Help system &lt;/a&gt;&lt;br /&gt;4. &lt;a href="http://blogs.codegear.com/SteveShaughnessy/"&gt;The new DBX4 architecture &lt;/a&gt;&lt;br /&gt;5. &lt;a href="http://jedqc.blogspot.com/2007/03/spacely-build-feedback.html"&gt;The new build system&lt;/a&gt;&lt;br /&gt;6. &lt;a href="http://flickdotnet.de/blogs/sample_weblog/archive/2007/02/26/delphi-2007-with-vista-support-here-i-come.aspx"&gt;The Vista readiness &lt;/a&gt;&lt;br /&gt;7. &lt;a href="http://blogs.codegear.com/abauer/"&gt;The improved memory manager&lt;/a&gt;&lt;br /&gt;8. &lt;a href="http://jedqc.blogspot.com/2007/03/spacely-tool-palette-enhancement.html"&gt;The improved tool palette filtering&lt;/a&gt;&lt;br /&gt;9. &lt;a href="http://17slon.com/blogs/gabr/2007/03/delphi-2007-new-welcome-page.html"&gt;The enhanced welcome page&lt;/a&gt;&lt;br /&gt;10. &lt;a href="http://hallvards.blogspot.com/2007/03/review-delphi-2007-for-win32-beta-part.html"&gt;The new installer&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;But that would be too easy, wouldn't it? Yes it would, so I go for an alternate approach:&lt;br /&gt;&lt;br /&gt;My 5 favorites in Delphi 2007 for Win32:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;1. Confidence&lt;/strong&gt;&lt;br /&gt;Delphi 2007 is one of the many signs that things has changed (and are probably still changing) at Borland/&lt;a href="http://www.codegear.com"&gt;CodeGear&lt;/a&gt;. &lt;a href="http://blogs.codegear.com"&gt;These guys &lt;/a&gt;are really listening and working hard to give us the tools we need. This only makes an upgrade worthwhile. I agree 100% with this thread &lt;a href="http://delphi.newswhat.com/geoxml/forumgetthread?groupname=borland.public.delphi.non-technical&amp;messageid=45fb8fd0$1@newsgroups.borland.com&amp;amp;displaymode=all"&gt;A vote of confidence&lt;/a&gt; (started by Estaban Pacheco)&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2. Quality&lt;/strong&gt;&lt;br /&gt;And I not only mean the quality of Delphi itself, but it allows me to supply my customers with first class robust, fast and high quality applications. OK, Delphi has had some 'dark' versions, they were gone with BDS2006, but will be vanished with Delphi 2007!&lt;br /&gt;&lt;strong&gt;&lt;br /&gt;3. The 'built in' ability to beat my competition&lt;/strong&gt;&lt;br /&gt;Delphi always gave me a great benefit compared to my competition. Never ever have I made an application as fast, and as good (see point 1) as in Delphi. In Delphi 2007 this has (again) increased!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4. Fun&lt;/strong&gt;&lt;br /&gt;Programming in Delphi is fun, sometimes it looks like no work at all. That's been for 15 years now and it still continues with Delphi 2007!&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;5. The bright future&lt;/strong&gt;&lt;br /&gt;VCL, VCL.NET (the bridge to .NET), Delphi for .NET 2.0 (planned for mid 2007), Delphi for PHP. Should I continue?&lt;br /&gt;&lt;br /&gt;Well that's it! Now I tag the following persons:&lt;br /&gt;&lt;br /&gt;1. &lt;a href="http://www.drbob42.com/blog/"&gt;Bob Swart &lt;/a&gt;(Dr. Bob)&lt;br /&gt;2. &lt;a href="http://turbofornoobs.blogspot.com/"&gt;Robin&lt;/a&gt; (Turbo for Noobs)&lt;br /&gt;3. &lt;a href="http://interclient.blogspot.com/"&gt;Nick Hageman &lt;/a&gt;(Where are the posts?)&lt;br /&gt;4. &lt;a href="http://blog.marco.breveglieri.name/"&gt;Marco Breveglieri&lt;/a&gt;&lt;br /&gt;5. &lt;a href="http://beensoft.blogspot.com/2006/09/go-turbo.html"&gt;Ace Breakpoint &lt;/a&gt;(Hope you still use Delphi Ace!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-433330858314306445?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/433330858314306445/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=433330858314306445' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/433330858314306445'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/433330858314306445'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/03/my-5-favorites-in-delphi-2007-for-win32.html' title='My 5 favorites in Delphi 2007 for Win32'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-2203007877341451557</id><published>2007-03-18T05:36:00.000-07:00</published><updated>2007-03-18T06:03:49.479-07:00</updated><title type='text'>Delphi 2007 Win32 is released!</title><content type='html'>Last friday, 16 march 2007, &lt;a href="http://www.codegear.com/Products/Delphi/Delphi2007forWin32/tabid/236/Default.aspx" target="_blank"&gt;Delphi 2007 for Win 32 &lt;/a&gt;was &lt;a href="http://www.codegear.com/AboutUs/News/DelphiForWin32NowAvailable/tabid/249/Default.aspx" target="_blank"&gt;released&lt;/a&gt;. The lucky onces who could get ESD(Electronic Software Deliverance) are now able to download and play with it. I will have to wait a little longer until it drops on my doorstep. :(&lt;br /&gt;&lt;br /&gt;Although I found BDS2006 &lt;strong&gt;very acceptable&lt;/strong&gt; in terms of &lt;strong&gt;speed&lt;/strong&gt; and &lt;strong&gt;reliability&lt;/strong&gt; it seems that Delphi 2007 is &lt;em&gt;'the succesor to the max'&lt;/em&gt;. Very positive reports can be read around the Internet. You can find a very nice overview of all the Delphi 2007 blogentries on &lt;a href="http://17slon.com/blogs/gabr/2007/03/delphi-2007-is-here.html" target="_blank"&gt;here&lt;/a&gt;. (Thanks to The Delphi Geek: Primoz Gabrijelcic)&lt;br /&gt;&lt;br /&gt;Well and &lt;a href="http://www.youtube.com/watch?v=x_iPvUWyzhE" target="_blank"&gt;now we wait&lt;/a&gt; (a little longer).&lt;br /&gt;&lt;br /&gt;By the way Brian Layman announced that the &lt;a href="http://www.thecodecave.com/article345" target="_blank"&gt;Delphi for PHP betabloggers are on their way&lt;/a&gt;!&lt;br /&gt;Love to see more of that &lt;a href="http://www.codegear.com/Products/Delphi/DelphiforPHP/tabid/237/Default.aspx" target="_blank"&gt;product&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-2203007877341451557?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/2203007877341451557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=2203007877341451557' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2203007877341451557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/2203007877341451557'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/03/delphi-2007-win32-is-released.html' title='Delphi 2007 Win32 is released!'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-117326745347015519</id><published>2007-03-07T03:37:00.000-08:00</published><updated>2007-03-07T03:41:13.456-08:00</updated><title type='text'>Will there be another Delphi? VCL for Ruby?</title><content type='html'>&lt;p&gt;Will there be&amp;nbsp;a&amp;nbsp;VCL for Ruby? A question &lt;a href="http://mikepence.wordpress.com/" target="_blank"&gt;Mike Pence&lt;/a&gt; asked himself a few days ago in this &lt;a href="http://mikepence.wordpress.com/2007/03/06/will-there-be-a-vcl-for-ruby/" target="_blank"&gt;blogpost&lt;/a&gt;.&lt;br&gt;&lt;br&gt;He says:&lt;br&gt;&lt;em&gt;There has been nothing like Delphi since Delphi. For an all-too-brief, shining moment in the late 90’s, nothing could touch it. Its visual design tools made it simple to build attractive user interfaces.&lt;br&gt;............&lt;br&gt;&lt;/em&gt;&lt;em&gt;What made Delphi even more remarkable was its component model in the form of the Visual Component Library.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;The answer to his question is given by &lt;a href="http://blogs.codegear.com/MichaelSwindell/" target="_blank"&gt;Michael Swindell&lt;/a&gt; in&amp;nbsp;his feedback of the mentioned post. Now I don't know much about Ruby but&amp;nbsp;when I read &lt;a href="http://mikepence.wordpress.com/2007/03/07/borland-we-do-see-ruby-and-ruby-on-rails-in-our-future/" target="_blank"&gt;Mike's answer in this post&lt;/a&gt; I can feel the excitement! &lt;br&gt;&lt;br&gt;He says:&lt;br&gt;&lt;em&gt;So, wow. How awesome is that? Borland makes tools that fill the entire application lifecycle — not just IDE’s and frameworks –but it is their top-shelf development tools that have made them famous, and they are coming to play.&lt;/em&gt;&lt;/p&gt; &lt;p&gt;So Delphi is not a language anymore? &lt;strong&gt;No,&lt;/strong&gt; apparently it is not, get used to it. &lt;strong&gt;Delphi is a way of living&lt;/strong&gt; (Oh well at least developing ;-) ).&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-117326745347015519?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/117326745347015519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=117326745347015519' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/117326745347015519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/117326745347015519'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/03/will-there-be-another-delphi-delphi.html' title='Will there be another Delphi? VCL for Ruby?'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-117293959608157945</id><published>2007-03-03T08:33:00.000-08:00</published><updated>2007-03-03T08:33:16.810-08:00</updated><title type='text'>CodeRage sessions on www.thecoderage.com</title><content type='html'>&lt;p&gt;CodeGear has a new website for it's virtual conference CodeRage (&lt;a href="http://www.thecoderage.com"&gt;www.thecoderage.com&lt;/a&gt;) which will take place from march 12 - 16.&lt;br&gt;&lt;/p&gt; &lt;p&gt;Here are the most interesting links:&lt;br&gt;&lt;a href="http://conferences.codegear.com/coderage07/agenda" target="_blank"&gt;Agenda&lt;/a&gt;&lt;br&gt;&lt;a href="http://conferences.codegear.com/coderage07/sessions" target="_blank"&gt;All the sessions&lt;/a&gt;&lt;br&gt;&lt;a href="http://conferences.codegear.com/coderage07/hall" target="_blank"&gt;Virtual Exhibit Hall&lt;/a&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-117293959608157945?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/117293959608157945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=117293959608157945' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/117293959608157945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/117293959608157945'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/03/coderage-sessions-on-wwwthecoderagecom.html' title='CodeRage sessions on www.thecoderage.com'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-117260702588098660</id><published>2007-02-27T12:10:00.000-08:00</published><updated>2007-02-27T12:10:25.980-08:00</updated><title type='text'>Delphi Technical Seminar in the Netherlands</title><content type='html'>&lt;p&gt;Just got back from&amp;nbsp;the CodeGear Technical Seminar 'Delphi Technology Previews and Roadmap update' in Amstelveen (near Amsterdam).&lt;br&gt;At least 180 developers joined this seminar. This seemed to be more then prior years. It was pretty crowded.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Delphi 2007 for Win32: DBX4&lt;/strong&gt;&lt;br&gt;After a short introduction by &lt;a href="http://blogs.codegear.com/davidi/" target="_blank"&gt;David I&lt;/a&gt;, &lt;a href="http://blogs.codegear.com/PawelGlowacki/" target="_blank"&gt;Pawel Glowacki&lt;/a&gt; gave an introduction in DBX4, the new cross platform database&amp;nbsp;technology formerly known as dbExpress 3 (win32) and Borland DataProvider (.NET). DBX4 bundles this two technologies into one. For more information on DBX4 you can check &lt;a href="http://blogs.codegear.com/SteveShaughnessy/" target="_blank"&gt;Steve Shaughnessy weblog&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;strong&gt;Delphi 2007 for Win32: MSBuild&lt;br&gt;&lt;/strong&gt;&lt;a href="http://blogs.codegear.com/JasonVokes/" target="_blank"&gt;Jason Vokes&lt;/a&gt; showed the new built system MSBuild that is bundled with Delphi 2007.&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Delphi for PHP&lt;/strong&gt;&lt;br&gt;The most interesting part of the seminar, for me, was to&amp;nbsp; see &lt;a href="http://www.codegear.com/Products/Delphi/DelphiforPHP/tabid/237/Default.aspx" target="_blank"&gt;Delphi for PHP&lt;/a&gt; in action. Again CodeGear has a winner here!&lt;br&gt;Pawel built an PHP application which uses a&lt;strong&gt; Connection&lt;/strong&gt; component, a &lt;strong&gt;Query&lt;/strong&gt; component and a &lt;strong&gt;DataSource&lt;/strong&gt; component that were hooked up, just like Delphi to a grid. No code to be written yet. And all pretty understandable for&amp;nbsp;a Delphi developer with no PHP experience.&amp;nbsp;&lt;br&gt;The only difference between Delphi&amp;nbsp;&lt;em&gt;Original&lt;/em&gt; and Delphi for PHP&amp;nbsp;seems to be&amp;nbsp;the language. Everything else has the&lt;strong&gt; look and feel&lt;/strong&gt; similar to Delphi.&lt;br&gt;I found &lt;a href="http://dn.codegear.com/article/34090"&gt;this video&lt;/a&gt; showing the demo&amp;nbsp;including the use of a data dictionary.&lt;br&gt;&lt;/p&gt; &lt;p&gt;Although stated in the seminar title there was &lt;strong&gt;no roadmap&lt;/strong&gt; shown. Of course there is on going work in many areas of Delphi but no exact dates or&amp;nbsp;shedules were mentioned.&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-117260702588098660?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/117260702588098660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=117260702588098660' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/117260702588098660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/117260702588098660'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/02/delphi-technical-seminar-in.html' title='Delphi Technical Seminar in the Netherlands'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-8730195.post-117249184261727611</id><published>2007-02-26T04:10:00.000-08:00</published><updated>2007-02-26T04:11:28.943-08:00</updated><title type='text'>Free PHP 5.0 book</title><content type='html'>&lt;p&gt;OK, so now that we have &lt;a href="http://www.codegear.com/Products/Delphi/DelphiforPHP/tabid/237/Default.aspx" target="_blank"&gt;Delphi for PHP&lt;/a&gt; almost on our doorstep it is time for those who don't do PHP yet, but who want to do PHP now, to gather PHP information.&lt;/p&gt; &lt;p&gt;I always wanted to do PHP, but never had, or took, the time to dig in it. Now that CodeGear offers PHP &lt;strong&gt;'the Delphi way'&lt;/strong&gt; the time might have come to go for it!&lt;/p&gt; &lt;p&gt;During 'googling' for interesting PHP sites I found this free PHP book:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;PHP 5.0 Power programming&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;This book must cover all PHP related stuff because it has more then 700 pages! (For sure didn't read it all yet)&lt;br&gt;You can download it &lt;a href="http://www.computer-books.us/php_2.php" target="_blank"&gt;here&lt;/a&gt;. (Like I said its a&amp;nbsp;free PDF download!)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8730195-117249184261727611?l=beensoft.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://beensoft.blogspot.com/feeds/117249184261727611/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=8730195&amp;postID=117249184261727611' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/117249184261727611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/8730195/posts/default/117249184261727611'/><link rel='alternate' type='text/html' href='http://beensoft.blogspot.com/2007/02/free-php-50-book.html' title='Free PHP 5.0 book'/><author><name>Roland Beenhakker</name><uri>http://www.blogger.com/profile/05387682563668003098</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='27' height='32' src='http://www.beensoft.nl/images/algemeen/rb.jpg'/></author><thr:total>5</thr:total></entry></feed>
