<?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-11772075</id><updated>2011-12-31T23:57:22.818Z</updated><title type='text'>DelphiDabbler's Programming Blog</title><subtitle type='html'>About my wanderings through the Delphi language as an intermdiate level amateur programmer.
Includes stuff about the latest developments on DelphiDabbler.com</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>32</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11772075.post-4501914953987340182</id><published>2011-12-31T23:57:00.000Z</published><updated>2011-12-31T23:57:22.826Z</updated><title type='text'>CodeSnip v4 Preview Now Available</title><summary type='text'>By the skin of my teeth I've kept the promise I made in my earlier post to release an alpha, or preview, version of CodeSnip v4 by the end of 2011 - with 20 mins to spare! Phew.The main new feature of the program is that snippets etc. can now be opened in multiple tabs, allowing more than one to be viewed at the same time.There are several other UI changes and a lot of behind that scenes </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/4501914953987340182/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=4501914953987340182&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/4501914953987340182'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/4501914953987340182'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2011/12/codesnip-v4-preview-now-available.html' title='CodeSnip v4 Preview Now Available'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-7315581498351967323</id><published>2011-10-24T11:44:00.000+01:00</published><updated>2011-10-24T17:04:54.936+01:00</updated><title type='text'>CodeSnip v4: progress at last</title><summary type='text'>Back in December 2010 I announced I'd started work on CodeSnip v4 and expected to release a new beta in a "few months". Now, nearly eleven months later I've made some noticable progress and am considering an alpha release! I'm hoping to get this out by the year end.One of first new features I've decided on is to add multiple tab browsing of the database. This means that more than one snippet can </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/7315581498351967323/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=7315581498351967323&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7315581498351967323'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7315581498351967323'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2011/10/codesnip-v4-progress-at-last.html' title='CodeSnip v4: progress at last'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-7400788444988321867</id><published>2011-09-08T14:53:00.001+01:00</published><updated>2011-09-08T14:53:11.736+01:00</updated><title type='text'>Help with Delphi XE2 program paths please</title><summary type='text'>I've just updated CodeSnip to v3.9.0 to allow code snippets to be test compiled by Delphi XE2 (32 bit only).

But I've had to make some educated guesses in adding that support because I don't yet have XE2. I'm hoping you can help by either confirming or correcting the following assumptions:

 The registry key \Software\Embarcadero\BDS\9.0 exists in the HKEY_LOCAL_MACHINE hive.
The registry key </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/7400788444988321867/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=7400788444988321867&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7400788444988321867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7400788444988321867'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2011/09/help-with-delphi-xe2-program-paths.html' title='Help with Delphi XE2 program paths please'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-2967603636270254434</id><published>2011-05-20T00:04:00.000+01:00</published><updated>2011-05-20T00:04:32.630+01:00</updated><title type='text'>Curious bug in CodeSnip???</title><summary type='text'>A user of my CodeSnip program has reported a strange bug where, after using the Snippets Editor to add a new snippet, the editor dialog box refuses to close, hanging the program.

Apparently this happens only sometimes, and affects v3.8.9 and some earlier versions.

I can't reproduce the problem and was wandering if anyone else has experienced this bug. If so it would be very helpful if you could</summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/2967603636270254434/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=2967603636270254434&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2967603636270254434'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2967603636270254434'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2011/05/curious-bug-in-codesnip.html' title='Curious bug in CodeSnip???'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-7399349961384991383</id><published>2011-05-05T13:26:00.001+01:00</published><updated>2011-05-05T15:00:31.117+01:00</updated><title type='text'>Delphi, Javascript and Floating Point Parameters</title><summary type='text'>I recently came across an interesting little problem when using Delphi to call JavaScript in an HTML document loaded into a TWebBrowser control.

The code used the execScript method of the IHTMLWindow interface, which requires that a string containing the JavaScript function call is passed as one of its parameters.

So you have to assemble a string containing the function call and its parameters,</summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/7399349961384991383/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=7399349961384991383&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7399349961384991383'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7399349961384991383'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2011/05/delphi-javascript-and-floats.html' title='Delphi, Javascript and Floating Point Parameters'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-7411407341527782268</id><published>2011-04-22T13:48:00.002+01:00</published><updated>2011-04-22T13:54:19.267+01:00</updated><title type='text'>New host for DelphiDabbler (part 2)</title><summary type='text'>The site on the old server has now been taken down, so if you are getting any "can't find server" errors when accessing www.delphidabbler.com its time to flush your DNS cache.

The migration seems to have gone well and I've cleared up what glitches I have found.

If you've found an error you can burst my bubble by emailing me about the problem on
  teet&amp;#104ing
[at]
delphidabbler
[d&amp;#111t]
com

</summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/7411407341527782268/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=7411407341527782268&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7411407341527782268'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7411407341527782268'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2011/04/new-host-for-delphidabbler-part-2.html' title='New host for DelphiDabbler (part 2)'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-5454627734499390413</id><published>2011-04-12T08:54:00.001+01:00</published><updated>2011-04-12T08:56:51.131+01:00</updated><title type='text'>New New Wiki Wiki</title><summary type='text'>Forgot to mention before, but there's now a wiki at wiki.delphidabbler.com.

It's currently being used for a series of FAQs about some of my Delphi Library components and units. The hope is that others may add to it. You can also leave new questions there.

At present there are FAQs for:


About Box Component
Console Application Runner Classes
Drop Files Components
Message Dialog Components


I </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/5454627734499390413/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=5454627734499390413&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5454627734499390413'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5454627734499390413'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2011/04/new-new-wiki-wiki.html' title='New New Wiki Wiki'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-7164630981863608788</id><published>2011-04-11T22:26:00.002+01:00</published><updated>2011-04-22T13:53:49.704+01:00</updated><title type='text'>New host for DelphiDabbler</title><summary type='text'>As of today DelphiDabbler.com has moved to a new web host. The nameservers have been updated and the relocated site should start to appear over the next couple of days.

Why the move?. Down to money really. This is a non commercial site with falling advertising revenue (albeit with increasing traffic!) and my old web host hiked the price while admittedly providing a host of new features. </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/7164630981863608788/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=7164630981863608788&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7164630981863608788'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/7164630981863608788'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2011/04/new-host-for-delphidabbler.html' title='New host for DelphiDabbler'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-5630096574155227217</id><published>2010-12-16T17:28:00.004Z</published><updated>2010-12-16T17:33:32.382Z</updated><title type='text'>RIP DelphiDabbler Mailing Lists</title><summary type='text'>If you have been a subscriber to my mailing lists you may have noticed that there have been no mailings since about June 2010. That's because I've decided to stop producing newsletters.

The reason? I'm afraid I just don't have the time. There are more efficient and much more timely ways of getting site news out there via news feeds and through my Twitter account.

Here are the RSS feed links:


</summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/5630096574155227217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=5630096574155227217&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5630096574155227217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5630096574155227217'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/12/rip-delphidabbler-mailing-lists.html' title='RIP DelphiDabbler Mailing Lists'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-5211770569731796626</id><published>2010-12-06T11:54:00.000Z</published><updated>2010-12-06T11:54:59.184Z</updated><title type='text'>CodeSnip v4</title><summary type='text'>I've started development of version 4 of CodeSnip, the Delphi source code snippets editor and viewer.

I am inviting suggestions for new features. If you have any ideas please use the project's Feature Tracker on SourceForge. If you prefer to discuss your ideas then please leave a comment to this posting.

There's a new branch of CodeSnip's Subversion repository that contains the v4 development </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/5211770569731796626/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=5211770569731796626&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5211770569731796626'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5211770569731796626'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/12/codesnip-v4.html' title='CodeSnip v4'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-4840160439343229508</id><published>2010-11-05T00:44:00.000Z</published><updated>2010-11-05T00:44:27.046Z</updated><title type='text'>Concatenating Dynamic Arrays</title><summary type='text'>Another day another unit test and another extension to my little TArrayEx class. This time I found myself having to concatenate some dynamic arrays. After solving the problem for the particular array type I decided to produce a generic solution. Here's the method I came up with:


&lt;!-- Highlighted Pascal code generated by DelphiDabbler PasHi --&gt;
type
  TArrayEx = class(TObject)
  public
    ...
</summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/4840160439343229508/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=4840160439343229508&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/4840160439343229508'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/4840160439343229508'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/11/concatenating-dynamic-arrays.html' title='Concatenating Dynamic Arrays'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-9188020253906067133</id><published>2010-09-11T13:49:00.000+01:00</published><updated>2010-09-11T13:49:25.911+01:00</updated><title type='text'>DelphiDabbler Code Library help</title><summary type='text'>Some users of the components and units from the DelphiDabbler Code Library have contacted me to ask if the library's help is available in HTML help format because WinHelp format I used for the library won't work by default on Windows Vista and later.

The answer is no - and I don't have time to do the conversions.

However, all is not lost because there is now a Wiki for each of the Code Library </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/9188020253906067133/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=9188020253906067133&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/9188020253906067133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/9188020253906067133'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/09/delphidabbler-code-library-help.html' title='DelphiDabbler Code Library help'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-1674818096187782557</id><published>2010-09-11T13:15:00.000+01:00</published><updated>2010-09-11T13:15:33.523+01:00</updated><title type='text'>Initialising dynamic arrays - take 2</title><summary type='text'>In my earlier post on this subject I presented some methods to use to initialise and clone dynamic arrays. Some comments to that post suggested a simpler approach using compiler features I didn't know existed. In this post I've simply collected the information from those comments together in one place.

To initialise an array from literal values you can use the special array constructor provided </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/1674818096187782557/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=1674818096187782557&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/1674818096187782557'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/1674818096187782557'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/09/initialising-dynamic-arrays-take-2.html' title='Initialising dynamic arrays - take 2'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-2813547619317027422</id><published>2010-06-24T22:27:00.000+01:00</published><updated>2010-06-24T22:27:32.869+01:00</updated><title type='text'>Deleting elements from a dynamic array</title><summary type='text'>In my blog "Initialising Dynamic Arrays" I mentioned I have been writing some unit tests that needed numerous repetative array initialisation operations. Well, one of the other common operations I found myself writing was the deletion of items from dynamic arrays. So I decided to find a generic way of doing this.

Assuming we know the index of the item to be deleted we need the equivalent of </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/2813547619317027422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=2813547619317027422&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2813547619317027422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2813547619317027422'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/06/deleting-elements-from-dynamic-array.html' title='Deleting elements from a dynamic array'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-1622489373516553170</id><published>2010-06-23T02:46:00.001+01:00</published><updated>2010-06-23T02:47:27.733+01:00</updated><title type='text'>Initialising dynamic arrays</title><summary type='text'>When writing some unit tests a while ago I found myself needing to initialise some dynamic arrays with test data. It would be nice if we could do something like this:


var
  A: array of Integer;
begin
  A := (1,2,3,4);  // !! WRONG
end;


but we can't. So I decided to write some functions to initialise dynamic arrays to the contents of another array, be it a constant, a literal or another </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/1622489373516553170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=1622489373516553170&amp;isPopup=true' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/1622489373516553170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/1622489373516553170'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/06/initialising-dynamic-arrays.html' title='Initialising dynamic arrays'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-8192946975076502148</id><published>2010-06-22T14:29:00.001+01:00</published><updated>2010-06-22T14:32:39.487+01:00</updated><title type='text'>Being dim #2: No generic global procedures</title><summary type='text'>The other day I was writing some unit tests and needed some helper functions to look up some array elements of in arrays of different base types. I had several overloaded functions to do the job, like this:


function IndexOf(const Item: string; const A: array of string): Integer; overload;
function IndexOf(const Item: Integer; const A: array of Integer): Integer; overload;


Oh, I thought, </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/8192946975076502148/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=8192946975076502148&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/8192946975076502148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/8192946975076502148'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/06/being-dim-2-no-generic-global.html' title='Being dim #2: No generic global procedures'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-5419858361776500326</id><published>2010-06-22T11:28:00.001+01:00</published><updated>2010-06-22T14:32:01.208+01:00</updated><title type='text'>Being dim #1: Array and set enumerators</title><summary type='text'>One of my favourite additions to Delphi over the past years has been the for..in construct and the associated enumerators. I just love the way we can do


var
  Ch: Char;
  S: string;
begin
  S := 'Some text';
  for Ch in S do
    // Do something with Ch
end;



So how come I missed that enumerators work on sets and arrays? I'm mentioning this here just in case it's slipped past anyone else, and </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/5419858361776500326/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=5419858361776500326&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5419858361776500326'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5419858361776500326'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/06/being-dim-1-array-and-set-enumerators.html' title='Being dim #1: Array and set enumerators'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-8655987132070912707</id><published>2010-05-27T22:14:00.000+01:00</published><updated>2010-05-27T22:14:57.388+01:00</updated><title type='text'>Top Secret Code Snippets Test Code</title><summary type='text'>For about three months now I've had some code that tests and exercises some of the snippets in the Code Snippets Database. But, if you don't get the Code Snippets newsletter, you won't know about it because I forgot to tell anyone else!

Anyhow, the code is stored in my Delphi Doodlings Subversion repository on Assembla in the CodeSnippets sub-directory of the trunk.

There are currently three </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/8655987132070912707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=8655987132070912707&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/8655987132070912707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/8655987132070912707'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/05/top-secret-code-snippets-test-code.html' title='Top Secret Code Snippets Test Code'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-3168898039215118789</id><published>2010-05-27T15:54:00.000+01:00</published><updated>2010-05-27T15:54:04.052+01:00</updated><title type='text'>Decoding Base 64 encoded data</title><summary type='text'>A while ago someone asked me how to go about decoding Base 64 encoded code in a single routine.

Here's what I came up with. It uses the Indy internet component suite to do the grunt work and simply wraps the various Indy calls into a function.


&lt;!-- Highlighted Pascal code generated by DelphiDabbler PasHi --&gt;
uses
  Classes, IdCoderMIME

...

function Base64Decode(const EncodedText: string): </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/3168898039215118789/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=3168898039215118789&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/3168898039215118789'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/3168898039215118789'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/05/decoding-base-64-encoded-data.html' title='Decoding Base 64 encoded data'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-2927135395491864533</id><published>2010-05-09T13:13:00.000+01:00</published><updated>2010-05-09T13:13:43.523+01:00</updated><title type='text'>Delphi Tips Editor Virus???</title><summary type='text'>There have been a few reports of a possible virus in the third party Delphi Tips Editor published on DelphiDabbler.com.

Just to let everyone know that this is likely (but not guaranteed) to have been a false positive due to the exe compressor used by the author.

However, to be on the safe side the offending code has been replaced by a recompiled version that passes all the tests at http://</summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/2927135395491864533/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=2927135395491864533&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2927135395491864533'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2927135395491864533'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/05/delphi-tips-editor-virus.html' title='Delphi Tips Editor Virus???'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-3761597548057921568</id><published>2010-04-05T01:09:00.003+01:00</published><updated>2010-04-05T01:19:14.157+01:00</updated><title type='text'>Singletons</title><summary type='text'>For a long time now I've been looking for a nice singleton implementation that meets my needs. I want a singleton that:


Can't be created more than once.
Can't be freed until the program terminates.
Can be used as a common base class for all the program's singletons.


There are plenty of implementations around that meet requirements 1 and 2, but most of those can't be overridden (usually </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/3761597548057921568/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=3761597548057921568&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/3761597548057921568'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/3761597548057921568'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/04/singletons.html' title='Singletons'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-871307534013089945</id><published>2010-03-25T11:16:00.005Z</published><updated>2010-03-25T11:22:46.052Z</updated><title type='text'>CodeSnip problems, problems, problems</title><summary type='text'>Arrgh!

I've been having a lot of problems with the CodeSnip program's database update code - it's been working for some and not for others. All this has happened since I converted the program to Unicode and compiled with Delphi 2010.

I'm posting this for two reasons:


To try to explain to long suffering users what has been going on with program lately - it's not usually this flaky.
To forewarn</summary><link rel='related' href='http://www.delphidabbler.com/software/codesnip' title='CodeSnip problems, problems, problems'/><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/871307534013089945/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=871307534013089945&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/871307534013089945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/871307534013089945'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/03/codesnip-problems-problems-problems.html' title='CodeSnip problems, problems, problems'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-8648140056451644962</id><published>2010-03-16T02:51:00.000Z</published><updated>2010-03-16T02:51:04.810Z</updated><title type='text'>Delphi Tips News</title><summary type='text'>There's now another new RSS feed that provides news of changes to the Delphi Tips section of DelphiDabbler.com.

Subscribe.</summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/8648140056451644962/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=8648140056451644962&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/8648140056451644962'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/8648140056451644962'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/03/delphi-tips-news.html' title='Delphi Tips News'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-6991928993527798367</id><published>2010-03-14T11:58:00.002Z</published><updated>2010-03-16T02:46:32.300Z</updated><title type='text'>URL Decoding revisited</title><summary type='text'>Time to complete the set. So far in this series I have presented URIEncode, URIDecode and URIEncodeQueryString. So here's the missing piece of the jigsaw: URIDecodeQueryString. This routine decodes a query string that has been "query-string-encoded".

If you look at URL Encoding revisited you'll see that a query string is encoded with normal URI encoding, except that space characters are encoded </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/6991928993527798367/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=6991928993527798367&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/6991928993527798367'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/6991928993527798367'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/03/url-decoding-revisited.html' title='URL Decoding revisited'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-5052090635619689371</id><published>2010-03-10T13:00:00.005Z</published><updated>2010-03-16T02:44:22.121Z</updated><title type='text'>URL Decoding</title><summary type='text'>To complement the code of my URL Encoding post, I've now developed a URIDecode routine.

It attempts to decode URIs that were percent-encoded according to RFC 3986. It also allows for some malformed percent-encoded URIs, i.e. those that contain characters outside the RFC's "unreserved" character set.

Here's the code. An explanation follows.


&lt;!-- Highlighted Pascal code generated by </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/5052090635619689371/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=5052090635619689371&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5052090635619689371'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/5052090635619689371'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/03/url-decoding.html' title='URL Decoding'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-4857414947024580412</id><published>2010-03-10T02:25:00.012Z</published><updated>2010-03-16T02:42:18.796Z</updated><title type='text'>URL Encoding revisited</title><summary type='text'>In my previous post I covered URI encoding part of a URI or URL. What I didn't cover was the almost trivial case of encoding a query string. The only difference is that spaces in a query string are converted to reserved '+' characters that are not then percent encoded.

The only complication arises when the query string to be encoded already contains '+' symbols. They must be percent-encoded so </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/4857414947024580412/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=4857414947024580412&amp;isPopup=true' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/4857414947024580412'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/4857414947024580412'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/03/url-encoding-revisited.html' title='URL Encoding revisited'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-8084175451928749121</id><published>2010-03-08T15:47:00.001Z</published><updated>2010-03-08T15:48:13.374Z</updated><title type='text'>CodeSnip Program and Database News</title><summary type='text'>I've set up a new RSS feed that helps users of the Code Snippets Online Database and the CodeSnip Snippets Repository Program keep up to date with changes and updates.

Subscribe.</summary><link rel='related' href='http://www.delphidabbler.com/feeds/site-news-feed?id=codesnip' title='CodeSnip Program and Database News'/><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/8084175451928749121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=8084175451928749121&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/8084175451928749121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/8084175451928749121'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/03/codesnip-program-and-database.html' title='CodeSnip Program and Database News'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-2100688192691492319</id><published>2010-02-24T13:14:00.008Z</published><updated>2010-03-16T02:38:08.300Z</updated><title type='text'>Call JavaScript in a TWebBrowser and get a result back</title><summary type='text'>Calling a JavaScript function in a TWebBrowser is easy, but getting a return value from it is hard. I've been struggling for ages to find an answer to this, and lots of users have asked. My article "How to call JavaScript functions in a TWebBrowser from Delphi" goes into details.

Christian Sciberras suggested a solution that depended on modifying the HTML source to include a hidden input field </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/2100688192691492319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=2100688192691492319&amp;isPopup=true' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2100688192691492319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2100688192691492319'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/02/call-javascript-in-twebbrowser-and-get.html' title='Call JavaScript in a TWebBrowser and get a result back'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-4015878088435717322</id><published>2010-02-21T23:57:00.001Z</published><updated>2010-02-21T23:58:49.050Z</updated><title type='text'>Code Library Newsletter</title><summary type='text'>Just lately I've spent a lot of time bringing my rather dusty code library up to date.

The library has been established as a project on GoogleCode (ddab-lib) and the code is gradually being moved into the project's Subversion repository.

A wiki documenting the library is also hosted on the same GoogleCode project.

There has been enough activity here to warrant setting up a newsletter to notify</summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/4015878088435717322/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=4015878088435717322&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/4015878088435717322'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/4015878088435717322'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/02/code-library-newsletter.html' title='Code Library Newsletter'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-1953931806202955777</id><published>2010-02-19T23:26:00.002Z</published><updated>2010-02-19T23:52:17.384Z</updated><title type='text'>Unicode environment blocks and CreateProcess</title><summary type='text'>I've just been struggling with a Unicode conversion of some code that passes a custom environment block to a child process.

On Unicode Delphi compilers the code produces a Unicode environment block, and I'd done something like this...


procedure ExecProgWithUnicodeEnv(const ProgName: string; EnvBlock: Pointer);
var
  SI: TStartupInfo;
  PI: TProcessInformation;
  SafeProgName: string;
begin
  </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/1953931806202955777/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=1953931806202955777&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/1953931806202955777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/1953931806202955777'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/02/unicode-environment-blocks-and.html' title='Unicode environment blocks and CreateProcess'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-2237635223403826180</id><published>2010-02-18T12:56:00.012Z</published><updated>2010-03-16T02:33:34.436Z</updated><title type='text'>URL Encoding</title><summary type='text'>I've being reviewing the URI encoding code from the Code Snippets Database and I realised that it doesn't comply with RFC 3986.

So here's my first attempt at some compliant code.

According to the RFC:

"the data should first be encoded as octets according to the UTF-8 character encoding [STD63]; then only those octets that do not correspond to characters in the unreserved set should be </summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/2237635223403826180/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=2237635223403826180&amp;isPopup=true' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2237635223403826180'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/2237635223403826180'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/02/url-encoding.html' title='URL Encoding'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11772075.post-6327427248278535547</id><published>2010-02-18T10:29:00.003Z</published><updated>2010-02-21T23:13:41.816Z</updated><title type='text'>Welcome to the new DelphiDabbler blog</title><summary type='text'>Welcome to this new blog, which I'm thinking of as an extension to DelphiDabbler.com where more peripheral programming stuff can be discussed.
I'll also use it for news of happenings on the main site.
Will I keep up with it? Let's see how it goes!</summary><link rel='replies' type='application/atom+xml' href='http://delphidabbler.blogspot.com/feeds/6327427248278535547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11772075&amp;postID=6327427248278535547&amp;isPopup=true' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/6327427248278535547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11772075/posts/default/6327427248278535547'/><link rel='alternate' type='text/html' href='http://delphidabbler.blogspot.com/2010/02/new-to-blogging.html' title='Welcome to the new DelphiDabbler blog'/><author><name>DelphiDabbler</name><uri>http://www.blogger.com/profile/04753825418913482066</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
