<?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-9040327036497268290</id><updated>2011-07-29T08:42:31.739Z</updated><category term='CodeGear'/><category term='Tools'/><category term='Help'/><category term='Windows Live Writer'/><category term='Tips'/><category term='Blah'/><category term='ESD'/><category term='Install'/><category term='BDS2006'/><category term='Delphi'/><title type='text'>Me, Myself and Delphi</title><subtitle type='html'>Finally someone saying the goods and the bads about Delphi 2007...</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>67</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-1139393810138911409</id><published>2008-05-18T16:28:00.003Z</published><updated>2008-05-19T22:30:01.907Z</updated><title type='text'>blog.free</title><content type='html'>It's about time that I should assume that I lack the time to spend on this blog.&lt;br /&gt;&lt;br /&gt;It was fun while it lasted (except for the past few months), but now every weekend that comes and goes and sees me not doing something on this blog is a weekend of pain. This year, my life changed a LOT. I'm no longer using Delphi in my daily routine, I have a beautiful young daughter requiring some attention (not to mention her mother, my wife!), and I also work at a place that makes me spend way too much time traveling back and forth. That will improve in time as I'm due to move closer to home, but, if you factor reason #1 above (no longer using Delphi), then you can see that even with a bit more free time on my hands it will be a pain doing something in Delphi, especially the type of experiments I was doing lately that require repeated (PAINFULLY SLOW) installs...&lt;br /&gt;&lt;br /&gt;So, rather than feeling bad about each new weekend that I don't get to spend some time on this blog, I opted for the easy way out: delete the blog (I hate sites that stay frozen in time for years in a row!).&lt;br /&gt;&lt;br /&gt;So, in a couple weeks I'll be deleting this blog. If there's any useful bit of information that you found here and want to preserve/re-use/re-publish, then feel free to do so. It will all be gone on the 1st of June.&lt;br /&gt;&lt;br /&gt;Goodbye and best of luck to all lasting Delphi users out there.&lt;br /&gt;&lt;br /&gt;P.S.: This is not a "talk me out of it" type of post. My decision, which has been in the making for quite some days now, is final. This post exists simply because I didn't want you guys and gals finding out that there was no more blog at this location.&lt;br /&gt;&lt;br /&gt;[EDIT:]&lt;span style="font-style:italic;"&gt;GRRR! Damn blogger ate my edits! :)&lt;br /&gt;Here I go again...&lt;br /&gt;&lt;br /&gt;First, thank you all for your kind words. Even though the idea behind this post was to allow everyone some time to copy/paste some stuff, I'll allow this post another 6 months and see what gives by then.&lt;br /&gt;&lt;br /&gt;Answering some questions:&lt;br /&gt;- There's no ";" after blog.free because the following instruction is an "end."... ;) Actually, just kidding as I'm the kind of guy that will add a begin/end pair to a single instruction if/then/else just so to be able to add the ";"... This one was mostly out of being tired...&lt;br /&gt;- I'm not using VB nor any MSFT product. What I'm doing currently involves using Flex Builder 3, Python and Javascript (not all in the same project!).&lt;br /&gt;- Part II of Thinstalling Delphi: this is the main reason for not being happy with this blog, or rather, the lack of time to do it. As I think I've said before, my previously thinstalled Delphi won't work anymore refusing to even run, and capturing a new one would take quite some time and effort. At this point, even "simply" going through my notes would require some time to understand/test them...&lt;br /&gt;&lt;br /&gt;Should I find the time and will to do it, I'll give it another try, but I must say that I'm currently a bit disappointed with Thinstall: several previously running thinstalled apps no longer run, which is probably due to some updates to my system, but that's not my idea of making a portable app: having to recapture now and then... As for alternative virtualization products, all those I've tried so far had even worse issues... (Note to self: SELECT ALL, COPY, just in case!)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-1139393810138911409?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/1139393810138911409/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=1139393810138911409' title='10 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1139393810138911409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1139393810138911409'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2008/05/blogfree.html' title='blog.free'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>10</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-8829765708955194502</id><published>2008-04-16T22:15:00.001Z</published><updated>2008-04-16T22:15:57.400Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='Blah'/><title type='text'>Portable Delphi 2007 for Win32 - Part I.5</title><content type='html'>&lt;p&gt;It's been a while since I started this project and, despite the long period with no posts, it hasn't been forgotten. But a few factors helped to prevent me from completing it as of yet. First I was in bed for a few days from some nasty flue, then I got up before being ready which eventually led back to bed for a few more days, and by then I had a ton of work to catch up with. Factor that with running into some problems with some of my other "thinstalled" applications and not being happy with the Thinstall price tag (which I'm only using because it's registered to the company I'm working for: there's no way I could justify spending 5 grand in a piece of software!), and then you're starting to see the picture. Today I had a bit of time and, after having found another virtualization suite, one that is free for personal use, I decided to give it a spin.&lt;/p&gt; &lt;p&gt;Even though it has some design flaws that would make it improper to make a "Portable" Delphi, it could be a nice tool to create a semi-portable Delphi and I may be back to it in a couple weeks or so. But, for the time being, here are the main disadvantages I found in &lt;a href="http://www.altiris.com/Products/SoftwareVirtualizationSolution.aspx"&gt;Altiris SVS&lt;/a&gt; in a couple hours of use:&lt;/p&gt; &lt;p&gt;- Requires the engine to be installed first (admin rights);&lt;/p&gt; &lt;p&gt;- Requires the packages to be "imported" which is kind of an Install in that it expands the package over to the virtual redirection folder;&lt;/p&gt; &lt;p&gt;- Does not allow an easy way to configure *where* the local changes are stored so it's not trivial to carry your settings with you;&lt;/p&gt; &lt;p&gt;- If you want the redir folder to be stored elsewhere other than C:\fslrdr you need to use the command line to manually invoke MSI installer and pass some parameters;&lt;/p&gt; &lt;p&gt;- You're "forced" to work in their chosen locale, that is, my Windows XP is English but, because my location and keyboard are Portuguese, I have the regional settings set to Portuguese. If I want the software to be in English as ALL my programs are, I have to overwrite some of it's files, namely copy the .DLLs from the 1033 folder over the ones in the 1046 folder. (I hate dumb programs that try to be smart!)&lt;/p&gt; &lt;p&gt;- I also ran into a weird bug: after restoring another semi-clean ghost of my C: drive, and having installed the SVS client (and after the mandatory reboot), I decided to try a "bold" move: double-click an SVS package that I had created earlier. It started to "import" it or so it seemed, but in no time I was rendered with a useless Admin console:&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="329" alt="Bugged" src="http://lh4.ggpht.com/Fotos.Madrugas/SAZ6m1j6KEI/AAAAAAAAAT8/rfpUKyFe8tc/Bugged%5B4%5D.jpg" width="400" border="0"&gt; &lt;/p&gt; &lt;p&gt;Not even a cold boot sorted it out! I had to restore the ghost image again and re-install SVS again and then I could use the "Import from Archive" option. And I was able to successfully import the VERY same package. Kind of weird of them to create file associations and then have them screw things up so badly!&lt;/p&gt; &lt;p&gt;So, I'll keep my original idea and, in the next few nights and in the next weekend I will go back to resume my work on Thinstalling Delphi 2007. It's a shame as Altiris' SVS product was priced just about right: Free for Personal Use! Download license from &lt;a href="http://www.altiris.com/Download/svsPersonal.aspx"&gt;here&lt;/a&gt; and setup from &lt;a href="http://www.svsdownloads.com/"&gt;here&lt;/a&gt; if you want to give it a spin.&lt;/p&gt; &lt;p&gt;&lt;em&gt;BTW: Don't get me wrong on this "negative" feedback: Altiris' product does look promising and it even may have a few advantages (other than the price!) over other similar packages. It's just inadequate for my current project of creating a Portable Delphi. If I get to "play" with this product a bit more, I may come up with a more rounded review focusing also the pluses. It won't be in the next couple weeks due to lack of time and other priorities, such as finishing the Portable Delphi! :)&lt;/em&gt;&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-8829765708955194502?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/8829765708955194502/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=8829765708955194502' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/8829765708955194502'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/8829765708955194502'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2008/04/portable-delphi-2007-for-win32-part-i5.html' title='Portable Delphi 2007 for Win32 - Part I.5'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh4.ggpht.com/Fotos.Madrugas/SAZ6m1j6KEI/AAAAAAAAAT8/rfpUKyFe8tc/s72-c/Bugged%5B4%5D.jpg' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-6053726548432214187</id><published>2008-03-15T19:59:00.001Z</published><updated>2008-04-07T11:12:35.353Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Portable Delphi 2007 for Win32 - Part I</title><content type='html'>&lt;p&gt;&lt;em&gt;[EDIT] Even though you can do all listed here, there are a few minor&lt;/em&gt; '&lt;em&gt;gotchas'&lt;/em&gt; &lt;em&gt;that you should be aware of, so browse through the 2nd part before following this to the letter, especially if you use the command line rather than a graphical tool to delete the folders. &lt;STRIKE&gt;I'm currently typing Part II into Windows Live Writer, so check back in a couple hours if it's not online yet when you're reading this...&lt;/STRIKE&gt;&lt;B&gt; Unfortunately I ran into an internet problem and then changed my mind and decided to split the work and use WinWord to create a PDF file to upload with the whole start to finish process and only keep the "blah-blah" on the post so that you can more easily follow the process without waving through a ton of blah-blah. But real-life has a way of messing up one's plans! I have been sick for a few days (an annoying flue that kept me in bed and hardly willing to touch a computer). I'm feeling better now and will finish work on this as promised, but it most likely won't happen before the next weekend as I have a lot of work stuff to catch up during the week.&lt;/B&gt;[/EDIT]&lt;/em&gt; &lt;/p&gt;&lt;p&gt;Ever wanted to carry your development environment with you on a flash memory stick? Well, using &lt;a href="http://www.thinstall.com/"&gt;Thinstall&lt;/a&gt; you can, albeit it comes with a hefty price tag of 5.000 USD... Maybe now that VMWare has bought the company they'll wise up and release a cheaper personal version! I would like one, and have e-mailed them already stating that. If you would too, don't forget to bring it to their attention! &lt;em&gt;(Edit: Thinstall is now known as &lt;a href="http://www.vmware.com/beta/northstar/"&gt;VMWare Project NorthStar&lt;/a&gt;)&lt;/em&gt;  &lt;/p&gt;&lt;p&gt;There seem to be some cheaper alternatives, and I even tried &lt;a href="http://www.xenocode.com/Products/Studio/Trial.aspx"&gt;Xenocode's Virtual Application Studio&lt;/a&gt; (VAS for short) but, even though it has a nice visual interface, it has a few fatal flaws. I couldn't find a way to have multiple entry points and even something as simple as selecting the main entry point is painful with an application that has several thousand files as they use a simple non-typing lookup and they display ALL files to be selected. And if your app (or app combo) somehow has the same exe name in two different folders, then you can't tell them apart in that combo-box... But the main problem against VAS was it failing a simple test: virtualizing ActiveState's Perl 5.8.8... That's something that Thinstall did without a glitch...  &lt;/p&gt;&lt;p&gt;This is a two-part article, but don't worry: this time both parts are already written before publishing the first one! But I also like to tease a bit, so Part II will only come out in a couple days! That and because I took my notes on a text file while doing things and have to get them into WLW for proper formatting! :)&lt;br /&gt;&lt;/p&gt;&lt;h3&gt;Thinstalling (TM) Delphi for Win32 2007 (TM) Professional&lt;/h3&gt; &lt;p&gt;Those reading my blog will know that I'm a bit anal about files and disk space in my computer: I'm a software developer (among other things), so I like to be in control! It is &lt;strong&gt;me&lt;/strong&gt; and not the machine nor the OS or any given application that should be in control of what goes on on &lt;strong&gt;&lt;u&gt;my&lt;/u&gt;&lt;/strong&gt; computer...&lt;br /&gt;&lt;br /&gt;In light of that, I have a plethora of small and some not so small utilities that I have in a "ready-to-run" state on a different partition, so that, after a fresh install, I can run those immediately. I also use Delphi (currently the "2007 for Win32" version) and if you couple all that with the lousy installer and/or lousy install script that Delphi ships with you can understand why I have targeted it a few times before.&lt;br /&gt;&lt;br /&gt;I also hate the way my system gets noticeably slower as I add programs. That's no big surprise: the big junkyard of Windows, usually known as Registry, easily starts to hold a gazillion of entries slowing it down. Add Windows Installer to the mix (and very few major-named products these days use an installer that is &lt;strong&gt;not&lt;/strong&gt; based on MSI technology) and you can see where all this goes...&lt;br /&gt;&lt;br /&gt;MSI technology is one of those nice-in-theory concepts with all it's self-healing that allows a "regular Joe" to keep running, say, Microsoft Office, even after he blissfully deletes some required folders because upon running an office application it will detect that some files are missing and will re-install them. Now, this is bad news for those like me that like to tweak things. Something as simple as deleting some readme's in 30 different languages will trigger the self-healing process and next time you run your app, they'll be back in place... Also, messing up with the MSI files left behind on your disk will usually result in bad news, from missing application icons (why on earth don't they use the proper .EXEs for the shortcut icons?), to more serious problems with self-healing kicking in and asking for original media to put things back there and you not being able to run the app until you please the installer...  &lt;/p&gt;&lt;p&gt;So, I decided to try a new angle and this time I decided to experiment with an old tool but one which I only recently got in contact with: Thinstall. In a short sentence, it's VMWare for single applications, that is, it's a virtualization system that allows you to run applications without installing them first. Just double click a "simple" executable file and it will run as if you had installed it on your machine.  &lt;/p&gt;&lt;h3&gt;So, what are the pluses and minuses of Thinstalling applications? &lt;/h3&gt; &lt;p&gt;&lt;strong&gt;+ No more re-install whenever you switch machines or re-format your C: drive or reset it to a "working" ghost image;&lt;/strong&gt;&lt;br /&gt;- You &lt;strong&gt;do&lt;/strong&gt; need to re-activate when you switch machines; (&lt;em&gt;that's an area where those using pirated and cracked versions have an edge over us, licensed users, but that's the price to pay when companies don't trust their customers and with MSFT setting the way, other companies keep following like lambs...&lt;/em&gt;)&lt;br /&gt;&lt;strong&gt;+ You can run Delphi 2007 for Win32 from a 1 GB USB flash drive &lt;u&gt;even on a machine with NO .Net installed and from a restricted guest account&lt;/u&gt;;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;+ You can run it from  a network share with no concurrency problems;&lt;/strong&gt;&lt;br /&gt;- Updating a "Thinstalled" app requires a bit more work (more on that on Part II);&lt;br /&gt;- By default, a thinstalled program will have R/W access to "My Documents" and "Desktop" only: every other file/folder accessed, if changed, will be modified in a local copy on a "sandbox"; you can however configure per folder/drive which ones will be writeable or not. Or you can configure your thinstalled app to run in "merged" mode, but that can be tricky if the host computer has a similar version of the app installed.&lt;br /&gt;&lt;strong&gt;+ Thankfully, network and removable drives are used R/W by default so if your files are not on a local disk, you don't need to make further changes to modify them.&lt;br /&gt;&lt;/strong&gt;- You can't Thinstall apps that install device drivers, such as PalmOne apps or a Virtual CD/DVD emulator or even some Anti-Virus.&lt;br /&gt;&lt;strong&gt;+ You &lt;u&gt;can&lt;/u&gt; Thinstall applications that install and depend on services as those will be virtualized and started as well when you run your app.&lt;/strong&gt;  &lt;/p&gt;&lt;p&gt;In my current setup, using a 4 GB flash drive, I can fit pretty much everything I need, being 1 GB for a ghost image of Win XP SP3 RC2 with nothing but Win XP + AV + , another one for Delphi 2007 and still have 2 GB left for other thinstalled applications and some data files. This allows me to be back in a working condition within 10 minutes, even if something seriously messed up my hard disk big-time...&lt;br /&gt;  &lt;/p&gt;&lt;h3&gt;So, how does one get to Thinstall Delphi 2007 for Win32? &lt;/h3&gt; &lt;p&gt;After you get hold of a copy (you can get a trial from Thinstall's website), you do the following:  &lt;/p&gt;&lt;p&gt;0 - Start with a CLEAN machine: I recently re-installed my C: partition with Windows XP SP2 and, after changing some settings, I proceeded to make a ghost of that partition to a bootable 2 GB USB flash disk (only uses less than 600 MB after a bit of tweaking). Using a CLEAN machine is important as is choosing the "oldest" one, that is, if you plan on running it on Windows 2000 and XP, don't use XP for the CLEAN machine as it may already have some files that the 2000 will not and those won't be installed and thus won't be captured.  &lt;/p&gt;&lt;p&gt;0b- It's also VERY important to do it all in one go and refrain from using non-related programs, such as surfing the net or doing downloads or even cleaning up your temporary folders: whatever you do may get added to the thinstall project and needlessly clutter it.  &lt;/p&gt;&lt;ol&gt; &lt;li&gt;Run "Setup Capture" and do the pre-install capture.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Install Delphi (including .net runtime and SDK); as for the shortcuts location, I used the option for "All Users" so it would not clutter my relocated "My Documents".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Launch and activate (if you want the install to be pre-activated, e.g., you're the only one using it); if you don't activate, when you run it you'll have 30 days to do it later, although I believe, but haven't tested, that those 30 days start counting from the day you INSTALLED it and not from the date you first run the Thinstalled version.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Configure any settings and/or install components and/or install updates.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Run "Setup Capture" and do the post-install capture.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Select the "shortcuts" to create and main package name. When you Thinstall an application, you create a single executable file but you can have alternative "entry points" into that file to run other applications that are part of the same capture. For instance, you can have an independent shortcut for running the Help Documentation without first launching Delphi. These are dependent of the "main" package where all the files/registry settings are stored. On my system, and for some reason (GUID conflict?), it suggests to store the capture in "ATI - Software Uninstall Utility". I opted instead to name the capture folder "Delphi 2007".&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Wait a few minutes while it copies over 31.000 files using 3+ GB for my Professional SKU full install.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;On my system, it failed to copy "C:\Documents and Settings\LocalService\NTUSER.DAT" and "C:\Documents and Settings\NetworkService\NTUSER.DAT": just ignore as those should not be copied anyway... This may be a symptom of me not following step 0b! :)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;IMMEDIATELY SAVE this captured installation, that is, save the "Delphi 2007" sub-folder inside the Captures folder: this will be needed later if you want to upgrade your installation. I copied it to my external hard-drive and named it "Delphi 2007 (Full)" to distinguish from a copy that I'll make later after the tweaking is done.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now we can start tweaking the thinstallation!&lt;br /&gt; &lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;Tweaking the Thinstallation &lt;/h3&gt; &lt;p&gt;You can do the remaining process on any machine: all you need is access to the thinstall folder and respective Capture sub-folder where you stored your "Delphi 2007" capture. I opted to use the same machine as I will quickly restore it to a clean state by booting from a flash drive and running ghost from there.  &lt;/p&gt;&lt;ol&gt; &lt;li&gt;Go to your "Delphi 2007" capture folder and open up "Package.ini";&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Uncomment (remove the starting ";") the "CompressionType=Fast" line and comment the other one (";CompressionType=None"); this will instruct Thinstall to use a quick compression when creating this application. Whenever in doubt, check Thinstall's online help file for available options.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Edit the "Sandbox=" line and use a descriptive name. (I used SandboxName=Delphi 2007). Whenever you run a Thinstalled application, any changes to registry and files that are not in the "merged" folders/keys will be saved in a local sandbox. By default, that is in your current user's Application Data\Thinstall\&amp;lt;sandboxname&amp;gt; folder, so, in a typical Win XP install, with a user named Joe and the suggested sandbox name above, this will be "C:\Documents and Settings\Joe\Application Data\Thinstall\Delphi 2007". It is possible to configure the application to clear this folder on exit, but you can also do a more interesting thing: if you create a "Thinstall" folder in the same place where you have your Thinstalled application, that folder will be used to store the Sandbox. This is particularly useful to do when running an application from an USB flash drive as in this way, not only your settings are not stored on the local computer, they will "travel" alongside the application on your flash drive.&lt;br /&gt;3b- I like to keep my apps in the same drive, a partition of my HDD and a copy of everything on a 4 GB flash drive. In both cases, a neat way to keep all your settings (read: sandboxes) nicely grouped in one place is to add the following line next to the previous one:&lt;br /&gt;SandboxPath=LocalSandbox\..\..\..\..\.Settings&lt;br /&gt;  This way, and as long as your apps are not stored more than 3 levels deep, all the sandboxes will be created under the .Settings folder in the root of the drive where the applications are. So you can have something like:&lt;br /&gt;    X:\Multimedia\Image\Image Editing App 1.exe&lt;br /&gt;    X:\Multimedia\Image\Image Editing App 2.exe&lt;br /&gt;    X:\Multimedia\Audio\Audio Editing App 1.exe&lt;br /&gt;    X:\Dev\RAD Studio 2007\Delphi 2007.exe&lt;br /&gt;    and, assuming the Sandboxes use the same name as the executables, you'll have the sandboxes created like this:&lt;br /&gt;    X:\.Settings\Image Editing App 1\&lt;br /&gt;    X:\.Settings\Image Editing App 2\&lt;br /&gt;    X:\.Settings\Audio Editing App 1\&lt;br /&gt;    X:\.Settings\Delphi 2007\&lt;br /&gt;&lt;/li&gt;&lt;li&gt;At this point, I did my first "build" which is as simple as invoking the BUILD.BAT file: 1 hour and 22 minutes later (on a 3 year old laptop!), I had a 2.000.782.941 bytes "Delphi 2007.dll" file along with a few .exe entry points for a total of 1.86 GB. Of course, this includes at least the huge 600 MB file with the .NET framework SDK install files. We'll get rid of those soon!&lt;br /&gt;&lt;br /&gt;4b- Don't worry about two things: the app won't show the proper icon (we'll use a workaround for an explorer bug soon), and it may take a LOAD of time launching (we'll get to that fix soon too!). If you want to test it out quickly, just launch something like the Command Prompt or the Documentation.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Thinstall captures are very easy to process: 3 "registry change" files are created containing all the registry changes to HKLM, HKCU and HKU; several "virtual" folders are created such as "%desktop%" which equals the current user's desktop folder and some  %drive_x% folders for each drive where changes where made other than in one of the "standard" folders, that is, if the program only makes changes to, say, "C:\Program Files\CodeGear...", you will see no %drive_c% folder created, but if you change the default install to, say, "C:\Delphi2007", then you'll see a %drive_c%" folder with whatever was created/modified there.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;We can safely get rid of uninstall files(*) as there's no point in uninstalling stuff from a Thinstalled app: even though the changes would be recorded in the local sandbox, and it would appear uninstalled, you'd save nothing by doing so and by deleting the sandbox, it will revert back to the "default" state. Thinstall also already ignores changes to some self-healing registry keys, so you can remove stuff without being prompted with a "re-install".&lt;br /&gt;(*) As we'll see in Part II, there are some exceptions, with Delphi being one of them!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;With that in place, let's delete (you &lt;strong&gt;&lt;u&gt;DID&lt;/u&gt;&lt;/strong&gt; make that full copy already, didn't you?!) the following folders/files:&lt;br /&gt;  - %ProgramFilesDir%\Microsoft Visual Studio 8\Microsoft .NET Framework 2.0 SDK - ENU (569,8 MB)&lt;br /&gt;  - %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\Microsoft .NET Framework 2.0 (76,4 MB)&lt;br /&gt;  - %SystemRoot%\Microsoft.NET\Framework\v2.0.50727\Microsoft Visual J# 2.0 Redistributable Package (15,6 MB)&lt;br /&gt;  - %SystemRoot%\Installer (93,9 MB - this was unrelated to Delphi 2007 and probably because I somehow ran something else: I've had this capture on "hold" for a couple days...)&lt;br /&gt;  - %Common AppData%\{6AF0EFC6-B937-4704-A430-319EB93F4C12} - Delete all sub-folders but leave the files as they're needed for the "Check for Updates" option. (423 MB) This one will be in %Local AppData% instead of %Common AppData% if you used the "Just for me" shortcuts option when installing.&lt;br /&gt;  - %Common AppData%\{135F413C-658B-4923-B950-5F2B786BC8DA} (341 MB - Help update setup files)&lt;br /&gt;  - %Profile% (nothing useful)&lt;br /&gt;  - %Common Programs% and %Desktop% - These hold the shortcuts as created by the installer, but we'll use a different set&lt;br /&gt;  - HKEY_USERS.txt (on my system, there's only a handful entries and none Delphi related, probably for me breaking step 0b!)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now let's open up Package.ini and fix a few more things:&lt;br /&gt;- Fix the broken Icon for "Delphi 2007.exe". Find the section [Delphi 2007.exe] and duplicate it. Now do a find/replace (on the whole text file) finding "Delphi 2007.exe" and replacing with "Delphi 2007.dll". Next, change one of those two sections to read [Delphi 2007.exe]. You'll need a few more changes so just check that they look like this:&lt;br /&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;strong&gt;[Delphi 2007.exe]&lt;br /&gt;Shortcut=Delphi 2007.dll&lt;br /&gt;Source=%ProgramFilesDir%\CodeGear\RAD Studio\5.0\bin\bds.exe&lt;br /&gt;CommandLine="%ProgramFilesDir%\CodeGear\RAD Studio\5.0\bin\bds.exe" -pDelphi&lt;br /&gt;Shortcuts=%Programs%\CodeGear RAD Studio&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;&lt;br /&gt;&lt;strong&gt;[Delphi 2007.dll]&lt;br /&gt;ReadOnlyData=bin\Package.ro.tvr&lt;br /&gt;Source=%ProgramFilesDir%\CodeGear\RAD Studio\5.0\bin\boreditu.dll&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;The "problem" you fixed is that Explorer will try loading the whole .exe file in memory to show the icon, and with an .exe several hundred MBs it will fail. We trick it by storing the "bulk" of the information in a .dll or .bin or .dat or whatever non-exe file and then adding a smaller shortcut to Delphi 2007.exe, as per the Thinstall help section on this topic.&lt;br /&gt;&lt;br /&gt;- You can cleanup quite a few more entries in here, or just leave them with Disabled=1 so they won't have shortcuts created alongside with the main executable. I left the following entry points enabled:&lt;br /&gt;  &lt;em&gt;Check for Updates, Delphi 2007, RAD Studio Command Prompt, RAD Studio Documentation, Rave Reports.&lt;br /&gt;&lt;/em&gt; &lt;/li&gt;&lt;li&gt;&lt;em&gt;&lt;/em&gt;You may want to find and delete all the "Icon=" lines as they force some applications to use an icon stored in an MSI instead of the one in the EXE and deleting the Install cache will get rid of the icons.&lt;br /&gt;&lt;em&gt;[EDIT]In order to keep the RAD Studio Command Prompt and the Documentation icons, move those two *.ICO files elsewhere or copy them from the "full" version if you have already deleted them from step 7 above and update the Icon= line accordingly. You can, for instance, name them RAD Studio Command Prompt.ico and Documentation.ico and place them straight in the project root directory so that it's clear what they're used for.&lt;br /&gt;[/EDIT]&lt;/em&gt;&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;br /&gt;&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Also, while you're at it, check the lines with "Shortcuts=" (notice that it's PLURAL Shortcut&lt;strong&gt;&lt;u&gt;s&lt;/u&gt;&lt;/strong&gt; with an S at the end: not to be mistaken with the similar but different meaning option Shortcut!).&lt;br /&gt;In my install, I set all the shortcuts into a Thin\genre\app type of folder, for instance, I use &lt;span style="font-family:Courier New;"&gt;Shortcuts=%Programs%\Thin\Dev\Delphi 2007&lt;/span&gt;, so that all shortcuts created (for the sections that don't have Disabled=1), will be stored in a Thin -&amp;gt; Dev -&amp;gt; "Delphi 2007" folder. (More on that on Part II).&lt;br /&gt;&lt;/li&gt;&lt;li&gt;The speed problem seemed to go away as soon as the "main" executable file dropped in size: didn't test to see if it was related to being over 2 GB of uncompressed data or to having a few huge files in there, but it works ok in a 1.7 GB uncompressed version as well as in this 1 GB compressed one...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Now you can re-build by simply invoking the batch again. On the same machine as above, and because Thinstall caches the files from the previous compilation, it took only 10 minutes to generate the brand new 1.032.472.412 bytes file. This means that, together with the few extra shortcuts or alternative entry points, it now uses up only 984 MB, so it perfectly fits on a 1 GB flash drive. (And we'll trim that further in Part II).&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;That's all for now. In Part II, we'll tweak a lot more by removing the .net related help content. I will also explain how to update your Thinstalled "Delphi 2007.exe" file so that you can incorporate patches, add/remove/update some components or simply modify default settings. Finally, I'll show you how easy it is to have the proper file type associations so that you can simply double-click an *.dpr file and open up your Thinstalled Delphi. Until then, get your own &lt;span style="color:#ff0000;"&gt;&lt;em&gt;(30 day trial of Thinstall)&lt;/em&gt;&lt;/span&gt;* and start playing!&lt;/p&gt; &lt;p&gt;&lt;em&gt;* EDIT: Thanks to Xsintill for pointing out the &lt;a href="http://www.vmware.com/beta/northstar/"&gt;VMWare NorthStar beta&lt;/a&gt; (which is essential the full Thinstall project) but has two things better than the Thinstall trial: 1) lasts until 1st of June 2008 (roughly 70 days from now); 2) The whole registration process for the trial is automated and less restrictive in the choice of e-mails. So go grab that beta and start playing...&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6053726548432214187?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6053726548432214187/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6053726548432214187' title='21 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6053726548432214187'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6053726548432214187'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2008/03/portable-delphi-2007-for-win32-part-i.html' title='Portable Delphi 2007 for Win32 - Part I'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>21</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-1063228326925046226</id><published>2008-01-26T19:29:00.000Z</published><updated>2008-01-27T01:07:17.612Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>More Disk Space Tweaking...</title><content type='html'>&lt;h2&gt;&lt;font face="Arial" color="#ff8080" size="2"&gt;&lt;em&gt;UPDATE 1: DO NOT TRY THIS! Even though everything is working ok on my system, I've just noticed a shortcut icon problem that I believe is related to the order I've done something. I'll have to test it a bit more and will update this post where needed to prevent that from happening but it may take a couple days before I update the post!&lt;/em&gt;&lt;/font&gt;&lt;/h2&gt; &lt;h4&gt;&lt;font color="#ff0000" size="2"&gt;Update 2: Apparently it's Windows Installer that is to blame. Not only it completely ignores the junction, it goes even further: deletes the junction (causing all contents to be lost!) and creates a new INSTALLER folder in your Windows subdirectory. So, this particular folder CANNOT be moved or the next time you use msi installer (which is just about any installer or patcher these days), you'll LOSE all that was transferred.&lt;/font&gt;&lt;/h4&gt; &lt;h4&gt;&lt;font color="#ff0000" size="2"&gt;It's always "fun" to see Microsoft NOT playing by their own book!&lt;/font&gt;&lt;/h4&gt; &lt;p&gt;Or, how to keep your C: drive mean and lean and still don't throw away those lengthy patches and cached install files...&lt;br&gt;This is not entirely related to Delphi as the techniques used here are more general and thus you can extend this to your own liking. It is however triggered by the fact that I hate to see wasted space on my C: drive, which, as I've told you before, Delphi's current installer likes to do! :)&lt;br&gt;In short, you'll learn how to relocate some huge folders to another partition or even another hard-disk. This is especially useful for temporary or cache folders as those serve no useful purpose 99,99% of the time but still use up disk space.&lt;/p&gt; &lt;p&gt;&lt;font style="font-weight: bold; font-style: italic" size="4"&gt;Theory&lt;/font&gt;&lt;br&gt;&lt;br&gt;The whole process revolves around Windows XP and NTFS formatted partitions: you can create junctions, which are links to folders or whole disks and access those as if they were native folders on another partition. For instance, you could relocate &lt;font face="Courier New" color="#000080"&gt;C:\Documents and Settings\All Users\Application Data&lt;/font&gt; to &lt;font face="Courier New" color="#000080"&gt;D:\MyData&lt;/font&gt; and whenever a program tries to access the first folder it is in fact accessing physical data from the MyData folder in drive D:&lt;br&gt;&lt;br&gt;To ease up the process, I created a small batch file in &lt;a href="http://www.jpsoft.com/4ntdes.htm"&gt;4NT&lt;/a&gt; (sorry, but I don't do CMD in years and don't feel like going back!). 4NT has a nice little command MKLNK (and also a newer one MKLINK which is *NOT* what we'll use, so just keep it in mind that there are two very SIMILAR but DISTINCT commands!). The MKLNK command allows you to take advantage of mount points and create/delete them. In the end of this post, I'll list the whole batch file I used. As you can see, using ALIASes and a few 4NT variables and functions makes the whole batch a lot better than if I were to try it out using CMD only!)&lt;br&gt;&lt;br&gt;Now, I'm sure that there is a MKLNK-alike utility or two around, even though I haven't searched for any, so feel free to ignore the batch and try doing the commands on your own, although you'd probably be doing yourself a big favor by actually trying out 4NT! ;)&lt;br&gt;&lt;br&gt;&lt;font size="4"&gt;&lt;font style="font-weight: bold; font-style: italic"&gt;Limitations&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;As mentioned in the batch file itself, which you can download from &lt;a href="http://www.box.net/shared/nvpnaaog80"&gt;here&lt;/a&gt;, you need to be aware of the following:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;Non-English versions of Windows XP may use different names for Application Data and Local Settings;  &lt;li&gt;You have to edit the SET %RootFolder= line to set your own root folder. I used T:\Patches but you can use anything else (and even modify the batch to spread things around multiple folders instead of sub-folders of this one)  &lt;li&gt;This batch file is a first version. In order to keep things simple, it does NOT check for available free space on the target folder but it does warn at start that it doesn't do that and that you SHOULD make sure you have enough or else you risk being left with some stuff moved and other not quite so... I do believe, but have NOT tested, that it should be able to resume from where it left if you run out of free space and then run the batch again, but, I repeat, I have NOT tested that!&lt;/li&gt;&lt;/ul&gt;&lt;font size="4"&gt;&lt;font style="font-weight: bold; font-style: italic"&gt;Let's get busy!&lt;/font&gt;&lt;/font&gt;&lt;br&gt;&lt;br&gt;So, let's start digging into the batch file:&lt;br&gt;&lt;br&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="340" alt="01-24" src="http://lh4.google.com/Fotos.Madrugas/R5us3LDoUzI/AAAAAAAAATM/Nqy6gNkUJgo/01-24%5B5%5D" width="644" border="0"&gt; &lt;br&gt;&lt;br&gt;You should edit line 5 and, if running on a non-English OS, change line 9 and comment lines 15 to 17.&lt;br&gt;&lt;br&gt;Line 20 defines an alias to test for the existence of a folder name, create it if not found (creating parent folders if needed) and then changes to that folder. It's not exactly needed here as it's only used in one place, but I copy/pasted it from my aliases file.&lt;br&gt;&lt;br&gt;Line 23 defines another alias to echo a blank line, then echo the passed parameters slightly indented.&lt;br&gt;&lt;br&gt;The %+ symbol equals "whatever command separator is configured on this system". 4NT allows several commands to be executed on a single line, which is useful, among other places, in aliases.&lt;br&gt;&lt;br&gt;&lt;font style="color: rgb(255,0,0)"&gt;&lt;insert image="" 30="" here=""&gt;&lt;/insert&gt;&lt;/font&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="116" alt="25-30" src="http://lh4.google.com/Fotos.Madrugas/R5us4LDoU0I/AAAAAAAAATU/xUmco10MmBM/25-30%5B4%5D" width="644" border="0"&gt; &lt;br&gt;&lt;br&gt;Now we get to the main alias, the one doing most of the work in line 30.&lt;br&gt;Here we test if the 1st parameter is already a junction: if that's the case, then the "TRUENAME" (which is a 4NT function that returns the actual full path and "sees" through junctions, substs, net shares and symlinks) and we compare that to the "FULL" name, that is, the name after expanding any % variables and processing any ..\ or drive aliases. If they're equal, then no junction is in place.&lt;br&gt;Here's an example to make it clearer:&lt;br&gt;Imagine that:&lt;br&gt; &lt;ul&gt; &lt;li&gt;%windir% equals C:\WINDOWS  &lt;li&gt;%windir%\$hf_mig$ has been redirected to T:\Patches\$hf_mig$  &lt;li&gt;%1 equals %windir%\system32\..\$hf_mig$ (this is intentionally complicated to illustrate)&lt;br&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;ECHO %@TRUENAME[%1] would return T:\Patches\$hf_mig$&lt;br&gt;ECHO %@FULL[%1] would return C:\Windows\$hf_mig$&lt;br&gt;&lt;br&gt;If the two match (which is false in this case), then no junction or subst is in place. Seeing that you can only SUBST a whole drive letter and not a folder, it is assumed by the batch that if it fails you already have a junction in place and you get a warning (the ELSE part). If the two strings match, then no junction is in place so it MOVEs the source to the destination, showing only /Totals instead of all files moved, moving /Hidden files, not complaining on /Errors, and moving whole /Subdirectories. Finally, the junction is created to "fake" the system into believing that the whole folder exists but it now points to a different drive.&lt;br&gt;&lt;br&gt;&lt;font style="color: rgb(255,0,0)"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="228" alt="31-44" src="http://lh3.google.com/Fotos.Madrugas/R5us47DoU1I/AAAAAAAAATc/F6eWL1c64r0/31-44%5B4%5D" width="644" border="0"&gt;&amp;nbsp;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;Line 36 shows a message box prompting the user to acknowledge that the batch will NOT check for free space and asking to proceed.&lt;/p&gt; &lt;p&gt;Lines 39-41 stop some services that interfere with moving some of these folders. If you add to the list below, you should first use an utility like &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896655.aspx"&gt;HANDLE&lt;/a&gt; from SysInternals to check if some program or service is keeping that folder or anything inside open and add the service to the list and maybe even use &lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896649.aspx"&gt;PSKILL&lt;/a&gt; to terminate the application if it's not a service. &lt;em&gt;(Edit: on checking SysInternals website for the links to add here, I noticed a &lt;/em&gt;&lt;a href="http://technet.microsoft.com/en-us/sysinternals/bb896768.aspx"&gt;&lt;em&gt;Junction&lt;/em&gt;&lt;/a&gt;&lt;em&gt; utility that you can use if you don't/can't/won't use 4NT!)&lt;/em&gt;&lt;/p&gt; &lt;p&gt;Line 43 creates the root folder if needed.&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="242" alt="45-59" src="http://lh5.google.com/Fotos.Madrugas/R5vXQbDoU4I/AAAAAAAAAT0/W3ujP_1pfzQ/45-59%5B5%5D" width="644" border="0"&gt; &lt;/p&gt; &lt;p&gt;This is the "bulk" of the work, relocating several folders from my system to the cache folder. Pretty self-explanatory (ignore the color bug in some of the lines: that's &lt;a href="http://www.ultraedit.com/"&gt;UltraEdit&lt;/a&gt; not syntax highlighting BTM files properly!)&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="228" alt="60-75" src="http://lh3.google.com/Fotos.Madrugas/R5us67DoU3I/AAAAAAAAATs/k7Jo2e1gcvA/60-75%5B9%5D" width="644" border="0"&gt; &lt;/p&gt; &lt;p&gt;Finally, I also disable (/CACHESIZE=0) and remove existing entries (/PURGECACHE) in the dreaded %windir%\dllcache folder. You may want to remove or comment out this line if you rather keep half a gigabyte of duplicate dlls on your disk.&lt;/p&gt; &lt;p&gt;Lines 69-75 remove ALIASes and SETs used by this batch. Not really needed, but I like to clean up after myself! :)&lt;/p&gt; &lt;p&gt;And that's all for now. There are more folders that can be safely added to this list, and, on my system, this saved me 2.5 GB worth of C: space. &lt;em&gt;EDIT: Even not counting Installer, I still save 1.6 GB worth of data...&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;&lt;font size="4"&gt;End Notes&lt;/font&gt;&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;If you're thinking of doing this to, say, the user profile directory, you'll need to do it from another account and not have logged that account in the current work session. But I would advise you NOT to do it! I once did it, and even in a more "crude" way requiring messing around with the registry, but then I found that doing it saves a LOT of trash! So, upon restoring a working C: image, I'd have my profile all set with all the trash accumulated from all the programs installed/removed/changed.&lt;/p&gt; &lt;p&gt;You can download the batch file from &lt;a href="http://www.box.net/shared/nvpnaaog80"&gt;here&lt;/a&gt;. (Yes, I know I've linked it above, but it's easier to find it here if you come back later!)&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-1063228326925046226?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/1063228326925046226/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=1063228326925046226' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1063228326925046226'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1063228326925046226'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2008/01/more-disk-space-tweaking.html' title='More Disk Space Tweaking...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-8987405185139856642</id><published>2008-01-20T23:39:00.001Z</published><updated>2008-01-20T23:39:47.992Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Blah'/><title type='text'>Help needed with PDF Processing Library...</title><content type='html'>&lt;p&gt;After two days of searching, clicking through hundreds of links, downloading tens of files, trying, browsing, etc, I decided it was about time to give up and ask for help!&lt;/p&gt; &lt;p&gt;I need to process some PDFs, mostly "black-and-whitening" them, that is, converting color boxes and text into black and white. It's not the same as "printing" in black and white though, as I want to replace boxes filled with some color with ones with no color fills and change the corresponding white or light colored text with black text.&lt;/p&gt; &lt;p&gt;Example:&lt;/p&gt; &lt;p&gt;From this:&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="161" alt="Source" src="http://lh6.google.com/Fotos.Madrugas/R5Pbv5xbg-I/AAAAAAAAAR4/ygknKtDkBFE/image%5B9%5D" width="200" border="0"&gt; to this: &lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="161" alt="Destination" src="http://lh4.google.com/Fotos.Madrugas/R5PbwZxbg_I/AAAAAAAAASA/r6YKCGi5cMg/image%5B8%5D" width="200" border="0"&gt; &lt;/p&gt; &lt;p&gt;I'd like to do this in Delphi, but I can do in a million other languages such as Perl, PHP, Python, Java, C# or whatever. I have one restriction though: the library has to be either free or open-source, but this restriction can be waived if there's nothing free or open-source that I can use to solve the problem...&lt;/p&gt; &lt;p&gt;Does anyone know of a library that will allow me to do that? Open a PDF file, loop through all the objects and change characteristics as I see fit, and finally saving the edited file&lt;/p&gt; &lt;p&gt;If you know such a library/tool, please leave a comment... Thank you.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-8987405185139856642?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/8987405185139856642/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=8987405185139856642' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/8987405185139856642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/8987405185139856642'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2008/01/help-needed-with-pdf-processing-library.html' title='Help needed with PDF Processing Library...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-2284233857548075620</id><published>2007-12-10T21:00:00.001Z</published><updated>2008-01-25T01:29:18.975Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='Help'/><title type='text'>Even slimmer Delphi for Win32 2007</title><content type='html'>&lt;p&gt;&lt;a href="http://lh4.google.com/Fotos.Madrugas/R12o9GDSGaI/AAAAAAAAARk/ayjXv4nIzJ4/Slim%5B6%5D"&gt;&lt;img style="border: 0px none ;" alt="Slim" src="http://lh4.google.com/Fotos.Madrugas/R12o-GDSGbI/AAAAAAAAARs/x_fD9U7SS-g/Slim_thumb%5B4%5D" align="left" border="0" height="178" width="204" /&gt;&lt;/a&gt; Following on previous posts, I decided to remove the Windows SDK documentation from my Delphi 2007 installation. The main drive was for the added space: with those 250 MB less I would be able to fit the whole C: into a compressed ghost image file with less than 2 GB and that's with Windows XP SP2 + Office 2003 + Delphi 2007 + quite a few more programs and updates.&lt;/p&gt; &lt;p&gt;Why is it so important to be &amp;lt; 2GB? Because I can easily upload that single file to any FTP server without worrying about the server or client being unable to FTP files bigger than 2GB; because I can copy that to any disk partition/external drive without worrying about the 2GB FAT 32 limit; because it's a single file to keep track of, without risking to have no backup at all just because somehow one of the multi-part files didn't get copied for whatever reason and finally, because I can now fit the file into a 2 GB usb flash drive.&lt;/p&gt; &lt;p&gt;So, rather than just delete the files, I decided to check out the Help registration files and modify them as well. I needed to modify 3 files: h2reg.ini, Master.HxT and RADStudioFilter.xml (get all 3 from &lt;a href="http://www.box.net/shared/du2seak0s4"&gt;here&lt;/a&gt;).&lt;/p&gt; &lt;p&gt;What did I gain?&lt;/p&gt; &lt;ol&gt; &lt;li&gt;250 MB less of disk space;&lt;/li&gt; &lt;li&gt;Going from 14 to 4 seconds on the first help call of each session;&lt;/li&gt; &lt;li&gt;Getting less extraneous results;&lt;/li&gt; &lt;li&gt;Being able to now fit my whole C: drive onto a single &amp;lt; 2GB file.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;What did I loose?&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Basically, the Dinkumware, C++, Delphi.NET and Windows Platform SDK help.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Of these, the most "troublesome" will be the PSDK, but that can be easily accessed online directly from &lt;a href="http://msdn2.microsoft.com/en-us/library/default.aspx"&gt;MSDN Library&lt;/a&gt;, and has the advantage of being more up to date...&lt;/p&gt; &lt;p&gt;How did I do it:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Go into your "%ProgramFiles%\CodeGear\RAD Studio\5.0\Help\Doc" folder;&lt;/li&gt; &lt;li&gt;h2reg -u&lt;/li&gt; &lt;li&gt;copy the supplied files over the ones with the same name there;&lt;/li&gt; &lt;li&gt;h2reg -r (or run the install_and_view.cmd file that is already there)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Now you can delete the PSDK and Dinkumware folders.&lt;/p&gt; &lt;p&gt;If you want to "play safe", backup the whole DOC folder to a CD or external drive, should you want to go back. To undo, h2reg -u, replace the folder, run the install_and_view.cmd.&lt;/p&gt; &lt;p&gt;BTW: disregarding the .NET pre-reqs, Delphi 2007 for Win32 uses around 400 MB of my disk space now, which is just about right for me!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-2284233857548075620?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/2284233857548075620/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=2284233857548075620' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2284233857548075620'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2284233857548075620'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/12/even-slimmer-delphi-for-win32-2007.html' title='Even slimmer Delphi for Win32 2007'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-1415596801521862580</id><published>2007-12-10T14:31:00.001Z</published><updated>2007-12-11T18:29:14.829Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='Help'/><title type='text'>Get rid of another 343 MB...</title><content type='html'>&lt;p&gt;If you installed the &lt;a href="http://cc.codegear.com/item/25163"&gt;Help Update&lt;/a&gt;, be aware that you now have an extra cached (yes, duplicate!) 343 MB worth of data in &lt;em&gt;C:\Documents and Settings\All Users\Application Data\{15EDF4CD-698A-4E52-8278-2E25143AD95B}&lt;/em&gt; (change to wherever you have your user profiles and I don't know where that is in Vista, but if you scan your HDD for the folder named {15EDF4CD-698A-4E52-8278-2E25143AD95B}, you should find out easy!&lt;/p&gt; &lt;p&gt;Yep, that's CG again thinking that they ought to know better than us, developers, and treating us like "dumb users" and caching stuff without even asking for our consent...&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="84" alt="343MB" src="http://lh3.google.com/Fotos.Madrugas/R11Np2DSGZI/AAAAAAAAARc/f79QNrC4Fbw/image%5B4%5D" width="399" border="0"&gt; &lt;/p&gt; &lt;p&gt;For those thinking "when will this guy stop complaining about this?": you know the answer! When CG stops DOING it! :) I can understand some lack of choices for "normal" software, where the users may need to be protected of themselves, but as a developer, I like to be in control of my machine, rather than have it control me, or in this case, rather than have software waste disk space for no good reason other than because someone was lazy when creating the installer...&lt;/p&gt; &lt;p&gt;Sure, disk space is cheap, but what happens when you try to &lt;strong&gt;BACKUP&lt;/strong&gt; that "cheap" disk space? You're left with no other choice than backing up to ANOTHER disk which has huge drawbacks such as now allowing you to (easily) keep a backup outside your installation so you can quickly recover from a building fire or something... And most 1-man shops just can't afford a fire-proof vault that can keep data backups safe because those things are just too expensive, not to mention bulky and heavy...&lt;/p&gt; &lt;p&gt;&lt;em&gt;EDIT (for those that don't read the comments!): &lt;/em&gt;&lt;a href="http://blogs.codegear.com/chrispattinson/"&gt;&lt;em&gt;Chris Pattinson&lt;/em&gt;&lt;/a&gt;&lt;em&gt;, from CodeGear, warns about not being able to run future help patches and needing a full re-install should you delete this folder, so, you can do two things if you still need the space:&lt;/em&gt;&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;1) Back up the folder to a CD/other disk prior to removing it;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;&lt;em&gt;2) If you have already deleted the folder, simply install on a Virtual Machine and copy the folder from there. Or, should you have multiple machines with Delphi 2007, just copy the folder from another one. As long as it's added to the same place, you should be fine.&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/9040327036497268290-1415596801521862580?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/1415596801521862580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=1415596801521862580' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1415596801521862580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1415596801521862580'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/12/get-rid-of-another-343-mb.html' title='Get rid of another 343 MB...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-7018579661784715679</id><published>2007-11-29T20:55:00.001Z</published><updated>2007-11-29T20:55:18.172Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><title type='text'>Delphi 2007 SP3 - Some quirks</title><content type='html'>&lt;p&gt;On my &lt;a href="http://memyselfanddelphi.blogspot.com/2007/11/delphi-2007-improved-help.html"&gt;Help Tests&lt;/a&gt;, I ran around some minor quirks and I decided to blog about them as well! (Whoa: 3 whole posts in one day? Don't worry, that's probably 3 more months without posting so you'll have enough time to recover!)&lt;/p&gt; &lt;p&gt;Don't get me wrong, &lt;em&gt;these are minor quirks&lt;/em&gt;, but it's also the 4th release of Delphi 2007 for Win32 (Release, SP1, SP2, SP3), so these should have been caught and dealt with by now, unless the &lt;em&gt;quality control processes are seriously flawed&lt;/em&gt;... And before someone else goes "Oh, but the product is VERY good if this is all you can say about it", let me just point out that, no, this is not all (I've placed over 40 QC reports back when I did care about doing it), these are just those that &lt;strong&gt;immediately&lt;/strong&gt; jump on you &lt;strong&gt;seconds&lt;/strong&gt; after you start using the product, which doesn't give a good idea about the overall product quality... &lt;strong&gt;&lt;em&gt;First impressions usually take longer to disappear...&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;1) Even selecting "Just me", the shortcut for the RAD Studio Documentation is installed for All Users.&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;In all honesty, I can't say whether this is a bug from the default SP3 install or caused by the Help Update. In either case, it should have been child's play to both detect and fix this, so there's no real excuse for letting something as simple as this slip through...&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;2) Minor toolbar sizing errors:&lt;br&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="169" alt="Toolbars" src="http://lh6.google.com/Fotos.Madrugas/R08nLdVd-vI/AAAAAAAAAQ8/dGTtGEnzWio/Toolbars4" width="819" border="0"&gt;&lt;/p&gt; &lt;p&gt;3) Personality Icon not showing (it appears to show only when a project is loaded, which is a bit odd for a single personality product)&lt;br&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="178" alt="Personality" src="http://lh5.google.com/Fotos.Madrugas/R08nMNVd-wI/AAAAAAAAARE/oqUPAB5KuZo/Personality4" width="813" border="0"&gt; &lt;/p&gt; &lt;p&gt;4) &lt;strong&gt;Help Improve Visual Studio&lt;/strong&gt;. WHY? If you buy a Volvo, will you get a form to fill out and return to FORD about how pleased you are with their engine? It doesn't make sense and for a team of developers, it shouldn't be hard to determine what registry key is needed to stop that from showing. Creates a wrong impression, when one does NOT buy Visual Studio and instead opts for buying a CodeGear product and then sees that "Help Improve Visual Studio"!&lt;/p&gt; &lt;p&gt;5) What's with this dull launch screen? So much space and the only thing that changes is a couple lines at the bottom? I used to like the previous launch screen better. Maybe it gets "filled" when you have some optional dotNET "modules", but as it is, it's plain dull...&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.google.com/Fotos.Madrugas/R08nM9Vd-xI/AAAAAAAAARM/bsAm9B6YPOY/Dull2"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="204" alt="Dull" src="http://lh6.google.com/Fotos.Madrugas/R08nNdVd-yI/AAAAAAAAARU/y0cTJHw1Ouw/Dull_thumb" width="203" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Like I said above, all &lt;strong&gt;minor quirks&lt;/strong&gt;, but also all &lt;strong&gt;first wrong impressions &lt;/strong&gt;with a product...&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-7018579661784715679?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/7018579661784715679/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=7018579661784715679' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7018579661784715679'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7018579661784715679'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/11/delphi-2007-sp3-some-quirks.html' title='Delphi 2007 SP3 - Some quirks'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-4789720115436103963</id><published>2007-11-29T20:44:00.001Z</published><updated>2007-11-29T20:44:33.234Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Help'/><title type='text'>Delphi 2007 Improved Help (?)</title><content type='html'>&lt;p&gt;If you recall from previous posts (yes, I know it has been a while, but I've been busy!), I was frankly disappointed at the so-called "Improved Help".&lt;/p&gt; &lt;h3&gt;The major flaws&lt;/h3&gt; &lt;p&gt;Back on release of Delphi 2007 for Win32, the major flaws I found were the following (listed in no particular order, but numbered for easier reference):&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Crashing the IDE when requesting help on a menu;  &lt;li&gt;Failing to retrieve help for common Pascal/Delphi keywords;  &lt;li&gt;Giving "precedence" in searches to results pertaining to VB, VC++, Anything else under the moon and, in the last spot, Delphi;  &lt;li&gt;Taking up a huge amount of space with non Delphi for Win32 help contents;  &lt;li&gt;Using an Help engine that would consistently remain in memory leaking resources; &lt;li&gt;Failure to retrieve help for components in forms or giving too many pointless options to choose from;&lt;/li&gt;&lt;/ol&gt; &lt;h3&gt;What has changed on SP3&lt;/h3&gt; &lt;p&gt;#1 was solved with SP1, IIRC;&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh3.google.com/Fotos.Madrugas/R08kmtVd-pI/AAAAAAAAAQM/pruIk8uH_Dk/Help%20on%20End%5B5%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="204" alt="Help on End" src="http://lh6.google.com/Fotos.Madrugas/R08kndVd-qI/AAAAAAAAAQU/77be2p-L-Fo/Help%20on%20End_thumb%5B3%5D" width="180" align="right" border="0"&gt;&lt;/a&gt;#2 Simple test program loaded from the demo ones. Pressed help on &lt;strong&gt;unit&lt;/strong&gt;, &lt;strong&gt;interface&lt;/strong&gt;, &lt;strong&gt;uses&lt;/strong&gt;. All of these would pop a few options to choose from, but among those was the "correct" one. Then press F1 over &lt;strong&gt;type&lt;/strong&gt;: only two options given and neither very useful... &lt;strong&gt;Class&lt;/strong&gt;, &lt;strong&gt;procedure&lt;/strong&gt;: again a few choices; &lt;strong&gt;private&lt;/strong&gt;: a few choices too and among them the "good" one, but the one that I clicked first because it looked as the most promising, took me instead to the C++ reference section. No, that's not C++.net, but rather RAD Studio C++ reference. Odd for a "Delphi for Win32" product. Yes, I know that they have common bases for all their products, but that's THEIR choice and US, END-USERS, should NOT be bothered with that. If I'm programming in Delphi (Pascal), I should NOT need C++ help on my system and certainly not being offered that help when I press F1 on a Delphi keyword... The image on the right shows a list of the choices given when pressing F1 on &lt;strong&gt;end&lt;/strong&gt; (but a similar one shows up for &lt;strong&gt;begin&lt;/strong&gt; as well)... &lt;/p&gt; &lt;p&gt;#3 From the tests above, it appears that this has been nicely worked out: many VC++, VB or J# entries still show up, but usually towards the END of the list, rather than being at the top of it.&lt;/p&gt; &lt;p&gt;#4 remains the same and I don't expect it to change seeing that it's a common base for their Win32+dotNET products;&lt;/p&gt; &lt;p&gt;#5 I couldn't get a single DEXPLORER instance to stay in memory. Maybe the conditions that cause that are rather peculiar, but in all the open/closes I did, not once did I see it left or even another instance being loaded while another one was already in memory.&lt;/p&gt; &lt;p&gt;#6 I had to try REALLY hard to find a component that would not get me to that component's reference help. Almost every single component, from those in a form, to even those in the component selector, got me to the proper page after pressing F1 with no further questions asked. &lt;/p&gt; &lt;h3&gt;Conclusions&lt;/h3&gt; &lt;p&gt;1) &lt;strong&gt;Definitely a much welcome improvement, but still needs a lot of work.&lt;/strong&gt; It's sad that 9 months after the initial release that touted "Improved Help" as one of the key factors for purchasing the new version, it still fails to live to that promise. Maybe by the time they get to Delphi 2008 the help is then at the standards they said it was back on release of Delphi 2007. Let's just hope they keep improving it, because it certainly looks as they still have a lot of work to do, but as long as they keep doing it, maybe in the future we will get a decent help!&lt;/p&gt; &lt;p&gt;2) There are still quite a few "place-holders" like the one in this example:&lt;br&gt;&lt;a href="http://lh5.google.com/Fotos.Madrugas/R08koNVd-rI/AAAAAAAAAQc/1HsE4d8DpPo/Place%20Holder%5B6%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="484" alt="Place Holder" src="http://lh6.google.com/Fotos.Madrugas/R08kpdVd-sI/AAAAAAAAAQk/37lC_WLyKHA/Place%20Holder_thumb%5B4%5D" width="634" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;3) I was, towards the end of my tests, prompted with this:&lt;br&gt;&lt;a href="http://lh3.google.com/Fotos.Madrugas/R08kqtVd-tI/AAAAAAAAAQs/WVwzK6gy3WI/Local%20Help%5B5%5D"&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="484" alt="Local Help" src="http://lh4.google.com/Fotos.Madrugas/R08kr9Vd-uI/AAAAAAAAAQ0/hvqnPgVAF-8/Local%20Help_thumb%5B3%5D" width="554" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I opted to use Local Help as the primary source and haven't tested with the default option given as shown above. Seemed to work pretty much the same but only did a few more tests.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-4789720115436103963?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/4789720115436103963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=4789720115436103963' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4789720115436103963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4789720115436103963'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/11/delphi-2007-improved-help.html' title='Delphi 2007 Improved Help (?)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-6735391313470556599</id><published>2007-11-29T16:50:00.001Z</published><updated>2007-11-29T16:55:41.979Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><title type='text'>Delphi 2007 for Win32 SP3</title><content type='html'>&lt;p&gt;This week I've been a bit sick. Nothing serious, just a nasty cold with the nasty side effect of going through paper tissues like there was no tomorrow.&lt;/p&gt; &lt;p&gt;So, rather than trying really hard to stay focused on debugging tasks at hand when I had to interrupt every 30 seconds to wipe my nose, I decided it was about time to do something I've been wanting to do for a long time and just couldn't afford the time to do it: upgrade my Delphi 2007 SP1 with both the SP3 and the improved help files that were released after that. That's something that doesn't require much concentration and is "compatible" with using paper tissues every 30 seconds...&lt;/p&gt; &lt;p&gt;So, I start by going to the Delphi registered user's downloads and download two files:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://cc.codegear.com/item/25015"&gt;Delphi 2007 for Win32 R2/Update 3 ISO&lt;/a&gt; (4.16 GB, updated 2007/09/14)  &lt;li&gt;&lt;a href="http://cc.codegear.com/item/25163"&gt;CodeGear RAD Studio 2007 Help Update 1&lt;/a&gt; (473 MB, updated 2007/11/15)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Armed with those files, I reset my computer to a ghost file with nothing but Windows XP SP2 + patches + drivers. After a few hours of installing more patches and all the software I use *except* Delphi (a process that is now much faster as I keep many utilities pre-installed on my D:\Utils folder), it was time to tackle the main procedure: Install Delphi 2007 SP3.&lt;/p&gt; &lt;p&gt;So, I start by creating a new ghost image to have a more recent "fall-back" should something fail, and I mount the ISO on a Virtual CloneDrive.&lt;/p&gt; &lt;p&gt;My first impression is not good when I double-click the drive:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh6.google.com/Fotos.Madrugas/R07tvtVd-bI/AAAAAAAAAOc/HrsAxocP3tg/Error012"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="93" alt="Error01" src="http://lh3.google.com/Fotos.Madrugas/R07tw9Vd-cI/AAAAAAAAAOk/jP6StUZsalc/Error01_thumb" width="204" border="0"&gt;&lt;/a&gt; &lt;a href="http://lh3.google.com/Fotos.Madrugas/R07tx9Vd-dI/AAAAAAAAAOs/XtuQFU9J7tA/Error022"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="149" alt="Error02" src="http://lh6.google.com/Fotos.Madrugas/R07tytVd-eI/AAAAAAAAAO0/P0UuPYZizOA/Error02_thumb" width="204" border="0"&gt;&lt;/a&gt; &lt;a href="http://lh6.google.com/Fotos.Madrugas/R07tztVd-fI/AAAAAAAAAO8/7PJOBjecPVA/Error032"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="149" alt="Error03" src="http://lh6.google.com/Fotos.Madrugas/R07t0tVd-gI/AAAAAAAAAPE/WPPDkEfEY18/Error03_thumb" width="204" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I then proceed to open the drive instead and manually click the install file which brings me to this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://lh4.google.com/Fotos.Madrugas/R07t2NVd-hI/AAAAAAAAAPM/XSLDrxVYQrk/InstallLauncher2"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="151" alt="InstallLauncher" src="http://lh3.google.com/Fotos.Madrugas/R07t29Vd-iI/AAAAAAAAAPU/dNx-dhrBwpE/InstallLauncher_thumb" width="204" border="0"&gt;&lt;/a&gt; &lt;/p&gt; &lt;h3&gt;Pre-Reqs&lt;/h3&gt; &lt;p&gt;&lt;a href="http://lh3.google.com/Fotos.Madrugas/R07t39Vd-jI/AAAAAAAAAPc/S8iDQwKjj0k/PreReqsDiskSpace7"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="204" alt="Pre-Reqs Disk Space" src="http://lh6.google.com/Fotos.Madrugas/R07t4tVd-kI/AAAAAAAAAPk/oZql98TDyMA/PreReqsDiskSpace_thumb3" width="177" align="left" border="0"&gt;&lt;/a&gt; From this point on, everything runs much smoother: I proceed to install the pre-reqs, which I intentionally had not installed before, and then a reboot is in order.&lt;/p&gt; &lt;p&gt;The pre-reqs took an astonishing 2 GB of my C: drive as you can see from the image on the left. After closer scrutiny, you can easily see that it still suffers from the same "bugs" as the original install, namely, caching the same install files in several different places. That's 1.1 GB worth of .NET SDK install files in those two folders marked in the image.&lt;/p&gt; &lt;p&gt;This whole process did complete without any problems and within approximately 10 minutes, after which I had to reboot to proceed with the install.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Install&lt;/h3&gt; &lt;p&gt;&lt;a href="http://lh5.google.com/Fotos.Madrugas/R07t5dVd-lI/AAAAAAAAAPs/7pdO4FUUIpc/DelphiDiskSpace3"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="204" alt="Delphi Disk Space" src="http://lh4.google.com/Fotos.Madrugas/R07t6NVd-mI/AAAAAAAAAP0/LKJ6Kd-tuLA/DelphiDiskSpace_thumb1" width="136" align="left" border="0"&gt;&lt;/a&gt; Then, on to installing Delphi 2007 for Win32 SP3. After inputting my registration data, I selected to install everything available to my PRO SKU, including Rave Reports. The whole process took around 15 minutes and again proceeded with no problems.&lt;/p&gt; &lt;p&gt;As you can see, Delphi itself, discounting the pre-reqs, requires around 1.5 GB in the Professional Win32 SKU. That's roughly 450 MB for cached install files, 340 MB for help files and 690 MB for CodeGear files in either the program folder or common files.&lt;/p&gt; &lt;p&gt;I could have ran the IDE, but instead I opted for installing the Help Update. The one minor quirk about it, is that you need to go to a command line and type HelpSetup /upgrade. But the upgrade ran smoothly and this time I didn't time it, but it was around 10 or 15 minutes. Not worth another space screenshot as it only differed in a couple MB.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;h3&gt;Full space report&lt;/h3&gt; &lt;p&gt;&lt;a href="http://lh4.google.com/Fotos.Madrugas/R07t7NVd-nI/AAAAAAAAAP8/RMkwdjx2r5U/FullDiskSpace3"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="204" alt="Full  Disk Space" src="http://lh3.google.com/Fotos.Madrugas/R07t79Vd-oI/AAAAAAAAAQE/l11GT0tSWu8/FullDiskSpace_thumb1" width="135" align="left" border="0"&gt;&lt;/a&gt; To the left you can find a FULL disk space report before installing even the pre-reqs and after installing Delphi and the help update. As you can see, that's 3.7 GB worth of stuff, from pre-reqs to cached files to more cached files to the proper program files. Not really an improvement over the original setup, IIRC... However, since I believed that at least 1.1 GB of this can be safely shaved, that's what I'll did next. So, I removed the first of the two folders marked in the Pre-Reqs image above and was surprised to find out that the 2nd one was no longer there. However, the total space used was not consistent with that 2nd folder being removed, so after a quick search, I found out that it had been instead moved into my own Local Settings rather than the All Users' one. That's consistent with the choice I was given of installing for myself only (which I chose), or installing for all users. So, I deleted that 2nd folder and then ran Windows Update to download the latest .NET 2 security updates. As expected, it worked flawlessly, and I don't expect to be running into problems by not having those files around.&amp;nbsp; Of course, Windows Update doesn't update the SDK itself, so this was not a big test. But if you want to play safe, just burn those two folders to a DVD should they be required at some upgrade point in the future...&lt;/p&gt; &lt;p&gt;So, the (current) final space used is down to 2.5 GB, but that's without having yet followed my own guide on how to trim some more MBs out of it. &lt;em&gt;&lt;strong&gt;That's intentional,&lt;/strong&gt; as I want to test the help file and see if it has been REALLY improved without using my own tweaks.&lt;/em&gt; That will be the subject of &lt;strong&gt;my next post&lt;/strong&gt; which should be posted either later today or tomorrow, if all goes as planned.&lt;/p&gt; &lt;h3&gt;Conclusion&lt;/h3&gt; &lt;p&gt;The whole process ran very smoothly, even if CodeGear still thinks that, just because disk space is cheap, they can waste as much as they want. Sure, disk space IS cheap, but if you want to create a ghost image of your main working drive and burn that to a DVD, having 2 GB worth of data or having 2 GB worth of data + 2 GB of worthless cached files DOES make a big difference in making it all fit onto a DVD or not. The way I do it, if anything other than an hardware failure goes very wrong, I can be up and running with a working configuration by popping a DVD into my drive and restoring my system to a full working condition in under 20 minutes, instead of re-installing everything for the better part of 1 or 2 days. The same problem applies to creating and backing up a Virtual Machine with a full working install, so, &lt;strong&gt;&lt;em&gt;please CodeGear, stop wasting one's disk space just because it's "apparently" cheap!&lt;/em&gt;&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/9040327036497268290-6735391313470556599?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6735391313470556599/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6735391313470556599' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6735391313470556599'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6735391313470556599'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/11/delphi-2007-for-win32-sp3.html' title='Delphi 2007 for Win32 SP3'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-3274699630840866137</id><published>2007-09-24T09:21:00.001Z</published><updated>2007-09-24T09:21:17.296Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Live Writer'/><title type='text'>Windows Live Writer and Pascal Code Formatting (updated)</title><content type='html'>&lt;p&gt;Since Steve Dunn has updated his WLW add-in, I checked it and found out that it still doesn't use the fixed pascal definition file that I sent Actipro some months ago.&lt;/p&gt; &lt;p&gt;So, if you want proper pascal syntax highlighting, download &lt;a href="http://dunnhq.com/codeformatterforwindowslivewriter"&gt;his control&lt;/a&gt;, follow his instructions and afterwards copy &lt;a href="http://fmadsoft.com/mmd/files/ActiproSoftware.Pascal.xml"&gt;this file&lt;/a&gt; over the same named one in the languages folder.&lt;/p&gt; &lt;p&gt;Among other fixes that I recall are some missing keywords (unit for instance) and support for // comments and proper nested comment / string support.&lt;/p&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-3274699630840866137?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/3274699630840866137/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=3274699630840866137' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3274699630840866137'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3274699630840866137'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/09/windows-live-writer-and-pascal-code.html' title='Windows Live Writer and Pascal Code Formatting (updated)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-5430589405438595680</id><published>2007-07-27T12:04:00.001Z</published><updated>2007-07-27T13:45:50.553Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='CodeGear'/><title type='text'>The best 330 MB of my C: drive...</title><content type='html'>&lt;p&gt;Well, I hate to be negative about stuff, I really do, but I just can't help it. Having fought so many times with a lacking help system, I finally decided it was time to uninstall it. It's pretty useless to me as if I want MS docs I'll search for them on the net and they will be more up to date. So, I finally decided to go to Add-Remove Programs and Change the Rad Studio installation to remove those help files.&lt;/p&gt; &lt;p&gt;In doing so, I found out a few more things:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Install-aware sucks even more than I thought! What used to be a few seconds on a decent installer takes over 6 minutes to do in this Install-Aware setup!  &lt;li&gt;They use a lot of progress bars but really show no progress: a blinking light would show the same information... At one point 2 were present at once and really I could be no closer or farther away from knowing how much more time I'd have to wait as they were file-based progress bars and not *process* based ones...  &lt;li&gt;What the heck is a "Cach"? As in "Removing Cach folder xxx"  &lt;li&gt;Shouldn't I get a more graceful message when pressing F1 on RAD Studio if I chose to remove the help files? (in a legitimate way and not hacking the files!)&lt;br&gt;And the message even shows in Portuguese even though my Windows and RAD Studio are both English...&lt;br&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="155" alt="X" src="http://fmadsoft.com/mmd/images/Thebest330MBofmyCdrive_A6B4/X.png" width="400" border="0"&gt;  &lt;li&gt;Finally, if I chose to remove the cached install files, what are 100 MB left there for?&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;This is all a nasty combo of a lousy installer with probably some lousy install scripts...&lt;/p&gt; &lt;p&gt;Q: Would I uninstall Delphi 2007?&lt;/p&gt; &lt;p&gt;A: Well, I've got used to it and it works well overall so most likely no, I'll keep using it. I just got fed up with the so labeled "Improved Help"... Pitty that MSFT set the road that others followed by releasing unfinished software...&lt;/p&gt; &lt;p&gt;For those who may not like me "bitching" about this: would you like to buy a car that "sort of works"? And that has to go through a few Service Packs before you really got what you're promised it would be before purchasing? I'm just applying the same principle to Software...&lt;/p&gt; &lt;p&gt;[EDIT: I've just "fixed" that error message: removed the htmlhelp2100.bpl (or something like that) from the known IDE packages so now pressing F1 silently fails. I'll probably try and find some replacement help files/reader as I vaguely remember something about using previous versions help files. Then I'll try downloading those help files from the customer area if it works! :)]&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-5430589405438595680?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/5430589405438595680/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=5430589405438595680' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5430589405438595680'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5430589405438595680'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/07/best-330-mb-of-my-c-drive.html' title='The best 330 MB of my C: drive...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-781826847557501392</id><published>2007-07-16T11:40:00.001Z</published><updated>2007-07-16T11:51:01.331Z</updated><title type='text'>No comments...</title><content type='html'>&lt;p&gt;Well, I lied! I have one comment: I did press the feedback link, even though the question looks almost a joke! :)&lt;/p&gt; &lt;p&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="408" alt="Joke" src="http://fmadsoft.com/mmd/images/Nocomments_B24B/Joke.png" width="532" border="0"&gt; &lt;/p&gt; &lt;p&gt;BTW: The Void stamp and yellow highlighting is just me playing around with &lt;a href="http://www.techsmith.com/screen-capture.asp"&gt;SnagIt&lt;/a&gt;! :)&lt;/p&gt; &lt;p&gt;&lt;strong&gt;EDIT: It appears it gets even better:&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;img style="border-right: 0px; border-top: 0px; border-left: 0px; border-bottom: 0px" height="3829" alt="Bug2" src="http://fmadsoft.com/mmd/images/Nocomments_B24B/Bug2.png" width="826" border="0"&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-781826847557501392?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/781826847557501392/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=781826847557501392' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/781826847557501392'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/781826847557501392'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/07/no-comments.html' title='No comments...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-7411400745254483749</id><published>2007-07-14T14:32:00.001Z</published><updated>2007-07-14T14:48:02.975Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Delphi "killed" by VB6? WTF?</title><content type='html'>&lt;p&gt;Well, I read in &lt;a href="http://www.dummzeuch.de/news2007/english.html#a2007-07-14"&gt;TWM's blog&lt;/a&gt; that Delphi is listed in the &lt;a href="http://www.softwaredeveloper.com/features/ghosts-in-machine-071207/"&gt;12 languages that never took off&lt;/a&gt;.&lt;/p&gt; &lt;p&gt;Since I can't comment on either page, I decided to comment in my blog...&lt;/p&gt; &lt;p&gt;I can only say one thing: that article reminds one of the languages mentioned in it (the one that starts with brain...); that article&amp;nbsp;is surely someone's brain fart!&lt;/p&gt; &lt;p&gt;Saying that VB6 killed Delphi and showing a stupid piece of partial code as if it's a "hello world" program???&lt;/p&gt; &lt;p&gt;And for those that would accuse me of attacking that article because I'm a Delphi fan-boy: just read my blogs here and you'll know that I'm everything &lt;strong&gt;&lt;em&gt;but&lt;/em&gt;&lt;/strong&gt; a fan-boy!&lt;/p&gt; &lt;p&gt;But I also don't like to see some moron (sorry, but can't help to use that word), say such things about Delphi.&lt;/p&gt; &lt;p&gt;Is that guy getting paid from MSFT or something? Or is he just a dumb arse?&lt;/p&gt; &lt;p&gt;&lt;strong&gt;[Edit:]&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;I've since gone to digg.com and checked out who &lt;a href="http://www.digg.com/programming/Ghosts_in_the_Machine_12_Coding_Languages_That_Never_Took_Off/who"&gt;blogged about that&lt;/a&gt; digg among other things: it turns out that my impression that digg was just full of meaningless trash is correct! Of those that "blogged" about that digg, nearly all are non-related commercial sites of some sort that are probably just using some robot-like technology to crank up their site in the listings!&lt;/p&gt; &lt;p&gt;Now, I already &lt;strong&gt;&lt;em&gt;thought&lt;/em&gt;&lt;/strong&gt; that digg was a waste of time but now I know for sure that &lt;strong&gt;&lt;em&gt;it is&lt;/em&gt;&lt;/strong&gt; really a waste of time! At least that dumb article had some usefulness! :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-7411400745254483749?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/7411400745254483749/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=7411400745254483749' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7411400745254483749'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7411400745254483749'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/07/delphi-by-vb6-wtf.html' title='Delphi &amp;quot;killed&amp;quot; by VB6? WTF?'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-117309629300136736</id><published>2007-07-13T15:49:00.001Z</published><updated>2007-07-13T15:49:43.329Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Command line: do you still use it?</title><content type='html'>&lt;p&gt;Well, I do and for quite some years I've been using JPSoft's 4NT. I have some nice batch files, custom prompts, custom functions and it has a whole lot of built-in commands, variables and functions as well.&lt;/p&gt; &lt;p&gt;But, not only do I find myself doing less actual command line stuff, I sometimes get a bit mad at this product, like yesterday when I was attempting to use drive aliases inside a function and later found out that it doesn't work there, only in commands... Kind of the legacy from a program that, the author has admitted, has a ton of different parsers for a ton of different functions/commands. It's also partly due to the fact of maintaining compatibility with command.com and cmd.exe in their many versions and changes so far, but sometimes I think that it would be better to use something else for my command line scripting, perhaps something that doesn't carry this legacy compat baggage and thus can have a more uniform and &lt;em&gt;predictable&lt;/em&gt; syntax.&lt;/p&gt; &lt;p&gt;Which brings me to the question: do you still do comand line? What tools/programs do you use for it? Or do you rely on good old fashioned cmd.exe for your command line work?&lt;/p&gt; &lt;p&gt;I've once tried to use PowerShell from MSFT, but, not only did it still have a lot of rough edges (like, for instance, not being able to easily work on files with some valid dos file name characters!), and, even though it is a very considerable change from cmd.exe, and sure looks powerful, it wasn't that much better than cmd.exe and even a bit lacking in many basic functions, at least a couple years ago when I tested it!&lt;/p&gt; &lt;p&gt;So, if you have a nice experience with something other than 4NT/CMD/COMMAND, let me know what you use and how happy you're about it and I may even go and try that for&amp;nbsp;a change!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-117309629300136736?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/117309629300136736/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=117309629300136736' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/117309629300136736'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/117309629300136736'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/07/command-line-do-you-still-use-it.html' title='Command line: do you still use it?'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-6338424096152576753</id><published>2007-07-10T15:55:00.001Z</published><updated>2007-07-10T16:05:58.038Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Tips'/><title type='text'>Quick tip for compiling/testing DLLs</title><content type='html'>&lt;p&gt;Now that Delphi 2007 is using MSBuild, you can take advantage of the Pre-Build events to automate a common headache: killing that task that is using your DLL before you build it!&lt;/p&gt; &lt;p&gt;I'm currently developing an Outlook add-in so I found myself repeatedly quitting Outlook or getting an error because Delphi can't generate the DLL if I don't close Outlook, so, to solve that, and since, for some weird reason, I got used to always build instead of compiling, I just added the following command to this project's Pre-Build Events:&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;taskkill /F /IM outlook.exe&lt;/p&gt; &lt;p&gt;DIR &amp;gt;NUL&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;And that's all there is to it. You can also launch outlook after the build so as to immediately test your changes by adding the proper command to the Post-Build events, but I didn't add that as sometimes I do a few builds just to check syntax/compiler errors while I'm still working on something and I don't want to have outlook popup everytime...&lt;/p&gt; &lt;p&gt;Also, you can try without /F (force) and if your outlook or dll host can terminate gracefully&amp;nbsp;in a speedy way you won't need to force termination, but in my PC and with Outlook it doesn't quit that fast, so I need the /F...&lt;/p&gt; &lt;p&gt;EDIT: The DIR &amp;gt;NUL command is just so that, should you not currently have outlook running, the error from taskkill won't stop your build process! :)&lt;/p&gt; &lt;p&gt;&lt;em&gt;BTW: you can achieve something similar in BDS 2006 (and maybe 2005: haven't tested on this one), if you read my blog post about &lt;a href="http://memyselfanddelphi.blogspot.com/2007/03/pre-and-post-build-automation-in-delphi.html"&gt;adding pre/post build events to BDS 2006&lt;/a&gt;...&lt;/em&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6338424096152576753?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6338424096152576753/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6338424096152576753' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6338424096152576753'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6338424096152576753'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/07/quick-tip-for-compilingtesting-dlls.html' title='Quick tip for compiling/testing DLLs'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-6389642220398606062</id><published>2007-07-06T14:53:00.001Z</published><updated>2007-07-06T16:22:03.654Z</updated><title type='text'>Code formatting and readability</title><content type='html'>&lt;p&gt;Well, each developer tends to have his own set of rules be that for code formatting, identifier naming or whatever. And each developer, when looking at someone else's code tends to go like: "wow: what was this guy thinking?"...&lt;/p&gt; &lt;p&gt;Here's a piece of auto-generated code from Add-In Express:&lt;/p&gt; &lt;p&gt;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:63af1a4d-3e90-4c84-b3d0-410644eb1e4a" contenteditable="false" 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;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; ActivateEvent(Sender: TObject);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; ClickEvent(Sender: TObject);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; CreateEvent(Sender: TObject);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; DblClickEvent(Sender: TObject);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; DeactivateEvent(Sender: TObject);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; DestroyEvent(Sender: TObject);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; KeyPressEvent(Sender: TObject; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;var&lt;/span&gt;&lt;span style="color: #000000; "&gt; Key: Char);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; PaintEvent(Sender: TObject);&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;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;I find this very annoying and hard to read/browse! So, even though I know it serves no useful purpose other than please my eyesight, I turn that into something like this:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:dff11ecd-689f-4ec7-97ca-70d58b15640d" contenteditable="false" 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;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; ActivateEvent  ( Sender: TObject );&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; ClickEvent     ( Sender: TObject );&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; CreateEvent    ( Sender: TObject );&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; DblClickEvent  ( Sender: TObject );&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; DeactivateEvent( Sender: TObject );&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; DestroyEvent   ( Sender: TObject );&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; KeyPressEvent  ( Sender: TObject; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;var&lt;/span&gt;&lt;span style="color: #000000; "&gt; Key: Char);&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;procedure&lt;/span&gt;&lt;span style="color: #000000; "&gt; PaintEvent     ( Sender: TObject );&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;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now, isn't this 2nd version much easier on the eyes? Surely it compiles the same as the 1st one no faster nor slower no more and no less bytes used, but for us, humans, it's way easier to look at!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Heck, I even do this on forms after they are stable enough and I know I won't be adding too much stuff/events to it! :) And if I do add, I'll re-sort and re-format those lines! :)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There are a ton more of things I change for cosmetic reasons, such as placing &lt;strong&gt;begin&lt;/strong&gt;/&lt;strong&gt;end&lt;/strong&gt; on pretty much every single &lt;strong&gt;if&lt;/strong&gt;, even if it really wasn't needed (there are exceptions mainly when the one-liner if's are used as a sort of case construct where keeping them one-lined does help readability).&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Again, a small sample:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:0d717475-6134-4181-88ba-f641f8903a10" contenteditable="false" 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;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; FPropertyPageSite &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;nil&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;then&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; Assigned(ActiveFormControl) &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;then&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; Assigned(ActiveFormControl.ClientSite) &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;then&lt;/span&gt;&lt;span style="color: #000000; "&gt;&lt;br /&gt;        ActiveFormControl.ClientSite.QueryInterface( IID_PropertyPageSite, FPropertyPageSite );&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;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;And, after reformatting:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:cbcee4af-8c7c-431a-9801-08e85b1f6450" contenteditable="false" 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;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; FPropertyPageSite &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;nil&lt;/span&gt;&lt;span style="color: #000000; "&gt; &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;    &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; Assigned(ActiveFormControl) &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;      &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; Assigned(ActiveFormControl.ClientSite) &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;        ActiveFormControl.ClientSite.QueryInterface( IID_PropertyPageSite, FPropertyPageSite );&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;/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;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Now, you may think that there is not much difference in here, but there is! Especially if some have &lt;strong&gt;begin&lt;/strong&gt;/&lt;strong&gt;end&lt;/strong&gt; and others don't and depending on what code follows. Plus, always using &lt;strong&gt;begin&lt;/strong&gt;/&lt;strong&gt;end&lt;/strong&gt; means you don't need to look too hard on the code as to where to place the &lt;strong&gt;begin&lt;/strong&gt;/&lt;strong&gt;end&lt;/strong&gt; pair when instead of a single line inside a multiple &lt;strong&gt;if&lt;/strong&gt; you need to have two lines of code: all the code layout is perfectly done and you just add that extra line where you want it without much trouble...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;There are many more things that I change, even in code that is not my own as long as I'm the only one using it and as long as I need to change/edit/maintain it, but I thought of these as I was making some changes to this code and figured I'd take a few mins break and blog about it! :)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Also, you can take advantage of Delphi's built-in begin/end helper: just type &lt;strong&gt;begin&lt;/strong&gt; at the end of a line, place your cursor to the end of the last line of the code block to be enclosed and press &lt;strong&gt;enter&lt;/strong&gt;: &lt;em&gt;et voilá&lt;/em&gt;, instant &lt;strong&gt;end&lt;/strong&gt; properly lined up, courtesy of Dephi's IDE... :)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;[EDIT: I knew I was being lazy with the begin/end/if example so here's a better one...]&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:20604149-5508-4a8c-a605-8ca64aed076e" contenteditable="false" 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; Messy version&lt;/span&gt;&lt;span style="color: #008000; "&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;  Result :&lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; (AControl.Handle &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; Focused);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;not&lt;/span&gt;&lt;span style="color: #000000; "&gt; Result &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;then&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; 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; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;to&lt;/span&gt;&lt;span style="color: #000000; "&gt; AControl.ControlCount &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;&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; AControl.Controls[i] &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;is&lt;/span&gt;&lt;span style="color: #000000; "&gt; TWinControl &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;then&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; TWinControl(AControl.Controls[i]).Handle &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; Focused &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;then&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; True;&lt;br /&gt;        &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;else&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; TWinControl(AControl.Controls[i]).ControlCount &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;0&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;then&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; SearchForHWND(TWinControl(AControl.Controls[i]), Focused);&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; Cleaned up version&lt;/span&gt;&lt;span style="color: #008000; "&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;  Result :&lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; (AControl.Handle &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; Focused);&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;not&lt;/span&gt;&lt;span style="color: #000000; "&gt; Result &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;    &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; &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;to&lt;/span&gt;&lt;span style="color: #000000; "&gt; AControl.ControlCount &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; &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; AControl.Controls[i] &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;is&lt;/span&gt;&lt;span style="color: #000000; "&gt; TWinControl &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;        &lt;/span&gt;&lt;span style="color: #0000FF; "&gt;if&lt;/span&gt;&lt;span style="color: #000000; "&gt; TWinControl(AControl.Controls[i]).Handle &lt;/span&gt;&lt;span style="color: #000000; "&gt;=&lt;/span&gt;&lt;span style="color: #000000; "&gt; Focused &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; True;&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;span style="color: #0000FF; "&gt;else&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; TWinControl(AControl.Controls[i]).ControlCount &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;0&lt;/span&gt;&lt;span style="color: #000000; "&gt; &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; SearchForHWND(TWinControl(AControl.Controls[i]), Focused);&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;/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;/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;/p&gt;&lt;br /&gt;&lt;p&gt;Of the two pieces of identical code, which one do you think is easier to add something to? Say an else to one of the if's or some other instruction in any of the "branches"... And note that, the indentation on the messy one is not that messy and it helps a bit, but you sure can follow the cleaned up version better when trying to see all possible outcomes from that function, no? It certainly works &lt;strong&gt;much&lt;/strong&gt; better for me at least! :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6389642220398606062?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6389642220398606062/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6389642220398606062' title='16 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6389642220398606062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6389642220398606062'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/07/code-formatting-and-readability.html' title='Code formatting and readability'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>16</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-5914451696168123231</id><published>2007-07-06T11:34:00.001Z</published><updated>2007-07-06T11:35:06.978Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Bugsie - Part 2</title><content type='html'>&lt;p&gt;In my &lt;a href="http://memyselfanddelphi.blogspot.com/2007/07/can-you-confirm-this-bug.html"&gt;previous post&lt;/a&gt;, I mentioned a minor layout bug that I watched during the CodeRage Encore presentations. I can now consistently replicate it&amp;nbsp;but other people have mixed success depending on what system they use. Here are the necessary steps to reproduce that show that it is in fact a question of the IDE not redrawing the gray/black corner handles.&lt;/p&gt; &lt;ol&gt; &lt;li&gt;File -&amp;gt; New Form&lt;/li&gt; &lt;li&gt;Add 2 buttons to the form such that&amp;nbsp;they're not aligned&lt;/li&gt; &lt;li&gt;Drag a selection rectangle and note which button has darker corner handles&lt;/li&gt; &lt;li&gt;Right-Click the &lt;strong&gt;other&lt;/strong&gt; button, that is, the one with the lighter corners&lt;/li&gt; &lt;li&gt;Select&amp;nbsp;Position -&amp;gt; Align -&amp;gt; Cancel&lt;/li&gt; &lt;li&gt;At this point, if the bug happens on your system, the corner grabbing rectangles should not have changed colors, i.e., the button with the darker corners is still the same&lt;/li&gt; &lt;li&gt;If step 6 happens on your system, then click the Align Tops on the Align toolbar and see that the anchor button was the &lt;strong&gt;wrong&lt;/strong&gt; button!&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Now, I said that you could see that it was a display issue. Here's how to do that:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;Repeat steps 1-5 on the above list&lt;/li&gt; &lt;li&gt;If, after step 5, you can confirm that the button corner handles haven't changed color, i.e., bug is happening, then simply open up something that will cover the form so as&amp;nbsp;to force Delphi to later redraw it&amp;nbsp;(Internet Explorer, FireFox, Explorer, Outlook, etc)&lt;/li&gt; &lt;li&gt;When you move that window away (or switch back to Delphi), you will see that the darker corners are now properly displayed.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Here's the QC report created on this one:&lt;/p&gt; &lt;p&gt;Report No: 48631&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; Status: Reported&lt;br&gt;Form designer may fail to correctly update changed anchors&lt;br&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=48631"&gt;http://qc.codegear.com/wc/qcmain.aspx?d=48631&lt;/a&gt; &lt;p&gt;BTW, if you need more information on the black/gray corner handles, check &lt;a href="http://www.stevetrefethen.com/blog/AligningSizingAndSpacingCommandsInTheDelphi2007VCLDesigner.aspx"&gt;this post&lt;/a&gt; from Steve Trefethen...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-5914451696168123231?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/5914451696168123231/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=5914451696168123231' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5914451696168123231'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5914451696168123231'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/07/bugsie-part-2.html' title='Bugsie - Part 2'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-4947182286459712152</id><published>2007-07-05T17:18:00.001Z</published><updated>2007-07-05T23:13:57.235Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Can you confirm this bug?</title><content type='html'>&lt;p&gt;Well, 3 months ago, when watching one of the CodeRage Encore presentations, I witnessed a bug in action (more on that sooner!); even though I tried (as you can see in the replay), I couldn't get the presenter to replicate the bug. Now that the replays are finally available and now that I know how to skip so as to quickly find out which presentation and at what point it was (3 months make you forget a lot of stuff, especially when you were thinking the replays would be on after a week or so!), I've finally confirmed that I &lt;strong&gt;did&lt;/strong&gt; indeed saw a bug.&lt;/p&gt; &lt;p&gt;Can you please go &lt;a href="http://video.codegear.com/CodeRage2007EncoreArchives/CodeRageEncoreCompilerRTLWeb/CodeRageEncoreCompilerRTLWeb.html"&gt;here&lt;/a&gt;, wait for the video to fully stream (progress bar fully light gray) and then position a few seconds before 06:38 where the bug happens and confirm that it is indeed a bug? I'll report it in QC as soon as I get some 3rd party confirmation on that.&lt;/p&gt; &lt;p&gt;Here's the bug: if you notice in that presentation, there are 3 buttons selected; the middle button has darker corners meaning that it's the button that is used to "control" the action, that is, whatever you choose it relates to &lt;strong&gt;that&lt;/strong&gt; button. Notice that, when selecting the "Align top" the 3 buttons are (&lt;em&gt;incorrectly&lt;/em&gt;!) aligned to the first button's top and &lt;strong&gt;not&lt;/strong&gt; to the one with the darker corners. &lt;strike&gt;(Watch the video from the start for the explanation on the dark corners).&lt;/strike&gt; &lt;em&gt;[Edit: the dark corners are either explained elsewhere or later in the video, not before!]&lt;/em&gt;&lt;/p&gt; &lt;p&gt;If you can confirm what I saw, then please leave a comment here.&lt;/p&gt; &lt;p&gt;(CodeGear should probably hire me for finding bugs for them, but since I do it for free anyway, I don't think they want to! :))&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;em&gt;[EDIT:]&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;Actually, at first, after making this blog post, I thought it could be some&amp;nbsp;Camtasia bug as I could not reproduce it (as I right-clicked the top-left button it was selected); I have however been able to replicate it afterwards!  &lt;p&gt;Here are&amp;nbsp;the full steps:  &lt;p&gt;1) File-&amp;gt;New Form&lt;br&gt;2) Double click 3 times on TButton&lt;br&gt;3) Grab button 3 to top left&lt;br&gt;4) Grab button 2 to mid right&lt;br&gt;5) Drag a selection box from upper-left to lower-right  &lt;p&gt;At this point, Button 1 is selected;  &lt;p&gt;6) Right-click Button 3&lt;br&gt;7) Choose Position-&amp;gt;Align from the menu and Cancel  &lt;p&gt;At this point, Button 1 still appears to be selected.  &lt;p&gt;8) Click on Align Tops in the Align toolbar and get the wrong behavior doing the align with Button 3 instead. &lt;p&gt;It appears that Button 3 was in fact selected by right-clicking and that the designer didn't redraw to show that. &lt;p&gt;BTW: Using Delphi 2007 SP1 on Windows XP with theming active.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-4947182286459712152?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/4947182286459712152/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=4947182286459712152' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4947182286459712152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4947182286459712152'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/07/can-you-confirm-this-bug.html' title='Can you confirm this bug?'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-7353890994159775891</id><published>2007-07-05T16:29:00.001Z</published><updated>2007-07-05T16:29:47.348Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='CodeGear'/><title type='text'>CodeGear Replays: not entirely their fault... :)</title><content type='html'>&lt;p&gt;Well, after my &lt;a href="http://memyselfanddelphi.blogspot.com/2007/06/codegear-encore-non-replays.html"&gt;previous&lt;/a&gt; post, and after some comment left in by a reader, I decided to "bug" Anders (not knowing he's on vacation!), and it appears that the problem with the video not skipping to where you try to skip is Camtasia's fault... Having tried Camtasia in the past, and seeing how many "helper" files it generates and all of them including the video duration, I would expect it to be able to do something as simple as positioning the video cursor somewhere where the video has already streamed (you can tell by the bar color, gradually filling with a lighter gray where it has already streamed).&lt;/p&gt; &lt;p&gt;It appears that instead, you &lt;strong&gt;have&lt;/strong&gt; to wait until the &lt;strong&gt;whole&lt;/strong&gt; video has finished streaming before you can reliably position the video playback cursor somewhere! I just browsed some of &lt;a href="http://video.techsmith.com/snagit/latest/edu/tutorials/enu/sng_tutorials.html"&gt;their own videos&lt;/a&gt; and noticed that they too suffer from the same problem so it does not look like it's CodeGear to blame on this one! :)&lt;/p&gt; &lt;p&gt;On the plus side, &lt;u&gt;&lt;em&gt;Anders also said he might be looking at making the download links available&lt;/em&gt;&lt;/u&gt; after returning from his vacation next week...&lt;/p&gt; &lt;p&gt;For now, you can start the playback of any video, pause it (if you don't want to be listening to it while it streams), and when the progress bar has completely filled light gray, you can then position the playback cursor wherever you want and use that as a quick way to skip past content that you want to, well, skip! :)&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-7353890994159775891?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/7353890994159775891/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=7353890994159775891' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7353890994159775891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7353890994159775891'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/07/codegear-replays-not-entirely-their.html' title='CodeGear Replays: not entirely their fault... :)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-2607192904499566446</id><published>2007-06-28T23:43:00.001Z</published><updated>2007-06-28T23:43:22.814Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>CodeGear Encore - The (non) Replays</title><content type='html'>&lt;p&gt;As you may have noticed, CodeGear finally placed the &lt;a href="http://dn.codegear.com/article/36688"&gt;replays&lt;/a&gt; online.&amp;nbsp;Well, I'm not even going to mention that the initial plan was to have those available only to registered Delphi Customers as it was in those terms that the event took place... (Well, it seems I &lt;strong&gt;did&lt;/strong&gt; mention it, but I have no problem that it's available for everyone!)&lt;/p&gt; &lt;p&gt;What I'm complaining here is about the &lt;strong&gt;&lt;em&gt;lousy job&lt;/em&gt;&lt;/strong&gt; done that took them &lt;strong&gt;&lt;em&gt;3 whole months&lt;/em&gt;&lt;/strong&gt; to do!&lt;/p&gt; &lt;p&gt;Sure, I know that CodeGear has been busy but did they really need 3 whole months between the CodeRage Encore event and this (let's be nice) publishing of the sessions?&lt;/p&gt; &lt;p&gt;I mean: where are the download links? Only choice is to view online. But much worst than that, try and position the video replay cursor somewhere in the timeline: it will never be where you put it, thus completely preventing you from skimming those contents...&lt;/p&gt; &lt;p&gt;Three months ago, when the event took place, I saw what looked like a bug; I tried to get the presenter to repeat the steps but that didn't seem to reproduce the bug; since we had already been promised the replays before the event started, I didn't worry too much. I though: I'll wait for the replays and try and see if I did really see a bug in action and if true, I'll report it, if not, no further action will be needed. &lt;/p&gt; &lt;p&gt;Well, never in a million lifetimes would I think that publishing those replays would take 3 whole months and, worst, that after those 90 days, the job would still be done in a very amateurishly way...&lt;/p&gt; &lt;p&gt;&lt;em&gt;&lt;u&gt;CodeGear, this is &lt;strong&gt;not&lt;/strong&gt; the way to tell us customers that one of your goals is quality: doing a bad service and taking so long to do it so bad is &lt;strong&gt;not&lt;/strong&gt; what I or many others would call &lt;strong&gt;quality&lt;/strong&gt;...&lt;/u&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;BTW: Should the responsible at CG want to at least fix the skimming bit, it has to do with the many files that Camtasia uses and the different ways of indicating the video size: you &lt;strong&gt;&lt;em&gt;can't&lt;/em&gt;&lt;/strong&gt; re-use them for other presentations &lt;em&gt;&lt;strong&gt;unless&lt;/strong&gt;&lt;/em&gt; they have the exact same duration, otherwise you'll end up in the mess you have managed to do...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-2607192904499566446?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/2607192904499566446/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=2607192904499566446' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2607192904499566446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2607192904499566446'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/codegear-encore-non-replays.html' title='CodeGear Encore - The (non) Replays'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-4434611907266894660</id><published>2007-06-20T11:13:00.001Z</published><updated>2007-09-24T09:25:08.993Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Live Writer'/><title type='text'>Windows Live Writer, Spell Checker, Pascal Code Formatting</title><content type='html'>&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;font color="#ff0000"&gt;September 2007 edit: Steve Dunn has updated his control, and so this no longer applies. Check my &lt;/font&gt;&lt;a href="http://memyselfanddelphi.blogspot.com/2007/09/windows-live-writer-and-pascal-code.html"&gt;&lt;font color="#ff0000"&gt;other post&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt; about using his newer version and "fixing" the used Pascal definition file.&lt;/font&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt; &lt;p&gt;After reading &lt;a href="http://17slon.com/blogs/gabr/2007/06/spell-checking-in-windows-live-writer.html"&gt;this post&lt;/a&gt; from Primoz Gabrijelcic, which took me to &lt;a href="http://jtbworld.blogspot.com/2007/06/windows-live-writer-spell-checking.html"&gt;this other post&lt;/a&gt; from Jimmy Bergmark, my Windows Live Writer has once again the Spell check option.&lt;/p&gt; &lt;p&gt;In the 2nd post mentioned above, I saw a reference to another plug-in, a code-formatting plug-in, something that I wanted to add to WLW too, so I decided to check it out. I downloaded it (&lt;a href="http://dunnhq.com/codeformatterforwindowslivewriter"&gt;from here&lt;/a&gt;), and was a bit surprised about the lack of Pascal as a choice for language. A quick check later and I saw the different languages each had an XML file, so I thought for myself: "It can't be that hard to grab one and modify it for Pascal". And so, I started the conversion process. Unfortunately, I had placed too much faith on the recently fixed "Improved Help" of Delphi 2007: needless to say that, after a few minutes of fighting with the help, which, although improved since Delphi 2007's release as at least now it no longer renders the IDE unusable if you press F1 on a menu, I had nevertheless to give up. Finding basic things in that help is a pain in the ***, and that's putting it nicely! Be that using filters or no filters, language filters or no language filters, finding Pascal help for a list of basic types has proven to be a much greater challenge than it should have been.&lt;/p&gt; &lt;p&gt;So, attempt number two: Google to the rescue! I googled a bit and within seconds had found &lt;a href="http://www.actiprosoftware.com/Download/Freeware.aspx?ProductGroupKey=CH"&gt;this other page&lt;/a&gt;, from where I could download the controls that were used by this code formatting plug-in, so, after typing a fake name and e-mail (I hate these "we want your name before you can download" type of sites!), I downloaded the free controls. Extracted the ActiproSoftware.Pascal.xml file and placed it in the code formatting plug-in Languages folder and fired up WLW.&lt;/p&gt; &lt;p&gt;Things didn't quite work out: no Pascal available in the language choices. A little bit more digging, and I found that the DunnHQ.Wlw.CodeFormatter.dll.config file is in fact an XML file with a list of all available languages and definitions, so, after adding the following line:&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:a237ab2c-2c27-407a-9297-d36d98636797" 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;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;language &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;key&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Pascal&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; definitionPath&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;./plugins/Languages/ActiproSoftware.Pascal.xml&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;/&amp;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;and restarting WLW, I "Pasted Clipboard as Code", selected Pascal from the list of languages and got this as result:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/WindowsLiveWriterSpellCheckerPascalCodeF_8D3A/Bugger.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="112" alt="Bugger" src="http://fmadsoft.com/mmd/images/WindowsLiveWriterSpellCheckerPascalCodeF_8D3A/Bugger_thumb.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Humm... Something is amiss surely...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;After another quick check, I found the source: the language definition XML files used in the plug-in have LanguageDefinitionVersion="3.0", while this one downloaded from ActivePro has LanguageDefinitionVersion="4.0", so, time to go check if I can find one of those for version 3...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;(At this point, I can not even save a draft of this post as I get this when trying to do it:)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/WindowsLiveWriterSpellCheckerPascalCodeF_8D3A/Bugger2.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="112" alt="Another bugger" src="http://fmadsoft.com/mmd/images/WindowsLiveWriterSpellCheckerPascalCodeF_8D3A/Bugger2_thumb.png" width="240" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;(D:\XDesk is my Desktop folder: somehow it's trying to load the language definition for the small line of XML above from the Desktop instead of from the program's start location..)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;So, after a quick copy/paste of that plugins folder to my desktop, I saved, quit WLW and resumed Googling...&lt;/p&gt;&lt;br /&gt;&lt;p&gt;It turns out that the format has been significantly changed between versions 3 and 4 and that the Pascal definition was added only in version 4. Luckily, at this point I also found another code-formatting plug-in that seems to be based around v 4 as it lists Pascal in the available languages! So, after downloading and trying &lt;a href="http://www.istaysharp.net/index.php?title=SyntaxColor4Writer"&gt;SyntaxColor4Writer&lt;/a&gt;, I was again in a dead end: it's for Beta 1 and would not work on Beta 2!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Well, I ended up clicking the "Add a Plugin..." button in WLW and downloading &lt;a href="http://gallery.live.com/liveItemDetail.aspx?li=d4409446-af7f-42ec-aa20-78aa5bac4748&amp;amp;bt=9&amp;amp;pl=8"&gt;Code Snippet plugin for Windows Live Writer&lt;/a&gt; so that's what I'll try next. If it doesn't work ok, I'll update this blog post asap. Another dead end... List of supported languages:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/WindowsLiveWriterSpellCheckerPascalCodeF_8D3A/image.png"&gt;&lt;img style="border-top-width: 0px; border-left-width: 0px; border-bottom-width: 0px; border-right-width: 0px" height="119" alt="image" src="http://fmadsoft.com/mmd/images/WindowsLiveWriterSpellCheckerPascalCodeF_8D3A/image_thumb.png" width="78" border="0"&gt;&lt;/a&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;Uninstall this one, try the "Add a Plugin..." button again... Another quick look finds another one that is probably based around the same source as the list of languages is identical, so, back to Google again... (I really should be working instead!)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Back to the starting idea and let's see how hard it is to retrofit v 4 Pascal definition XML into v3 controls. It turns out that it's VERY easy! All you need to do for it to start working is change both 4s in the first line of the Pascal.xml file into 3s. Like this:&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:8351b219-70f7-4f7a-839c-e54c742e3926" 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;&amp;lt;&lt;/span&gt;&lt;span style="color: #800000;"&gt;SyntaxLanguage &lt;/span&gt;&lt;span style="color: #FF0000;"&gt;Key&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;Pascal&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; LanguageDefinitionVersion&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;3.0&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; Secure&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;True&amp;quot;&lt;/span&gt;&lt;span style="color: #FF0000;"&gt; xmlns&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;=&amp;quot;http://ActiproSoftware/SyntaxEditor/3.0/LanguageDefinition&amp;quot;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;&amp;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;&lt;br /&gt;&lt;p&gt;So, after that it's now working with Pascal code. There are a couple things that don't look that good, namely the wrong color of keywords such as "unit", "uses" and others, but it should be easy now to fix the Pascal.xml file and simply add those keywords. So, with a little help from Delphi Basics to get what the built-in help in Delphi 2007 won't give me (a list of reserved keywords), here's how some sample Pascal code looks like:&lt;/p&gt;&lt;br /&gt;&lt;div class="wlWriterSmartContent" id="scid:57F11A72-B0E5-49c7-9094-E3A15BD5B5E7:d693ccb8-7c10-4e56-8d31-5e8b3a116380" 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; uHeader;&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, Classes, Graphics, Controls, Forms, Dialogs,&lt;br /&gt;  Outlook2000, adxolFormsManager, 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;  TfrmHeader &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;(TadxOlForm)&lt;br /&gt;    lbxHeader: TListBox;&lt;br /&gt;    &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; adxOlFormADXSelectionChange(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;protected&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; Protected 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;published&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; Published 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;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;{&lt;/span&gt;&lt;span style="color: #008000;"&gt;NOTE: The adxOlForm1 variable is intended for the exclusive use&lt;br /&gt;       by the TadxOlFormsCollectionItem Designer.&lt;br /&gt;       NEVER use this variable for other purposes.&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;var&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  frmHeader : TfrmHeader;&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;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;uses&lt;/span&gt;&lt;span style="color: #000000;"&gt; MapiDefs, MapiTags, MAPIUtil;&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; StringToList( Str: string; lstResult: TStrings );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; Convert a header string containing CR/LFs and TABs into&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; a stringlist where each new property starts on a new line&lt;/span&gt;&lt;span style="color: #008000;"&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;  iPos  : integer;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #0000FF;"&gt;const&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  CRLF &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;13&lt;/span&gt;&lt;span style="color: #000000;"&gt;#&lt;/span&gt;&lt;span style="color: #800080;"&gt;10&lt;/span&gt;&lt;span style="color: #000000;"&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;  lstResult.Clear;&lt;br /&gt;  iPos :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Pos( CRLF, Str );&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;while&lt;/span&gt;&lt;span style="color: #000000;"&gt; (iPos &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;0&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;and&lt;/span&gt;&lt;span style="color: #000000;"&gt; (iPos &lt;/span&gt;&lt;span style="color: #000000;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Length( Str )&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; &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; If the new line starts with a Space or Tab, it's a continuation line&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; (Str[iPos&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;/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;9&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;or&lt;/span&gt;&lt;span style="color: #000000;"&gt; (Str[iPos&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;/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;32&lt;/span&gt;&lt;span style="color: #000000;"&gt;) &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;      Delete( Str, iPos, &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;end&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;else&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;      lstResult.Add( Copy( Str, &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;, Pred(iPos) ) );&lt;br /&gt;      Delete( Str, &lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;, Succ( iPos ) );&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;    iPos :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Pos( CRLF, Str );&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: #0000FF;"&gt;procedure&lt;/span&gt;&lt;span style="color: #000000;"&gt; TfrmHeader.adxOlFormADXSelectionChange( 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;  Selection: Outlook2000.Selection;&lt;br /&gt;  IMail    : _MailItem;&lt;br /&gt;  IMessage : MAPIDefs.IMessage;&lt;br /&gt;  PropValue: PSPropValue;&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;  lbxHeader.Items.Clear;&lt;br /&gt;  Selection :&lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; Self.ExplorerObj.Selection;&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; Selection.Count &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;0&lt;/span&gt;&lt;span style="color: #000000;"&gt; &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;    &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; Try for a &amp;quot;normal&amp;quot; mail item&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;      Selection.Item(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;).QueryInterface( IID__MailItem, IMail );&lt;br /&gt;      &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;not&lt;/span&gt;&lt;span style="color: #000000;"&gt; Assigned( IMail ) &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;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; If it failed, try for a Read/Delivery Receipt item&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        Selection.Item(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;).QueryInterface( IID__ReportItem, IMail );&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;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;not&lt;/span&gt;&lt;span style="color: #000000;"&gt; Assigned( IMail ) &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;        &lt;/span&gt;&lt;span style="color: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; I don't use Remote Mail, but for completeness this should be tested also...&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;        Selection.Item(&lt;/span&gt;&lt;span style="color: #800080;"&gt;1&lt;/span&gt;&lt;span style="color: #000000;"&gt;).QueryInterface( IID__RemoteItem, IMail );&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;except&lt;/span&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; Ignore exceptions&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;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; Assigned(IMail) &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;      &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: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; IMail.Sent &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;          IMail.MAPIOBJECT.QueryInterface(MapiDefs.IMessage, IMessage);&lt;br /&gt;          &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;if&lt;/span&gt;&lt;span style="color: #000000;"&gt; Assigned(IMessage) &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;            &lt;/span&gt;&lt;span style="color: #0000FF;"&gt;try&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;              PropValue :&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;nil&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; HrGetOneProp(IMessage, PR_TRANSPORT_MESSAGE_HEADERS, PropValue) &lt;/span&gt;&lt;span style="color: #000000;"&gt;=&lt;/span&gt;&lt;span style="color: #000000;"&gt; S_OK &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;                StringToList( PropValue^.Value.lpszA, lbxHeader.Items );&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;              MAPIFreeBuffer(PropValue);&lt;br /&gt;              IMessage :&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;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;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;/span&gt;&lt;span style="color: #0000FF;"&gt;finally&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;        IMail :&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;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;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;span style="color: #0000FF;"&gt;else&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: #008000;"&gt;//&lt;/span&gt;&lt;span style="color: #008000;"&gt; If no headers found...&lt;/span&gt;&lt;span style="color: #008000;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: #000000;"&gt;      lbxHeader.Items.Add( &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;This type of message does&lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #000000;"&gt; );&lt;br /&gt;      lbxHeader.Items.Add( &lt;/span&gt;&lt;span style="color: #800000;"&gt;'&lt;/span&gt;&lt;span style="color: #800000;"&gt;not have mail headers&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;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; Test Comment &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;initialization&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; Another test comment&lt;br /&gt;     spanning 2 lines &lt;/span&gt;&lt;span style="color: #008000;"&gt;*)&lt;/span&gt;&lt;span style="color: #000000;"&gt;&lt;br /&gt;  RegisterClass(TPersistentClass(TfrmHeader));&lt;br /&gt;  &lt;/span&gt;&lt;span style="color: #008000;"&gt;(*&lt;/span&gt;&lt;span style="color: #008000;"&gt; Another comment w/ a&lt;br /&gt;    { Nested comment }&lt;br /&gt;  &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;finalization&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; Another test of nested comments&lt;br /&gt;    (* This is&lt;br /&gt;       another one *)&lt;br /&gt;  &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;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;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;span style="font-weight: bold; font-size: 180%"&gt;Wrap up&lt;/span&gt; &lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;em&gt;&lt;strong&gt;Edit: Check &lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;a href="http://memyselfanddelphi.blogspot.com/2007/09/windows-live-writer-and-pascal-code.html"&gt;&lt;font color="#ff0000"&gt;&lt;em&gt;&lt;strong&gt;this post&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#ff0000"&gt;&lt;em&gt;&lt;strong&gt; for the updated files.&lt;/strong&gt;&lt;/em&gt;&lt;/font&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;So, if you got kind of lost, go &lt;strike&gt;here&lt;/strike&gt; to download the WLW code formatting plug-in then download &lt;strike&gt;this file&lt;/strike&gt; which is my updated ActiproSoftware.Pascal.xml file and place it in the plugins\languages folder. Download &lt;strike&gt;this file&lt;/strike&gt; and place it in the plugins folder overwriting the existing one (updated languages definition file for the plugin). And you're good to go! &lt;br /&gt;&lt;p&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;From now on you'll be able to easily insert Pascal formatted code onto your WLW post!&lt;/p&gt;&lt;br /&gt;&lt;p&gt;If you find some syntax formatting error, let me know: I'll fix whatever needs fixing and, in a couple days, I'll send this updated file to the plugin's author so he can update his plug-in and also to the component's vendor since they're providing this for free so they too can update their component.&lt;/p&gt;&lt;br /&gt;&lt;p&gt;Have fun blogging about code... :)&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Note: Somehow, either this plug-in's fault or WLW beta 2 fault, extra empty lines were added to my post, so don't be surprised if you need to delete some extra lines after publishing... :)&lt;br&gt;&lt;br&gt;Also, for no good reason, even though it was displaying properly in WLW, some spaces were removed from the code, either from publishing or from my editing of this post afterwards. Just added those extra spaces and will see if they stick after re-publishing...&lt;br&gt;Update: apparently did not work! :( Still, not a big issue so I won't be spending time on it for now...&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Yet another update: I'm now re-editing the post from within WLW: first time I try this!! It appears to work just fine, so I'll try to re-publish it from WLW and see if the missing spaces in the code somehow re-appear as they show nicely in WLW...&lt;/em&gt;&lt;/p&gt;&lt;br /&gt;&lt;p&gt;&lt;em&gt;Well, it appears to be the plug-in's fault for adding the extra space: probably some style change that was not undone. As for the spaces, as long as I don't edit the post in the browser they display correctly. I'll have to get back to work, so maybe later I'll check the generated html from the code plug-in and try to find the bug. Until then, just ignore the extra spacing that makes this post look a bit ugly... :)&lt;/p&gt;&lt;/em&gt; &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-4434611907266894660?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/4434611907266894660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=4434611907266894660' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4434611907266894660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4434611907266894660'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/windows-live-writer-spell-checker.html' title='Windows Live Writer, Spell Checker, Pascal Code Formatting'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-3130617318509339771</id><published>2007-06-15T12:16:00.001Z</published><updated>2007-06-15T12:18:31.789Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Developing Office Add-ins the Easy Way - Part 3 of 2 (AKA: Yes, I do know how to count!)</title><content type='html'>&lt;p&gt;Well, even though it's probably not the best use for my time judging from the &lt;em&gt;overwhelming&lt;/em&gt; feedback I got on the previous 2 parts, it also doesn't take me that long to write this 3rd part of 2 so I'll do it anyway! :)&lt;/p&gt; &lt;p&gt;I've fixed most (all?) of the blogger screw-ups with the formatting of my post and some incorrect color coding from using Steve Trefethen's Syntax Highliting page, and now I decided to add a couple files for easier download. &lt;a href="http://fmadsoft.com/mmd/files/Insider_Source.zip"&gt;Here&lt;/a&gt; you can find the zip file with nothing but the source code and the Extended Mapi units, and &lt;a href="http://fmadsoft.com/mmd/files/Outlook_Insider_Setup.exe"&gt;here&lt;/a&gt; you can find a nice setup made with &lt;a href="http://www.jrsoftware.org/isinfo.php"&gt;InnoSetup&lt;/a&gt; in a few minutes that will install the compiled add-in, register it, create a source subfolder with the source code in it and allow you to uninstall all this at any time should you want to. Just remember that you need to restart Outlook to have it acknowledge the newly installed add-in.&lt;/p&gt; &lt;p&gt;Because I know that Blogger will again mess up my formating, I'm instead placing here a prt-scr of the InnoSetup script used for creating the installer: most of it was done through the wizard...&lt;/p&gt; &lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/DevelopingOfficeAddinstheEasyWayPart3of2_BA39/Inno.png" atomicselection="true"&gt;&lt;img style="border: 0px none ;" alt="Inno" src="http://fmadsoft.com/mmd/images/DevelopingOfficeAddinstheEasyWayPart3of2_BA39/Inno_thumb.png" border="0" height="457" width="640" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;On a different note, Part 3 of Delphi in a Radical Build will be postponed for a while: my available time has dropped considerably and whenever I pick up on that 3rd part I'll have to redo the 1st two parts as I've recently had some data loss while trying to repartition my external HDD using a re-partitioning utility that had not let me down before... So, the amount of work involved in creating that part 3 of 3 would largely surpass my free time for a lot longer. Not all is lost however as at least I can read my own articles and recreate it: that's one nice side-effect of blogging about something! :)&lt;/p&gt; &lt;p&gt;On another different note, is it my impression or the Windows Live Writer beta 2 (which I installed after finishing the previous 2 posts), lost the spell checker?? I could swear there was an option to spell check in the previous beta!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-3130617318509339771?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/3130617318509339771/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=3130617318509339771' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3130617318509339771'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3130617318509339771'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/developing-office-add-ins-easy-way-part_15.html' title='Developing Office Add-ins the Easy Way - Part 3 of 2 (AKA: Yes, I do know how to count!)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-2101514442236889224</id><published>2007-06-14T16:43:00.001Z</published><updated>2007-06-15T11:34:22.039Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Developing Office Add-ins the Easy Way - Part 2 of 2 (AKA: The tutorial stuff...)</title><content type='html'>&lt;p&gt;If you haven't read &lt;a title="Blah, Blah, Blah" href="http://memyselfanddelphi.blogspot.com/2007/06/developing-office-add-ins-easy-way-part.html"&gt;Part 1&lt;/a&gt;, I'd advise you to do so. In it you'll find some more information on these components and, more importantly, your &lt;strong&gt;20% discount coupon&lt;/strong&gt; redeemable until the end of June 2007...&lt;/p&gt; &lt;h4&gt;Step 1: Running the new Add-In Wizard&lt;/h4&gt; &lt;ol&gt; &lt;li&gt;Fire up Delphi and choose File-&amp;gt;New-&amp;gt;Other, Delphi Projects-&amp;gt;Add-In Express VCL-&amp;gt;ADX Outlook Add-in.  &lt;/li&gt;&lt;li&gt;Click Next and, for the project name, I'm using &lt;strong&gt;Insider&lt;/strong&gt; and &lt;strong&gt;coInsider&lt;/strong&gt; for the coClass Name. The first is used, guess what?, for the Project's name and the 2nd is used in Outlook's COM Addins dialog (Tools-&amp;gt;Options-&amp;gt;Other-&amp;gt;Advanced Options) &lt;/li&gt;&lt;li&gt;Clicking next will show you the "Option Pages" step which is optional.  &lt;ul&gt; &lt;li&gt;For this addin we'll just hit next again. For a more complex add-in, this would be where you'd create your own option pages. You can have option pages displayed as another tab on the Options dialog or by right-clicking all or some folders in outlook, say one for Inbox, other for Outbox: they are different types of dialogs serving different purposes and you can add as many as you like.&lt;/li&gt;&lt;/ul&gt; &lt;/li&gt;&lt;li&gt;Hit next again and we'll be in the "Outlook 2007 Task Panes"; again, not of interest to us here so move along.  &lt;/li&gt;&lt;li&gt;Click Next, Finish and we're done here.&lt;/li&gt;&lt;/ol&gt; &lt;h4&gt;Step 1.5: More blah, blah, blah...&lt;/h4&gt; &lt;p&gt;We now have a basic project that we'll add some meat to in order for it to do what we set out to. We could easily add an explorer or inspector command bar, but we don't need them for this project. An explorer command bar is one that is displayed on Outlook; an inspector command bar is displayed when you double-click some outlook item and "inspect" it in it's own window. Say, when you double click an e-mail message and another window pops up. You can have the inspector command bars only display for certain types of folders by simply setting a property, say, create an e-mail inspector bar that is displayed only when inspecting a mail message but not when viewing an appointment. And, of course, you can add as many as you want and add buttons, menus and other controls to them at will.&lt;/p&gt; &lt;p&gt;Among other cool objects you can use (not needed for this add-in), are the TADX&amp;lt;AppNameHere&amp;gt;AppEvents, such as TADXOutlookAppEvents from where you can add your own handlers. Here's the list of OutlookAppEvents (these are global events: other components have their own events as well, but these are events that don't relate to a particular button being pressed or hotkey being used):&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H01pb6FTsXo/RnF4R7Lu8KI/AAAAAAAAAE8/BTgIvJBiZSY/s1600-h/Bugger.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_H01pb6FTsXo/RnF4R7Lu8KI/AAAAAAAAAE8/BTgIvJBiZSY/s320/Bugger.png" alt="" id="BLOGGER_PHOTO_ID_5075970504363274402" border="0" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;OnItemSend&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;OnNewMail&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;OnNewMailEx&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;OnQuit&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;OnReminderFire&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;&lt;em&gt;OnStartup&lt;/em&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt; &lt;p&gt;BTW: Thanks to blogger messing up my formatting big-time, I had to shorten the list to just a few sample items so as not to have a whole lot of space wasted. Maybe I'll take a prt-scr later and update this...&lt;/p&gt; &lt;h4&gt;Step 2: Adding some components and code&lt;/h4&gt; &lt;ol&gt; &lt;li&gt;What we are now going to add is an "ADX Outlook Form" which is a small pane where we will be displaying the headers of the selected message, so go to File-&amp;gt;New-&amp;gt;Other, Delphi Projects-&amp;gt;Add-In Express VCL and double click "ADX Outlook Form".  &lt;/li&gt;&lt;li&gt;Save the form (I used &lt;strong&gt;uHeader&lt;/strong&gt; for the unit name).  &lt;/li&gt;&lt;li&gt;Add a TListBox, call it &lt;strong&gt;lbxHeader&lt;/strong&gt; and set it to fill the form.  &lt;/li&gt;&lt;li&gt;We need another component to control creation of these panes. Go on to the main project form (should be empty) and add a "TadxOlFormsManager".  &lt;/li&gt;&lt;li&gt;In this component's events, add the following code to the "OnADXBeforeFormInstanceCreateEx" event:  &lt;pre  style="color:white;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;1&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; args.FolderObj.EntryID &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; OutboxEntryID &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;2&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  args.Cancel :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; true;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;3&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;Let's add that OutboxEntryID as a protected property to the form (TAddInModule) of type string:  &lt;pre  style="color:white;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;1&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;property OutboxEntryID: string read FOutboxEntryID;&lt;/span&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;And the corresponding internal field to the private section of TAddInModule:  &lt;pre  style="color:white;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;1&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;FOutboxEntryID: string;&lt;/span&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;And a method to set the value in the protected section (not a setter method though!):  &lt;ul&gt;&lt;/ul&gt;&lt;pre  style="color:white;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 1&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;procedure&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; SetOutboxEntryID;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 2&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 3&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;procedure&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; TAddInModule.SetOutboxEntryID;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 4&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 5&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  nameSpace   : Outlook2000.NameSpace;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 6&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  outboxFolder: Outlook2000.MAPIFolder;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 7&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 8&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 9&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    nameSpace      :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; OutlookApp  .GetNamespace    ( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;MAPI&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;         );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;10&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    outboxFolder   :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; nameSpace   .GetDefaultFolder( olFolderOutbox );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;11&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    FOutboxEntryID :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; outboxFolder.EntryID;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;12&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;span style="color: rgb(0, 0, 255);"&gt;finally&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;13&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    nameSpace    :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;14&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    outboxFolder :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;15&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;16&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;/pre&gt; &lt;/li&gt;&lt;li&gt;Now click the form and enter the following code to it's "&lt;strong&gt;OnAddInInitialize&lt;/strong&gt;" event:&lt;br /&gt;&lt;pre  style="color:white;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;1&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;SetOutboxEntryID();&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;Finally, let's give the &lt;strong&gt;TadxOlFormsManager&lt;/strong&gt; something to manage: double click it and add a new item. Set the following properties for that item:&lt;/li&gt; &lt;ol&gt; &lt;li&gt;&lt;strong&gt;ExplorerItemTypes&lt;/strong&gt;-&amp;gt;&lt;strong&gt;expMailItem&lt;/strong&gt;, set to &lt;strong&gt;True&lt;/strong&gt; as we want this form displayed on mail folders only; leave all others to false. &lt;/li&gt;&lt;li&gt;&lt;strong&gt;ExplorerLayout&lt;/strong&gt; set to &lt;strong&gt;elTopSubpane&lt;/strong&gt;; (you can play around with it later if you want!) &lt;/li&gt;&lt;li&gt;And finally, let's link it to the form we created above: set &lt;strong&gt;FormClassName&lt;/strong&gt; to our form created above. It will be available on the drop down as soon as you go into &lt;strong&gt;File-&amp;gt;Use Unit&lt;/strong&gt; and select our uHeader unit.&lt;/li&gt;&lt;/ol&gt;&lt;/ol&gt; &lt;p&gt;If you build the project, register it and launch outlook, you'll see a blank new pane displayed: Sorry for the large, dimmed and blurred image: it's from my main outlook... :)&lt;/p&gt; &lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/DevelopingOfficeAddinstheeasywayPart2of_EF99/EmptyFrame2.png" atomicselection="true"&gt;&lt;img style="border: 0px none ;" src="http://fmadsoft.com/mmd/images/DevelopingOfficeAddinstheeasywayPart2of_EF99/EmptyFrame_thumb.png" border="0" height="140" width="240" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;Also, if you notice, so far most of the code was related to adding an exception, that is, we wanted our form to display on mail folders, &lt;strong&gt;unless&lt;/strong&gt; that folder is Outbox.&lt;/p&gt; &lt;p&gt;Now it's time to add our real meat into this.&lt;/p&gt; &lt;h4&gt;Step 3: Adding our application logic&lt;/h4&gt; &lt;ol&gt; &lt;li&gt;Lets go back to our &lt;strong&gt;uHeader&lt;/strong&gt; unit and add the following code to the &lt;strong&gt;onADXSelectionChange&lt;/strong&gt; event:&lt;br /&gt;&lt;pre  style="color:white;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 1&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;procedure&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; TfrmHeader.adxOlFormADXSelectionChange( Sender: TObject );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 2&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 3&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  Selection: Outlook2000.Selection;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 4&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  IMail    : _MailItem;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 5&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  IMessage : MAPIDefs.IMessage;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 6&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  PropValue: PSPropValue;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 7&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 8&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  lbxHeader.Items.Clear;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 9&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  Selection :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Self.ExplorerObj.Selection;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;10&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  IMail     :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;11&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Selection.Count &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;12&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;try &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Try for a "normal" mail item&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;13&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      Selection.Item(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;).QueryInterface( IID__MailItem, IMail );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;14&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;not&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Assigned( IMail ) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;15&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  //&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; If it failed, try for a Read/Delivery Receipt item&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;16&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;        Selection.Item(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;).QueryInterface( IID__ReportItem, IMail );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;17&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;18&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;not&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Assigned( IMail ) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;19&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;  //&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; I don't use Remote Mail, but for completeness this should be tested also...&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;20&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;        Selection.Item(&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;).QueryInterface( IID__RemoteItem, IMail );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;21&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;22&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;except&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Ignore exceptions&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;23&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; QueryInterface may throw up an exception, but I don't recall under what condition it was&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;24&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; It was for some non-&gt;relevant item, i.e., one that we're not processing here&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;25&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; That's the bad thing of writing something and not documenting it properly when it happens!&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;26&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;27&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Assigned(IMail) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;28&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;29&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; IMail.Sent &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;30&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;          IMail.MAPIOBJECT.QueryInterface(MapiDefs.IMessage, IMessage);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;31&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;          &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Assigned(IMessage) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;32&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;try&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;33&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;              PropValue :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;34&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;              &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; HrGetOneProp(IMessage, PR_TRANSPORT_MESSAGE_HEADERS, PropValue) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; S_OK &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;35&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;                StringToList( PropValue^.Value.lpszA, lbxHeader.Items );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;36&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;              &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;37&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;finally&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;38&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;              MAPIFreeBuffer(PropValue);&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;39&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;              IMessage :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;40&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;            &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;41&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;          &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;42&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;        &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;43&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;finally&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;44&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;        IMail :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;nil&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;45&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;46&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; If no headers found...&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;47&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      lbxHeader.Items.Add( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;This type of message does&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;48&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      lbxHeader.Items.Add( &lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;not have mail headers&lt;/span&gt;&lt;span style="color: rgb(128, 0, 0);"&gt;'&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;49&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;50&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;51&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;/pre&gt; &lt;/li&gt;  &lt;li&gt;Now let's add the MAPI units to our project and to the uses clause in this form:&lt;br /&gt;&lt;pre  style="color:white;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;1&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;uses&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; MapiDefs, MapiTags, MAPIUtil;&lt;/span&gt;&lt;/pre&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Now all that is left is to add that &lt;strong&gt;StringToList&lt;/strong&gt; function I used to process the semi-colon formatted mail headers into a more readable list:&lt;br /&gt;&lt;pre  style="color:white;"&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 1&lt;/span&gt; &lt;span style="color: rgb(0, 0, 255);"&gt;procedure&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; StringToList( Str: string; lstResult: TStrings );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 2&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Convert a header string containing CR/LFs and TABs into&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 3&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; a stringlist where each new property starts on a new line&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 4&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;var&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 5&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  iPos : integer;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 6&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;const&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 7&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  CRLF &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; #&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;13&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;#&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;10&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 8&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt; 9&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  lstResult.Clear;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;10&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  iPos :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Pos( CRLF, Str );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;11&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;while&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (iPos &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;0&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;and&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (iPos &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (Length( Str )&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;-&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) ) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;do&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;12&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;//&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; If the new line starts with a Space or Tab, it's a continuation line&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;13&lt;/span&gt; &lt;span style="color: rgb(128, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;if&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (Str[iPos&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; #&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;9&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;or&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; (Str[iPos&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;+&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;] &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; #&lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;32&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;) &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;then&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;14&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      Delete( Str, iPos, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;2&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;15&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;else&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;begin&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;16&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      lstResult.Add( Copy( Str, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, Pred(iPos) ) );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;17&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;      Delete( Str, &lt;/span&gt;&lt;span style="color: rgb(128, 0, 128);"&gt;1&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, Succ( iPos ) );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;18&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;19&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;    iPos :&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;=&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt; Pos( CRLF, Str );&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;20&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;  &lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;br /&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 128, 128);"&gt;21&lt;/span&gt; &lt;span style="color: rgb(0, 0, 0);"&gt;&lt;/span&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;end&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/li&gt; &lt;/ol&gt; &lt;h4&gt;And we're done!&lt;/h4&gt; &lt;p&gt;Just build again, and re-launch outlook and you'll have something like this:&lt;/p&gt; &lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/DevelopingOfficeAddinstheeasywayPart2of_EF99/FilledFrame2.png" atomicselection="true"&gt;&lt;img style="border: 0px none ;" src="http://fmadsoft.com/mmd/images/DevelopingOfficeAddinstheeasywayPart2of_EF99/FilledFrame_thumb.png" border="0" height="140" width="240" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;h4&gt;Final thoughts and notes:&lt;/h4&gt; &lt;ol&gt; &lt;li&gt;Don't forget that you can &lt;span style="font-weight: bold;"&gt;regsvr32 dlllname.dll&lt;/span&gt; or &lt;span style="font-weight: bold;"&gt;regsvr32 -u dllname.dll&lt;/span&gt; and any installer will do that for you if you mark the dll as self-registering.&lt;/li&gt; &lt;li&gt;Don't forget that you'll need to close the application you're testing/compiling your add-in for, before you can compile it as the dll will be in use! :)&lt;/li&gt; &lt;li&gt;If you look back, you'll see that you pratically never knew you were handling COM objects and that most of the code was for the application logic with part of the complexity in that arising from using Extended Mapi because Outlook's object model is a bit limited in some places... Creating Excel add-ins is even easier as you don't have to deal with Extended Mapi! ;) You will require some knowledge of the application's Object Model, but that comes out of the box in the form of some VBA help files that you can install with your Office.&lt;/li&gt;&lt;li&gt;I didn't show in this simple demo two other easy to implement features, mostly out of lazyness: adding toolbars/buttons/menus and option pages. Trust me (or don't trust and instead try for yourself!): those are very easy to implement!&lt;br /&gt;&lt;/li&gt; &lt;li&gt;Don't forget to take advantage of the &lt;strong&gt;20% discount&lt;/strong&gt; coupon (see &lt;a title="Blah, Blah, Blah" href="http://memyselfanddelphi.blogspot.com/2007/06/developing-office-add-ins-easy-way-part.html"&gt;Part 1&lt;/a&gt;), and have fun Developing Office Add-ins the Easy Way!&lt;/li&gt;&lt;li&gt;Syntax highlighting done using Steve Trefethen's &lt;a href="http://www.stevetrefethen.com/highlighter/default.aspx"&gt;Syntax Highlighter&lt;/a&gt; and then manually tweaked the generated HTML to fix some coloring bugs.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-2101514442236889224?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/2101514442236889224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=2101514442236889224' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2101514442236889224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2101514442236889224'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/developing-office-add-ins-easy-way-part_14.html' title='Developing Office Add-ins the Easy Way - Part 2 of 2 (AKA: The tutorial stuff...)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_H01pb6FTsXo/RnF4R7Lu8KI/AAAAAAAAAE8/BTgIvJBiZSY/s72-c/Bugger.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-2750352787694393549</id><published>2007-06-14T16:40:00.001Z</published><updated>2007-06-14T17:25:34.860Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Developing Office Add-ins the Easy Way - Part 1 of 2 (AKA: Blah, Blah, Blah...)</title><content type='html'>&lt;p&gt;Well, I first started thinking of doing this post in April, then, earlier in May, I thought of contacting the component vendor asking them for a special discount coupon that I could give you, the reader of this blog. They promptly gave me one that was good until the end of May, but, as you may suspect by now, I didn't have the time to make the post. Well, things are a bit easier now with Windows Live Writer, so I'll try to make this post today (edit: I finished this several "todays" after starting!). (And don't worry, I talked with them and they extended the &lt;strong&gt;coupon's&lt;/strong&gt; &lt;strong&gt;validity&lt;/strong&gt; to the end of &lt;strong&gt;June&lt;/strong&gt;!...)&lt;/p&gt; &lt;p&gt;So, how does one create an Office Add-in the easy way? Well, you cheat! :)&lt;br /&gt;Actually, it's no more cheating than using database access components to access a, (you guessed!) database... I've been using &lt;a title="Add-In Express" href="http://www.add-in-express.com/"&gt;AfalinaSoft's Add-In Express&lt;/a&gt; components in the last 18 months or so, and all I can say is that it's child's play doing any office Add-In development, be that Word, Excel, PowerPoint, Publisher, Visio, etc... I've created some Excel add-ins for my own use just because it was so easy to do them, rather than coding in VBScript! Outlook is &lt;strong&gt;very&lt;/strong&gt; well represented in this lot with very cool features available for it as you'll see later in this post. Some new features added in the 2007 version allow you to add new &lt;a title="Outlook Form Regions" href="http://www.add-in-express.com/outlook-extension/"&gt;form regions&lt;/a&gt; allowing you to create some great outlook add-ins with very little effort! (Note: that's 2007 version of the components, not of Office! All the features and the tutorial in the next part work the same from Office 2000 to 2007!)&lt;/p&gt; &lt;p&gt;Today's Add-In (I don't imply I'll be adding more, but one never knows as it's really easy to do them!), is a small Outlook Add-in that will show a collapsible pane in the messages list to show you the full Internet headers of the selected e-mail. You can shrink/expand/collapse this pane at will and, due to the way things work in Outlook, it's available for all mail folders except the Outbox. I've had to explicitly exclude that one after I found out that, if I select a message pending delivery, it would cancel delivery of that message: kind of what happens if you double click a message in the outbox and don't hit send again. No big deal: after a mail to the excellent Afalina support, I had a simple way of excluding just that folder (or any other I could want to exclude).&lt;/p&gt; &lt;p&gt;So, what do you &lt;strong&gt;gain&lt;/strong&gt; by using &lt;a title="Add-In Express" href="http://www.add-in-express.com/"&gt;Afalina's Add-In Express&lt;/a&gt; instead of doing it the hard way?&lt;/p&gt; &lt;ol&gt; &lt;li&gt;A very well though out and tested component suite.  &lt;/li&gt;&lt;li&gt;You can easily follow a couple steps in a wizard, add a few lines of code and have an add-in ready in minutes, not hours.  &lt;/li&gt;&lt;li&gt;For the most part (there are a couple minor things to take into consideration), you get &lt;strong&gt;not&lt;/strong&gt; to worry if your add-in is going to be used in Office 2000/XP/2003/2007 and wether or not those are running the default install or SP1 or SP2 or whatever.  &lt;/li&gt;&lt;li&gt;If you plan on going the .NET way in the future, they have the exact same components available for .NET.  &lt;/li&gt;&lt;li&gt;Deploying your add-in for non-.NET versions is easy: if you don't use packages, all get's compiled onto your main project (DLL), so it's a simple file to distribute/register/whatever.  &lt;/li&gt;&lt;li&gt;Many examples of different add-ins for different office applications are available.  &lt;/li&gt;&lt;li&gt;If you purchase the higher version (&lt;strong&gt;Premium&lt;/strong&gt;), you get the &lt;strong&gt;full source code&lt;/strong&gt;, including &lt;strong&gt;designers and wizards&lt;/strong&gt;.  &lt;/li&gt;&lt;li&gt;Again, for the highest version you can even have instant messaging access to the developers; for other versions, normal e-mail and web-forum based support is provided and still they answer questions promptly.&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Now, before you read any further, I must point out three flaws of this component suite, even though they are minor flaws as I'll explain later:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;No trial version  &lt;/li&gt;&lt;li&gt;Requires Activation  &lt;/li&gt;&lt;li&gt;No help file&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Why do I say they are minor?&lt;/p&gt; &lt;ol&gt; &lt;li&gt;You have a no questions asked 30 day money back guarantee (for the non-source versions) : I recommend you start with Standard version or Basic if you're on a short budget, and later, after you decide you will keep it, contact them for upgrade pricing for the source-code versions. I started with Basic myself, over 18 months ago, and have since upgraded to the Premium for the source code and added support.  &lt;/li&gt;&lt;li&gt;In the Premium version you get the whole source, even for the designers and wizards, so even if they somehow get out of business, you are not prevented from installing these components; also, you can install these on up to three machines, so you can install it on a Virtual Machine to have ready as a fallback procedure.  &lt;/li&gt;&lt;li&gt;They provide an easy to follow start up manual, they also provide both in the installer and in their website a plethora of demo add-ins, they have a very active and friendly forum, and tech support is among the best I've found for any component suite. In fact, should you get the Premium package, you can even contact them through instant messaging!&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;&lt;span style="color: rgb(0, 0, 255);"&gt;As for the &lt;strong&gt;coupon&lt;/strong&gt; code, if you purchase the &lt;strong&gt;Basic&lt;/strong&gt; or &lt;strong&gt;Standard&lt;/strong&gt; versions (&lt;strong&gt;no source code&lt;/strong&gt; included), you can use this coupon for a &lt;strong&gt;20% discount&lt;/strong&gt; until the end of June 2007: &lt;/span&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;strong&gt;ADFXM20&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;Remember that, even using this coupon, you will still have the 30 days from date of purchase to return the product for the price paid should you not be happy with it.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;You will need the Standard version if you want to take advantage of the advanced forms feature as described in the next post. As for later, once you decide you want to keep these components and no longer need to take advantage of the money back guarantee, I'd recommend you to &lt;strong&gt;upgrade&lt;/strong&gt; to either Pro or even better, Premium, not only for the full source code but also the added support. Contact them and they'll upgrade your license for the difference between the purchased and wanted versions.&lt;/p&gt; &lt;p&gt;Now, with a very lengthy post already, it's time to start explaining how easy it is to create an outlook add-in to display the selected message's headers in another pane. When I started trying to create this demo application, I needed access to some message properties that I wasn't finding through the outlook object model, so I e-mailed them my question and very promptly (next day, IIRC), they sent me, not only the answer to my question, but a few Pascal units with the translated Extended MAPI &lt;strong&gt;and&lt;/strong&gt; a &lt;strong&gt;sample project&lt;/strong&gt; that addressed &lt;strong&gt;my&lt;/strong&gt; problem! I received similar help from them later on when I couldn't find a way to exclude just one folder (outbox) from the folders where the add-in's pane would show and I mailed them the project with my question and they returned me the updated project with a few lines of code added and a short explanation of what was done. It's not as instant as a help file, but it sure is a lot more &lt;strong&gt;flexible&lt;/strong&gt;!&lt;/p&gt; &lt;p&gt;I was thinking of doing a Video, but not only I'm on a short budget now and the free solutions I tried didn't inspire me, but it's also easier to copy/paste this and print it out for reference, should you want to follow along!&lt;/p&gt; &lt;p&gt;&lt;a href="http://memyselfanddelphi.blogspot.com/2007/06/developing-office-add-ins-easy-way-part_14.html"&gt;Part 2&lt;/a&gt;, which I'm writing right now, will be posted a few seconds after part one: I decided to split it so it's not such a big article and because you can thus print that 2nd part and use as a follow along should you want to try it out.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-2750352787694393549?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/2750352787694393549/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=2750352787694393549' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2750352787694393549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2750352787694393549'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/developing-office-add-ins-easy-way-part.html' title='Developing Office Add-ins the Easy Way - Part 1 of 2 (AKA: Blah, Blah, Blah...)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-5632148640196521936</id><published>2007-06-13T13:31:00.001Z</published><updated>2007-06-13T13:31:57.759Z</updated><title type='text'>"Font smoothing, anti-aliasing, and sub-pixel rendering" - Joel on Software</title><content type='html'>&lt;p&gt;Well, after reading &lt;a title="Joel on Software - Font Smoothing" href="http://www.joelonsoftware.com/items/2007/06/12.html"&gt;this post&lt;/a&gt;, and since I couldn't find a way to comment on that, I opted for the easy comment option: blog about it! :)&lt;/p&gt; &lt;p&gt;In fact, not much to say here, rather than in this particular aspect, I &lt;strong&gt;do&lt;/strong&gt; favor Microsoft's call rather than Apple's one. Why? Well, surely being used to it also helps making that call, but I'd like to believe that reasoning has something to do with it too! :)&lt;/p&gt; &lt;p&gt;When you spend so much time staring at a computer screen (12+ hours a day), which one would you favor: readability (read: clear, crisp, non-eye-straining text), or paper-similarity (read: fuzzier but more truer to print text)?&lt;/p&gt; &lt;p&gt;If only one to choose from, I go with readability, the way MSFT did (hey! I'm actually sticking on MSFT's side on something! :)); It could be nice to have an option to have a more paper-like preview, but for the most part, and for a programmer who spends a lot of time staring at code, paper similarity is nothing compared to the ease on his eyes from reading crisper text...&lt;/p&gt; &lt;p&gt;If I were to do a vote, I believe most people would agree with me for two reasons alone: most readers of my blog are Windows users and most are programmers, so they would easily go for the MSFT way in this particular context.&lt;/p&gt; &lt;p&gt;Of course, when we get to the insanely high DPI displays, affordable displays that can show 300+ DPI, then this question could be raised again. Until then, I'll stick with MSFT's way...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-5632148640196521936?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/5632148640196521936/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=5632148640196521936' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5632148640196521936'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5632148640196521936'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/smoothing-anti-aliasing-and-sub-pixel.html' title='&amp;quot;Font smoothing, anti-aliasing, and sub-pixel rendering&amp;quot; - Joel on Software'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-2281501170355841422</id><published>2007-06-13T12:05:00.001Z</published><updated>2007-06-13T12:06:16.228Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><title type='text'>Delphi 2007 Update - Take 3</title><content type='html'>&lt;p&gt;I wasn't very fond of InstallAware, not as it's used by the Delphi installer, but now I'm even lesser of a fan: so much bloat and so much file messing around from here to there back here then a new there... Is it really necessary? Can't the Delphi installer be a bit more (read: a LOT more!) streamlined?&lt;/p&gt; &lt;p&gt;I've attempted to update my clean Delphi 2007 image and the process stalled. I read somewhere that some people achieved good results by disabling all their startup programs, only I will rather reformat my PC than I start disabling software just so I can upgrade or install something...&lt;/p&gt; &lt;p&gt;Luckily, both in that clean Delphi VM and in my main machine, "upgrading" using the now available &lt;a title="Delphi Registered User's Download page" href="http://downloads.codegear.com/default.aspx?productid=2012"&gt;ISO image&lt;/a&gt; went just fine. And I say "upgrading" as it's really a complete uninstall followed by a new install, not really an update... The only good thing is that component registration is left intact so you don't need to re-install them all again.&lt;/p&gt; &lt;p&gt;Well, after all that, all that was left was testing the update on the tweaked install that I've blogged about earlier. Even though my main dev machine is a variation of that setup, I wanted to test on the same configuration used for that article. Took me a while as I had to redo that image as I recently tried repartitioning my external HDD and good 'ol Murphy stepped in ruining everything in it, but eventually I found enough time to follow the step by step instructions on my own article and redo that image. Oddly enough, upgrading went fine when it had failed on the non-tweaked and clean VM! Just a couple notes for those updating that version:&lt;/p&gt; &lt;ol&gt; &lt;li&gt;To be on the safe side, export HKCU\Software\Classes and HKCU\Software\Borland from the account used and import on the install user account;&lt;/li&gt; &lt;li&gt;After the install is done, repeat those steps in the other direction&lt;br /&gt;(Note: I did it without using these steps and it appears to have worked fine, but if you want to be 100% sure, do these two operations as they won't take much time)&lt;/li&gt;&lt;/ol&gt; &lt;p&gt;Also, when asked for the missing files, be sure to enter the {ABE...} folder in the Install user's local settings\application data used for the original install. And don't check the "Clear cache" option!&lt;/p&gt; &lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/SetPath2.png" atomicselection="true"&gt;&lt;img style="border: 0px none ;" src="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/SetPath_thumb.png" border="0" height="186" width="240" /&gt;&lt;/a&gt; &lt;a href="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/DontRemove2.png" atomicselection="true"&gt;&lt;img style="border: 0px none ;" src="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/DontRemove_thumb.png" border="0" height="186" width="240" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;The installer works in very weird ways: first, a new GUID is used to cache the files ({2EB...}); then it clears almost everything from the old install cache ({ABE...}), leaving only around 60 MB there. In the end, it copies some files back there, so the end cache space used is around 420 MB in {ABE...} and 770 MB in {2EB...}. Which ones will it use when you use update 2? I have no idea!! Just guessing, and judging from the files and sizes, I'd say that the cached files are in {ABE...} and the uncompressed cached files are in {2EB...}. However, the Setup.exe and related files are together with the uncompressed files, so I really have no clue what the 7z files are needed for... Will all those files be sufficient to install on a new machine? I don't know nor have tested yet. Maybe later but no promises...&lt;/p&gt; &lt;p&gt;If you really want to be on the safe side, I'd download the ISO since it's the option that installed fine for me in a couple tests where the update would fail. In that case, just click the option to delete the cache. Now, if CodeGear would smarten up a bit and use a decent installer...&lt;/p&gt; &lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/ABE2.png" atomicselection="true"&gt;&lt;img style="border: 0px none ;" src="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/ABE_thumb.png" border="0" height="184" width="240" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/ABE22.png" atomicselection="true"&gt;&lt;img style="border: 0px none ;" src="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/ABE2_thumb.png" border="0" height="23" width="240" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/2EB4.png" atomicselection="true"&gt;&lt;img style="border: 0px none ;" src="http://fmadsoft.com/mmd/images/Delphi2007UpdateTake3_B7FD/2EB_thumb.png" border="0" height="111" width="240" /&gt;&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/9040327036497268290-2281501170355841422?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/2281501170355841422/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=2281501170355841422' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2281501170355841422'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2281501170355841422'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/delphi-2007-update-take-3.html' title='Delphi 2007 Update - Take 3'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-3552365489416862200</id><published>2007-06-08T17:50:00.001Z</published><updated>2007-06-08T19:29:12.701Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><title type='text'>My Second impressions of the Delphi 2007 Update 1</title><content type='html'>&lt;p&gt;Well, this time, even though I have the ISO I downloaded last night, I choose to try the auto-updater. So, I fired up my Delphi VM and, as I write this, it's been 2 hours since it said the updates were ready to install and started installing them... No clue as to how many more and, unlike Nick said of &lt;a title="Nick blames poor IA performance on &amp;quot;Slow Hard-disks&amp;quot;" href="http://blogs.codegear.com/nickhodges/archive/2007/06/07/35692.aspx"&gt;slow hard-disks&lt;/a&gt;, I'll hardly think this to be a HD problem as neither my physical HD light nor the virtual HD light from the VM seem busy: they hardly flash at all!&lt;/p&gt; &lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/MySecondimpressionsoftheDelphi2007Update_10903/Update2.png" atomicselection="true"&gt;&lt;img style="border: 0px none ;" src="http://fmadsoft.com/mmd/images/MySecondimpressionsoftheDelphi2007Update_10903/Update_thumb.png" border="0" height="180" width="240" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;I'll check back every couple hours or so to update the progress...&lt;/p&gt;&lt;p&gt;EDIT: Almost 4 hours into it and in the same spot: that is surely stalled. I'll leave it running a bit more as Nick says it will "eventually finish", but after dinner, I'll check again and most likely will try again. If it fails once more, then I'll try with the ISO image...&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/9040327036497268290-3552365489416862200?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/3552365489416862200/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=3552365489416862200' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3552365489416862200'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3552365489416862200'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/my-second-impressions-of-delphi-2007.html' title='My Second impressions of the Delphi 2007 Update 1'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-6249372073795714319</id><published>2007-06-08T10:33:00.001Z</published><updated>2007-06-08T17:52:12.360Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><title type='text'>My first impressions of the Delphi 2007 Update 1</title><content type='html'>&lt;blockquote&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;+ Update went well very smoothly (didn't time it as I used the time for having breakfast!)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;+ Disk space required after the full install was more or less the same used previously: a couple MB less in some places a few more in others, but overall was only around 10 MB more.&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;+ Pressing F1 on a IDE menu will no longer render the IDE unusable&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color:#ff0000;"&gt;- It still doesn't show the help page for that menu though ("No help available for context")&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="color:#008000;"&gt;+ New filters available on the Help Index, including "Language: Delphi"&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color:#ff0000;"&gt;- Interestingly, &lt;strong&gt;integer, array&lt;/strong&gt;, and several other keywords I tried,&lt;strong&gt; &lt;/strong&gt;don't seem to be part of the "Language: Delphi"! :)&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color:#ff0000;"&gt;- Pressing F1 over those keywords in the editor (and some others such as &lt;strong&gt;uses&lt;/strong&gt;, &lt;strong&gt;private&lt;/strong&gt;, &lt;strong&gt;program&lt;/strong&gt; and more), will either show the infamous "No help found for context" or will point me to C++ only information;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color:#ff0000;"&gt;- An empty help filter option (Dinkumware) was left in the shipped version that should not be there;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="color:#ff0000;"&gt;- There's still C# and VB.NET help offered for some keywords instead of the proper Delphi version of those keywords (try pressing F1 over "implementation"). I wonder if Codegear wants to sell us on MSFT tools! :)&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;That's all for the first few minutes. I thought of going through my Quality Central reports and see which ones had been addressed (if any), but seeing so many still in the un-opened state after over 2 months of them being reported kind of made me lost interest in doing that check.&lt;br /&gt;In fact, that's one reason, if not the major one, behind my lost of interest in helping out on QC in the latest months... That and seeing clear, concise and easy to replicate reports being left un-opened for years, kind of makes me think that it's a waste of time QCing at all... Sure, it's all fine and dandy using volunteers to pre-process QC, but leaving so many reports un-opened does not add to the overall quality they (CodeGear) are trying to achieve. I'd guess this is one area where they'll &lt;strong&gt;need&lt;/strong&gt; and &lt;strong&gt;want&lt;/strong&gt; to make some changes...&lt;/p&gt; &lt;p&gt;And now another week is ending and I've yet to make a couple promised posts... :(&lt;/p&gt; &lt;p&gt;I'll try to make at least one of those either today or tommorrow at most, since that one involves a discount coupon on a set of components and the time is ticking on that coupon... Stay tuned.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6249372073795714319?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6249372073795714319/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6249372073795714319' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6249372073795714319'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6249372073795714319'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/my-first-impressions-of-delphi-2007.html' title='My first impressions of the Delphi 2007 Update 1'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-4523194922730504308</id><published>2007-06-08T09:00:00.001Z</published><updated>2007-06-08T09:02:31.217Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><title type='text'>CodeGear: All customers are equal but some are (no longer) more equal than others</title><content type='html'>&lt;p&gt;For those who missed a small subtlety with the latest Delphi 2007 update, there is now an &lt;a href="http://downloads.codegear.com/default.aspx?productid=2012"&gt;&lt;strong&gt;ISO available for download&lt;/strong&gt;&lt;/a&gt; from the registered users area!&lt;br /&gt;&lt;/p&gt; &lt;p&gt;It's a 4.16 GB file and after a couple small problems I finally managed to download it. Just beware that, using the FTP link, it will incorrectly show as only 160 or so MB file but it seems to download the whole file anyway. In the end, I had to use the Borland Download Manager and I'd recommend you to do the same because continuing the FTP download will fail due to the incorrectly displayed size should you run into any network problem during the download.&lt;/p&gt; &lt;p&gt;As usual, I'll be doing some installations/tests/updates and I'll blog a bit about it later!&lt;/p&gt; &lt;p&gt;For now, and even before installing, I'd like to &lt;strong&gt;publicly thank CodeGear&lt;/strong&gt; for two things: making the ISO available to all customers and having an option to delete the cache. Now, if only they added a way to &lt;strong&gt;not&lt;/strong&gt; use that cache at all and instead use the DVD or downloaded cache instead, now &lt;strong&gt;that&lt;/strong&gt; finally would be a decent installer!&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-4523194922730504308?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/4523194922730504308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=4523194922730504308' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4523194922730504308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4523194922730504308'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/codegear-all-customers-are-equal-but.html' title='CodeGear: All customers are equal but some are (no longer) more equal than others'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-5450649545807704589</id><published>2007-06-05T17:27:00.001Z</published><updated>2007-06-06T09:42:26.540Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><title type='text'>Easier to browse list of incoming Fixes in Delphi 2007</title><content type='html'>&lt;p&gt;That's what one gets to do when having a few minutes left: not enough to do some coding, but enough to do some text find/replace and blog about it! :) I did it for myself, but maybe others will find this useful too as it's far easier to browse than the full QC post &lt;a title="D2007 Update 1 - List of QC reports" href="http://dn.codegear.com/article/36589"&gt;here&lt;/a&gt;... For the more curious, just took some 10 minutes or so to manually process that list using UltraEdit: then a couple more to paste it in excel to find a couple exceptions missed and fix them, then copy/paste them into Windows Live Writer after going through UltraEdit again to add some table formating code... (List sorted by Area then Description)&lt;/p&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;[EDIT: added links for valid QC reports]&lt;/span&gt;&lt;p&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;[EDIT 2: I'm still fighting with blogger to get it to re-display the table properly without placing so much empty space between the text and the table!]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;[EDIT 3: Found the problem: apparently blogger doesn't like it when I paste back some HTML with extra CR/LFs as I used to make each table row in it's own line; removed all CR/LFs, pasted back and it's working again!]&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;table border="1" frame="box" rules="all"&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;&lt;b&gt;QC#&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Area&lt;/b&gt;&lt;/td&gt;&lt;td&gt;&lt;b&gt;Short Description&lt;/b&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;42627&lt;/td&gt;&lt;td&gt;ActiveX-&gt;IDE-&gt;Implementation file management &lt;/td&gt;&lt;td&gt;TLB is not renamed if project that contains a TLB is renamed using save as.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=40156"&gt;40156&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Compatibility-&gt;Previous -&gt; Current &lt;/td&gt;&lt;td&gt;Custom Action developed in Delphi 7 blocks BDS2006 when form viewed&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=44731"&gt;44731&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Compiler &lt;/td&gt;&lt;td&gt;dcc32.exe reports E2029 error incorrectly&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=34298"&gt;34298&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Compiler-&gt;Delphi &lt;/td&gt;&lt;td&gt;Compiler allows *static* class methods to be passed as value of method pointer variable.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;45896&lt;/td&gt;&lt;td&gt;Compiler-&gt;Delphi &lt;/td&gt;&lt;td&gt;Compiler generates internal error on compiling attached project&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;41751&lt;/td&gt;&lt;td&gt;Compiler-&gt;Delphi-&gt;Code Generation/Optimization &lt;/td&gt;&lt;td&gt;Property with inlined function and Data type conversion produces wrong code&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;41285&lt;/td&gt;&lt;td&gt;Compiler-&gt;Delphi-&gt;Code Generation/Optimization &lt;/td&gt;&lt;td&gt;using self in a class method of a class helper causes an av&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;32786&lt;/td&gt;&lt;td&gt;Compiler-&gt;Delphi-&gt;Errors - Warnings BT&lt;/td&gt;&lt;td&gt;Inner class cannot get access to strict protected virtual method of outer class&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43943"&gt;43943&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Compiler-&gt;Delphi-&gt;Interaction with UI &lt;/td&gt;&lt;td&gt;IDE disappears when opening D7 forms.pas&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;45336&lt;/td&gt;&lt;td&gt;Compiler-&gt;Delphi-&gt;Language-&gt;Overloading &lt;/td&gt;&lt;td&gt;cannot implicitly cast records to Float type&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;22878&lt;/td&gt;&lt;td&gt;Database &lt;/td&gt;&lt;td&gt;InterBase Blob output params of StoredProcs truncated in D2006&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=42824"&gt;42824&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Database-&gt;DBExpress-&gt;TSQLConnection&lt;/td&gt;&lt;td&gt;DBX4 TSQLConnection Memory Leak and Debugger Fault Notification&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42673&lt;/td&gt;&lt;td&gt;Database-&gt;DBExpress-&gt;TSQLConnection &lt;/td&gt;&lt;td&gt;Memory leak in TSQLConnection.Open&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=45565"&gt;45565&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Database-&gt;dbExpressCore &lt;/td&gt;&lt;td&gt;Create constructor of DBXDynalink.DBXDriverLoader or of third party driver never called&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43141"&gt;43141&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Database-&gt;dbExpressCore &lt;/td&gt;&lt;td&gt;mixing DBX3 and DBX4 drivers leads to crash in IDE and code&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43125"&gt;43125&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Debugger-&gt;Evaluator-&gt;Delphi &lt;/td&gt;&lt;td&gt;Default display for PChars is "Character"&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;34555&lt;/td&gt;&lt;td&gt;Debugger-&gt;Multi-process &lt;/td&gt;&lt;td&gt;cannot switch the active project when a process is being debugged&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;38658&lt;/td&gt;&lt;td&gt;Debugger-&gt;Stepping &lt;/td&gt;&lt;td&gt;using f7 to step into a method causes bds to lockup with 100% cpu use&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=42423"&gt;42423&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation &lt;/td&gt;&lt;td&gt;Help for TStream.Seek is incorrect&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;21202&lt;/td&gt;&lt;td&gt;Documentation &lt;/td&gt;&lt;td&gt;Missing Help for AlignWithMargin&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=44320"&gt;44320&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation &lt;/td&gt;&lt;td&gt;Unable to overload shift operators&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;16261&lt;/td&gt;&lt;td&gt;Documentation-&gt;IDE Help Contexts &lt;/td&gt;&lt;td&gt;Component | Import Type Library missing&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=39516"&gt;39516&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;IDE Help Contexts &lt;/td&gt;&lt;td&gt;Help missing for TDBGrid.Anchor properties&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=39517"&gt;39517&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;IDE Help Contexts &lt;/td&gt;&lt;td&gt;Help missing for TDBGrid.Constraints&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=39857"&gt;39857&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;IDE Help Contexts &lt;/td&gt;&lt;td&gt;Help missing for the following TDBGrid.TitleFont properties&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=39856"&gt;39856&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;IDE Help Contexts &lt;/td&gt;&lt;td&gt;Help topic missing for the following TDBGrid.Style properties&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=27348"&gt;27348&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;IDE Help Contexts &lt;/td&gt;&lt;td&gt;TCustomListView.TopItem Property help file has conflicting instructions&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=13801"&gt;13801&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;IDE Help Contexts &lt;/td&gt;&lt;td&gt;There is no context sensitive help for the EllipsisPosition property on a TLabel&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=31928"&gt;31928&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help &lt;/td&gt;&lt;td&gt;Clipped Help re: dynamic arrays&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=9957"&gt;9957&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help &lt;/td&gt;&lt;td&gt;Many VCL indexed properties documented incorrect&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;20522&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help &lt;/td&gt;&lt;td&gt;TControl.Margins help topic not helpful&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=39569"&gt;39569&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;Main help &lt;/td&gt;&lt;td&gt;AllocMem function is not present in Online Help&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=30552"&gt;30552&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;Main help &lt;/td&gt;&lt;td&gt;Help for the TEventStatus Enum Has Duplicated Text&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=34061"&gt;34061&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;Object Pascal&lt;/td&gt;&lt;td&gt;incomplete list of fundamental types&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=36354"&gt;36354&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;Object Pascal &lt;/td&gt;&lt;td&gt;Delphi help doesn't say about Iterators for interfaces, but feature is implemented.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=34676"&gt;34676&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;Object Pascal &lt;/td&gt;&lt;td&gt;Delphi help doesn't say about Iterators for records, but feature is implemented.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=39761"&gt;39761&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;Object Pascal &lt;/td&gt;&lt;td&gt;Links in Ceil, Floor, and Trunc help don't work.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=42767"&gt;42767&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;Object Pascal &lt;/td&gt;&lt;td&gt;Warning/error confusion in FOR and FOR IN documentation&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=38647"&gt;38647&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;VCL &lt;/td&gt;&lt;td&gt;TCheckBox does not fire OnKeyDown for arrow keys, as help suggests&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=33417"&gt;33417&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;VCL &lt;/td&gt;&lt;td&gt;TCollectionItem.Create is not described as virtual&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=38801"&gt;38801&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;VCL &lt;/td&gt;&lt;td&gt;THandleObject.WaitFor is not documented&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=42285"&gt;42285&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Documentation-&gt;Online Help-&gt;VCL &lt;/td&gt;&lt;td&gt;The documentation for TMenuItem.Hint Property is incorrect.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43092"&gt;43092&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE &lt;/td&gt;&lt;td&gt;BDS does not show on Task Manager applications listSB: XP only&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43477"&gt;43477&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE &lt;/td&gt;&lt;td&gt;editor or welcome page has incorrect size after maximize, minimize and restore&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=32650"&gt;32650&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE &lt;/td&gt;&lt;td&gt;IDE Exception dialog: Call stack should be included with copy to clipboard&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=33315"&gt;33315&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Code Browsing &lt;/td&gt;&lt;td&gt;ctrl+shift+up/down command doesn't work in some classes with nested types.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;40744&lt;/td&gt;&lt;td&gt;IDE-&gt;Code Editor &lt;/td&gt;&lt;td&gt;Caret positioned one character further left of compiler error position&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=44894"&gt;44894&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Code Editor-&gt;Error Insight &lt;/td&gt;&lt;td&gt;Delphi 2007 IDE suddenly disappears while typing&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43597"&gt;43597&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Code Editor-&gt;Help Insight &lt;/td&gt;&lt;td&gt;Help insight 'Object reference not set' errors with dotted filenames on search path&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42808&lt;/td&gt;&lt;td&gt;IDE-&gt;Code Templates &lt;/td&gt;&lt;td&gt;Automated Incident Report&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=32108"&gt;32108&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Desktop Layouts &lt;/td&gt;&lt;td&gt;Resizing maximized editor window causes erratic behaviour&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43130"&gt;43130&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Desktop Layouts &lt;/td&gt;&lt;td&gt;Under undocked mode the main Delphi window is improperly sized after a minimize/restore&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;40821&lt;/td&gt;&lt;td&gt;IDE-&gt;Dialogs &lt;/td&gt;&lt;td&gt;Confirmation dialog to add BPL path to the PATH environment variable is wrongly translated&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43097"&gt;43097&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Dialogs &lt;/td&gt;&lt;td&gt;Text display problems on Tools-&gt;Options&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=44770"&gt;44770&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Dialogs-&gt;Project Options &lt;/td&gt;&lt;td&gt;Linker output option resets after closing &amp;amp; reopening project&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=42948"&gt;42948&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Dialogs-&gt;Project Options &lt;/td&gt;&lt;td&gt;Record Field Alignment Option not saved&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;40074&lt;/td&gt;&lt;td&gt;IDE-&gt;Dialogs-&gt;Project Options &lt;/td&gt;&lt;td&gt;should remove "Windows Forms designer" from the Tools | Options dialog&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42338&lt;/td&gt;&lt;td&gt;IDE-&gt;File Handling &lt;/td&gt;&lt;td&gt;When using Ctrl+Enter in the code editor to open a file, the IDE is not able to open an INC file&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;41681&lt;/td&gt;&lt;td&gt;IDE-&gt;Form Designer &lt;/td&gt;&lt;td&gt;Minimising D2007 whilst in undocked mode leaves forms visible&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;41917&lt;/td&gt;&lt;td&gt;IDE-&gt;Help &lt;/td&gt;&lt;td&gt;DEXPLORE.EXE not closed upon exit&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42640&lt;/td&gt;&lt;td&gt;IDE-&gt;Help &lt;/td&gt;&lt;td&gt;Garbled characters within a help topics selection dialog&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42237&lt;/td&gt;&lt;td&gt;IDE-&gt;Help &lt;/td&gt;&lt;td&gt;Help by F1 Doesn't work at all in object inspector for Modelling projects!!!&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;219029&lt;/td&gt;&lt;td&gt;IDE-&gt;History View&lt;/td&gt;&lt;td&gt;when project is reopen, on History view, code pane ( bottom pane ) is grayed out&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;41079&lt;/td&gt;&lt;td&gt;IDE-&gt;Memory Issues &lt;/td&gt;&lt;td&gt;using safemm, changing selected unit in the ide causes a read-AV&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43475"&gt;43475&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Project Management &lt;/td&gt;&lt;td&gt;Automatic conversion of .bdsproj to .dproj fails to convert $Z (DCC_MinimumEnumSize)&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=44777"&gt;44777&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Project Management &lt;/td&gt;&lt;td&gt;Child forms are not recreated together with the main form when MainFormOnTaskbar is True&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43569"&gt;43569&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Project Management &lt;/td&gt;&lt;td&gt;Environment variables not expanded/recognized at compile time.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43052"&gt;43052&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;Project Management &lt;/td&gt;&lt;td&gt;Switching between Debug and Release doesn't cause a recompile when project is run&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=21953"&gt;21953&lt;/a&gt;&lt;/td&gt;&lt;td&gt;IDE-&gt;ToDoList &lt;/td&gt;&lt;td&gt;Priority information in To-Do List is lost&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42529&lt;/td&gt;&lt;td&gt;IDE-&gt;Tool Palette &lt;/td&gt;&lt;td&gt;Icon scrambling and unpredictible error messages in palette.&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;43021&lt;/td&gt;&lt;td&gt;IDE-&gt;Unit Testing-&gt;Test Case Wizard &lt;/td&gt;&lt;td&gt;Catastrophic failure when creating unit test&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;45149&lt;/td&gt;&lt;td&gt;IDE-&gt;Unit Testing-&gt;Test Case Wizard &lt;/td&gt;&lt;td&gt;No task bar entity for test case app&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;40818&lt;/td&gt;&lt;td&gt;Install &lt;/td&gt;&lt;td&gt;Delphi does not work without installing Database Features&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42602&lt;/td&gt;&lt;td&gt;Install &lt;/td&gt;&lt;td&gt;EPackageRegistrationException in module sanctuarylib.dll&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=44514"&gt;44514&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Install-&gt;Files &lt;/td&gt;&lt;td&gt;Enterprise instead of Professional in field ProductName in the version info resource of bds.exe of the Professional edition&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=44662"&gt;44662&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Install-&gt;Files &lt;/td&gt;&lt;td&gt;TeePrevi.dfm is missing in -&gt;lib&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42247&lt;/td&gt;&lt;td&gt;Install-&gt;Registry settings &lt;/td&gt;&lt;td&gt;Package load errors on startup when de-selecting some internet packages&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42403&lt;/td&gt;&lt;td&gt;International-&gt;Truncation [STRING CORRUPTION]&lt;/td&gt;&lt;td&gt;First phrase in installer is too long in French&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43114"&gt;43114&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Internet-&gt;Indy &lt;/td&gt;&lt;td&gt;Default browsing path for Indy is incorrect&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43986"&gt;43986&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Midas-&gt;TClientDataSet &lt;/td&gt;&lt;td&gt;Blob fields truncated in TClientDataSet&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=22253"&gt;22253&lt;/a&gt;&lt;/td&gt;&lt;td&gt;Modeling-&gt;IDE Integration &lt;/td&gt;&lt;td&gt;Added units do not show up in model view&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;21228&lt;/td&gt;&lt;td&gt;Modeling-&gt;Printing &lt;/td&gt;&lt;td&gt;Overview in documentation generation is just a black box&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=3910"&gt;3910&lt;/a&gt;&lt;/td&gt;&lt;td&gt;RTL-&gt;Delphi-&gt;Other RTL &lt;/td&gt;&lt;td&gt;AccessViolation in TBucketList and TObjectBucketList DeleteItem&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=45532"&gt;45532&lt;/a&gt;&lt;/td&gt;&lt;td&gt;RTL-&gt;Delphi-&gt;Other RTL &lt;/td&gt;&lt;td&gt;Bug in ObjAuto.pas affects CreateMethodPointer functionality&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43199"&gt;43199&lt;/a&gt;&lt;/td&gt;&lt;td&gt;RTL-&gt;Delphi-&gt;WinAPI &lt;/td&gt;&lt;td&gt;HelpShowTableOfContents gives error 'Unable to find a Table of Contents.'&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=38342"&gt;38342&lt;/a&gt;&lt;/td&gt;&lt;td&gt;SOAP-&gt;WSDL Importer &lt;/td&gt;&lt;td&gt;WSDL Importer renames "name" to "name_"&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=37537"&gt;37537&lt;/a&gt;&lt;/td&gt;&lt;td&gt;VCL &lt;/td&gt;&lt;td&gt;Form.ScreenSnap handling is wrong if Windows Taskbar is docked to left or top of the screen&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43331"&gt;43331&lt;/a&gt;&lt;/td&gt;&lt;td&gt;VCL &lt;/td&gt;&lt;td&gt;Taskbar button is duplicated when restarting Explorer.exe&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;45745&lt;/td&gt;&lt;td&gt;VCL &lt;/td&gt;&lt;td&gt;Vista Modal Dialog flashing broken in Update Patch&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;36283&lt;/td&gt;&lt;td&gt;VCL-&gt;Additional Controls-&gt;Action Bar Controls &lt;/td&gt;&lt;td&gt;TCustomizeDlg is not localized&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;43334&lt;/td&gt;&lt;td&gt;VCL-&gt;Core VCL Classes &lt;/td&gt;&lt;td&gt;IDE keeps focus if project MainFormOnTaskBar is False&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;46202&lt;/td&gt;&lt;td&gt;VCL-&gt;Core VCL Classes-&gt;TApplication &lt;/td&gt;&lt;td&gt;Application.BringToFront not working as expected&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;44910&lt;/td&gt;&lt;td&gt;VCL-&gt;Core VCL Classes-&gt;TApplication &lt;/td&gt;&lt;td&gt;BDS 2006 compiled applications do not get their taskbar button selected on startup with the latest vcl bpl files for Delphi 2007&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42374&lt;/td&gt;&lt;td&gt;VCL-&gt;Core VCL Classes-&gt;TApplication &lt;/td&gt;&lt;td&gt;Hiding main form changes the caption of the task bar icon&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43007"&gt;43007&lt;/a&gt;&lt;/td&gt;&lt;td&gt;VCL-&gt;Core VCL Classes-&gt;TApplication &lt;/td&gt;&lt;td&gt;Wrong taskbar focus behaviour in IDE&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43984"&gt;43984&lt;/a&gt;&lt;/td&gt;&lt;td&gt;VCL-&gt;Core VCL Classes-&gt;TForm &lt;/td&gt;&lt;td&gt;Application set to start minimized will behave erratically if MainFormOnTaskbar := True for non-Vista Windows&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=43333"&gt;43333&lt;/a&gt;&lt;/td&gt;&lt;td&gt;VCL-&gt;Core VCL Classes-&gt;TWinControl &lt;/td&gt;&lt;td&gt;A control whose parent's FShowing is false will not hide&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=44401"&gt;44401&lt;/a&gt;&lt;/td&gt;&lt;td&gt;VCL-&gt;Dialog Controls &lt;/td&gt;&lt;td&gt;Open and Save dialogs don't return FilterIndex under Vista&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;46134&lt;/td&gt;&lt;td&gt;VCL-&gt;Dialog Controls-&gt;TOpenDialog &lt;/td&gt;&lt;td&gt;TOpenDialog under Vista Breaks doShareAware&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;42610&lt;/td&gt;&lt;td&gt;VCL-&gt;Graphics &lt;/td&gt;&lt;td&gt;gifimg unit might display modal error dialog in initialization&lt;/td&gt;&lt;/tr&gt; &lt;tr&gt;&lt;td&gt;&lt;a href="http://qc.codegear.com/wc/qcmain.aspx?d=42867"&gt;42867&lt;/a&gt;&lt;/td&gt;&lt;td&gt;VCL-&gt;Win 32 Controls-&gt;TImageList &lt;/td&gt;&lt;td&gt;Image list never grows its internal bitmap&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-5450649545807704589?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/5450649545807704589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=5450649545807704589' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5450649545807704589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5450649545807704589'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/06/easier-to-browse-list-of-incoming-fixes.html' title='Easier to browse list of incoming Fixes in Delphi 2007'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-6241254124875017573</id><published>2007-05-25T11:01:00.001Z</published><updated>2007-06-20T11:32:29.170Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Live Writer'/><title type='text'>Testing Windows Live Writer...</title><content type='html'>&lt;p&gt;And no, I haven't forgotten about Part 3 of Delphi 2007 in a Radical Build! :)&lt;/p&gt; &lt;p&gt;I've been a bit overwhelmed in some work and non-work issues, but I'll get back to it in a couple days. I also have another interesting post on using Delphi to develop Office Add-ins in a very easy way, so those two posts will be available in a few days, start of next week at most.&lt;/p&gt; &lt;p&gt;As the title says, I'm writing this post using Windows Live Writer, after seeing it mentioned in &lt;a title="Steve Trefethen" href="http://www.stevetrefethen.com/blog/NoteToRSSFeedReadersOfMyBlogRegardingTemporaryItemsTheirFromWindowsLiveWriter.aspx"&gt;this&lt;/a&gt; blog post from Steve Trefethen.&lt;/p&gt; &lt;p&gt;Also, for no good reason other than test Windows Live Writer, here's a picture of my 6 month old daughter...&lt;/p&gt;&lt;p&gt;&lt;a href="http://fmadsoft.com/mmd/images/TestingWindowsLiveWriter_A90C/mads200704210061.jpg" atomicselection="true"&gt;&lt;img style="border-width: 0px;" src="http://fmadsoft.com/mmd/images/TestingWindowsLiveWriter_A90C/mads20070421006.jpg" border="0" height="240" width="160" /&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;That's all for now, but stay tuned...&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6241254124875017573?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6241254124875017573/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6241254124875017573' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6241254124875017573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6241254124875017573'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/05/testing-windows-live-writer.html' title='Testing Windows Live Writer...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-1015782675606749670</id><published>2007-05-15T14:15:00.000Z</published><updated>2007-05-15T14:20:22.189Z</updated><title type='text'>Well done JD!!</title><content type='html'>Well, I don't know if he's the one to credit for, but it certainly is a &lt;span style="font-weight: bold;"&gt;very&lt;/span&gt; nice change!&lt;br /&gt;In &lt;a href="http://www.codegear.com/article/36433/"&gt;this CodeGear article&lt;/a&gt; that presents a new product that, and I quote:&lt;br /&gt;&lt;blockquote&gt;... is currently scheduled to be available as a CodeGear product in the second half of 2007&lt;/blockquote&gt;&lt;br /&gt;This is indeed a &lt;span style="font-weight: bold;"&gt;very&lt;/span&gt; nice change from the usual silence! Not that I care the least for Ruby, but it certainly opens the door to more "&lt;span style="font-style: italic;"&gt;future looking statements&lt;/span&gt;"!!&lt;br /&gt;&lt;br /&gt;Well done Jim Douglas! You're showing that you are indeed listening to customers!&lt;br /&gt;&lt;br /&gt;And thanks to &lt;a href="http://blog.dragonsoftru.com/2007/05/14/did-you-ask-for-ruby-a-la-codegear/"&gt;Serge Dosyukov&lt;/a&gt; for bringing this to our attention!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-1015782675606749670?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/1015782675606749670/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=1015782675606749670' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1015782675606749670'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1015782675606749670'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/05/well-done-jd.html' title='Well done JD!!'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-3836129933204963690</id><published>2007-05-11T11:37:00.000Z</published><updated>2007-05-11T12:05:28.715Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>To help or not to Help</title><content type='html'>Well, I've been &lt;a href="http://memyselfanddelphi.blogspot.com/2007/04/for-all-those-against-my-posts.html"&gt;cutting CodeGear some slack&lt;/a&gt; as promised, but it's now almost 2 (two!) months since Delphi 2007 is out and there are a couple things still missing... Not counting quite a few &lt;a href="http://qc.codegear.com/wc/qcmain.aspx?search=1&amp;type=B+OR+A+OR+D+OR+C&amp;amp;proj=10&amp;vers=11.0&amp;amp;plat=430"&gt;new bugs&lt;/a&gt; introduced in Delphi 2007 and the number of bugs (not so easy to query) that were reported against previous versions and are still present in Delphi 2007, there are two major issues that I still have with Delphi 2007:&lt;br /&gt;&lt;br /&gt;1) (not so) Improved help, even using &lt;a href="http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-faulty-help-logic-or-how-to.html"&gt;this hack&lt;/a&gt;, is a major drawback, not so much to my current work, but to the type of work I'm trying to perform on QC by helping testing/sorting out bug reports. Having to &lt;span style="font-style: italic; font-weight: bold;"&gt;fight &lt;/span&gt;with the help system to get the correct definitions for things as basic as &lt;span style="font-weight: bold;"&gt;virtual&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;class&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;type&lt;/span&gt;, &lt;span style="font-weight: bold;"&gt;strict &lt;/span&gt;and more, just so I can be sure if something being reported is indeed a bug or if it's working as designed, does considerably lengthen the amount of time I need to spend on QC bug reports... I'm currently in the middle of one such fight that led me to blog a bit about this...&lt;br /&gt;&lt;br /&gt;2) Lack of a decent backup solution and a decent installer for all those people like myself that didn't think of purchasing the Media Kit; sure, I've hacked it a bit by now, but I'd rather simply set a virtual drive to the ISO image (something that only those who &lt;span style="font-weight: bold;"&gt;do&lt;/span&gt; purchase the DVD get to download, go figure!), and install from there, rather than having to copy the install cache to the proper place to prevent it from re-downloading all again.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;I just hope that CodeGear's way of fixing D2007 is not just wait until BDS 2007 is out and force users to move to that product to get the long promised improved help... For those thinking of criticizing this last comment, how can one &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; think that when they won't say a word about what's going on, be that due to SOX or to whatever?... No fixes, no word out, and two months are gone in a couple days...&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;I've said it before, but I'll say it again: &lt;span style="font-style: italic;"&gt;a fix a month&lt;/span&gt; that targets one major issue is &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;way&lt;/span&gt;&lt;/span&gt; better then waiting 6 or more months for a huge fix... And, of course, the worst part of all this wait is that we have no feedback on whether those fixes are a day or a year ahead... :(&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-3836129933204963690?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/3836129933204963690/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=3836129933204963690' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3836129933204963690'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3836129933204963690'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/05/to-help-or-not-to-help.html' title='To help or not to Help'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-5208226076835480238</id><published>2007-05-08T20:22:00.000Z</published><updated>2007-05-09T14:01:30.479Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>Tweak away</title><content type='html'>I'm a tweaker! I know that there may be some cures around for it, but I simply don't want to be cured! :)&lt;br /&gt;&lt;br /&gt;I hate bloated software and what it does to Windows' Registry, so, whenever I get a chance, I &lt;span style="font-style: italic;"&gt;tweak&lt;/span&gt; some program to my liking. The last tweaked one was Acrobat Reader 7.0.9.&lt;br /&gt;&lt;br /&gt;Now, what exactly do I tweak and what for?&lt;br /&gt;&lt;br /&gt;Well, I hate having to install a gazillion programs just to be able to do my normal work, so I've created a D:\Utils folder where I keep many such utils in such a way as &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; to require installation.&lt;br /&gt;&lt;br /&gt;At most, a .reg file to run to register some file extensions or a batch file to regsvr32 some dlls (actually, I have both as part of my &lt;span style="font-style: italic;"&gt;setup&lt;/span&gt; process that I update whenever I add a new utility that requires some of that work).&lt;br /&gt;&lt;br /&gt;Why?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;It's &lt;span style="font-weight: bold;"&gt;way&lt;/span&gt; faster than installing it all! Just restore that folder, run a reg and a batch file and they're all easily accessible!&lt;/li&gt;&lt;li&gt;My computer never ran faster with so much less registry/installer trash in it! It even shutdowns faster than my father-in-law's brand new Vista laptop suspends and my computer is 2 years old!&lt;/li&gt;&lt;li&gt;I use an alternative &lt;span style="font-style: italic;"&gt;menu&lt;/span&gt;, I simply add that menu in a few seconds and they're all ready to use. You can see 3 things in the images below: my current D:\Utils folder, my &lt;span style="font-style: italic;"&gt;menu&lt;/span&gt; and the files that make up the menu.&lt;/li&gt;&lt;/ol&gt;Here's how it's all done:&lt;br /&gt;&lt;br /&gt;I have 2 folders: D:\Utils which has some subfolders for those utils that have plenty of files and a Misc folder for those 1 or 2 file utils; D:\Menu, where I keep the menu shortcuts to access those programs and some other programs that I have to install such as Outlook, Word or Delphi!&lt;br /&gt;&lt;br /&gt;The D:\Menu folder is actually just a bunch of shortcuts, named in such a way as to have all the options starting with a different character. It also has subfolders that I customize and change the icon so as to be more clear what they have inside. Then, by simply having those two folders on my D: drive, all I need to do is right-click on the taskbar, select &lt;span style="font-style: italic;"&gt;Toolbars-&gt;New Toolbar...&lt;/span&gt; and browse for the D:\Menu folder. Reposition/resize so as to be so small that not a single icon shows and in a way that it's to the right of the &lt;span style="font-style: italic;"&gt;Start Menu&lt;/span&gt; and presto: an easy to access menu, either by mouse or, as I most use it, by keyboard...&lt;br /&gt;&lt;br /&gt;Keyboard access is easy: Windows Key, Tab (that's not Win+TAB, but two separate key presses: Windows Key opens up the Start menu, TAB tabs away to the next item which is my menu. For instance, Win, Tab, P (for programming), D (for Delphi).&lt;br /&gt;&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;EDIT&lt;/span&gt;]: &lt;span style="font-style: italic;"&gt;Apparently, for Win, Tab to work it requires the XP start menu: it &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;doesn't&lt;/span&gt;&lt;span style="font-style: italic;"&gt; work with Classic Start Menu. It doesn't require themes though, so either themes or no themes as long as you use the XP menu (2 column) pressing Win then Tab will open the menu...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;And there you go: after a format, and a couple clicks, I have all those utils shown below and many more on the Misc folder, ready to be used.&lt;br /&gt;&lt;br /&gt;Now onto today's tweak which is what led me to start this post! :)&lt;br /&gt;&lt;br /&gt;After trying to tweak Acrobat 8 into working in my D:\Utils, I decided to give up and go for an older one. 8 relies too much on MSI features and insists on re-installing files that I don't want there! Plus, there's nothing really useful in it. Also, I must add that I &lt;span style="font-weight: bold;"&gt;don't&lt;/span&gt; read PDFs inside any of the browsers: with all security flaws constantly showing up, it's safer to download it and read it off-line. So, how does one set up Acrobat 7 in a way that it doesn't require installation?&lt;br /&gt;&lt;br /&gt;Easy!&lt;br /&gt;&lt;br /&gt;Start by downloading it (&lt;a href="http://ardownload.adobe.com/pub/adobe/reader/win/7x/7.0.9/enu/AdbeRdr709_en_US.exe"&gt;Acrobat 7.0.9&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Then, using a VM (or a trash computer or even your own if you don't mind the registry trash that installing/uninstalling will leave behind!), install it.&lt;br /&gt;&lt;br /&gt;Then, go to &lt;span style="font-weight: bold;"&gt;%programfiles%\Adobe&lt;/span&gt; and copy the &lt;span style="font-weight: bold;"&gt;Acrobat 7.0&lt;/span&gt; folder. You can also copy the &lt;span style="font-weight: bold;"&gt;%windir%\Installer\{AC76BA86-7AD7-1033-7B44-A70900000002}&lt;/span&gt; folder if you want some of the extra icons but it's not really required. If you installed on your own machine, uninstall and reboot.&lt;br /&gt;&lt;br /&gt;Now put the saved folder in it's final destination (in my case, I placed it in D:\Utils and renamed it to just Acrobat) and let's trim away some needless stuff:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Delete the following subfolders:&lt;/li&gt;&lt;ol&gt;&lt;li&gt;ActiveX&lt;/li&gt;&lt;li&gt;Esl&lt;/li&gt;&lt;li&gt;Resource&lt;/li&gt;&lt;li&gt;Setup Files&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Move all the files/folders inside Reader\Plug_ins into Reader\Optional (you may want to keep just Search.api and Search5.api). If you later find that some functionality such as signing or form filling is needed, you can go back to the optional folder and move those back to the plug_ins. Not having them there makes Acrobat fly when starting even without resorting to pre-loading the DLL files on startup as done by &lt;span style="font-weight: bold;"&gt;reader_sl.exe&lt;/span&gt; on a default install.&lt;/li&gt;&lt;li&gt;You can also safely delete &lt;span style="font-weight: bold;"&gt;Reader\reader_sl.exe&lt;/span&gt; and &lt;span style="font-weight: bold;"&gt;Reader\AdobeUpdateManager.exe&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;Now, just double click a PDF file and browse to the Reader\AcroRd32.exe file and select to use that as the default. You'll accept the license and you can then go to the File Types (Tools-&gt;Folder Options in Explorer) and select Advanced and change the icon to another one of your liking.&lt;br /&gt;&lt;br /&gt;If you save the following registry keys, you can later, on a subsequent &lt;span style="font-style: italic;"&gt;installation&lt;/span&gt; just run that reg file and have it ready to go:&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HKEY_CLASSES_ROOT\.pdf&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;HKEY_CLASSES_ROOT\pdf_auto_file&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Saving &lt;span style="font-weight: bold;"&gt;HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\7.0&lt;/span&gt; will allow you to have your options ready as you like, but save only after you set them! :)&lt;br /&gt;&lt;br /&gt;Just export those, add to your master_reg file and next time you waste no time setting those up.&lt;br /&gt;&lt;br /&gt;BTW: in case you're wandering how the 3rd screen-shot only shows my D:\Menu folder and nothing else: "explorer /root,D:\Menu\"&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H01pb6FTsXo/RkDmQmA8JNI/AAAAAAAAAEs/mVr169cG-Xw/s1600-h/Menu02.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_H01pb6FTsXo/RkDmQmA8JNI/AAAAAAAAAEs/mVr169cG-Xw/s200/Menu02.png" alt="" id="BLOGGER_PHOTO_ID_5062299153921221842" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H01pb6FTsXo/RkHUB2A8JOI/AAAAAAAAAE0/7KFKCqUGgXw/s1600-h/Utils.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_H01pb6FTsXo/RkHUB2A8JOI/AAAAAAAAAE0/7KFKCqUGgXw/s200/Utils.png" alt="" id="BLOGGER_PHOTO_ID_5062560584285562082" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H01pb6FTsXo/RkDmCGA8JMI/AAAAAAAAAEk/DvR5w_oR4HQ/s1600-h/Menu01.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_H01pb6FTsXo/RkDmCGA8JMI/AAAAAAAAAEk/DvR5w_oR4HQ/s200/Menu01.png" alt="" id="BLOGGER_PHOTO_ID_5062298904813118658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;EDIT&lt;/span&gt;: One final tweak... Removing the ADS from Acrobat Reader 7...&lt;br /&gt;&lt;br /&gt;Use regedit or add this to your master_reg file:&lt;br /&gt;&lt;br /&gt;[HKEY_CURRENT_USER\Software\Adobe\Acrobat Reader\7.0\AdsInReader]&lt;br /&gt;"bShowAds"=dword:00000000&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-5208226076835480238?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/5208226076835480238/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=5208226076835480238' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5208226076835480238'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5208226076835480238'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/05/tweak-away.html' title='Tweak away'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_H01pb6FTsXo/RkDmQmA8JNI/AAAAAAAAAEs/mVr169cG-Xw/s72-c/Menu02.png' height='72' width='72'/><thr:total>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-5250219215526274875</id><published>2007-05-01T15:28:00.000Z</published><updated>2007-05-02T12:02:34.870Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Delphi 2007 in a RADical build - Part 2</title><content type='html'>After a &lt;a href="http://memyselfanddelphi.blogspot.com/2007/04/its-all-for-best.html"&gt;sour harm&lt;/a&gt; and a &lt;a href="http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-in-radical-build-part-11.html"&gt;rough weekend&lt;/a&gt;, here's part 2 of 4 in setting up your Delphi RADical Build.&lt;br /&gt;&lt;br /&gt;In this part, we will configure the OS inside the VM to make it start/shutdown faster, require less memory and less CPU. This will shorten the time needed to get your dev environment up and running, even if for normal usage you can simply suspend it between usages which will make it restore faster when needed.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Option&lt;/span&gt;: Disabling Shutdown Event Tracker&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Why...&lt;/span&gt;: Make it shutdown faster and unattended&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;How...&lt;/span&gt;: Run Group Policy Editor (start-&gt;run-&gt;gpedit.msc)&lt;br /&gt;Browse to "Computer Configuration"-&gt;"Administrative Templates"-&gt;"System"&lt;br /&gt;Double-click Display Shutdown Event Tracker from the System Setting list&lt;br /&gt;Select the Disabled option button&lt;br /&gt;Click OK and close Group Policy Editor&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Option&lt;/span&gt;: Set a fixed-size Swap file&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Why...&lt;/span&gt;: Avoid needless fragmentation of the swap file&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;How...&lt;/span&gt;: Right-Click My Computer, Properties, Advanced, Performance, Settings, Advanced, Virtual Memory, Change&lt;br /&gt;If you allocated less than 1 GB of RAM to your VM, use a value equal to twice the allocated amount, otherwise you can use a smaller value.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Option&lt;/span&gt;: Modify performance settings&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Why...&lt;/span&gt;: A server OS will default to give preference to services instead of applications.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;How...&lt;/span&gt;: Right-Click My Computer, Properties, Advanced, Performance, Settings, Advanced&lt;br /&gt;Select "Programs" in both options shown.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Option&lt;/span&gt;: Adjust Visual Effects&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Why...&lt;/span&gt;: Not really needed for a dev machine and slow things down&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;How...&lt;/span&gt;: Right-Click My Computer, Properties, Advanced, Performance, Settings, Visual Settings&lt;br /&gt;I disable all except "Show shadows under mouse pointer" as that one does improve the pointer a bit. If you absolutely like some other option, just leave it in.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Option&lt;/span&gt;: Disable Automatic Updates&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Why...&lt;/span&gt;: Since we'll be reverting to a clean state on shutdown, it's pointless to have it auto-update&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;How...&lt;/span&gt;: Right-Click My Computer, Properties, Automatic Updates&lt;br /&gt;Un-check the "Keep my computer..."&lt;br /&gt;In part 1 (http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-in-radical-build-part-1.html), you should have already installed the critical updates, so your system won't be that outdated.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Option&lt;/span&gt;: Disable Memory Dump creation&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Why...&lt;/span&gt;: Defaults to the same size of your memory, and for the most part is useless&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;How...&lt;/span&gt;: Right-Click My Computer, Properties, Advanced, Startup and Recovery&lt;br /&gt;Select "None" on the bottom in the "Write debugging information" section.&lt;br /&gt;You may also unselect "Automatically restart" (so you can see what's happening) and "Send an Administrative Alert".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Option&lt;/span&gt;: Disable Password Expiration&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Why...&lt;/span&gt;: Pointless to change password when you revert to snapshot on shutdown&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;How...&lt;/span&gt;: Run Group Policy Editor (start-&gt;run-&gt;gpedit.msc)&lt;br /&gt;Navigate to "Computer Configuration"-&gt;"Windows Settings"-&gt;"Security Settings"-&gt;"Account Policies"-&gt;"Password Policy"&lt;br /&gt;Set "Maximum password age" to 0.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Option&lt;/span&gt;: Cut down on active services&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Why...&lt;/span&gt;: Many services serve no use for a dev VM, so just &lt;span style="font-style: italic;"&gt;keep &lt;/span&gt;the following.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;How...&lt;/span&gt;: Using Service Manager, just set all non-essential services that are started and set to automatic to disabled. The following is the list of started services on my VM: it's a semi-conservative list where I leave some things enabled such as "Shell H/W Detection", that can be disabled afterwards before creating the snapshot.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Disable all started services &lt;span style="font-weight: bold;"&gt;except &lt;/span&gt;the following ones:&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;COM+ Event System&lt;/li&gt;&lt;li&gt;Cryptographic Services&lt;/li&gt;&lt;li&gt;DHCP Client&lt;/li&gt;&lt;li&gt;DNS Client&lt;/li&gt;&lt;li&gt;Event Log&lt;/li&gt;&lt;li&gt;HTTP SSL&lt;/li&gt;&lt;li&gt;IIS Admin Service&lt;/li&gt;&lt;li&gt;IPSEC Services&lt;/li&gt;&lt;li&gt;Logical Disk Manager&lt;/li&gt;&lt;li&gt;Network Connections&lt;/li&gt;&lt;li&gt;Network Location Awareness (NLA)&lt;/li&gt;&lt;li&gt;Plug and Play&lt;/li&gt;&lt;li&gt;Print Spooler&lt;/li&gt;&lt;li&gt;Protected Storage&lt;/li&gt;&lt;li&gt;Remote Procedure Call (RPC)&lt;/li&gt;&lt;li&gt;SBCore Service&lt;/li&gt;&lt;li&gt;Secondary Logon&lt;/li&gt;&lt;li&gt;Security Accounts Manager&lt;/li&gt;&lt;li&gt;Server&lt;/li&gt;&lt;li&gt;Shell Hardware Detection&lt;/li&gt;&lt;li&gt;Simple Mail Transfer Protocol (SMTP)&lt;/li&gt;&lt;li&gt;System Event Notification&lt;/li&gt;&lt;li&gt;TCP/IP NetBIOS Helper&lt;/li&gt;&lt;li&gt;VMware Tools Service&lt;/li&gt;&lt;li&gt;Windows Management Instrumentation&lt;/li&gt;&lt;li&gt;Workstation&lt;/li&gt;&lt;li&gt;World Wide Web Publishing Service&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-family:courier new;"&gt;Option&lt;/span&gt;: Enabling AutoLogon&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Why...&lt;/span&gt;: Make it start faster and unattended&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;How...&lt;/span&gt;: You can either edit the registry directly or use TweakUI (http://www.microsoft.com/windowsxp/downloads/powertoys/xppowertoys.mspx)&lt;br /&gt;Using TweakUI is as simple as selecting Logon-&gt;Autologon.&lt;br /&gt;You can also directly edit the registry, but there's no good reason for that: even if you don't want to install TweakUI, you only need to copy the .EXE from another installation to your VM and run it there: it does not need any support files or configuration.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: with server OSes, it appears to only work for "next" logon instead of "all" logons. Since I'm kind of uninspired to search for more info, you can simply do this step as the last step before creating a snapshot of the working VM. Then, whenever it shutdowns and reverts to snapshot, next start up will work just fine. If I find the inspiration to do the right searches and find some more info, I'll update this post.&lt;br /&gt;&lt;br /&gt;This is about everything I do to &lt;span style="font-style: italic;"&gt;cleanup&lt;/span&gt; my dev VM.&lt;br /&gt;&lt;br /&gt;Next part, 3 of 4, will be about setting up Subversion and the continuous build, plus some examples of how to start using it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-5250219215526274875?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/5250219215526274875/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=5250219215526274875' title='8 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5250219215526274875'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5250219215526274875'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/05/delphi-2007-in-radical-build-part-2.html' title='Delphi 2007 in a RADical build - Part 2'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>8</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-6406345314007081781</id><published>2007-04-30T10:15:00.000Z</published><updated>2007-04-30T10:29:59.549Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Delphi 2007 in a RADical build - Part 1.1</title><content type='html'>Well, after a &lt;a href="http://memyselfanddelphi.blogspot.com/2007/04/its-all-for-best.html"&gt;sour harm&lt;/a&gt;, I went to a niece's birthday barbecue party on Saturday and something I ate didn't quite fit in... Not that it physically impeded me of writing, but with my stomach as it was plus the usual side inconveniences, I simply didn't want to be at the computer...&lt;br /&gt;&lt;br /&gt;But, I'm better now (even though not 100% yet), so I'll get along with writing Part 2, so that one should be ready sometime today.&lt;br /&gt;&lt;br /&gt;As for the .1, you may want to give a go to &lt;a href="http://www.nliteos.com/"&gt;nLite &lt;/a&gt;(http://www.nliteos.com); it allows you to make a tinier OS. I gave it a quick spin and it appears to work ok, but haven't tested exhaustively, so use at your own risk (that's one of the beauties of VMs: you &lt;span style="font-weight: bold;"&gt;can&lt;/span&gt; test things out without too much hassle...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6406345314007081781?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6406345314007081781/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6406345314007081781' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6406345314007081781'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6406345314007081781'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-in-radical-build-part-11.html' title='Delphi 2007 in a RADical build - Part 1.1'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-9114455668827719280</id><published>2007-04-27T15:05:00.000Z</published><updated>2007-04-27T15:11:06.828Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>It's all for the best...</title><content type='html'>Well, today I won't be writing "Delphi 2007 in a RADical build - Part 2": will be away from keyboard for the rest of the day...&lt;br /&gt;&lt;br /&gt;I decided it was about time to go donate some blood again (I'm a regular donor), only this time I got a nurse that, well, let's just say that my left arm is a bit soured... Since I'm a touch typist and can't work very well typing with one hand, I'll leave that either for later tonight or most likely tomorrow... But don't despair, Part 2 is just around the corner!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-9114455668827719280?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/9114455668827719280/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=9114455668827719280' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/9114455668827719280'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/9114455668827719280'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/its-all-for-best.html' title='It&apos;s all for the best...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-6969986917605159589</id><published>2007-04-27T04:24:00.000Z</published><updated>2007-04-27T15:11:43.574Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Delphi 2007 in a RADical build - Part 1</title><content type='html'>Sinopsis: In this multi-part tutorial, I'll explain how you can setup your development environment on a VM, complete with version control (SVN), and continuous build integration.&lt;br /&gt;&lt;br /&gt;This is mostly as it relates to one-man-shops, but it can be used for other small shops as well. Don't forget that, for multi-man shops you will require additional licenses for the OS, Delphi and any 3rd Party Components...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What will you gain from all this?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Setting up your Dev environment in a VM will allow you to grab another computer, install a VM Player, copy the VM files from some DVDs or external drives and be ready to rock in minutes, should you have some major problem on your main machine;&lt;br /&gt;&lt;br /&gt;2) Using a VM ensures you always have a clean but fully configured machine and that it &lt;span style="font-weight: bold; font-style: italic;"&gt;stays&lt;/span&gt; clean and fully configured;&lt;br /&gt;&lt;br /&gt;3) Using SVN will overall improve your work by allowing you to compare changes, check certain builds/releases for bugs, fix urgent bugs in the release that is currently shipping without having to rush out your current untested and unfinished release;&lt;br /&gt;&lt;br /&gt;4) Using continuous build will help you improve the overall quality: no-one likes to see a red icon around pointing you a finger saying "you broke this!", so you'll try harder to commit fully working builds to the repository;&lt;br /&gt;&lt;br /&gt;5) Not only that, but should you work on multiple inter-related projects, you'll quickly find out if you broke something on another project and thus it will be much easier and faster to fix that while you still remember what changes you made...&lt;br /&gt;&lt;br /&gt;6) Overall, you'll be able to resume working faster should anything serious happen, you'll be able to keep a fully working/clean environment, and you'll catch and fix bugs faster.&lt;br /&gt;&lt;br /&gt;This article is divided into 4 parts:&lt;br /&gt;&lt;br /&gt;Part 1: Setting up your VM and OS.&lt;br /&gt;Part 2: Configuring the OS to start faster and use less memory/CPU.&lt;br /&gt;Part 3: Setting up Delphi 2007, Subversion, Tortoise SVN, CruiseControl.NET.&lt;br /&gt;Part 4: Tips and tricks on using Subversion.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Part 1 - Setting up your VM.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You will require the following items:&lt;br /&gt;&lt;br /&gt;1) VMWare Workstation (if you use something else, just adapt accordingly)&lt;br /&gt;2) Windows Small Business Server 2003 R2.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why not Windows XP or Windows Vista?&lt;/span&gt;&lt;br /&gt;Well, you can get WinSBS 2003 for roughly the same amount as a new (non-OEM) license for Vista and/or XP and Windows 2003 Server will add less clutter to your Virtual Machine, require less disk space, and will overall run faster, especially after some tweaking as we will do in Part 2... You can however use other versions of Windows if you want: just ignore/adapt where needed.&lt;br /&gt;&lt;br /&gt;1) Setup VMWare Workstation if not already done. I prefer &lt;span style="font-weight: bold; font-style: italic;"&gt;not&lt;/span&gt; to let it disable CD/DVD auto-run, because I rarely use physical CD/DVD drives in the VMs: I prefer to use ISO images.&lt;br /&gt;&lt;br /&gt;2) If you have the disk space, even if on an external drive, create the ISOs for the SBS CDs. I use UltraISO for that, but feel free to use any other util of your choice. You will only need Disk 1.&lt;br /&gt;&lt;br /&gt;3) Create a new custom Virtual Machine and, for the OS, select "Windows Server 2003 Standard Edition". Standard is just fine since we won't be using much of the SBS software anyway.&lt;br /&gt;&lt;br /&gt;  1) Give it as much RAM as you can without exceeding the Maximum recommended memory. It will be great if you have at least 2 GB of RAM on your physical machine, but don't despair: you can get it working with 1 GB or even less, if you don't run many simultaneous programs other than the VM.&lt;br /&gt;&lt;br /&gt;  2) You can use NAT for the network, unless you need to have this VM accessible from some other computer. In that case, I'd recommend the default Bridged connection and preferably a fixed IP outside of your router's DHCP range, if you use one.&lt;br /&gt;&lt;br /&gt;  3) Create a new Virtual Disk (you can use physical disks but then this VM will not be easily portable and you'll loose much of the flexibility in setting up a VM with your Development environment!).&lt;br /&gt;&lt;br /&gt;  4) The 8 GB default is just fine for Windows + Delphi + quite a few 3rd party tools + Subversion + CruiseControl, but you can safely use more if you have the space. You can also at any time expand that disk if you need more space, but it's faster to plan ahead and choose a proper value before starting.&lt;br /&gt;&lt;br /&gt;  5) For performance, you may want to select the option to "Allocate all disk space now": this way the disk files won't be growing on the go and it will run faster. You *will* want to check the "Split disk into 2 GB files" option: that will make backing up into multiple DVDs a lot easier, plus it will allow you to store the VM on a FAT disk drive, be that external or not, should it be needed.&lt;br /&gt;&lt;br /&gt;  6) When the disk is created (it will take a couple minutes reserving all that space), double click the CD-ROM device on your new VM and choose either the ISO created in step 2 or the physical drive containing the 1st WinSBS CD.&lt;br /&gt;&lt;br /&gt;3) Start your VM and install Windows SBS.&lt;br /&gt;&lt;br /&gt;4) Install IIS: if it's already installed when setting up .NET, it will be configured for ASP.NET; otherwise you'll have more work later;&lt;br /&gt;&lt;br /&gt;5) After starting up the VM with the freshly started OS, install VMWare Tools.&lt;br /&gt;&lt;br /&gt;6) Activate your OS.&lt;br /&gt;&lt;br /&gt;7) Run Windows Update and install all *critical* updates: you don't need IE7 on the VM and you can disable it being pushed onto your computer by using this tool from MSFT: &lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=4516A6F7-5D44-482B-9DBD-869B4A90159C&amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=4516A6F7-5D44-482B-9DBD-869B4A90159C&amp;amp;displaylang=en&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Time to catch some sleep now...&lt;br /&gt;Stay tuned for parts 2-4...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6969986917605159589?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6969986917605159589/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6969986917605159589' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6969986917605159589'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6969986917605159589'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-in-radical-build-part-1.html' title='Delphi 2007 in a RADical build - Part 1'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-8208392480970346049</id><published>2007-04-26T14:16:00.000Z</published><updated>2007-04-26T22:25:39.101Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>My must have utils - Part 3 (VMWare)</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_H01pb6FTsXo/RjC1ijYzOzI/AAAAAAAAADc/goLp2iLdEV8/s1600-h/VMWare01.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 85px; height: 70px;" src="http://4.bp.blogspot.com/_H01pb6FTsXo/RjC1ijYzOzI/AAAAAAAAADc/goLp2iLdEV8/s200/VMWare01.png" alt="" id="BLOGGER_PHOTO_ID_5057741986756508466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Any self-respected programmer already uses this, unless they are masochists! :)&lt;br /&gt;&lt;br /&gt;Still, for those few who don't yet know what this is all about, or for those mislead sheep that are using something else, here's a quick rundown of the features that I like in &lt;a href="http://www.vmware.com/products/ws/"&gt;VMWare Workstation&lt;/a&gt;:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Speed. If you try other products, you'll see the difference! Given enough memory, your VMs can run nearly as fast as your main machine.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_H01pb6FTsXo/RjC2HjYzO1I/AAAAAAAAADs/b12rqSiPMHI/s1600-h/VMWare02.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer; width: 90px; height: 61px;" src="http://4.bp.blogspot.com/_H01pb6FTsXo/RjC2HjYzO1I/AAAAAAAAADs/b12rqSiPMHI/s200/VMWare02.png" alt="" id="BLOGGER_PHOTO_ID_5057742622411668306" border="0" /&gt;&lt;/a&gt;Snapshots and "Revert to snapshot on shutdown": these two are invaluable if you need to keep a VM &lt;span style="font-style: italic;"&gt;clean&lt;/span&gt; of outside interference. I have this on several VMs, but particularly on one where I also installed Delphi 2007 and didn't touch a single setting. This way I can validate if some particular odd behavior I may get in my dev machine is due to some of my &lt;a href="http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-putting-fat-cow-on-diet_16.html"&gt;&lt;span style="font-style: italic;"&gt;tweaking&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&lt;span&gt;&lt;a href="http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-putting-fat-cow-on-diet_16.html"&gt; &lt;/a&gt;or due to some third party component I am using. It's also invaluable to validate QC reports.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;You can quickly create a new independent VM from any snapshot, e.g., I keep a base Windows VM with a clean snapshot and when I need another VM to test something, I create a new one from that snapshot. It's faster than using many snapshots on a single VM and also more flexible: I can, for instance, put seldom used VMs on an external USB2 HDD (and they work fine from there!).&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;For VMs set to revert to snapshot on shutdown, shutting them down only takes a few seconds: no waiting for logoff and guest OS shutdown!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;&lt;/span&gt;There is a &lt;a href="http://www.vmware.com/products/player/"&gt;free player &lt;/a&gt;from VMWare, should you want/need to distribute a particular VM for someone else to test (just don't forget of copyright issues on what OS/Apps you have there!)&lt;br /&gt;In fact, there are also some freeware VMWare creation tools that allow you to work with VMs using only the player engine...&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You have a lot of power in what hardware is present in your VM (Disks, CD-ROM, Network, Sound, USB) and you can set it to automatically use new USB devices plugged to your computer to a running VM.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;There's even a &lt;a href="http://www.vmware.com/products/converter/"&gt;Physical Machine Converter&lt;/a&gt; tool, so you can grab a physical machine and have it run inside a VM: i tried this a few weeks ago, and it worked like a charm!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You can &lt;span style="font-style: italic;"&gt;archive&lt;/span&gt; your machines easily on DVD or any other medium of your choice: don't forget to use the "Split in 2 GB" option when creating the virtual disks: it's easier to split that up between DVDs!&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EDIT: Someone just reminded me of another feature that is worth mentioning: Cut/Paste and Drag'n'Drop between the host and the guests or between multiple guests... Very handy thing...&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;EDIT: How could I also miss this one! You can set access to virtual folders, i.e., folders in the host OS that you can map as disk drives on the guest, so you can save your work there and still have an always clean machine.&lt;br /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Overall, it works &lt;span style="font-weight: bold;"&gt;very&lt;/span&gt; well, fast, reliable and flexible, so get the trial, set it up and see what you've been missing!&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-8208392480970346049?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/8208392480970346049/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=8208392480970346049' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/8208392480970346049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/8208392480970346049'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/my-must-have-utils-part-3-vmware.html' title='My must have utils - Part 3 (VMWare)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_H01pb6FTsXo/RjC1ijYzOzI/AAAAAAAAADc/goLp2iLdEV8/s72-c/VMWare01.png' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-7281182657386625488</id><published>2007-04-26T00:28:00.000Z</published><updated>2007-04-26T00:36:31.425Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Delphi 2007 - To error or not to error...</title><content type='html'>Well, in my case, is to &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt;. I finally got tired of that wavy red line that kept creeping in even for source working perfectly well. Heck, just right now, after loading Delphi and my current project, it started complaining, i.e., showing some of those lines.&lt;br /&gt;&lt;br /&gt;For some reason, it would refuse to acknowledge one of the units used and anything declared within... Not even after a &lt;span style="font-weight: bold;"&gt;build&lt;/span&gt; (successful one, of course). And the odd thing, is that, after I commented that unit from the uses clause, compiled (unsuccessfully, of course!), and uncommented the unit back and, all of a sudden, there were no more red wavy lines...&lt;br /&gt;&lt;br /&gt;I was just hoping it would work better than in BDS 2006, but I guess the code behind must not have changed, so it's bye-bye Error Insight for me...&lt;br /&gt;&lt;br /&gt;And no, I'm not going to QC it: it's hard enough for easily reproducible QC reports to get fixed, let alone those that happen only some of the times...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-7281182657386625488?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/7281182657386625488/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=7281182657386625488' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7281182657386625488'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7281182657386625488'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-to-error-or-not-to-error.html' title='Delphi 2007 - To error or not to error...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-7203300848630856664</id><published>2007-04-25T19:34:00.000Z</published><updated>2007-04-25T20:16:37.384Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Delphi 2007 - Faulty Help Logic, or "How to ask for help"</title><content type='html'>Well, it's been a busy day, trying to figure out why some users would get the proper options when pressing F1 over &lt;span style="font-weight: bold;"&gt;shellexecute&lt;/span&gt; and others would require that &lt;span style="font-weight: bold;"&gt;ShellAPI&lt;/span&gt; was already declared in the uses clause for the help to work out...&lt;br /&gt;&lt;br /&gt;A few Delphi users contributed with their input on the wrong assumption (by all of us!) that it was something related to each user's particular configuration. It turns out, as &lt;a href="http://blogs.teamb.com/CraigStuntz/"&gt;Craig Stuntz&lt;/a&gt; &lt;a href="http://newsgroups.borland.com/cgi-bin/dnewsweb?cmd=article&amp;group=borland.public.delphi.non-technical&amp;amp;item=629995&amp;utag="&gt;discovered&lt;/a&gt;, that it's a question of &lt;span style="font-weight: bold; font-style: italic;"&gt;where&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;you type &lt;span style="font-weight: bold;"&gt;shellexecute&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;That is, if you create a new VCL forms project, then double click the form to create a method and type &lt;span style="font-weight: bold;"&gt;shellexecute&lt;/span&gt; there, pressing F1 will yield a famous message of "No help found for (none)"; if, on the other hand, you type &lt;span style="font-weight: bold;"&gt;shellexecute&lt;/span&gt; on somewhere where it will be illegal for it to be, say, after the &lt;span style="font-weight: bold;"&gt;uses&lt;/span&gt; clause, pressing F1 over &lt;span style="font-weight: bold;"&gt;shellexecute&lt;/span&gt; &lt;span style="font-weight: bold; font-style: italic;"&gt;will&lt;/span&gt; show you the proper help!&lt;br /&gt;&lt;br /&gt;So, if you get another "No help found for (none)", try typing that keyword on, say, the end of the file right after &lt;span style="font-weight: bold;"&gt;end.&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;I did some more tests and found other alternatives as well:&lt;br /&gt;New (empty) text file-&gt;type it there, press F1 and it works.&lt;br /&gt;&lt;span style="font-size:130%;"&gt;&lt;br /&gt;&lt;span style="color: rgb(204, 0, 0);"&gt;But the &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(204, 0, 0);"&gt;easiest&lt;/span&gt;&lt;span style="color: rgb(204, 0, 0);"&gt; way to do it: just type // before the keyword you're looking for help! :)  &lt;br /&gt;&lt;br /&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;This includes other keywords such as &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;for&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;div&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, &lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;array&lt;/span&gt;&lt;span style="color: rgb(0, 0, 0);"&gt;, etc...&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: &lt;/span&gt;the above &lt;span style="font-style: italic;"&gt;tricks&lt;/span&gt; only work if the message is "&lt;span style="font-style: italic;"&gt;No help found for &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;(none)&lt;/span&gt;"; if you ask for help on some keyword and instead get "&lt;span style="font-style: italic;"&gt;No help found for &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;context&lt;/span&gt;", then these tricks will not work...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-7203300848630856664?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/7203300848630856664/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=7203300848630856664' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7203300848630856664'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7203300848630856664'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-faulty-help-logic-or-how-to.html' title='Delphi 2007 - Faulty Help Logic, or &quot;How to ask for help&quot;'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-2999581897178822448</id><published>2007-04-25T15:06:00.000Z</published><updated>2007-04-25T16:04:49.588Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><title type='text'>Delphi 2007 - Updating install files</title><content type='html'>A small tip just learned...&lt;br /&gt;&lt;br /&gt;I've been doing some experimentation installing Delphi in various Virtual Machines to test some things, and in the process, I tested another one: replaced the provided QualityCentral.exe (broken, v1.0.1.20) with the fixed and updated v. 1.0.1.21.&lt;br /&gt;&lt;br /&gt;Guess what? The installer didn't complain, even though the files are different sizes... When I moved that cache to another machine and installed from there, I got the updated version installed as part of the normal setup.&lt;br /&gt;&lt;br /&gt;This is good because my future installs can now install the working version of it instead of the default one!&lt;br /&gt;&lt;br /&gt;You probably can get away (&lt;span style="font-style: italic;"&gt;haven't tested&lt;/span&gt;) with modified source files too, so should you "patch" some source file, remember to try and update the cached version. If you install from DVD, and assuming the DVD has all the files plainly available, try to make an ISO, update the file, and install on a VM to try it out: wouldn't be surprised if it worked just fine... (Again, &lt;span style="font-style: italic;"&gt;untested &lt;/span&gt;as I didn't order a media kit, and since ISO downloads are only available for those purchasing the media kits...)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-2999581897178822448?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/2999581897178822448/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=2999581897178822448' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2999581897178822448'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2999581897178822448'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-updating-install-files.html' title='Delphi 2007 - Updating install files'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-7383053447928058653</id><published>2007-04-24T18:58:00.000Z</published><updated>2007-04-24T21:33:44.542Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>My must have utils - Part 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5ZQ75BRSI/AAAAAAAAAB8/kn_vvJ7piSo/s1600-h/TSP01.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5ZQ75BRSI/AAAAAAAAAB8/kn_vvJ7piSo/s200/TSP01.png" alt="" id="BLOGGER_PHOTO_ID_5057077579073275170" border="0" /&gt;&lt;/a&gt;This time, I'll write a bit about another of those tools I can't live without: &lt;a href="http://www.jam-software.com/treesize/"&gt;TreeSizePro&lt;/a&gt;.&lt;br /&gt;I like to be in control of what's going on on my computer, rather than have it decide what's best for me. That's how I knew that Delphi 2007 PRO's default full install requires &lt;a href="http://1.bp.blogspot.com/_H01pb6FTsXo/RgHaZPb5X6I/AAAAAAAAAAk/fnSfOEAHMdU/s1600-h/Install+Space.png"&gt;3.6 GB&lt;/a&gt; free HDD space, even though there's only around 700 MB worth of CodeGear stuff. Using TreeSizePro it's child's play to find that out: I start by scanning the target hard-drive and Save the report as XML; then, I install the tool(s) I want and finally I run another scan of the hard-drive. When it's done (usually a few seconds), i use the built-in option to &lt;span style="font-weight: bold;"&gt;compare&lt;/span&gt; that snapshot with the previously saved one. And voilá! Couldn't be easier: not only you'll find out &lt;span style="font-weight: bold;"&gt;how much&lt;/span&gt; space that install is using, but, more importantly, &lt;span style="font-weight: bold;"&gt;where&lt;/span&gt; was that space spent... Like, in the above example, 2 GB of cached install files...&lt;br /&gt;&lt;br /&gt;Other nice features:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Integrates with explorer, so I can right-click on a folder/drive and run it there;&lt;/li&gt;&lt;li&gt;You can automatically expand/hide all folders above/below a certain threshold;&lt;/li&gt;&lt;li&gt;You can see where your space is going (top 100 files), what types of files use what space, how are your files taking space distributed by file age;&lt;/li&gt;&lt;li&gt;You can see the number of files or space used or percentage of space used;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You can see file usage by users, should you have several users on your computer (also runs on servers);&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Schedule scans to occur at some time/date or with a certain frequency;&lt;/li&gt;&lt;li&gt;Export to Excel, HTML, Text, XML;&lt;/li&gt;&lt;li&gt;Search for Biggest/Oldest/Temporary files;&lt;/li&gt;&lt;li&gt;There's even a limited (in functionality) Freeware version if you don't want to spend any money...&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;And a lot more options. Go there, try it and see for yourself. If you don't want/can't spend money on such a tool, get the free version even though the Personal version is cheap enough not to be without it!... If your drive has limited space or if you just &lt;span style="font-weight: bold;"&gt;like&lt;/span&gt; to know where that space is going, just give it a spin...&lt;br /&gt;&lt;br /&gt;[Edit]: Forgot to mention that this one is another one of those utils that I run without installing first: D:\Utils\TreeSize...&lt;br /&gt;&lt;br /&gt;Here are a few appetizer images:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5br75BRdI/AAAAAAAAADU/W7slH2sicg8/s1600-h/TSP04.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5br75BRdI/AAAAAAAAADU/W7slH2sicg8/s200/TSP04.png" alt="" id="BLOGGER_PHOTO_ID_5057080241952998866" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H01pb6FTsXo/Ri5bWb5BRbI/AAAAAAAAADE/merZMByQR1Q/s1600-h/TSP03.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_H01pb6FTsXo/Ri5bWb5BRbI/AAAAAAAAADE/merZMByQR1Q/s200/TSP03.png" alt="" id="BLOGGER_PHOTO_ID_5057079872585811378" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5bg75BRcI/AAAAAAAAADM/fMPJ_C0jNcA/s1600-h/TSP02.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5bg75BRcI/AAAAAAAAADM/fMPJ_C0jNcA/s200/TSP02.png" alt="" id="BLOGGER_PHOTO_ID_5057080052974437826" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_H01pb6FTsXo/Ri5aPL5BRWI/AAAAAAAAACc/cJR9GOTUCuM/s1600-h/TSP05.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://2.bp.blogspot.com/_H01pb6FTsXo/Ri5aPL5BRWI/AAAAAAAAACc/cJR9GOTUCuM/s200/TSP05.png" alt="" id="BLOGGER_PHOTO_ID_5057078648520131938" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_H01pb6FTsXo/Ri5ayr5BRYI/AAAAAAAAACs/_k2qjLW02bA/s1600-h/TSP06.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://4.bp.blogspot.com/_H01pb6FTsXo/Ri5ayr5BRYI/AAAAAAAAACs/_k2qjLW02bA/s320/TSP06.png" alt="" id="BLOGGER_PHOTO_ID_5057079258405488002" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-7383053447928058653?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/7383053447928058653/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=7383053447928058653' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7383053447928058653'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7383053447928058653'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/my-must-have-utils-part-2.html' title='My must have utils - Part 2'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5ZQ75BRSI/AAAAAAAAAB8/kn_vvJ7piSo/s72-c/TSP01.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-369894443400717794</id><published>2007-04-24T01:29:00.000Z</published><updated>2007-04-25T00:28:09.257Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tools'/><title type='text'>My must have utils - Part 1</title><content type='html'>Well, those who have paid more attention already noted a box with links to some of my must have utilities. However, every now and then I keep referring someone to one of these utils, so I decided to blog a bit about them. Every day or every other day I'll pick one of my must have utils and blog a bit about it. Most are programming related, but then, so much for the better as this blog is about my experiences with Delphi...&lt;br /&gt;&lt;br /&gt;Just a small note before starting: I'm doing this about tools I &lt;span style="font-weight: bold;"&gt;already&lt;/span&gt; own, and am not getting paid to do so: I just want to spread the word, as sometimes, for not knowing, we tend to get stuck to old ways of doing things when there are so many nice tools around. Also, I've spent many hundreds of dollars/euros in less than good tools, so if I can help someone else go for the right tools instead, I'll be happy for being of service! :)&lt;br /&gt;&lt;br /&gt;Today I'll talk a bit about one that most of you probably already use: &lt;a href="http://www.techsmith.com/snagit.asp"&gt;SnagIt&lt;/a&gt;, from TechSmith.&lt;br /&gt;&lt;br /&gt;You can see many examples of SnagIt in my previous blog posts: whenever I need a prtscr, rest assured that it's &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; the &lt;span style="font-weight: bold;"&gt;old&lt;/span&gt; prtscr that is being used!&lt;br /&gt;&lt;br /&gt;You can get the trial from the link above, so I'll just give you some pointers on the features I love in SnagIt:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;You can have several shortcut keys for different capture profiles: I use PRT-SCR for a selection capture, SHIFT-PRTSCR for a Window Text Capture and ALT-PRTSCR for a Window Graphics Capture.&lt;/li&gt;&lt;li&gt;Scrolling Window Captures: have you tried to capture the whole list of, say, &lt;a href="http://4.bp.blogspot.com/_H01pb6FTsXo/RgHaJ_b5X5I/AAAAAAAAAAc/ObNVWhnXw58/s1600-h/Full%2BPro%2BOptions.png"&gt;Delphi 2007 Install Options&lt;/a&gt;? Or the Control Panel? "Normal" procedure would be several runs of PRTSCR and some lengthy copy/paste... Not with SnagIt as you have a profile for that! Just select "Scrolling Window", hit PRTSCR, select the window and watch it do it's magic!&lt;/li&gt;&lt;li&gt;Easily blur/dim non-relevant areas: only a few clicks away and you get to draw attention to what you really want to focus on and/or hide sensitive information while still showing the big picture;&lt;/li&gt;&lt;li&gt;Easily add visual clues that the image is only part of what you want to show, again, only a few clicks away;&lt;/li&gt;&lt;li&gt;Easily add captions, arrows, callouts, highlights, stamps, you name it! And by default, they all come with a nice shadow effect that you can disable if you don't like...&lt;br /&gt;&lt;/li&gt;&lt;li&gt;You can save the images in a proprietary format but keeping all those arrows, etc, so that you can later move them around, change colors, add/remove new callouts, all without needing to go grab that screen again;&lt;/li&gt;&lt;li&gt;You can capture a full-screen DOS or DirectX application;&lt;/li&gt;&lt;li&gt;You can capture non-rectangular areas or even multiple areas at once;&lt;/li&gt;&lt;li&gt;[EDIT]: Almost forgot this one! You can create your own presets which may include some effects like thorn edges, scaling, color changing and more and assign hotkeys to them too...&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;And there are plenty other options available! :)&lt;br /&gt;&lt;br /&gt;Also, this is one of the utils that I have managed to not-install, i.e., I installed once into my D:\Utils\SnagIt folder and when I re-install my windows in C:, all I need is run it once, register it, set it to auto-run on startup and set my preferences, that is, if I didn't save the %appdata%... :)&lt;br /&gt;&lt;br /&gt;Here are a few examples of what can be achieved with SnagIt, but the best thing to do is to try for yourself: soon you'll get used to hit prt-scr, do whatever you need to do to the image *on the spot* and save it: no more prtscr, open graphics editor, paste, manually process image... You'll get quality screenshots in no time, be it to show your customers something or to add to your documentation or a bug report to someone...&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5Sv75BRRI/AAAAAAAAAB0/F3203aMOmZg/s1600-h/SnagIt02.png"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5Sv75BRRI/AAAAAAAAAB0/F3203aMOmZg/s320/SnagIt02.png" alt="" id="BLOGGER_PHOTO_ID_5057070415067825426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H01pb6FTsXo/Ri1_3r5BRQI/AAAAAAAAABs/NKyoJPmcJj8/s1600-h/SnagIt01.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_H01pb6FTsXo/Ri1_3r5BRQI/AAAAAAAAABs/NKyoJPmcJj8/s320/SnagIt01.png" alt="" id="BLOGGER_PHOTO_ID_5056838551258350850" border="0" /&gt;&lt;/a&gt;Note: these images were done &lt;span style="font-weight: bold;"&gt;co&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;mpletely&lt;/span&gt; within SnagIt's Editor, that is, PRT-SCR, edit, save: no manual retouching in any other editor was done. Also, if I saved in it's native format, I'd be able to later edit/move/replace any of those edits...) (Click them for larger versions)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-369894443400717794?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/369894443400717794/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=369894443400717794' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/369894443400717794'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/369894443400717794'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/my-must-have-utils-part-1.html' title='My must have utils - Part 1'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_H01pb6FTsXo/Ri5Sv75BRRI/AAAAAAAAAB0/F3203aMOmZg/s72-c/SnagIt02.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-6668287494238326912</id><published>2007-04-22T02:06:00.000Z</published><updated>2007-04-22T14:22:17.992Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><title type='text'>RTFM - Read The Forgotten Manual</title><content type='html'>Actually, it's more about "Read the &lt;span style="font-style: italic;"&gt;forgotten&lt;/span&gt; Readme"...&lt;br /&gt;&lt;br /&gt;Recently, I've had a couple small issues with Delphi 2007 or I tried helping some people with some other smaller issues. It turns out that by simply reading the Readme (not just skimming the topics as I did, but &lt;span style="font-weight: bold;"&gt;actually&lt;/span&gt; reading it!), I could find quite a few answers to quite a few questions/problems!&lt;br /&gt;&lt;br /&gt;If you're like me and in time have "forgotten" to read the readme's, try to take them for a spin... :)&lt;br /&gt;&lt;br /&gt;BTW: Before someone points out the &lt;span style="font-weight: bold;"&gt;true&lt;/span&gt; meaning of the F in RTFM, I'm well aware of what it is... ;)&lt;br /&gt;&lt;br /&gt;Edit: Thks for the comment, Steve. Here's the clickable link for the &lt;a href="http://www.stevetrefethen.com/wiki/Delphi%202007%20Readme.ashx"&gt;Updated Delphi 2007 Readme&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6668287494238326912?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6668287494238326912/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6668287494238326912' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6668287494238326912'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6668287494238326912'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/rtfm-read-forgotten-manual.html' title='RTFM - Read The Forgotten Manual'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-4707223573103117955</id><published>2007-04-16T02:40:00.001Z</published><updated>2007-06-12T11:43:06.295Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='ESD'/><title type='text'>Delphi 2007: Putting a "fat cow" on a diet...</title><content type='html'>First, for those who don't understand the title, it's a small joke to another blog &lt;a href="http://tdelphihobbyist.blogspot.com/2007/04/why-you-great-fat-cow.html"&gt;post &lt;/a&gt;which has since been &lt;a href="http://tdelphihobbyist.blogspot.com/2007/04/now-thats-lesson-learned.html"&gt;renamed&lt;/a&gt;...&lt;br /&gt;&lt;br /&gt;In this post, I'll explain to all those &lt;a href="http://en.wikipedia.org/wiki/Hacker"&gt;&lt;span style="font-style: italic;"&gt;hackers&lt;/span&gt;&lt;/a&gt; around how to install the Delphi 2007 ESD while preserving &lt;span style="font-weight: bold;"&gt;2.6 GB&lt;/span&gt; of your C: drive. You &lt;span style="font-weight: bold;"&gt;will&lt;/span&gt; require 1.2 GB on another partition, but if you're like me, you'll have those around! :) Still, your total will be 2.2 GB versus the default 3.6 GB and you'll loose nothing important (other than redundantly cached install files and needless .NET help...)&lt;br /&gt;&lt;br /&gt;I like to keep my C: drive as lean as possible so as to be viable to make a compressed GHOST image of it and still fit a fully installed and configured working environment on a DVD. This way, I can restore my system to a working condition in around 10 minutes. However, the default way of installing Delphi 2007 simply &lt;a href="http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-5-new-beginning.html"&gt;uses 3.6 GB of C: space&lt;/a&gt;! So, I needed to come up with something different. CodeGear is supposedly working on a better install, although it's now a whole month since Delphi 2007 is out and that new installer is yet to be seen, and, even worse, due to SOX, they won't commit on a date for when that's coming out...&lt;br /&gt;&lt;br /&gt;So, let me describe this process, which I must say I haven't tested on Vista as I don't use that... It &lt;span style="font-weight: bold;"&gt;does&lt;/span&gt; however work very well in &lt;span style="font-style: italic;"&gt;decent&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;/span&gt;versions of Windows such as XP, 2000 or 2003.&lt;br /&gt;&lt;br /&gt;There are two main goals that I want to achieve here:&lt;br /&gt;1) Setting up Delphi 2007 while simultaneously keeping it from caching stuff on C:;&lt;br /&gt;2) Improve the help by not returning .NET results and, again, shave some few more MBs from C:.&lt;br /&gt;This 2nd part should only be followed by those &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; requiring the .NET help for another dev tool, that is, for all those that like myself couldn't care less of .NET and only develop "&lt;span style="font-style: italic; font-weight: bold;"&gt;for Win32&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Step 1: Download the following 3 prerequesites:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=0856EACB-4362-4B0D-8EDD-AAB15C5E04F5&amp;displaylang=en"&gt;Microsoft .NET Framework Version 2.0 Redistributable Package (x86)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;2) &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=F72C74B3-ED0E-4AF8-AE63-2F0E42501BE1&amp;amp;displaylang=en"&gt;Microsoft Visual J# Version 2.0 Redistributable Package&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3) &lt;a href="http://www.microsoft.com/downloads/details.aspx?familyid=FE6F2099-B7B4-4F47-A244-C96D69C35DEC&amp;displaylang=en"&gt;.NET Framework 2.0 Software Development Kit (SDK) (x86)&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;You should now have the following 3 EXE files:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;setup.exe&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dotnetfx.exe&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;vjredist.exe&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Step 2: "pre-process" those files.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Using WinZip, 7-Zip or your favorite archiving tool, uncompress all those 3 files (yes, they're self-extracting .ZIP files but we want some control!). Extract the contents of each file onto it's own folder.&lt;br /&gt;&lt;br /&gt;You should now have the following 3 folders:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;setup&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;dotnetfx&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;vjredist&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Rename "&lt;span style="font-family:courier new;"&gt;setup&lt;/span&gt;" to a more descriptive "&lt;span style="font-family:courier new;"&gt;dotnetsdk&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;You should save them somewhere where you can access them later, should you want to modify the installations. In this example, we'll be using &lt;span style="font-family:courier new;"&gt;D:\Install&lt;/span&gt;, so move them all over there.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Step 3: Installing the prerequesites.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Run "&lt;span style="font-family:courier new;"&gt;D:\Install\dotnetfx\install.exe&lt;/span&gt;"&lt;br /&gt;2) Run "&lt;span style="font-family:courier new;"&gt;D:\Install\vjredist\install.exe&lt;/span&gt;"&lt;br /&gt;3) Run "&lt;span style="font-family:courier new;"&gt;D:\Install\dotnetsdk\install.exe&lt;/span&gt;"&lt;br /&gt;In this last one, select only "&lt;span style="font-style: italic; font-weight: bold;"&gt;Product Documentation&lt;/span&gt;": the other two options are not needed.&lt;br /&gt;&lt;br /&gt;Q: Why did we uncompress these and "manually" run the MSIs?&lt;br /&gt;A: We're doing this to save you 400 MB of C: space in exchange of a couple minutes of your time!&lt;br /&gt;&lt;br /&gt;Q: And &lt;span style="font-weight: bold;"&gt;how&lt;/span&gt; are we saving space?&lt;br /&gt;A: That's what we'll do next!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Step 4: Saving 400 MB of cached files in C:, while still not breaking anything...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Installing those 3 products cached the install files on C:. We will now update the registry to point to the same files in &lt;span style="font-family:courier new;"&gt;D:\Install&lt;/span&gt;, so as to allow you to Remove/Repair apply any security update on any of those products...&lt;br /&gt;Using RegEdit, change the following values:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Start by navigating to here:&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;span style="font-size:85%;"&gt;HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Installer\UserData\S-1-5-18\Components\&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;Key.....: 5B868AEEE5852414A85EBF681240D704&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Value...: D6461317C3DC4F04799BDCE9E42626FE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Old Data: C:\WINDOWS\Microsoft.NET\...\netfx.msi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Set To..: D:\Install\dotnetfx\netfx.msi&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Key.....: 521E4F6057E22F94ABD31D61977E7BAD&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Value...: 2C951936B72B802498568D0AEABDED2D&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Old Data: C:\Program Files\...\netfxsdk.msi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Set To..: D:\Install\dotnetsdk\netfxsdk.msi&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;Key.....: EF03A325B58ACCF46AD453FC5B8D3A6D&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Value...: 2C951936B72B802498568D0AEABDED2D&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Old Data: C:\Program Files\...\netfxsd1.cab&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Set To..: D:\Install\dotnetsdk\netfxsd1.cab&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Key.....: AAC54F5B3FA6B6B45864A1DA921F3C4C&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Value...: 34053A86A55C7324889C73EEC136DE17&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Old Data: C:\WINDOWS\Microsoft.NET\...\jsredist.msi&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Set To..: D:\Install\vjredist\jsredist.msi&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;Key.....: 0DFA9869D465FA14CAFF90CB479360E9&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Value...: 34053A86A55C7324889C73EEC136DE17&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Old Data: C:\WINDOWS\Microsoft.NET\...\jsredis1.cab&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Set To..: D:\Install\vjredist\jsredis1.cab&lt;/span&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;You can also delete (but it's not required) the following key:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;HKEY_CLASSES_ROOT\Installer\Products\D6461317C3DC4F04799BDCE9E42626FE\SourceList\Net\2&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;Since the 1st one is set to the correct path, this "2" will be ignored anyway.&lt;br /&gt;&lt;br /&gt;By now, you've just lost &lt;span style="font-weight: bold; font-style: italic;"&gt;1.079 MB&lt;/span&gt;. Yep! That's 1 GB of .NET prereqs for a "for Win32" product! :)&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H01pb6FTsXo/RiLw17pVcMI/AAAAAAAAABM/1q7Waw3dhGg/s1600-h/AfterPreReqs.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_H01pb6FTsXo/RiLw17pVcMI/AAAAAAAAABM/1q7Waw3dhGg/s320/AfterPreReqs.png" alt="" id="BLOGGER_PHOTO_ID_5053866541197914306" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Don't worry, we'll shave some of that now!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Step 4b: "Safe" shaving...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;You can now delete the following folders as they're no longer required:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft .NET Framework 2.0"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Microsoft Visual J# 2.0 Redistributable Package"&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"C:\Program Files\Microsoft Visual Studio 8\Microsoft .NET Framework 2.0 SDK - ENU"&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;We have now cut down our losses to "only" &lt;span style="font-weight: bold;"&gt;685.4 MB&lt;/span&gt;...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Step 4c: ".NET Help" shaving: only do this if you &lt;span style="font-weight: bold;"&gt;don't&lt;/span&gt; require .NET help in &lt;span style="font-weight: bold;"&gt;any&lt;/span&gt; development application:&lt;/span&gt;&lt;br /&gt;(If in doubt, make a backup of those files elsewhere so as to undo it later...)&lt;br /&gt;&lt;br /&gt;Delete the following folder:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;"C:\Program Files\Microsoft.NET\SDK\v2.0\Docs\1033"&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Delete all files starting with "&lt;span style="font-weight: bold;font-family:courier new;" &gt;MS.NETFramework.v20.&lt;/span&gt;" in this folder:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;"C:\Documents and Settings\All Users\Application Data\Microsoft Help"&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;We have now cut our losses to only &lt;span style="font-weight: bold;"&gt;324.8 MB&lt;/span&gt; and simultaneously prevented Delphi 2007 from showing unappropriated .NET help...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_H01pb6FTsXo/RiLxIrpVcNI/AAAAAAAAABU/J7QRYcpu5h4/s1600-h/AfterShaving.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_H01pb6FTsXo/RiLxIrpVcNI/AAAAAAAAABU/J7QRYcpu5h4/s320/AfterShaving.png" alt="" id="BLOGGER_PHOTO_ID_5053866863320461522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you have the time, there's a couple hundred registry references to all those files/folders we deleted above: I haven't bothered with deleting/changing them all and all seems to be working just fine. Maybe if one of these days I find myself some free time I'll make a program to automate all that...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Step 5: "A small trick..."&lt;/span&gt;&lt;br /&gt;Now for the fun part! :)&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Create another user on your computer named "Install" and make it an admin.&lt;/li&gt;&lt;li&gt;Log off your current user account and login to "Install".&lt;/li&gt;&lt;li&gt;Now log off again and back to your "regular" user.&lt;/li&gt;&lt;li&gt;Open RegEdit and navigate to this key:&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;"HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProfileList"&lt;/span&gt;&lt;/li&gt;&lt;li&gt;You'll find a few subkeys like "&lt;span style="font-family:courier new;"&gt;S-1-5-18&lt;/span&gt;", "&lt;span style="font-family:courier new;"&gt;S-1-5-19&lt;/span&gt;", "&lt;span style="font-family:courier new;"&gt;S-1-5-20&lt;/span&gt;", and a few more with much longer names, starting with "&lt;span style="font-weight: bold;font-family:courier new;" &gt;S-1-5-21-&lt;/span&gt;".&lt;/li&gt;&lt;li&gt;You will find one that has the following value: "&lt;span style="font-family:courier new;"&gt;%SystemDrive%\Documents and Settings\Install&lt;/span&gt;" for the "&lt;span style="font-family:courier new;"&gt;ProfileImagePath&lt;/span&gt;". Change that into "&lt;span style="font-family:courier new;"&gt;D:\Install\Delphi2007&lt;/span&gt;". Don't forget to create the folder too!&lt;/li&gt;&lt;li&gt;Now go into Computer properties-&gt;Advanced-&gt;User Profiles, select the "Install" profile and use "Copy To".&lt;/li&gt;&lt;li&gt;In the new dialog, browse to the folder "D:\Install\Delphi2007" and in the "Permitted to use" type "Install".&lt;/li&gt;&lt;li&gt;Now delete "C:\Documents and Settings\Install".&lt;/li&gt;&lt;li&gt;Log back on to "Install" and run the Delphi ESD Setup.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Important step&lt;/span&gt;:&lt;br /&gt;when asked where to create the "&lt;span style="font-style: italic; font-weight: bold;"&gt;shortcuts&lt;/span&gt;", answer "&lt;span style="font-style: italic; font-weight: bold;"&gt;Just Me&lt;/span&gt;". If you choose "All users", you'll break this whole "leaning" process!&lt;/li&gt;&lt;li&gt;Just let the installer run and you'll notice that the cache is now being created in:&lt;br /&gt;&lt;span style="font-size:85%;"&gt;"&lt;/span&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family:courier new;"&gt;D:\Install\Delphi2007\Local Settings\Application Data\{AB3EC276-D261-4943-A921-1CC1C6799AED}&lt;/span&gt;"&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: If you already have downloaded the install files, you can simply cancel the install, copy the previously cached install files into the folder above and resume the installer. Or create the folder before running the installer and copy the files there then run the installer... :)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note:&lt;/span&gt; When the installer finishes, or at some later time in the future, you can back up that folder to a DVD to be able to install later on another computer or at another time on that computer, should you reformat all...&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:85%;"&gt;Finish the installer and let it run "Delphi 2007" for the first time. For the moment, disable the option to check for updates automatically. (You can check manually by using the shortcut provided).&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Step 6: Final wrap up&lt;/span&gt;&lt;br /&gt;Now we need to do a few more things:&lt;br /&gt;- Ensure the "Check for updates" will work;&lt;br /&gt;- Migrate the settings to &lt;span style="font-weight: bold;"&gt;your&lt;/span&gt; normal account.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Ensuring the "Check for updates" will work:&lt;/span&gt;&lt;br /&gt;We will leave that &lt;span style="font-weight: bold;"&gt;Install&lt;/span&gt; user exist on your computer: it makes future upgrades easier... Whenever there is a new upgrade, just log back to this user and run the update from there.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Migrating user settings:&lt;/span&gt;&lt;br /&gt;Copy "&lt;span style="font-family:courier new;"&gt;D:\Install\Delphi2007\My Documents\RAD Studio&lt;/span&gt;" to your "&lt;span style="font-family:courier new;"&gt;My Documents&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;Run RegEdit and export the following keys:&lt;br /&gt;HKEY_CURRENT_USER\Software\Borland (save as &lt;span style="font-family:courier new;"&gt;D:\Install\Borland.reg&lt;/span&gt;)&lt;br /&gt;HKEY_CURRENT_USER\Software\Classes (save as &lt;span style="font-family:courier new;"&gt;D:\Install\Classes.reg&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;Edit &lt;span style="font-family:courier new;"&gt;D:\Install\Borland.reg&lt;/span&gt; and update the DBExpress paths in this section:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;[HKEY_CURRENT_USER\Software\Borland\BDS\5.0\DBExpress]&lt;br /&gt;&lt;/span&gt;Alternatively, you can simply use it from that location and don't edit the paths.&lt;br /&gt;&lt;br /&gt;Finally, copy "&lt;span style="font-family:courier new;"&gt;D:\Install\Delphi2007\Start Menu\Programs\CodeGear RAD Studio&lt;/span&gt;" to your normal account's start menu folder...&lt;br /&gt;&lt;br /&gt;Now log onto your account and run those two reg files.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Step 7: Enjoy using your Delphi 2007 having spent only 1.06 GB of C: instead of 3.6 GB...&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H01pb6FTsXo/RiLwkbpVcLI/AAAAAAAAABE/aZ4om9snHcQ/s1600-h/LeanDelphi.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_H01pb6FTsXo/RiLwkbpVcLI/AAAAAAAAABE/aZ4om9snHcQ/s320/LeanDelphi.png" alt="" id="BLOGGER_PHOTO_ID_5053866240550203570" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;EDIT: Note for self. Short url for this page: &lt;a href="http://preview.tinyurl.com/2qdrmz"&gt;&lt;b&gt;http://preview.tinyurl.com/2qdrmz&lt;/b&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-4707223573103117955?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/4707223573103117955/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=4707223573103117955' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4707223573103117955'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4707223573103117955'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-putting-fat-cow-on-diet_16.html' title='Delphi 2007: Putting a &quot;fat cow&quot; on a diet...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_H01pb6FTsXo/RiLw17pVcMI/AAAAAAAAABM/1q7Waw3dhGg/s72-c/AfterPreReqs.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-6518138296382432353</id><published>2007-04-07T23:32:00.000Z</published><updated>2007-04-11T14:27:39.380Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Delphi 2007 for Win32: getting rid of .NET help</title><content type='html'>Note: only do this if you're &lt;span style="font-weight: bold; font-style: italic;"&gt;not using another dev tool for .NET&lt;/span&gt;! If your only dev tool is Delphi for Win32 and you couldn't care less of .NET, then go ahead!&lt;br /&gt;&lt;br /&gt;Removing the .NET help from Delphi 2007's help turned out to be far easier than I thought it would! Just delete the contents of this folder:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;C:\Program Files\Microsoft.NET\SDK\v2.0\Docs\1033&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;That's for an English windows + English .NET 2.0 SDK, so adjust accordingly.&lt;br /&gt;&lt;br /&gt;That's an extra 300+ MB of stuff you're not using anyway, so removing it will stop you from getting .NET results for your Delphi or Win32 searches, making the help experience a bit better.&lt;br /&gt;&lt;br /&gt;Also, you can manually fine-tune (delete!) individual files from here:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;C:\Program Files\CodeGear\RAD Studio\5.0\Help\Doc\PSDK\&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Files such as &lt;span style="font-style: italic;"&gt;script56.hxs&lt;/span&gt; which will stop you from getting windows scripting results. I wouldn't delete them all, as you may need some, so just delete as you go when you find one that you don't need. You can identify them by the &lt;span style="font-style: italic;"&gt;ms-help://borland.bds5/&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;script56&lt;/span&gt;&lt;span style="font-style: italic;"&gt;/xxxxx &lt;/span&gt;&lt;span&gt;displayed in the help browser.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The &lt;span style="font-weight: bold;"&gt;bold&lt;/span&gt; word above is the file name in that folder.&lt;br /&gt;&lt;br /&gt;As usual, make a backup before you make changes! Make a full copy of those two folders elsewhere or even on a CD/DVD for later use if needed without requiring re-installing things again...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Disclaimer: it worked for me, in both my main dev machine and a clean VM with nothing + Delphi installed but I can't guarantee it will work for you! :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Note: after you delete some help files, it will recreate the index again, so next help invocation will be slower while it does so. Subsequent invocations will be speedier than before! :)&lt;br /&gt;&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;EDIT&lt;/span&gt;]: Anders Melander pointed out in the newsgroups a not so drastic option, especially if you need the .NET help around for other products. Although it will not improve the F1 experience, it will help you get less extraneous results when opening the help and performing a "manual" search. Due to some limitations in blogspot, I'll simply link to the newsgroups &lt;a href="http://groups.google.com/group/borland.public.delphi.non-technical/browse_thread/thread/2e91541b2766cca1/e07f02c2d3680cba#e07f02c2d3680cba"&gt;post &lt;/a&gt;and you can work from there. In my experience, I found the 3rd step (regedit) not to be necessary.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6518138296382432353?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6518138296382432353/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6518138296382432353' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6518138296382432353'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6518138296382432353'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/delphi-2007-for-win32-getting-rid-of.html' title='Delphi 2007 for Win32: getting rid of .NET help'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-1872054138722793556</id><published>2007-04-01T18:33:00.000Z</published><updated>2007-04-02T14:59:10.988Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Does Delphi 2007 load fast? Short answer: YES.</title><content type='html'>This has been a common question in many places, so I decided to share some timings. Unfortunately, I don't have the willpower or time to install other versions just to time them, but, given my computer specs (not &lt;span style="font-weight: bold;"&gt;that&lt;/span&gt; good!) and the times in question, I think many will find this useful anyway.&lt;br /&gt;&lt;br /&gt;So, this is my setup:&lt;br /&gt;  DELL Latitude D810, Pentium M @ 1.86 GHz, 1 GB/533 MHz RAM, 60 GB 7200 RPM HDD, Windows XP SP2 + updates.&lt;br /&gt;&lt;br /&gt;The following times are for a &lt;span style="font-weight: bold;"&gt;Professional&lt;/span&gt; SKU with a &lt;span style="font-weight: bold;"&gt;full&lt;/span&gt; install.&lt;br /&gt;&lt;br /&gt;Cold starting with &lt;span style="font-weight: bold;"&gt;all&lt;/span&gt; default packages installed and &lt;span style="font-weight: bold;"&gt;no&lt;/span&gt; third party library:&lt;br /&gt;22.7 Seconds (yes, Twenty-Two Seconds!)&lt;br /&gt;&lt;br /&gt;Removing &lt;span style="font-weight: bold;"&gt;all&lt;/span&gt; packages from the default startup, will remove only 3 (three) seconds to that time.&lt;br /&gt;&lt;br /&gt;Now, for the &lt;span style="font-weight: bold;"&gt;interesting&lt;/span&gt; part: not only does it &lt;span style="font-weight: bold;"&gt;shutdown&lt;/span&gt; real fast (disappears nearly instantly from screen and from memory within 3.5 seconds), but  when it is reloaded, again with &lt;span style="font-weight: bold;"&gt;all&lt;/span&gt; standard packages loading, it takes only 5 seconds (I repeat FIVE SECONDS!).&lt;br /&gt;&lt;br /&gt;Now, is that fast, or is that &lt;span style="font-weight: bold; font-style: italic;"&gt;FAST?&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;So, even if you run into an occasional crash, it still reloads in a flash...&lt;br /&gt;&lt;br /&gt;I must make one final note: since I recently reconfigured my system, I'm not yet running an Anti-Virus. When I install one, I'll repeat these tests and update this post.&lt;br /&gt;&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;EDIT&lt;/span&gt;] Just to clarify: this is &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; an April's Fool Hoax! :)&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;EDIT&lt;/span&gt;] As promised, here's the results after installing an Anti-Virus (more specifically, Norton's). The splash screen took a full 3 seconds more to show, and the full load took 27 seconds in total, making that just over 4 seconds more than without an Anti-Virus. Of course, using a ton of 3rd party tools spread over a ton of files will probably make the Anti-Virus weight a bit more...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-1872054138722793556?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/1872054138722793556/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=1872054138722793556' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1872054138722793556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1872054138722793556'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/does-delphi-2007-load-fast-short-answer.html' title='Does Delphi 2007 load fast? Short answer: YES.'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-629690666237154082</id><published>2007-04-01T10:33:00.000Z</published><updated>2007-04-01T18:33:14.294Z</updated><title type='text'>Cutting CodeGear some slack...</title><content type='html'>For all those &lt;span style="font-style: italic; font-weight: bold;"&gt;against &lt;/span&gt;my posts criticizing CodeGear, I have good news: &lt;span style="font-weight: bold;"&gt;I'll cut CodeGear some slack&lt;/span&gt; as I do need to move on and get back to work. However, I'll just make these &lt;span style="font-style: italic; font-weight: bold;"&gt;final notes&lt;/span&gt; regarding some comments I received and also to try and further explain &lt;span style="font-weight: bold; font-style: italic;"&gt;why&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;I have been so critic regarding CodeGear. &lt;span style="font-style: italic;"&gt;My following posts will be of a more technical nature&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Maybe some people are right and maybe I'm being too harsh on CodeGear, but that's what one gets when a company "&lt;span style="font-weight: bold; font-style: italic;"&gt;where developers matter&lt;/span&gt;" turns out to be a company "&lt;span style="font-weight: bold; font-style: italic;"&gt;where management issues matter more than developers&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;It's a bit like going to the movies: if everybody tells you that movie X is &lt;span style="font-style: italic; font-weight: bold;"&gt;the best movie ever&lt;/span&gt;, what is your reaction when you go and see it and it turns out to be &lt;span style="font-style: italic; font-weight: bold;"&gt;just a good movie&lt;/span&gt;? Since we, humans, function in relative terms, the immediate perception you get from that movie is &lt;span style="font-weight: bold;"&gt;not &lt;/span&gt;that it's a &lt;span style="font-weight: bold;"&gt;just&lt;/span&gt; a good movie, but rather that it's a &lt;span style="font-weight: bold;"&gt;bad &lt;/span&gt;movie, because &lt;span style="font-style: italic; font-weight: bold;"&gt;you've set your expectations too high&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;I &lt;span style="font-weight: bold;"&gt;do&lt;/span&gt; know that any company needs to make money to keep in business, but would they &lt;span style="font-weight: bold;"&gt;go out of business&lt;/span&gt; if they did not make those first quarter sales? &lt;span style="font-style: italic; font-weight: bold;"&gt;If so, then we're in more trouble than I thought...&lt;/span&gt; If they wouldn't go bankrupt by not rushing those sales, why do they do it then? Only CodeGear will be able to tell, but I don't think it was with the developer community in their minds... Also, it's unfortunate that they have to abide by those SOX rules, otherwise they could have just made an aggressive pre-order campaign and still get their 1st Q money without releasing products that were not quite ready...&lt;br /&gt;&lt;br /&gt;Sure, the help bug is not &lt;span style="font-style: italic; font-weight: bold;"&gt;that &lt;/span&gt;critical: all I have to do is &lt;span style="font-style: italic; font-weight: bold;"&gt;restart &lt;/span&gt;the IDE to "fix" it and remember not to press it again, but, when one is being told about &lt;span style="font-style: italic; font-weight: bold;"&gt;an improved help system&lt;/span&gt;, how &lt;span style="font-style: italic; font-weight: bold;"&gt;improved &lt;/span&gt;does an AV sound when you press F1? &lt;span style="font-style: italic; font-weight: bold;"&gt;That "improved" help is one of the reasons behind many people making the switch to Delphi 2007&lt;/span&gt;! And that particular issue &lt;span style="font-weight: bold; font-style: italic;"&gt;was&lt;/span&gt; known quite some time before releasing. Sure, in some ways, it's better than BDS 2006, but it still has a lot to go to be nearly as efficient as Delphi 7's help... It's good, but not &lt;span style="font-weight: bold; font-style: italic;"&gt;that much&lt;/span&gt; good as many other blogs make you believe it is...&lt;br /&gt;&lt;br /&gt;As for the &lt;span style="font-weight: bold;"&gt;persons&lt;/span&gt; behind CodeGear, I've never said anything but that &lt;span style="font-weight: bold; font-style: italic;"&gt;they do go to all the lengths&lt;/span&gt; to help you sort your issues. Even though others have had less luck than me, in my contacts with CodeGear staff nearly all were very helpful and helped me sort the problems. It was also my point that they would have less issues if they didn't rush those products out on financial decisions alone.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Final notes:&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;I've said good things when I feel there are good things to be said, and I do believe that, in time, Delphi 2007 will be &lt;span style="font-weight: bold;"&gt;much &lt;/span&gt;better. It's just sad to see CogeGear turning out to be some "regular" company where numbers matter more than developers.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-629690666237154082?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/629690666237154082/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=629690666237154082' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/629690666237154082'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/629690666237154082'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/04/for-all-those-against-my-posts.html' title='Cutting CodeGear some slack...'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-4869793081786709308</id><published>2007-03-31T04:34:00.000Z</published><updated>2007-04-04T19:06:11.532Z</updated><title type='text'>Did CodeGear rush out 2 Delphi products?</title><content type='html'>I've made a few comments on other blogs about it, but I think I should take the time to better explain my point of view with a full blog entry...&lt;br /&gt;&lt;br /&gt;Did CodeGear release &lt;span style="font-weight: bold; font-style: italic;"&gt;Delphi 2007 for Win32&lt;/span&gt; and &lt;span style="font-weight: bold; font-style: italic;"&gt;Delphi for PHP&lt;/span&gt; before they were ready for release?&lt;br /&gt;In my opinion: &lt;span style="font-weight: bold;"&gt;Yes&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Why do I think that, you may ask?&lt;br /&gt;&lt;br /&gt;Well, for quite a number of reasons that I will enumerate:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;When I first asked some of their online retailers &lt;span style="font-weight: bold;"&gt;when&lt;/span&gt; they were expecting to ship Delphi for Win32, the answer was "first half of April": a few days later the product was released, 3~4 weeks before the expected date;&lt;/li&gt;&lt;li&gt;Judging from my own and many other customer's experiences, &lt;span style="font-weight: bold;"&gt;most&lt;/span&gt; of their shops/retailers &lt;span style="font-weight: bold;"&gt;were not ready&lt;/span&gt; to start shipping/selling the product;&lt;/li&gt;&lt;li&gt;The whole ESD (Electronic Software Download) experience was not fully tested/working when it started; the first few days of &lt;span style="font-weight: bold;"&gt;official&lt;/span&gt; ESD sales where a bit chaotic in some places, such as the UK, for instance;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Even though much has been said about Delphi 2007's stability, the fact is that I managed to crash it quite a few times,&lt;span style="font-weight: bold;"&gt;&lt;span style="font-weight: bold;"&gt; even without trying&lt;/span&gt;&lt;/span&gt; and even after installing on a &lt;span style="font-weight: bold;"&gt;clean machine&lt;/span&gt;; On my account alone, 4 Automated Incident Reports were made within the 1st 4 days of use, and that was &lt;span style="font-weight: bold;"&gt;after&lt;/span&gt; I noticed that I could expand the crash dialog to show a &lt;span style="font-weight: bold;"&gt;send&lt;/span&gt; button. Since these automated reports are marked private as they contain some information on the user's computer/processes, I can't tell how many other crash reports were made since Delphi 2007's release, but I've read about other user's similar experiences on some newsgroups;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;A "simple" bug was known and a "&lt;span style="font-style: italic;"&gt;tough decision&lt;/span&gt;" was made of releasing the product even knowing it was not fixed. (If you have D2007, you can test for yourself: open up any menu and press F1: if you're lucky enough to get an error for not finding the help context, the menus become unusable until you restart the IDE. This happens on most (all?) menu entries.)&lt;/li&gt;&lt;li&gt;I don't have Delphi for PHP, but from comments I've been reading on the web, even attempting to deploy some simple projects will &lt;span style="font-weight: bold;"&gt;fail&lt;/span&gt; to include all needed files;&lt;/li&gt;&lt;li&gt;There is a 1 day (&lt;span style="font-weight: bold;"&gt;ONE&lt;/span&gt; day!) trial of Delphi for PHP. Why 1 day? Well, if they gave 30 days, two things could and would happen:&lt;br /&gt;&lt;/li&gt;&lt;ol&gt;&lt;li&gt;People would have enough time to find out that it is an unfinished product;&lt;/li&gt;&lt;li&gt;Even if they decided to purchase, that purchase would only take effect &lt;span style="font-weight: bold;"&gt;after&lt;/span&gt; the 1st Quarter of 2007 had ended.&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;Even knowing that they were having so many problems fulfilling orders and back-orders, a special event took place on the 29th of March (last business day) that was available only to registered Delphi 2007 users: this was another move to persuade some more customers to buy before the end of the 1st Quarter.&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-style: italic;"&gt;[&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Edit&lt;/span&gt;&lt;span style="font-style: italic;"&gt;] As I suspected, there's now a &lt;a href="http://blogs.codegear.com/michaelswindell/archive/2007/04/04/33733.aspx"&gt;14 day trial of Delphi for PHP&lt;/a&gt;... No more rush to make sales in 1st Quarter, I'd guess! :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Why did they do it?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;In one word: SOX&lt;/span&gt;. It was clearly a &lt;span style="font-style: italic; font-weight: bold;"&gt;financial decision&lt;/span&gt;: the only way for them to cash in on the pre-orders in the 1st Quarter was to actually &lt;span style="font-weight: bold; font-style: italic;"&gt;ship&lt;/span&gt;&lt;span style="font-style: italic;"&gt; &lt;/span&gt;the products in the first quarter. The same SOX rules that prevent them from publishing the roadmap, at the risk of only cashing in when they &lt;span style="font-weight: bold;"&gt;deliver&lt;/span&gt; on the roadmap, was the main drive to release the products before they were ready, so that the money could be accounted for in the 1st Quarter of 2007.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[&lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;Edit&lt;/span&gt;&lt;span style="font-style: italic;"&gt;]: CodeGear has now a new CEO. That could also account for why it was so important to rush those two products: making sure Ben was credited for those sales and not Jim, and thus ensuring Ben would get the proper sized bonus...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Now, some people may argue that this is just some &lt;span style="font-weight: bold;"&gt;conspiracy theory&lt;/span&gt;. &lt;span style="font-style: italic;"&gt;I hope, for CodeGear's sake, that they're right&lt;/span&gt;. But I can say only 3 more things to wrap this up:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;If this is not just a conspiracy theory, then &lt;span style="font-style: italic;"&gt;they aren't starting with the right foot&lt;/span&gt;;&lt;/li&gt;&lt;li&gt;At least they're &lt;span style="font-style: italic;"&gt;being more honest now with the new logo&lt;/span&gt;: no longer has the "Where developers matter" motto;&lt;/li&gt;&lt;li&gt;Finally, and while they do have to comply with management decisions such as these,  CodeGear's &lt;span style="font-weight: bold;"&gt;employees&lt;/span&gt; have been &lt;span style="font-weight: bold;"&gt;very&lt;/span&gt; helpful in solving mine and many other developer's problems, although they would not have so many issues if they didn't rush out the products out the door to make sales in the 1st Quarter...&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-4869793081786709308?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/4869793081786709308/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=4869793081786709308' title='15 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4869793081786709308'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/4869793081786709308'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/did-codegear-rush-out-2-delphi-products.html' title='Did CodeGear rush out 2 Delphi products?'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>15</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-2681734084124676439</id><published>2007-03-30T05:39:00.000Z</published><updated>2007-03-30T05:58:11.085Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>CodeRage Encore - Another view</title><content type='html'>I know many people, especially CodeGear employees, will be blogging about this, so I decided &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; to write about the event itself, but rather show some statistics that I compiled during those 24 hours.&lt;br /&gt;&lt;br /&gt;The last 2 hours were in Japanese. For those, around 50 users were online which, discounting CG staff and a couple "foreign" viewers like myself, accounts for over 40 Japanese viewers. (More on that later).&lt;br /&gt;&lt;br /&gt;For the first 22 hours, there was roughly a total of 142 different viewers, being the peak at any one time at slightly over 80. Of those viewers, here's the country roundup (after discounting CodeGear employees and presenters/moderators):&lt;br /&gt;&lt;br /&gt; &lt;table str="" style="border-collapse: collapse; width: 114pt;" border="0" cellpadding="0" cellspacing="0" width="152"&gt;&lt;col style="width: 66pt;" width="88"&gt;  &lt;col style="width: 48pt;" width="64"&gt;  &lt;tbody&gt;&lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt; width: 66pt;" height="18" width="88"&gt;Undetermined&lt;/td&gt;   &lt;td style="width: 48pt;" num="" align="right" width="64"&gt;32&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;USA&lt;/td&gt;   &lt;td num="" align="right"&gt;17&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Other&lt;/td&gt;   &lt;td num="" align="right"&gt;14&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Japan&lt;/td&gt;   &lt;td num="" align="right"&gt;12&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Germany&lt;/td&gt;   &lt;td num="" align="right"&gt;10&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Sweden&lt;/td&gt;   &lt;td num="" align="right"&gt;10&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;UK&lt;/td&gt;   &lt;td num="" align="right"&gt;8&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Netherlands&lt;/td&gt;   &lt;td num="" align="right"&gt;7&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Italy&lt;/td&gt;   &lt;td num="" align="right"&gt;4&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Australia&lt;/td&gt;   &lt;td num="" align="right"&gt;3&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;California&lt;/td&gt;   &lt;td num="" align="right"&gt;3&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;Canada&lt;/td&gt;   &lt;td num="" align="right"&gt;3&lt;/td&gt;  &lt;/tr&gt;  &lt;tr style="height: 13.2pt;" height="18"&gt;   &lt;td style="height: 13.2pt;" height="18"&gt;New Zealand&lt;/td&gt;   &lt;td num="" align="right"&gt;3&lt;/td&gt;  &lt;/tr&gt; &lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The difference between &lt;span style="font-style: italic;"&gt;Undetermined &lt;/span&gt;and &lt;span style="font-style: italic;"&gt;Other &lt;/span&gt;is that the 1st category is for those who either used cryptic names or about whom I could not find enough information on the web to determine where they were from. As for the &lt;span style="font-style: italic;"&gt;Other &lt;/span&gt;category, includes countries with only 1 or 2 people, like my very own Portugal.&lt;br /&gt;&lt;br /&gt;These numbers are just estimates and you can see there is a large number of &lt;span style="font-style: italic;"&gt;Undetermined&lt;/span&gt;, so that could "turn the tables", but I think they do give a nice idea of who were the early adopters of Delphi 2007 (as this was a closed conference for Delphi 2007 registered users, users with current SA contracts or which had already ordered but not yet received Delphi 2007).&lt;br /&gt;&lt;br /&gt;You can see from the table above that &lt;span style="font-style: italic; font-weight: bold;"&gt;the Japanese are on the front line&lt;/span&gt;: in their "own" session, they clearly outnumbered any other single country! Also, quite a few (those listed on the table above) attended the English sessions too making them 2nd only to the USA!&lt;br /&gt;&lt;br /&gt;Disclaimer: like I said, those results were compiled semi-manually (I ran a SHIFT-PRTSCR around every 30 minutes on the participants list, which was what I had assigned the "Capture Text from Window" option in SnagIt), then I copied all that into a single file that I sorted and used to gather more information on the web. I could have taken the time to write a small program for automating it but I was feeling lazy! :) Besides, the hardest part was finding information on *where* those people where from, and that is something I could not automate in a reliable way...&lt;br /&gt;&lt;br /&gt;So, this was an alternate view of the event. As for what was there, there will surely be a lot more people blogging about it!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-2681734084124676439?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/2681734084124676439/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=2681734084124676439' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2681734084124676439'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/2681734084124676439'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/coderage-encore-another-view.html' title='CodeRage Encore - Another view'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-7933737581035683780</id><published>2007-03-26T19:43:00.000Z</published><updated>2007-03-26T20:03:56.427Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Delphi for Win32 - Part 12 (One week of Delphi)</title><content type='html'>Well, how was my first week of Delphi 2007?&lt;br /&gt;&lt;br /&gt;Overall, I'd say pretty positive. Did get a few deceptions on it not being perfect and still a bit far from it, but it turns out to be very stable &lt;span style="font-style: italic;"&gt;once I know what &lt;span style="font-weight: bold;"&gt;not &lt;/span&gt;to do.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;It's also sad to see some long lasting bugs remain, such as Error Insight not always working properly after a few hours coding and needing a restart of the IDE to be able to &lt;span style="font-style: italic;"&gt;know&lt;/span&gt; some unit you have on your uses clause...&lt;br /&gt;&lt;br /&gt;But, there are quite a few things that make up for that. And thus I get to my "5 favorite things" in Delphi 2007, as it seems to be customary! :)&lt;br /&gt;&lt;br /&gt;So, here's the list and I'll explain a bit after:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;QC Client bundled in;&lt;/li&gt;&lt;li&gt;Speed;&lt;/li&gt;&lt;li&gt;MSBuild;&lt;/li&gt;&lt;li&gt;Improved help;&lt;/li&gt;&lt;li&gt;Improved debugger.&lt;/li&gt;&lt;/ol&gt;Of these, I hope number 1 will no longer be there in a couple months! :)&lt;br /&gt;&lt;br /&gt;Why these 5?&lt;br /&gt;&lt;ol&gt;&lt;li&gt;QC Client bundled in makes it easier for lazy people like myself to check QC and add new bug reports there; this in turn means more bugs found and more bugs fixed, so everyone wins.&lt;/li&gt;&lt;li&gt;Speed: kind of obvious no? Just to make it more clear, it's IDE launching speed, (re-)opening projects, even compiling: all faster and that saves me time in the long run...&lt;/li&gt;&lt;li&gt;MSBuild: I can finally press RUN and have my COM Add-in be compiled, linked, run the protective wrapper as a post-build task, launch the host app and presto: I'm debugging. No more "attach to running process" just because I need to run a protective wrapper after compiling...&lt;/li&gt;&lt;li&gt;Even though I've grown a bit unused of trying to look up things in help, this may change with Delphi 2007: generally, when I press F1 over something, it will open in the proper place without stopping to ask for useless options...&lt;/li&gt;&lt;li&gt;Being able to use dockable parts of the debugger so I can set it &lt;span style="font-weight: bold;"&gt;my &lt;/span&gt;way; getting rid of unwanted stuff like instruction opcodes because I don't need them most of the time and I can use the extra space (knowing I can always turn them back on). There was a sleuth of minor and not so minor things done to the debugger that really improved it.&lt;/li&gt;&lt;/ol&gt;I guess it's pretty clear I won't go back to any previous Delphi/BDS any time soon... :)&lt;br /&gt;&lt;br /&gt;Let's hope that CodeGear &lt;span style="font-weight: bold;"&gt;does&lt;/span&gt; &lt;span style="font-weight: bold;"&gt;listen &lt;/span&gt;to their customers, learns from those things that did not work out very good this time and, above all, produces nice and quick fixes to the major annoyances so as to iron out the last few rough edges of Delphi 2007 and making it &lt;span style="font-weight: bold;"&gt;the best Delphi ever&lt;/span&gt;...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-7933737581035683780?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/7933737581035683780/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=7933737581035683780' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7933737581035683780'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7933737581035683780'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-12-one-week-of.html' title='Delphi for Win32 - Part 12 (One week of Delphi)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-8770256782116978271</id><published>2007-03-25T01:50:00.000Z</published><updated>2007-03-25T02:15:18.155Z</updated><title type='text'>Delphi for Win32 - Part 11 (Don't abuse F1!)</title><content type='html'>Well, I've been using Delphi 2007 for Win32 to make a few changes to my current project. After passing the initial couple AVs, it has been running pretty smooth and damn fast! But that does not mean that I don't run into things! So far, I have posted 24 QC entries regarding Delphi 2007 or QC Client (mostly about Delphi 2007 and mostly non-critical). Even though only 4 were the direct result of crashes/lockups, still it's a count a bit bigger than I was expecting, after all that was written on Delphi 2007....&lt;br /&gt;&lt;br /&gt;I've now set up a "clean" Virtual Machine with nothing but Windows, updates and Delphi 2007. This is were I go and test my bugs before submitting them so that I can be sure that it's nothing related to my build and/or third-party controls. I also try and post some screen shots of the bugs in action whenever appropriate...&lt;br /&gt;&lt;br /&gt;Now for the subject: the last bug I got was a &lt;span style="font-style: italic;"&gt;simple&lt;/span&gt; case of "&lt;span style="font-weight: bold; font-style: italic;"&gt;No help found for context&lt;/span&gt;". Not really much in and by itself, if it were not for two things:&lt;ol&gt;&lt;li&gt;How &lt;span style="font-weight: bold;"&gt;easy&lt;/span&gt; it was to get it (just open the Run menu and press F1 over some item); It may work on other menus, but I don't feel like trying!&lt;br /&gt;&lt;/li&gt;&lt;li&gt;How &lt;span style="font-weight: bold;"&gt;drastic &lt;/span&gt;it was! After receiving that one, the &lt;span style="font-style: italic; font-weight: bold;"&gt;menus stopped working&lt;/span&gt;! Whenever I'd mouse over one, I'd get a couple different ones (see image below), and the menus would still not work. Only way out of that loop: ALT-F4 and reload the IDE.&lt;/li&gt;&lt;/ol&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H01pb6FTsXo/RgXZjvb5X9I/AAAAAAAAAA8/-2t-J_UCAks/s1600-h/D07Bug13.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_H01pb6FTsXo/RgXZjvb5X9I/AAAAAAAAAA8/-2t-J_UCAks/s320/D07Bug13.png" alt="" id="BLOGGER_PHOTO_ID_5045678165590630354" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now, I do understand that a lot of testing was done on Delphi 2007, but maybe CodeGear should start thinking &lt;span style="font-weight: bold;"&gt;seriously&lt;/span&gt; about extending the beta tests to more people out there: this bug is just &lt;span style="font-weight: bold;"&gt;too&lt;/span&gt; easy to run into, especially when they tell us that there's an &lt;span style="font-style: italic;"&gt;improved help&lt;/span&gt;, so one may just feel tempted to try it out! Maybe they need some "casual users" on their test group, people who actually try and use the simplest of things and are not focusing on trying to find such tiny cracks that they miss out on the big ones...&lt;br /&gt;&lt;br /&gt;So, just stick with pressing F1 over components and/or keywords/properties in the editor and &lt;span style="font-weight: bold; font-style: italic;"&gt;don't abuse F1&lt;/span&gt;, or you'll have to restart your IDE!&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-8770256782116978271?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/8770256782116978271/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=8770256782116978271' title='11 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/8770256782116978271'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/8770256782116978271'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-11-dont-abuse-f1.html' title='Delphi for Win32 - Part 11 (Don&apos;t abuse F1!)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_H01pb6FTsXo/RgXZjvb5X9I/AAAAAAAAAA8/-2t-J_UCAks/s72-c/D07Bug13.png' height='72' width='72'/><thr:total>11</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-6506306198225797277</id><published>2007-03-23T21:37:00.000Z</published><updated>2007-03-23T22:12:22.890Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><title type='text'>Delphi for Win32 - Part 10 (Go CodeGear!)</title><content type='html'>I've been blogging my own experiences on the brand new Delphi 2007 for Win32. Overall, it's been a nice experience, with some bumps, and the initial shock of it not being perfect...&lt;br /&gt;&lt;br /&gt;However, I must now put out a good word for CodeGear staff: both DavidI and Michael Swindell helped me get it ordered on the first "official" day it was out, meaning that I was installing it on the 2nd day (not as good as the claimed "Instant Gratification" of ESD but not nearly as bad as waiting 2 or 3 weeks for some DVD!).&lt;br /&gt;&lt;br /&gt;And now, I was also pleasantly surprised when I checked on the &lt;span style="font-style: italic;"&gt;&lt;span style="font-weight: bold;"&gt;18 &lt;/span&gt;QC reports I made about Delphi 2007&lt;/span&gt;: (Whoa! 18? Yep, but almost all were just &lt;span style="font-weight: bold; font-style: italic;"&gt;minor nuisances&lt;/span&gt; and only a couple were more troublesome and even those were easily overcome.)&lt;br /&gt;&lt;ul&gt;&lt;li&gt;8 of those were already submitted internally;&lt;/li&gt;&lt;li&gt;2 were closed as "Cannot fix" (the ones of a "Visual Studio 2005" folder showing up on "My Documents" whenever you run the help and about a "Help improve visual studio" message that popped once);&lt;/li&gt;&lt;li&gt;1 closed for being "As designed" (Empty toolbar "Personality" showing up by default, when this is a "single" personality product);&lt;/li&gt;&lt;li&gt;3 other closed for "Cannot Reproduce";&lt;/li&gt;&lt;li&gt;That leaves only 4 with no other indication.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Overall, this means that someone has actually done some preprocessing on those reports only a few hours after they were added to QC. I hope this will translate to faster hot-fixes, but it does show one thing: &lt;span style="font-style: italic;"&gt;CodeGear may not have it perfect yet, but they do &lt;/span&gt;&lt;span style="font-weight: bold; font-style: italic;"&gt;show&lt;/span&gt;&lt;span style="font-style: italic;"&gt; they're trying...&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6506306198225797277?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6506306198225797277/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6506306198225797277' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6506306198225797277'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6506306198225797277'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-10-go-codegear.html' title='Delphi for Win32 - Part 10 (Go CodeGear!)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-3460927751687500552</id><published>2007-03-23T11:34:00.000Z</published><updated>2007-03-23T11:39:45.554Z</updated><title type='text'>Delphi for Win32 - Part 9 (How I like "clear" messages!)</title><content type='html'>In my setup, after installing Delphi for Win32 2007, I removed the installation folder from my C: drive (that's "only" 1.6 GB of data that does not need to be there). I always do a ghost image, so adding 1.6 GB of needless data (+another 600 MB for the .NET 2.0 SDK install files that get duplicated elsewhere), would simply mean that my image would use twice as much space for no good reason. (&lt;a href="http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-5-new-beginning.html"&gt;See my post about the install and disk space usage&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;However, it turns out that Delphi is trying to somehow, for some reason (check for updates?), load the setup.exe file as you can see from the message below. Double clicking on that "weird" message ("The window does not have scrollbars") does show a more clear message of what's going on, but wouldn't it be better to just say "program not found" instead of "The window does not have scrollbars"??? :)&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_H01pb6FTsXo/RgO7XPb5X7I/AAAAAAAAAAs/wIamtXqkS4k/s1600-h/D07Bug03.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://3.bp.blogspot.com/_H01pb6FTsXo/RgO7XPb5X7I/AAAAAAAAAAs/wIamtXqkS4k/s320/D07Bug03.png" alt="" id="BLOGGER_PHOTO_ID_5045082015540010930" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-3460927751687500552?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/3460927751687500552/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=3460927751687500552' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3460927751687500552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3460927751687500552'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-9-how-i-like.html' title='Delphi for Win32 - Part 9 (How I like &quot;clear&quot; messages!)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_H01pb6FTsXo/RgO7XPb5X7I/AAAAAAAAAAs/wIamtXqkS4k/s72-c/D07Bug03.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-370481422717488471</id><published>2007-03-22T23:43:00.000Z</published><updated>2007-03-22T23:58:27.047Z</updated><title type='text'>Delphi for Win32 - Part 8 (Time to sleep...)</title><content type='html'>The first hours spent with Delphi 2007 were like going cross-country on a city-car: not the most pleasant journey. Ran into a few &lt;a href="http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-7-rocksolid-false.html"&gt;bugs/lockouts&lt;/a&gt; which I wasn't expecting after so much was said and done about Delphi 2007's rock solid stability...&lt;br /&gt;&lt;br /&gt;Still, not all was bad: rebuilt my dev machine and it's faster than ever, I have also converted my current project where I used my &lt;a href="http://memyselfanddelphi.blogspot.com/2007/03/pre-and-post-build-automation-in-delphi.html"&gt;own hack&lt;/a&gt; to do post-build operations from within the IDE in BDS 2006 and I'm now using Delphi 2007's new Post Build Events. In a way, they're not as flexible as the way I was doing it: I can't add my *.ARM file to my project because I can no longer tell Delphi 2007 what to do with it (no more "Build Tools"),  and so I have to use explicit paths/filenames in the new Post Build Events instead of having a "general purpose" way of doing it to any *.ARM file I added to my project.&lt;br /&gt;&lt;br /&gt;Still, this new process is better for one reason alone: when I use "run" to test my office add-in in the proper office program, the IDE will now also run the Armadillo wrapper which means I can more easily debug my add-in, which was a bit troublesome in BDS 2006 with my "hack" as it kept insisting in compiling my main dll without doing a build all which is a mandatory step in the way I was doing it...&lt;br /&gt;&lt;br /&gt;All in all, I am a bit disappointed at Delphi 2007. Mostly about stability so far, and a &lt;a href="http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-6-24-hours-with.html"&gt;few minor nuisances&lt;/a&gt;, but I was expecting it to be nothing short than perfect after reading so many good words about it...&lt;br /&gt;&lt;br /&gt;In the next few days, I'll try and get some work done, expecting to get much less hang-ups (preferably none!).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-370481422717488471?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/370481422717488471/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=370481422717488471' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/370481422717488471'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/370481422717488471'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-8-time-to-sleep.html' title='Delphi for Win32 - Part 8 (Time to sleep...)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-304647680919464041</id><published>2007-03-22T21:15:00.000Z</published><updated>2007-03-22T21:25:52.324Z</updated><title type='text'>Delphi for Win32 - Part 7 (RockSolid := false)</title><content type='html'>Well, I &lt;span style="font-weight: bold;"&gt;honestly&lt;/span&gt;, really did think my next post would be about the &lt;span style="font-weight: bold;"&gt;good&lt;/span&gt; in Delphi for Win32 2007, but it turns out that I managed to &lt;span style="font-weight: bold;"&gt;crash&lt;/span&gt; the IDE once more! :( And the worst part of it is that I'm &lt;span style="font-weight: bold; font-style: italic;"&gt;not even trying&lt;/span&gt; to do it! I was just trying to setup some Post Build event and experimenting around, because the "&lt;span style="font-style: italic;"&gt;much improved documentation&lt;/span&gt;" not only &lt;span style="font-weight: bold;"&gt;describes the build options incorrectly&lt;/span&gt;, it also gives &lt;span style="font-weight: bold;"&gt;no examples &lt;/span&gt;of what things one can achieve and how... Now, after consistently crashing every single time I did my builds, it mysteriously stopped crashing when I changed the post build events and doesn't want to crash again even after restoring them to what they were before! Should have made a full folder backup... Now I won't be able to properly submit a bug report... :( [&lt;span style="font-style: italic;"&gt;Note to self: start hitting PRT-SCR!&lt;/span&gt;]&lt;br /&gt;&lt;br /&gt;So far, I can't say that Delphi 2007 has met my expectations... Maybe it's because they were set too high, but if that was the case, it's CodeGear, CodeRage and all those bloggers around that praised Delphi 2007 so much making everyone believe it was rock solid... Like I said above, BDS 2006 had been more &lt;span style="font-weight: bold;"&gt;rock solid&lt;/span&gt; than Delphi 2007 is proving to be...&lt;br /&gt;&lt;br /&gt;On the plus side, Delphi 2007 is faster, reloads and re-opens projects faster, and, my #1 favorite feature (as it's the one I've been using most so far!) is the integrated QC client! At least one can now send bug reports in a quicker way...&lt;br /&gt;&lt;br /&gt;Just wish I had not used the QC client at all! :(&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-304647680919464041?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/304647680919464041/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=304647680919464041' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/304647680919464041'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/304647680919464041'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-7-rocksolid-false.html' title='Delphi for Win32 - Part 7 (RockSolid := false)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-7031155866525788633</id><published>2007-03-22T18:40:00.000Z</published><updated>2007-03-22T21:33:46.687Z</updated><title type='text'>Delphi for Win32 - Part 6 (24 Hours with Delphi)</title><content type='html'>Well, the following are just a few initial notes that I've been keeping on a text file as I go: I'll probably update this post later to better reformat it and maybe add some explanation, but right now is baby bath time... :)&lt;br /&gt;&lt;br /&gt;Please note that the following are mostly the "nuisances" that I come across. There's plenty good things and I'll be blogging about those later!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Minor issues:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) One of the steps in the registration dialog show incorrectly at 120 DPI (my laptop's default setting);&lt;br /&gt;&lt;br /&gt;2) Some standard toolbars, sometimes, show a bit taller than the other toolbars (when Windows XP is set to use Themes and not sure if it has something to do with using Large Icons);&lt;br /&gt;&lt;br /&gt;3) The Personality toolbar shows by default, even though it's empty;&lt;br /&gt;&lt;br /&gt;4) They could have changed the BDS File and BDS Folder icons in BDS.EXE (not to speak of the main .EXE icon!); changing BDS.EXE to something else would probably break something, but they could have done it anyway and simply add a BDS.EXE stub to load the main new RAD...&lt;br /&gt;&lt;br /&gt;5) BDSUSERDIR is set to "RAD Studio\5.0" inside My Documents but there's no such folder: there's a "RAD Studio\Projects" and "RAD Studio\code_templates".&lt;br /&gt;&lt;br /&gt;6) Why does it insist in cluttering "My Documents" with a "Visual Studio 2005" folder *each* time I run BDS?? &lt;span style="font-style: italic;"&gt;[&lt;span style="font-weight: bold;"&gt;EDIT&lt;/span&gt;: It's not every time I run the BDS, only every time I use the Help.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;7) Why not ship a more recent GDIPLUS.DLL with the product? Since I don't know which one it's being used by the integrated browser, it's better safe than sorry... (I did replace the supplied "5.1.3102.1360 (xpsp2.040109-1800)" with a newer "6.0.3275.0" and it appears to be working ok).&lt;br /&gt;&lt;br /&gt;8) "Help make Visual Studio Better" prompt. Why? It kind of detracts (regardless of the actual reason), when a RAD selling company advertises another, even if indirectly. Should I make the move to Microsoft and stop using CodeGear products, is that the message that you're trying to convey here? Does not look good...&lt;br /&gt;&lt;br /&gt;9) The number of different project files! Which one do I open? Minor nuisance as I simply add my "work" projects to the favorites and open from there...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Important issues:&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;1) Non-breaking release: well, sort of. Since they changed install folder and reg keys, any IDE/3rd party component that does not recognize the new paths/keys will not install.&lt;br /&gt;&lt;br /&gt;2) Less choices: defaults to installing Office XP automation components and since only XP or 2000 can be registered at any one time, and I use some tools that require version 2000, I had to manually unregister one and register the other.&lt;br /&gt;&lt;br /&gt;3) More stable: hmmm. Is it? How come I got an "Access Violation" when trying to add a new package (having only remove and installed the previously mentioned one)? And how come it doesn't show on TaskManager's Application List and only on Process list? (Yes, you're guessing it right: I had to *forcefully* terminate it! And mind you that I had previously cleaned my PC of BDS 2006 and even manually removed some registry/folder left overs, plus the mandatory reboot, so it was pretty much clean of any leftovers...)&lt;br /&gt;  Update: No such error after installing on a "clean" Windows XP + Office 2003 only installation.&lt;br /&gt;&lt;br /&gt;4) Even more stable? How come I got *another* different exception after restarting the IDE and trying to load my current project? :( Again, not anymore on a "clean" system.&lt;br /&gt;&lt;br /&gt;5) The "shiny brand new MSBUILD": What about some examples instead of simply describing the options? Being a new feature would not hurt to have some examples! Also, the help mentions "pre-build", "pre-link" and "post-build" stages: only the 1st and last are available in Delphi...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[&lt;span style="font-weight: bold;"&gt;Edit&lt;/span&gt;: and a few more...]&lt;/span&gt;&lt;br /&gt;6) When making my first build event, I came upon the following, which I consider wrong, behaviour:&lt;br /&gt;   - Added a command;&lt;br /&gt;   - Made a Build;&lt;br /&gt;   - There is a message in the output pane saying something like: "[Exec Error] The command "...." exited with code 1.&lt;br /&gt;   - In the post-build events, the option to "cancel build on error" is set to true.&lt;br /&gt;   So, how come it considers the build sucessfull?&lt;br /&gt;&lt;br /&gt;7) When exploring with the post build events, I managed to get to a point where I was consistently locking the IDE! Had to end-task it. Then, after changing the events it started building, and I was no longer able to reproduce that behavior...&lt;br /&gt;&lt;br /&gt;Stay tunned for some positive feedback after the baby's bath... :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-7031155866525788633?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/7031155866525788633/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=7031155866525788633' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7031155866525788633'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7031155866525788633'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-6-24-hours-with.html' title='Delphi for Win32 - Part 6 (24 Hours with Delphi)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-1971437811738749856</id><published>2007-03-22T01:14:00.000Z</published><updated>2007-03-22T11:02:33.676Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='ESD'/><title type='text'>Delphi for Win32 - Part 5 - A new beginning</title><content type='html'>Well, after I finally prepared my dev machine intentionally &lt;span style="font-weight: bold;"&gt;without&lt;/span&gt; the .NET 2.0 Framework, I was once more ready to install Delphi 2007.&lt;br /&gt;&lt;br /&gt;In doing so, I discovered that I had previously used an "incomplete" ISO for the install, hence the (non-problem) I reported of it trying to re-download the files. I'll re-install it again shortly, after restoring my pre-Delphi ghost image just to verify that.&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[Edit: Well, I tried it again and found out that it wasn't my fault after all! The current installer requires the files on the folder pointed with the red arrow on one of the images below.]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;The install process is divided into 3 parts:&lt;br /&gt;- Detect/Download/Install pre-requisites (.NET 2.0 Framework, SDK and J# Runtime);&lt;br /&gt;- Enter your registration data and make your selections;&lt;br /&gt;- Download/Install the CodeGear related files.&lt;br /&gt;&lt;br /&gt;As for the install options, here's what you have available in the Professional edition:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_H01pb6FTsXo/RgHaJ_b5X5I/AAAAAAAAAAc/ObNVWhnXw58/s1600-h/Full%2BPro%2BOptions.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://4.bp.blogspot.com/_H01pb6FTsXo/RgHaJ_b5X5I/AAAAAAAAAAc/ObNVWhnXw58/s320/Full%2BPro%2BOptions.png" alt="" id="BLOGGER_PHOTO_ID_5044552922813783954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And here's the disk space used by the download and install:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_H01pb6FTsXo/RgHaZPb5X6I/AAAAAAAAAAk/fnSfOEAHMdU/s1600-h/Install+Space.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://1.bp.blogspot.com/_H01pb6FTsXo/RgHaZPb5X6I/AAAAAAAAAAk/fnSfOEAHMdU/s320/Install+Space.png" alt="" id="BLOGGER_PHOTO_ID_5044553184806789026" border="0" /&gt;&lt;/a&gt;As you can see from this, the install files (cached on the folder pointed to by the arrow), use roughly 1.4 GB. To that, you add approximately 1.5 GB of Microsoft related stuff (.NET 2.0 Framework, SDK, SDK install files, .NET 2.0 help files (part of the SDK but worth mentioning the waste of space when installing a "for Win32" type of development app!).&lt;br /&gt;&lt;br /&gt;All in all, of the 2 GB needed (not counting the install files), only less than 700 MB are used by CodeGear: the remaining 1.4 GB is "spent" by Microsoft Runtimes, SDKs and tools.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;For those more inclined to go and add all the bytes: the values above are approximations, give or take a couple hundred MB! I'm just too lazy to do all the math properly! :)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;One nice thing about the install process: part 3 (the one where it installs CodeGear stuff), only takes around 4 minutes on my machine if you already have the files downloaded! Very fast indeed...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-1971437811738749856?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/1971437811738749856/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=1971437811738749856' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1971437811738749856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1971437811738749856'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-5-new-beginning.html' title='Delphi for Win32 - Part 5 - A new beginning'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_H01pb6FTsXo/RgHaJ_b5X5I/AAAAAAAAAAc/ObNVWhnXw58/s72-c/Full%2BPro%2BOptions.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-7871553519876433946</id><published>2007-03-21T23:12:00.000Z</published><updated>2007-03-21T23:37:00.510Z</updated><title type='text'>Delphi for Win32 - Part 4 (aka: The Day After)</title><content type='html'>Well, one day after I finally was able to download and install Delphi 2007 (thanks go to DavidI and Michael Swindell for their help in speeding up the process), I must say that it's not what I'd think it would be!&lt;br /&gt;&lt;br /&gt;When waiting for the manual ESD ordering process (involving wire transfers, e-mails back and forth, waiting what seemed like an eternity just because Portugal is "one of those countries" where we can't order CodeGear products online and have that "instant gratification"), I thought that I would be spending my first day with Delphi 2007 exploring all the new features...&lt;br /&gt;&lt;br /&gt;I thought, because I didn't! And why? Well, a couple &lt;span style="font-weight: bold;"&gt;Access Violations&lt;/span&gt; on the new IDE even &lt;span style="font-weight: bold;"&gt;before&lt;/span&gt; adding any third-party tool and &lt;span style="font-weight: bold;"&gt;without&lt;/span&gt; having BDS 2006 on my system anymore, made me wonder if Delphi 2007 was indeed &lt;span style="font-weight: bold;"&gt;that&lt;/span&gt; more stable than BDS 2006 which had not crashed on me for so many months that I can't remember when it was the last time!&lt;br /&gt;&lt;br /&gt;One such violation was when removing the Office XP automation and installing the Office 2K automation instead as one of the component sets I use requires that version instead (yes, Delphi 2007 is using a "Vista" approach: "We know better than you what you like, so we don't ask you and install what &lt;span style="font-weight: bold;"&gt;we&lt;/span&gt; decide!").&lt;br /&gt;&lt;br /&gt;This AV was a bit drastic as it kept poping up and I had to forcefully end-task the IDE.&lt;br /&gt;&lt;br /&gt;The other AV was after restarting the IDE and when trying to add some other components, so it may have been those components fault.&lt;br /&gt;&lt;br /&gt;So, in order to set things straight, I decided to go back to an old ghost image of my C: drive with only Windows, Office and updates.&lt;br /&gt;&lt;br /&gt;I had saved the cache folder where the Delphi installer downloads the files, and made it into an ISO. Mounted that ISO, fired the install, only to find out that it would go download .NET 2.0 Framework: a quick check and, ok, let it go on as I don't have that installed. However, when it started trying to download all the other files it already had on the ISO, I aborted it and instead copied all the remaining files to the folder the install expects them to be in. (&lt;span style="font-style: italic; font-weight: bold;"&gt;Hint for CodeGear: some instructions on how to make this into a DVD would be nice!&lt;/span&gt;)&lt;br /&gt;&lt;br /&gt;It all went ok and when I ran Delphi 2007 and did the same operation as before it no longer crashed. So, now I was facing the task of re-installing a ton of utilities that I use, from &lt;a href="http://www.idmcomp.com/"&gt;UltraEdit &lt;/a&gt;to &lt;a href="http://www.winzip.com/"&gt;WinZip&lt;/a&gt; and many others, so, instead of doing it, I decided it was time to find a way to make them "install-less" and place them on sub-folders of my D:\Utils so I would save myself some work on my next installs. And so that was my first day with Delphi 2007!&lt;br /&gt;&lt;br /&gt;I'm pretty happy with how much leaner my system looks and feels with my Start Menu so much less cluttered (not that I use it anyway!), and above all, my registry not being flooded with tons of useless information. So, at this point, and having gone back to my previous ghost image again to verify that all the utils were in fact working properly on a "clean" image, I'm now about to install Delphi 2007 for the third time. I already took some notes on the install process and some minor (and some not so minor) issues, and that will be the subject of my next post...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Overall, some times bad things come for good and having Delphi 2007 blow up on me at the start made me clean up my dev system, so that's some good out of that!&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-7871553519876433946?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/7871553519876433946/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=7871553519876433946' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7871553519876433946'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/7871553519876433946'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-4-aka-day-after.html' title='Delphi for Win32 - Part 4 (aka: The Day After)'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-228220925168248787</id><published>2007-03-20T16:27:00.000Z</published><updated>2007-03-20T16:32:26.732Z</updated><title type='text'>Delphi for Win32 - Part 3</title><content type='html'>Houston: the key has landed! :)&lt;br /&gt;&lt;br /&gt;Now onto the remaining installation.&lt;br /&gt;&lt;br /&gt;Here's what the installer looks like:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_H01pb6FTsXo/RgAL1vb5X3I/AAAAAAAAAAM/jSGxRqx_H4U/s1600-h/Install.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_H01pb6FTsXo/RgAL1vb5X3I/AAAAAAAAAAM/jSGxRqx_H4U/s320/Install.png" alt="" id="BLOGGER_PHOTO_ID_5044044600549400434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And here are the fully expanded installation options for the Professional SKU:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_H01pb6FTsXo/RgAMHvb5X4I/AAAAAAAAAAU/mvKpIiVRB0o/s1600-h/Full+Pro+Options.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://2.bp.blogspot.com/_H01pb6FTsXo/RgAMHvb5X4I/AAAAAAAAAAU/mvKpIiVRB0o/s320/Full+Pro+Options.png" alt="" id="BLOGGER_PHOTO_ID_5044044909787045762" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-228220925168248787?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/228220925168248787/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=228220925168248787' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/228220925168248787'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/228220925168248787'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-3.html' title='Delphi for Win32 - Part 3'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_H01pb6FTsXo/RgAL1vb5X3I/AAAAAAAAAAM/jSGxRqx_H4U/s72-c/Install.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-9040327036497268290.post-1526471518796812142</id><published>2007-03-20T15:34:00.000Z</published><updated>2007-03-20T23:20:56.941Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='ESD'/><title type='text'>Delphi for Win32 - Worldwide ESD Purchase?</title><content type='html'>I haven't tested this (other than seeing that the link works), but I received as an answer to my question of whether I could purchase the ESD and download it even from Portugal. Oddly enough, I received an answer that links to the Latin America Borland Shop.&lt;br /&gt;&lt;br /&gt;I am already waiting on my already paid ESD from my local distributor but those of you out there stuck without a way to buy the ESD online may want to give it a try.&lt;br /&gt;&lt;br /&gt;Here's the link: &lt;a href="http://shop.borland.com/dr/v2/ec_MAIN.Entry16?SP=10024&amp;PN=29&amp;amp;amp;xid=52557&amp;V1=31033233&amp;amp;V2=31033233&amp;V3=1&amp;amp;V5=0&amp;V4=38&amp;amp;S1=&amp;S2=&amp;amp;S3=&amp;S4=&amp;amp;S5=&amp;CUR=840&amp;amp;DSP=0&amp;PGRP=0&amp;amp;ABCODE=&amp;CACHE_ID=0"&gt;Delphi for Win32 ESD Worldwide Purchase&lt;/a&gt;.&lt;span style="font-style: italic;"&gt;&lt;br /&gt;[&lt;span style="font-weight: bold;"&gt;EDIT&lt;/span&gt;] At least one UK user tried and he could not make the purchase from there. Either someone thinks that Portugal is part of Latin America, or I don't see why they sent me that address to make the ESD purchase!]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://shop.borland.com/dr/v2/ec_MAIN.Entry16?SP=10024&amp;amp;PN=29&amp;xid=52557&amp;amp;V1=31033233&amp;V2=31033233&amp;amp;V3=1&amp;V5=0&amp;amp;V4=38&amp;S1=&amp;amp;S2=&amp;S3=&amp;amp;S4=&amp;S5=&amp;amp;CUR=840&amp;DSP=0&amp;amp;amp;PGRP=0&amp;ABCODE=&amp;amp;CACHE_ID=0"&gt;&lt;/a&gt;Please post a comment stating your experience with that if you use it.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-1526471518796812142?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/1526471518796812142/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=1526471518796812142' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1526471518796812142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/1526471518796812142'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-worldwide-esd-purchase.html' title='Delphi for Win32 - Worldwide ESD Purchase?'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-6515404142398990840</id><published>2007-03-20T11:46:00.000Z</published><updated>2007-03-20T11:58:02.743Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='ESD'/><title type='text'>Delphi for Win32 - Part 2</title><content type='html'>Well, while I keep &lt;a href="http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-1.html"&gt;waiting for my Delphi for Win32 code to arrive&lt;/a&gt;, what else can I write about?&lt;br /&gt;&lt;br /&gt;I can start with a &lt;span style="font-weight: bold;"&gt;word of warning&lt;/span&gt; for "&lt;span style="font-style: italic;"&gt;wanna-be&lt;/span&gt;" ESD users: make sure your C: partition has &lt;span style="font-weight: bold;"&gt;plenty&lt;/span&gt; room available. And I don't mean a DVD-Size type of space, but at least twice as much!&lt;br /&gt;&lt;br /&gt;Actually, I don't yet know, for the reason mentioned above, what exact space is needed, but I did run the installer and allowed it to fetch the pre-reqs (essentially .NET 2.0 SDK, hereafter referred to as simply SDK). That's pretty much all I can do until the code arrives, so I took a look at my C: drive. It was a bit of a shock to see that I had &lt;span style="font-weight: bold;"&gt;lost 1.6 GB&lt;/span&gt; of free space in my C: drive!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;Why?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To keep it simple, 600 MB for the SDK install files that the Delphi installer caches under Documents and Settings, 600 MB for another copy of that file that is simply copied inside a "Microsoft Visual Studio 8" folder in My Programs, and the same contents but this time after extraction partly to Program Files and partly to Documents and Settings.&lt;br /&gt;&lt;br /&gt;That's a whole lot of space! And I've yet to start downloading Delphi's own setup files! I wonder if I have enough free space on my C: drive to continue the installation.&lt;br /&gt;&lt;br /&gt;And, of course, it's also worth mentioning that of those SDK files actually installed, around 400 MB are pretty useless to me and to pretty much every Delphi for Win32 user: they're the .NET documentation files...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-6515404142398990840?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/6515404142398990840/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=6515404142398990840' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6515404142398990840'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/6515404142398990840'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-2.html' title='Delphi for Win32 - Part 2'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-3319175425042998386</id><published>2007-03-20T10:50:00.000Z</published><updated>2007-03-20T23:22:27.979Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='BDS2006'/><title type='text'>Pre and Post-Build automation in Delphi</title><content type='html'>&lt;span style="font-style: italic;"&gt;Abstract: This article describes a simple way to extend the IDE so that Pre-Build and Post-Build tasks can be automated without a single line of code. This works for BDS 2006 and may work (untested) for BDS 2005.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;Why Pre or Post-Build?&lt;/span&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;I’m trying to create my first shareware program in my free time. Using Delphi on my laptop for company work, it was the logical choice to make this project. With that comes adding some security measures and so I chose Armadillo (now SoftwarePassport). The way this protection works is by wrapping the program’s exe or dll which means it has to be done &lt;b style=""&gt;after&lt;/b&gt; building the main program. This protective wrapper needs to be in place even for development work, be that to test settings related to the protection itself or simply to avoid a large number of conditional defines to block code out.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;For the last few days I’ve been trying to automate the process which involves running a windows application with certain parameters. Because there is not much information on how to successfully accomplish this, I decided to write this article to share the workaround that I found to be very good, at least until Delphi gains a more customizable builder.&lt;/p&gt;&lt;p class="MsoNormal"&gt;  &lt;/p&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;The solution&lt;/span&gt;  &lt;p class="MsoNormal"&gt;The whole idea works around 2 concepts applied together: using Build Tools and Project Groups.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I’ll describe the process for the Post-Build situation in my particular case, but, by playing around with the build order, this can easily be adapted to Pre-Build too and you can even have several Pre and Post-Build tools being executed.&lt;/p&gt;&lt;p style="font-weight: bold; color: rgb(0, 0, 0);" class="MsoNormal"&gt;Step-by-step instructions&lt;/p&gt;&lt;p class="MsoNormal"&gt;  &lt;/p&gt;&lt;p class="MsoNormal"&gt;Let’s start by opening your project.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Now, right-click on the Project Group and select "Add New Project…".&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Any type of project will do, I selected a console application and named it PostBuild, but again, any name will do. You can keep your project the Active one.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Save all that and choose a proper name for the .bdsgroup file.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Now right-click on the PostBuild project in the project explorer and select "Dependencies…": &lt;b style=""&gt;&lt;i style=""&gt;this is one of the most important steps&lt;/i&gt;&lt;/b&gt; because in here you can say that this project (PostBuild) depends on another one (your main project), so that it will always be built &lt;b style=""&gt;after&lt;/b&gt; your main one.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Now for the tool configuration.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;In my particular case, I need to run the following command line:&lt;/p&gt;    &lt;div style="border: 1pt solid windowtext; padding: 1pt 6pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 5.65pt; margin-right: 5.65pt; font-family: courier new;"&gt;  &lt;p class="SourceCode" style="margin: 0cm 0cm 0.0001pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;"C:\Program Files\SoftwarePassport\Armadillo.exe" "D:\Dev\My Prog\Prot.arm" /P&lt;/p&gt;  &lt;/div&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;So, let’s do 2 things here: add the Prot.arm file to the Post-Build project and create a &lt;i style=""&gt;Build Tool&lt;/i&gt; to handle .arm files.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The &lt;i style=""&gt;Build Tools&lt;/i&gt; dialog, or more specifically, the "&lt;i style=""&gt;Add&lt;/i&gt;…" sub-dialog, could use a bit more explanation in the help file but eventually I got it working as you might have guessed or I would not be writing this article!&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The key points in this dialog are:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Title&lt;/b&gt;: Anything will do but using a descriptive title always helps&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Default Extensions&lt;/b&gt;: *.arm (this is for my case for the example command-line above)&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;Command Line&lt;/b&gt;: This is the trickiest of them all, but after you get one working, they’re all easy. The trick here is &lt;b style=""&gt;not&lt;/b&gt; to use quotes on the program’s name but instead use the windows SFN (Short File Name). The reason is that, should you need to use quotes to enclose the path of your file, the IDE gets confused with too many quotes.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;So, these are the &lt;b style=""&gt;wrong&lt;/b&gt; ways of adding that command line above:&lt;/p&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 6pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 5.65pt; margin-right: 5.65pt;"&gt;  &lt;p class="SourceCode" style="margin: 0cm 0cm 0.0001pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\Program Files\SoftwarePassport\Armadillo.exe D:\Dev\My Prog\Prot.arm /P&lt;/p&gt;&lt;p class="SourceCode" style="margin: 0cm 0cm 0.0001pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="SourceCode" style="margin: 0cm 0cm 0.0001pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;"C:\Program Files\SoftwarePassport\Armadillo.exe" D:\Dev\My Prog\Prot.arm /P&lt;/p&gt;&lt;p class="SourceCode" style="margin: 0cm 0cm 0.0001pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="SourceCode" style="margin: 0cm 0cm 0.0001pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\Program Files\SoftwarePassport\Armadillo.exe "D:\Dev\My Prog\Prot.arm" /P&lt;/p&gt;&lt;p class="SourceCode" style="margin: 0cm 0cm 0.0001pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;&lt;br /&gt;&lt;/p&gt;  &lt;p class="SourceCode" style="margin: 0cm 0cm 0.0001pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;"C:\Program Files\SoftwarePassport\Armadillo.exe" "D:\Dev\My Prog\Prot.arm" /P&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoNormal"&gt;This last one &lt;b style=""&gt;should&lt;/b&gt; work, if it were not for the IDE to be confused with it. So, what &lt;b style=""&gt;does&lt;/b&gt; work is this one:&lt;/p&gt;  &lt;div style="border: 1pt solid windowtext; padding: 1pt 6pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-left: 5.65pt; margin-right: 5.65pt;"&gt;  &lt;p class="SourceCode" style="margin: 0cm 0cm 0.0001pt; background: rgb(224, 224, 224) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"&gt;C:\Progra~1\SoftwarePassport\Armadillo.exe "D:\Dev\My Prog\Prot.arm" /P&lt;/p&gt;  &lt;/div&gt;  &lt;p class="MsoNormal"&gt;Notice the SFN on the program to be executed, thus leaving the quotes available for use on the file name. Of course, we don’t want this exactly as it is as it would be hard coded. We can use some Macros to make it more generic, so here are the &lt;i style=""&gt;Add Build Tool&lt;/i&gt; contents for my case:&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Title:&lt;/i&gt;&lt;/b&gt; ArmProtect&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Default Extensions:&lt;/i&gt;&lt;/b&gt; *.arm&lt;/p&gt;  &lt;p class="MsoNormal"&gt;&lt;b style=""&gt;&lt;i style=""&gt;Command Line:&lt;/i&gt;&lt;/b&gt; C:\Progra~1\SoftwarePassport\Armadillo.exe "$PATH$NAME" /P&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Using these Macros is also the reason why I used SFN on the program and not on the filename! In this case, "&lt;span style="font-weight: bold;"&gt;$PATH$NAME&lt;/span&gt;" gets expanded to "D:\Dev\My Prog\Prot.arm".&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Don't forget that this tool will only be used on the extensions indicated in this dialog.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;You can also, at any point in time, manually run this command by right-clicking any *.arm file on your project and selecting the tool from the menu.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;The final step to remember is to &lt;i style=""&gt;Build All Projects&lt;/i&gt; (you can give it a keyboard shortcut to make it easier to use and/or put it on your toolbar).&lt;/p&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;In short:&lt;/span&gt;&lt;br /&gt;&lt;p class="MsoNormal"&gt;1 - Add a PostBuild "void" project to your project group;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;2 - Right click that project, select &lt;i style=""&gt;Dependencies&lt;/i&gt; and make it depend on your main project;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;3 - Add the file you want to be processed after building your program to the PostBuild project;&lt;/p&gt;  &lt;p class="MsoNormal"&gt;4 - Create a &lt;i style=""&gt;Build Tool&lt;/i&gt; to run the proper command-line and associate it with that file’s extension (don't forget about using SFN for the program name);&lt;/p&gt;  &lt;p class="MsoNormal"&gt;5 - Always load the .bdsgroup instead of the .bdsproj and use &lt;i style=""&gt;Project&lt;/i&gt; -&gt; &lt;i style=""&gt;Build All Projects&lt;/i&gt; whenever you want the Pre/Post-Build to work.&lt;/p&gt;&lt;p class="MsoNormal"&gt;&lt;span style="font-weight: bold; color: rgb(0, 0, 0);"&gt;Final Notes&lt;/span&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class="MsoNormal"&gt;  &lt;/p&gt;  &lt;p class="MsoNormal"&gt;This process was tested with BDS 2006 and should probably work with BDS 2005 too but I haven’t tested in that IDE.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;You may need to exit and re-open the IDE for it to acknowledge changes to Build Tools, especially when you just added a new one.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;Adding a Pre-Build is also easy to achieve playing with the project’s dependencies: you will need to make your main project dependent on the PreBuild one.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;If you need to add some step that does not depend on any type of file, simply make up some extension (use 4 or more characters to avoid conflicts with existing extensions) and create a void file of that extension to associate with the Build Tool, for instance, "nothing.step1".&lt;/p&gt;  &lt;p class="MsoNormal"&gt;If you want to customize the Build Current Project key to perform Build All Projects instead, take a look at the free &lt;a href="http://www.gexperts.org/"&gt;GExperts Add-In&lt;/a&gt;.&lt;/p&gt;  &lt;p class="MsoNormal"&gt;I hope that this information is as valuable to those reading this as it is for me. I've &lt;a href="http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-1.html"&gt;yet to try out&lt;/a&gt; the new MSBUILD,  so until then, this workaround works like a charm.&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-3319175425042998386?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/3319175425042998386/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=3319175425042998386' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3319175425042998386'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/3319175425042998386'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/pre-and-post-build-automation-in-delphi.html' title='Pre and Post-Build automation in Delphi'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-918216810290598212</id><published>2007-03-20T10:13:00.000Z</published><updated>2007-03-20T12:11:55.431Z</updated><category scheme='http://www.blogger.com/atom/ns#' term='Delphi'/><category scheme='http://www.blogger.com/atom/ns#' term='Install'/><category scheme='http://www.blogger.com/atom/ns#' term='ESD'/><title type='text'>Delphi for Win32 - Part 1</title><content type='html'>In these multi-part posts about the newly released &lt;a href="http://www.codegear.com/Products/Delphi/Delphi2007forWin32/tabid/236/Default.aspx"&gt;Delphi for Win32&lt;/a&gt;, I'll be blogging about my ordering, installation and usage experiences.&lt;br /&gt;&lt;br /&gt;Part 1 (this one you're reading), is about the new ESD version that is available from CodeGear starting with Delphi for Win32.&lt;br /&gt;&lt;br /&gt;So, now you have an ESD (Electronic Software Delivery?), meaning that, in theory and using CodeGear's own words, you get "Instant gratification".&lt;br /&gt;&lt;br /&gt;I'm a big fan of ESDs: ever since there were internet purchases I've been doing them and all over these years, I've easily made over 100 such purchases. The big advantage of an ESD is to allow you to skip all that lengthy process of duplicating the CDs/DVDs and distributing them all over the globe, so, in theory, it's a nice idea.&lt;br /&gt;&lt;br /&gt;Now let me talk a bit about CodeGear's first ESD: Delphi for Win32.&lt;br /&gt;&lt;br /&gt;Having attended the CodeRage virtual conference last week, I was caught by surprise on Friday, the closing day, that CodeGear had started to ship Delphi for Win32. So, time to grab my credit card and go check their site... Hmm... There's no such thing as Portugal on their listing, so I'll have to try Spain instead.&lt;br /&gt;&lt;br /&gt;Cuting a looong story short, let me just say that I did fight for a few hours trying to find a CodeGear online shop/partner/whatever that would allow me to have that "instant gratification". It turns out that I was expecting too much for two main reasons:&lt;br /&gt;&lt;br /&gt;1) In these days of e-commerce and EEC, they block sales from their resellers to other countries, maybe it's something from Borland age and has to do with some business areas but still incomprehensible in these global days we're living;&lt;br /&gt;&lt;br /&gt;2) The other reason I was expecting too much was because it wasn't actually official until next Monday, so, Friday was not the release date as I initially thought.&lt;br /&gt;&lt;br /&gt;That much I learned after "bugging" &lt;a href="http://blogs.codegear.com/davidi/"&gt;DavidI&lt;/a&gt; and &lt;a href="http://blogs.codegear.com/MichaelSwindell/"&gt;Michael Swindell&lt;/a&gt;.&lt;br /&gt;Having learned that I waited until next Monday to be contacted, as promised by CodeGear. And, in fact, I was: first by a Portuguese retailer, then by a Spanish distributor telling me they had instructed that Portuguese retailer to get in touch with me.&lt;br /&gt;&lt;br /&gt;And so they did: after answering their initial request as to what product I was interested in, I waited a few more hours. Late, near business day end, they contacted me again with pricing (there was an issue with using a special CodeRage attendant discount), and, after they told me how to buy the "ESD", I made a wire transfer and mailed them back. I had been told that, from the moment I placed my order, it would have taken 12 hours to receive the "ESD" (gosh: internet is sooo slow!), but 16 hours are gone now and still no code in my mail... :(&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;[&lt;span style="font-weight: bold;"&gt;EDIT&lt;/span&gt;: It turns out, from their answer just now, that it's 12 "business hours"; considering that they sent me the wire transfer data at the end of yesterday's business day, and even though I made the transfer right away and with 40 minutes to spare, they only picked up my order process today! So, if it's 12 "business hours", this means that &lt;span style="font-weight: bold;"&gt;ESD for Portugal = 3 days from start to finish... &lt;/span&gt;And I thought the year was 2007!!]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Meanwhile, bugging Michael a bit more, I managed to start the Download/Install procedure: I'm yet to get past that stage where I have to enter the yet to be received key, but at least I've now allowed the ESD installer to download the 600 MB of pre-reqs. (More on that on my next post!)&lt;br /&gt;&lt;br /&gt;Final notes:&lt;br /&gt;&lt;br /&gt;1) For their first ESD experience, I've read that it isn't going that bad, at least in "Civilized" countries for which they have online stores and allow that "instant gratification"; there were a few issues over the weekend but since it was not even supposed to be working 'til Monday, that's no big deal.&lt;br /&gt;&lt;br /&gt;2) They &lt;span style="font-weight: bold;"&gt;*do*&lt;/span&gt; need to sort things out for the remaining countries: buying an ESD by using FAX order forms and/or wire transfers is &lt;span style="font-weight: bold;"&gt;not&lt;/span&gt; the way ESDs were meant to be! My suggestion: until local retailers are capable of providing that "instant gratification" experience, allow other retailers to at least sell the ESDs for those countries. If the local retailers don't want to loose on those customers, then they will catch up.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic; font-weight: bold;"&gt;Unless they sort this out, some developers will be 1st class customers with "instant gratification", while others will have to wait, and wait, and wait...&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;3) &lt;span style="font-weight: bold;"&gt;CodeGear support was impressive&lt;/span&gt;. They have gone to all the lengths to have the right people talk to me and allow me to place the order. It's a bit slow process in Portugal, unfortunately, but I hope that sometime later today I'll be completing the install.&lt;br /&gt;&lt;br /&gt;So, stay tuned for more comments on Delphi for Win32...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-918216810290598212?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/918216810290598212/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=918216810290598212' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/918216810290598212'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/918216810290598212'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/delphi-for-win32-part-1.html' title='Delphi for Win32 - Part 1'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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-9040327036497268290.post-5264833279654669938</id><published>2007-03-20T09:54:00.000Z</published><updated>2007-03-20T10:01:12.972Z</updated><title type='text'>WriteLn( 'Hello World!');</title><content type='html'>Welcome to my first blog post in Blogger.&lt;br /&gt;&lt;br /&gt;In here, I plan to be posting my thoughts about Delphi in general and Delphi for Win32 in particular. I'll start with a series of posts telling you about my current Delphi for Win32 installation and usage experience.&lt;br /&gt;&lt;br /&gt;So, stay tunned.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/9040327036497268290-5264833279654669938?l=memyselfanddelphi.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://memyselfanddelphi.blogspot.com/feeds/5264833279654669938/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=9040327036497268290&amp;postID=5264833279654669938' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5264833279654669938'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/9040327036497268290/posts/default/5264833279654669938'/><link rel='alternate' type='text/html' href='http://memyselfanddelphi.blogspot.com/2007/03/writeln-hello-world.html' title='WriteLn( &apos;Hello World!&apos;);'/><author><name>Fernando Madruga</name><uri>http://www.blogger.com/profile/07296473246062338124</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>
