<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://community.devexpress.com/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en"><title type="html">dxRAM - Richard Morris&amp;#39; DevExpress blog</title><subtitle type="html" /><id>http://community.devexpress.com/blogs/dxram/atom.aspx</id><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/default.aspx" /><link rel="self" type="application/atom+xml" href="http://community.devexpress.com/blogs/dxram/atom.aspx" /><generator uri="http://communityserver.org" version="3.1.30415.43">Community Server</generator><updated>2009-06-25T17:00:00Z</updated><entry><title>1001 DevExpress Tales </title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/11/17/1001-devexpress-tales.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/11/17/1001-devexpress-tales.aspx</id><published>2009-11-17T15:51:00Z</published><updated>2009-11-17T15:51:00Z</updated><content type="html">&lt;p&gt;We&amp;#39;re quite excited about the completion of the first DevExpress Book &amp;quot;Professional DevExpress ASP.NET Controls&amp;quot;, and the timing couldn&amp;#39;t be better as we took delivery of the first 2 palette loads right as we were putting together boxes of DevExpress t-shirts and caps to send to PDC to give away from our booth. Look at all these boxes of books lurking deep inside our PDC booth.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/dxram/1000TalesSmall.jpg"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/1000TalesSmall.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We are giving away all 1000 books from this first load to PDC attendees from our booth.&amp;nbsp; If you are at PDC swing by and get your own copy, and if you meet up with some of the authors they&amp;#39;ll be glad to sign your copy if you want.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/dxram/PaulWithBoxSmall.jpg"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/PaulWithBoxSmall.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Here is Paul Kimmel, one of the authors posing with the 1001st and by far the largest copy of the book.&amp;nbsp; Not all of the books are so large.&lt;/p&gt;
&lt;p&gt;If you can&amp;#39;t make it to PDC, you can also &lt;a target="_blank" href="http://amzn.com/0470500832"&gt;find the book on Amazon&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;BTW: If you happen to have the VCL platform subscription, by a quirk of Delphi IDE history, you also have our ASPx controls.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=284438" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="PDC09" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/PDC09/default.aspx" /></entry><entry><title>Delphi at PDC</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/11/13/delphi-at-pdc.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/11/13/delphi-at-pdc.aspx</id><published>2009-11-13T15:00:00Z</published><updated>2009-11-13T15:00:00Z</updated><content type="html">&lt;p&gt;As you may have heard by now, Devexpress is again a top level sponsor of Microsofts Professional Developers Conference (PDC) again this year.&amp;nbsp; Here&amp;#39;s the button, so you know it&amp;#39;s &lt;a target="_blank" href="http://uk.encarta.msn.com/dictionary_1861802104/fair_dinkum.html"&gt;&lt;i&gt;fair dinkum&lt;/i&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a target="_blank" href="http://microsoftpdc.com/Sponsors"&gt;&lt;img style="border:0;" src="http://community.devexpress.com/blogs/aspnet/image_450588121_61C55EBD.png" width="167" height="221" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is a pretty big deal for us, because it&amp;#39;s an opportunity to show off what we have been working on for the past year to one of the largest audiences of .NET developers.&amp;nbsp; But PDC is not just about Microsofts development tools like say a TechEd (which we have also sponsored).&amp;nbsp; Rather PDC is about Professional development for the Microsoft Platform ... in other words it&amp;#39;s pretty much a Windows Developer Conference although naturally many attendees are exclusively .NET developers.&lt;/p&gt;
&lt;p&gt;So why might Delphi developers be interested in a Microsoft conference?&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Well ... with the exception of the handfull who still use Kylix we&amp;#39;re pretty much all Windows developers.&amp;nbsp; The future of the Windows Platform is very important to Delphi developers because it&amp;#39;s the future of our applications too.&lt;/p&gt;
&lt;p&gt;I expect there will be many Delphi developers at PDC this year including those like me who use .NET for web development and corporate applications and Delphi for shrinkwrapped executables.&amp;nbsp; I look forward to meeting up with developers from many component vendors like &lt;a href="http://www.codegear.com"&gt;CodeGear&lt;/a&gt; and &lt;a href="http://www.remobjects.com/"&gt;RemObjects&lt;/a&gt; among others that build both .NET and VCL based products, as well as independant Delphi developers.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m flying from Australia to be at PDC and this year I have an attendee pass to go to all the keynotes and sessions, although you will also find me around the DevExpress booth during most booth hours.&amp;nbsp; So If you use Delphi hunt me down and we&amp;#39;ll talk.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=282999" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="Delphi PDC09" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/Delphi+PDC09/default.aspx" /></entry><entry><title>Borlands latest product is pure genius!</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/10/26/borlands-latest-product-is-pure-genius.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/10/26/borlands-latest-product-is-pure-genius.aspx</id><published>2009-10-26T00:08:00Z</published><updated>2009-10-26T00:08:00Z</updated><content type="html">&lt;p&gt;No not THAT &lt;b&gt;Borland&lt;/b&gt; ... Oh no no no , I mean &lt;b&gt;THIS &lt;/b&gt;one.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/BorlandChocolateMacadamiaShortbread.jpg" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;I give you &lt;i&gt;Borlands Australia&lt;/i&gt; - purveyors of Macadamia Shortbread on a Chocolate base.&amp;nbsp; What a stroke of genius to combine the 2nd great gift of the Scots, with the great Aussie &amp;quot;bush tucker&amp;quot; Nut, and dip it in Chocolate.&amp;nbsp; Now if only they produced a low-sugar version for Diabetics .... well I can dream can&amp;#39;t I.&lt;/p&gt;
&lt;p&gt;Speaking of Dream Products, as you may know I&amp;#39;ve been a Delphi 7 hold-out for some time.&amp;nbsp; Full disclosure: CodeGear are pro-active at making sure all 3rd parties have a license of the latest products, those go straight to our VCL Dev team which is how we can be so quick to release compatible updates when CodeGear ships a new release.&amp;nbsp; Personally I still use D7 for Native Development, although I did use D2009 recently to do the CodeRage presentations and it really did feel
like a better Delphi 7.&amp;nbsp; Lately
I&amp;#39;ve been trialing Delphi 2010 and that to me feels like a better Delphi 2009.&lt;/p&gt;
&lt;p&gt;We have probably all heard of the &amp;quot;Even numbered Delphi&amp;quot; myth, and from most reviews it&amp;#39;s clear that Delphi went through a tough patch earlier this decade, but it seems to me that all the releases since Borland sold CodeGear to Embarcadero have shown significant incremental quality improvements.&amp;nbsp; I can&amp;#39;t say that I need Touch or Gestures but with Win 7&amp;#39;s release this week they are certainly timely, Plenty of minor usability features in the IDE like IDE insight are a whole bunch of &amp;quot;nice to have&amp;quot; and I&amp;#39;d personally like to start seeing what I can do with the new RTTI. &lt;/p&gt;
&lt;p&gt;Of course Developer Express will continue to make components for whichever versions of Delphi most of our customers use (currently 6,7,2005,2006,2007,2009,2010 for &lt;a href="http://community.devexpress.com/blogs/dxram/archive/2009/10/16/more-new-vcl-controls-v47-and-a-new-expresslayout-control.aspx"&gt;Build 47&lt;/a&gt; ), but I&amp;#39;m personally going to get with the times (although I will miss CodeRush).&lt;/p&gt;
&lt;p&gt;BTW: If you think that CodeGear are adding features to Delphi that aren&amp;#39;t relevant to you, let them know by spending 30 mins on their &lt;a href="https://forums.embarcadero.com/thread.jspa?threadID=27000"&gt;Delphi 2010 Survey&lt;/a&gt;. Personally I put a vote toward Native cross-compilation for the IPhone, even if that may not specifically be an opportunity for DX, I reckon that would be a must upgrade feature for me personally and I was glad to see it on the Poll rather than having to write it in.&amp;nbsp; Disagree with me?&amp;nbsp; Go vote on the poll for what features you want CodeGear to spend their limited resources on.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=281283" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>More new VCL controls - v47 and a new ExpressLayout Control</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/10/16/more-new-vcl-controls-v47-and-a-new-expresslayout-control.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/10/16/more-new-vcl-controls-v47-and-a-new-expresslayout-control.aspx</id><published>2009-10-16T14:25:00Z</published><updated>2009-10-16T14:25:00Z</updated><content type="html">&lt;p&gt;We&amp;#39;re in the final stages of preparing our latest VCL Component Suites v47 for release, including a brand new major release of &lt;i&gt;ExpressLayout Control&lt;/i&gt; v2, minor updates to &lt;i&gt;ExpressSkins library&lt;/i&gt;, &lt;i&gt;ExpressQuantumTreeList&lt;/i&gt; and &lt;i&gt;ExpressBars&lt;/i&gt;, a new beta of the upcoming major update to the &lt;i&gt;ExpressPrinting library&lt;/i&gt; v4 (including &lt;a href="http://community.devexpress.com/blogs/dxram/archive/2009/07/10/PDFs_2C00_-VCL-applications-and-more-Revolutionary-UIs.-.aspx"&gt;new PDF features&lt;/a&gt;), and of course we&amp;#39;ve fixed many bugs and implemented minor features suggested by customers..&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Active VCL Subscribers as always will get the first look - we are planning to make available a release candidate today (Friday) with a view to publish a release version of the entire subscription next week assuming no show stoppers.&amp;nbsp; Active Subscribers will also be first to get the release edition in their Client Center accounts as soon as it is released.&amp;nbsp; Shortly after we expect to have &lt;i&gt;ExpressLayout Contro&lt;/i&gt;l v2 available for independent purchase.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;So what is this &lt;i&gt;ExpressLayout&lt;/i&gt; thingy then? &lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Well it is a container for applying consistent UI rules, enabling run-time customization, and automating the creation of clean crisp resolution independent UIs.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;I&amp;#39;ve spoken before about just how important &lt;a href="http://community.devexpress.com/blogs/dxram/archive/2009/07/15/run-time-customization-at-a-fraction-of-the-cost.aspx"&gt;Run-time customization&lt;/a&gt; can be.&amp;nbsp; But the feature that everyone loves is the ability to automatically layout UIs with consistent rules, and have the application just look good no matter how your form is re-sized.&lt;/p&gt;
&lt;p&gt;&lt;i&gt;ExpressLayout Control&lt;/i&gt; v2 includes a bunch of new features including sizing handles on individual controls.&amp;nbsp; If you re-size an individual control every container it is in and all it&amp;#39;s linked controls (like labels) automatically adjust.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/Item_and_Group_Sizing.gif" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The &lt;i&gt;ExpressLayout Control&lt;/i&gt; works with many regular Delphi controls, but works best with our own &lt;i&gt;ExpressEditors&lt;/i&gt; so we plan to include all the Editors from the &lt;i&gt;&lt;a href="http://www.devexpress.com/Products/VCL/ExQuantumGrid/key_dataeditors.xml"&gt;ExpressEditors library&lt;/a&gt;&lt;/i&gt; into the &lt;i&gt;ExpressLayout Control&lt;/i&gt; v2.&amp;nbsp; We also have added auxiliary layout items like custom empty spaces, splitters, labels, and separators that you can add to your application using the Customization form.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/AuxiliaryItems.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;You can drop an empty space between two other controls.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;img src="http://community.devexpress.com/blogs/dxram/EmptySpaceItem.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Select it ...&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/EmptySpaceItem1.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Re-size it ...&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/EmptySpaceItem2.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;and you will have padding now between your controls that is honored no matter how you re-size your application.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/EmptySpaceItem3.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;A Separator is a visual UI element that you can place between two elements ... &amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/SeparatorItem1.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;and it shows up as a vertical or horizontal line.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/SeparatorItem2.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;A Splitter control takes that one step further to allow your end users to re-size layout elements.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/SplitterItem1.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Just drop it between two adjacent elements.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/SplitterItem2.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;... and your form will get a splitter control that your end users can use to re-size layout elements with the layout control making sure that all controls respect your consistent UI rules.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/SplitterItem3.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Finally we have a Label Item which is a visual control that works as a separator that you can put some text on to give your UI additional sign-posting.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/LabelItem1.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Just drop it on your form between layout elements, give it some text in the Customization Form.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/LabelItem2.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Put it all together and you have a tweaked UI that follows all the consistency rules with re-sizability, sign-posting, and custom white space.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/Result.png" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;Finally we have added the ability to optionally collapse layout groups using a + and - button in the top right corner.&amp;nbsp; We&amp;#39;ve also exposed the ability to add your own custom buttons (such as the Orange Close button in this example) so you can add your own custom actions for groups.&lt;/p&gt;
&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/CollapsibleGroups_GroupButtons.gif" border="0" alt="" /&gt;&lt;/p&gt;
&lt;p&gt;The &lt;i&gt;ExpressLayout Control&lt;/i&gt; v2 due for release next week, should hopefully be a very powerful addition to your toolbox.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=280219" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>Grids - Center of the data universe?</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/10/05/grids-center-of-the-data-universe.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/10/05/grids-center-of-the-data-universe.aspx</id><published>2009-10-05T13:43:00Z</published><updated>2009-10-05T13:43:00Z</updated><content type="html">&lt;p&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/grid14Small.jpg" border="0" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Here at Developer Express we have a lot to thank the humble Grid for.&amp;nbsp; As you probably know the QuantumGrid was our first really popular Component Suite, and we have been able to extend that with a broad range of embeddable editors, and ultimately take the grid concept in many different directions from the 90 degree transform of the Vertical Grid, the hierarchical TreeList, to the &amp;quot;Slice-n-Dice&amp;quot; of the Pivot Grid, and even the sparse form of the Spreadsheet.&amp;nbsp; From our start with VCL and ActiveX we&amp;#39;ve brought many of these to new platforms like Winforms, ASP.NET, WPF and soon Silverlight. &amp;nbsp; &lt;/p&gt;
&lt;p&gt;The QuantumGrid these days has almost as many lines of code as the VCL itself, has undergone over a decade of refinement,
and offers drop in functionality that is I reckon unequaled by any
other Component suite on the market.
&lt;/p&gt;
&lt;p&gt;In some ways we probably have a grid oriented view on development.&amp;nbsp; Sure we have other popular suites like Reporting and Menu Bars and of course CodeRush, but the grid lies at the core of many of the applications our customers tell us they build.&amp;nbsp; Rather than trying to work out what data a user may want to see, the QuantumGrid allows a developer to offer up all the data and let the customer sort/group/filter using familiar UIs (from Access, Excel and Outlook) into whatever shape they need, and then with one line of code use the PrintingSystem to turn it into a custom report.&amp;nbsp; It&amp;#39;s pretty powerful stuff.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I remember the first time I used a Devexpress suite, 3 years before I was to join the company, I was working on tools for analyzing Risk.&amp;nbsp; We had to show a lot of data from thousands of individual financial instruments.&amp;nbsp; We used the QuantumGrid because it gave our customers the ability to sort/group/filter that large amount of data.&amp;nbsp; Sure we could have built a custom grid from scratch, and added new ways to show the data as customers were able to identify their requirements and iterate through many request-implement-deliver cycles ... or we could just embed the QuantumGrid and focus on the math. &lt;/p&gt;
&lt;p&gt;So what is your QuantumGrid story?&amp;nbsp; Are Grids that important to your development?&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=278611" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>What I learned at CodeRage</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/09/19/what-i-learned-at-coderage.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/09/19/what-i-learned-at-coderage.aspx</id><published>2009-09-19T08:34:00Z</published><updated>2009-09-19T08:34:00Z</updated><content type="html">&lt;p&gt;Last week&amp;#39;s virtual &lt;a href="http://conferences.embarcadero.com/coderage"&gt;CodeRage developer conference&lt;/a&gt; was a good place to hang out if you are a Delphi developer.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://conferences.embarcadero.com/coderage/sessions"&gt;&lt;img src="http://conferences.embarcadero.com/coderage/article/39912/images/39912/02000001.jpg" height="150" width="680" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve been doing Delphi conferences since 1995 when I lived in Australia and traveled to BorCon in the US ... which meant I would be on a plane for 14 hours each way, and several timezones away from my paying clients for over a week. &lt;/p&gt;
&lt;p&gt;Despite that, BorCon was the highlight of my professional year.&amp;nbsp; I was able to network among peers and potential clients.&amp;nbsp; It was a good chance to see what 3rd party component and tools vendors had done in the past year, and to hear how CodeGear had move the platform forward in the same time.&amp;nbsp; It was also good to be able to meet up with old friends who were also Delphi developers, and feed their addictions to &lt;a href="http://en.wikipedia.org/wiki/Tim_Tam"&gt;Tim-Tams&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Many of us have since moved to other platforms following evolving demand for the kind of software development we do, although as I mentioned in a previous post &lt;a href="http://community.devexpress.com/blogs/dxram/archive/2009/07/31/delphi-ain-t-dead-yet.aspx"&gt;Delphi aint dead yet&lt;/a&gt; and I noticed a lot of long time Delphi guys at CodeRage in the audience as well as doing presentations. &lt;/p&gt;
&lt;p&gt;You can find replays of all the CodeRage sessions at &lt;a href="http://conferences.embarcadero.com/coderage/sessions"&gt;http://conferences.embarcadero.com/coderage/sessions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Check out Cary Jensens presentation on &lt;a href="http://cc.embarcadero.com/javascript/play.html?u=y&amp;amp;w=1024&amp;amp;h=768&amp;amp;s=45.3MB&amp;amp;f=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27304%26file%3dsynchronization.swf&amp;amp;d=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27304"&gt;&lt;b&gt;9 Thread Synchronization Options in Delphi Compared&lt;/b&gt;&lt;/a&gt; which was an excellent summary of the array of options available to Delphi developers. &lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Bob Swart did an interesting presentation on building &lt;a href="http://cc.embarcadero.com/javascript/play.html?u=y&amp;amp;w=1024&amp;amp;h=768&amp;amp;s=24.4MB&amp;amp;f=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27271%26file%3dSmartClients.swf&amp;amp;d=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27271"&gt;&lt;b&gt;Smart Clients with Delphi and RemObjects&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Ray Konopka always delivers a professional presentation, and&amp;nbsp; &lt;a href="http://cc.embarcadero.com/javascript/play.html?u=y&amp;amp;w=1024&amp;amp;h=768&amp;amp;s=16.5MB&amp;amp;f=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27283%26file%3dVclDesigners.swf&amp;amp;d=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27283"&gt;&lt;b&gt;Creating Custom VCL Component Designers&lt;/b&gt;&lt;/a&gt; was no different.&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;You can find mine here&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt; &lt;a href="http://cc.embarcadero.com/javascript/play.html?u=y&amp;amp;w=1024&amp;amp;h=768&amp;amp;s=34.9MB&amp;amp;f=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27277%26file%3dDevExpressTour.swf&amp;amp;d=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27277"&gt;&lt;b&gt;Tour through DevExpress VCL Suites&lt;/b&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p style="padding-left:30px;"&gt;&lt;b&gt;&lt;a href="http://cc.embarcadero.com/javascript/play.html?u=y&amp;amp;w=1024&amp;amp;h=768&amp;amp;s=52.2MB&amp;amp;f=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27257%26file%3dSpecialization.swf&amp;amp;d=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27257"&gt;The Technology of the QuantumGrid&lt;/a&gt;&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Apparently the most watched was &lt;a href="http://cc.embarcadero.com/javascript/play.html?u=y&amp;amp;w=1024&amp;amp;h=768&amp;amp;s=50.5MB&amp;amp;f=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27244%26file%3dDanielMagin_DelphiAndSubversion.swf&amp;amp;d=http%3a%2f%2fcc.embarcadero.com%2fdownload.aspx%3fid%3d27244"&gt;&lt;b&gt;Delphi and Subversion&lt;/b&gt;&lt;/a&gt; which I&amp;#39;m just downloading now to watch later.&amp;nbsp; The other day I turned a Windows Home Server into my personal Subversion server for my .NET development using AnkhSVN to integrate Subversion support into Visual studio 2008.&amp;nbsp; I&amp;#39;d like to add integrated Delphi IDE support as well (I&amp;#39;m currently using Tortoise to integrate Subversion into explorer).&lt;/p&gt;
&lt;p&gt;So which presentations did you attend or download?&amp;nbsp; Any recommendations?&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=276847" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="CodeRage VCL" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/CodeRage+VCL/default.aspx" /></entry><entry><title>Technology of the QuantumGrid - Source</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/09/19/technology-of-the-quantumgrid-source.aspx" /><link rel="enclosure" type="application/x-zip-compressed" length="64530" href="http://community.devexpress.com/blogs/dxram/attachment/276838.ashx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/09/19/technology-of-the-quantumgrid-source.aspx</id><published>2009-09-19T05:56:00Z</published><updated>2009-09-19T05:56:00Z</updated><content type="html">&lt;p&gt;In my last blog post, I spoke of how the QuantumGrid was able to &lt;a href="http://community.devexpress.com/blogs/dxram/archive/2009/09/07/technology-of-the-quantumgrid-object-inspector-tricks.aspx"&gt;implement&amp;nbsp;selectable&amp;nbsp;subcomponents&lt;/a&gt;&amp;nbsp;to&amp;nbsp;add a bunch of properties, without contributing to a noisy experience in the&amp;nbsp;Object Inspector.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I&amp;nbsp;presented in my CodeRage session a way to do that for their own components, let me show how that works (sample code attached).&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I&amp;#39;m going to build an example using a trivial component as the parent container and two trivial persistent classes as child delegates.&amp;nbsp; Firstly make a Project Group and add two packages, a run-time only one called cxSpecializedComponent and a design-time only one called dclSpecializedComponent.&amp;nbsp; When building components I usually add a test project (TestSpecializedComponent.dpr) with a simple form that uses the control I am building.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You may recognize the naming convention as the one used by Developer Express in our cross platform components.&amp;nbsp; This trick will work for Kylix as well as Delphi.&amp;nbsp; At CodeRage I was using Delphi 2009 (and the screen shots from my last blog post was using Delphi 7)&amp;nbsp;but the same trick will work in Delphi 4+ and CBuilder 4+ all the way up to RAD studio 2010.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;The run-time package&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the run-time package we are going to put our parent component &lt;b&gt;TParent&lt;/b&gt;, a base class for all children called &lt;b&gt;TCustomChild&lt;/b&gt;, and two descendants from it called &lt;b&gt;TChildOne&lt;/b&gt; and &lt;b&gt;TChildTwo&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;TParent&lt;/b&gt; must have a property for storing an instance of a &lt;b&gt;TCustomChild&lt;/b&gt;, an instance of its class type and its class name.&amp;nbsp; We will need a class registration mechanism to register all the child classes to and return the type give a class name.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Let&amp;#39;s look at the interface for the run-time package;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;type&lt;br /&gt;&lt;/b&gt;&amp;nbsp; TCustomChild = &lt;b&gt;class&lt;/b&gt;;&amp;nbsp; // Base class for all Child classes&lt;br /&gt;&amp;nbsp; TCustomChildClass = &lt;b&gt;class&lt;/b&gt; &lt;b&gt;of&lt;/b&gt; TCustomChild;&amp;nbsp; // type of the child Base class&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; TParent = &lt;b&gt;class&lt;/b&gt;(TComponent)&lt;br /&gt;&amp;nbsp; &lt;b&gt;private&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FChild: TCustomChild;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FChildClass: TCustomChildClass;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;procedure&lt;/b&gt; SetChildClassName(const Value: &lt;b&gt;String&lt;/b&gt;);&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;function&lt;/b&gt; GetChildClassName: &lt;b&gt;String&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;procedure&lt;/b&gt; SetChildClass(const Value: TCustomChildClass);&lt;br /&gt;&amp;nbsp; &lt;b&gt;public&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;property&lt;/b&gt; ChildClass : TCustomChildClass&amp;nbsp;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read&lt;/b&gt; FChildClass &lt;b&gt;write&lt;/b&gt; SetChildClass;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;procedure&lt;/b&gt; CreateChild; &lt;b&gt;virtual&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;procedure&lt;/b&gt; DestroyChild; &lt;b&gt;virtual&lt;/b&gt;;&lt;br /&gt;&amp;nbsp; &lt;b&gt;published&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;property&lt;/b&gt; ChildClassName : &lt;b&gt;String&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;read&lt;/b&gt; GetChildClassName &lt;b&gt;write&lt;/b&gt; SetChildClassName;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;property&lt;/b&gt; Child : TCustomChild&amp;nbsp;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read&lt;/b&gt; FChild &lt;b&gt;write&lt;/b&gt; FChild;&lt;br /&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; TCustomChild = &lt;b&gt;class&lt;/b&gt;(tPersistent)&lt;br /&gt;&amp;nbsp; &lt;b&gt;private&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FBaseText: &lt;b&gt;String&lt;/b&gt;;&lt;br /&gt;&amp;nbsp; &lt;b&gt;published&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;property&lt;/b&gt; BaseText : String&amp;nbsp;&lt;br /&gt;&lt;b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; read &lt;/b&gt;FBaseText &lt;b&gt;write&lt;/b&gt; FBaseText;&lt;br /&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; TChildOne = &lt;b&gt;class&lt;/b&gt;(TCustomChild)&lt;br /&gt;&amp;nbsp; &lt;b&gt;private&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FOneText: String;&lt;br /&gt;&amp;nbsp; &lt;b&gt;published&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;property&lt;/b&gt; OneText : &lt;b&gt;String&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;read&lt;/b&gt; FOneText &lt;b&gt;write&lt;/b&gt; FOneText;&lt;br /&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; TChildTwo = &lt;b&gt;class&lt;/b&gt;(TCustomChild)&lt;br /&gt;&amp;nbsp; &lt;b&gt;private&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FTwoText: &lt;b&gt;String&lt;/b&gt;;&lt;br /&gt;&amp;nbsp; &lt;b&gt;published&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;property&lt;/b&gt; TwoText : &lt;b&gt;String&lt;/b&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;read&lt;/b&gt; FTwoText &lt;b&gt;write&lt;/b&gt; FTwoText;&lt;br /&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;const&lt;br /&gt;&lt;/b&gt;&amp;nbsp; sChildOne = &amp;#39;Child One&amp;#39;;&lt;br /&gt;&amp;nbsp; sChildTwo = &amp;#39;Child Two&amp;#39;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;function&lt;/b&gt; GetRegisteredChilds : TcxRegisteredClasses;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To do our magic we will expose the &lt;b&gt;TParent&lt;/b&gt;.Child property (which contains an instance of the child class), but give it a drop down affect that sets the class type by it&amp;#39;s name and creates an instance of the child class.&amp;nbsp; It&amp;#39;s all pretty simple to implement, so let&amp;#39;s have a look at some code.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;First the registration machinery, I am using &lt;b&gt;TcxRegisteredClasses&lt;/b&gt; a utility class from a Devex unit called cxClasses, if you don&amp;#39;t have the Express Quantum Grid you will have to build one but the exercise is trivial so I won&amp;#39;t bore you with the details;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;var&lt;br /&gt;&lt;/b&gt;&amp;nbsp; FRegisteredChilds: TcxRegisteredClasses;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;function&lt;/b&gt; GetRegisteredChilds : TcxRegisteredClasses;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; FRegisteredChilds = &lt;b&gt;nil&lt;/b&gt; &lt;b&gt;then&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FRegisteredChilds := TcxRegisteredClasses.Create;&lt;br /&gt;&amp;nbsp; Result := FRegisteredChilds;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;initialization&lt;br /&gt;&lt;/b&gt;&amp;nbsp; GetRegisteredChilds.Register(TChildOne, sChildOne);&lt;br /&gt;&amp;nbsp; GetRegisteredChilds.Register(TChildTwo, sChildTwo);&lt;br /&gt;&lt;b&gt;finalization&lt;br /&gt;&lt;/b&gt;&amp;nbsp; GetRegisteredChilds.Unregister(TChildOne);&lt;br /&gt;&amp;nbsp; GetRegisteredChilds.Unregister(TChildTwo);&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Note we are registering our child classes in the singleton class registration object, and later on we can retrieve the type of any class from its name, that will be used mostly by the design-time editors to complete the magic.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The Children don&amp;#39;t need any implementation, so let&amp;#39;s finish off the run-time unit by implementing &lt;b&gt;TParent&lt;/b&gt;;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;procedure&lt;/b&gt; TParent.CreateChild;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; FChildClass &amp;lt;&amp;gt; nil &lt;b&gt;then&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FChild := FChildClass.Create;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;procedure&lt;/b&gt; TParent.DestroyChild;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; FreeAndNil(FChild);&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;function&lt;/b&gt; TParent.GetChildClassName: &lt;b&gt;String&lt;/b&gt;;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; FChild = nil &lt;b&gt;then&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := &amp;#39;&amp;#39;&lt;br /&gt;&amp;nbsp; &lt;b&gt;else&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := FChild.ClassName;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;procedure&lt;/b&gt; TParent.SetChildClass(&lt;b&gt;const&lt;/b&gt; Value: TCustomChildClass);&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; FChildClass &amp;lt;&amp;gt; Value &lt;b&gt;then&lt;br /&gt;&lt;/b&gt;&amp;nbsp; &lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; DestroyChild; &amp;nbsp;&lt;i&gt;// remove the preexisting Child Instance&lt;br /&gt;&lt;/i&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; FChildClass := Value;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; CreateChild;&amp;nbsp;&amp;nbsp; &lt;i&gt;// create a new Child Instance&lt;br /&gt;&lt;/i&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;procedure&lt;/b&gt; TParent.SetChildClassName(&lt;b&gt;const&lt;/b&gt; Value: &lt;b&gt;String&lt;/b&gt;);&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; ChildClass := TCustomChildClass(GetRegisteredChilds.FindByClassName(Value));&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The important thing to note in the implementation of the parent is that by setting the &lt;b&gt;ChildClassName&lt;/b&gt; property the &lt;b&gt;ChildClass&lt;/b&gt; property holding the class type of the Child to be used is created and an instance of the selected class constructed in the &lt;b&gt;Child&lt;/b&gt; property (And if one was there previously it was destructed first).&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;The design-time package&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The design-time package will be &amp;quot;installed&amp;quot; in the palette and will include a &lt;b&gt;Register&lt;/b&gt; procedure that registers our component, and 2 property editors that will do our magic.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;All you need in the interface is a &lt;b&gt;register&lt;/b&gt; procedure.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;procedure&lt;/b&gt; Register;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In the implementation you will need to access CodeGears design-time units, in versions of Delphi from 6 onwards they were not available in source or in run-time packages so you will have to require designide.dcp in your design-time package.&amp;nbsp; Here is the uses clause for the implementation of the Design-time unit.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;uses&lt;br /&gt;&lt;/b&gt;&amp;nbsp; Types, DesignIntf, DesignEditors, VCLEditors,&lt;br /&gt;&amp;nbsp; DsgnIntf, TypInfo, Classes,&lt;br /&gt;&amp;nbsp;&amp;nbsp;SpecializedComponent, &lt;em&gt;// our run-time component&lt;br /&gt;&lt;/em&gt;&amp;nbsp; cxClasses;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;em&gt;// for TcxRegisteredClasses generic class registration class&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we need to make a Class Property editor descendant that tells the &lt;b&gt;TParent&lt;/b&gt; component to construct a new child class by giving it a class name chosen from a drop down.&amp;nbsp; The prototype for that class will look like this;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;// Property editor to provide a dropdown selection of registered classes and expose nested properties&lt;br /&gt;&lt;/em&gt;&lt;b&gt;type&lt;br /&gt;&lt;/b&gt;&amp;nbsp; TParentChildProperty = &lt;b&gt;class&lt;/b&gt;(TClassProperty)&lt;br /&gt;&amp;nbsp; &lt;b&gt;protected&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;function&lt;/b&gt; HasSubProperties: &lt;b&gt;Boolean&lt;/b&gt;;&lt;br /&gt;&amp;nbsp; &lt;b&gt;public&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;function&lt;/b&gt; GetAttributes: TPropertyAttributes; &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;function&lt;/b&gt; GetValue: &lt;b&gt;String&lt;/b&gt;; &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;procedure&lt;/b&gt; GetValues(Proc: TGetStrProc); &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;procedure&lt;/b&gt; SetValue(&lt;b&gt;const&lt;/b&gt; Value: &lt;b&gt;String&lt;/b&gt;); &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now our property is going to have a Jekyll and Hyde personality change depending on whether we have an instance in the &lt;b&gt;Child&lt;/b&gt; property.&amp;nbsp; If we don&amp;#39;t have a &lt;b&gt;Child&lt;/b&gt; instance then it will be a drop down property editor (a regular Class Editor where you select a class from a given list), if we do it will be a subcomponent editor.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;HasSubProperties&lt;/b&gt; method will be used to gate that personality change.&amp;nbsp; If we already have a Child class instance then &lt;b&gt;HasSubProperties&lt;/b&gt; will return true, but if we have selected multiple components we need to check them all.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;function&lt;/b&gt; TParentChildProperty.HasSubProperties: &lt;b&gt;Boolean&lt;/b&gt;;&lt;br /&gt;&lt;b&gt;var&lt;br /&gt;&lt;/b&gt;&amp;nbsp; I: Integer;&lt;br /&gt;&lt;b&gt;begin&lt;/b&gt; &lt;em&gt;// do all components being edited have the ChildClass set&lt;br /&gt;&lt;/em&gt;&amp;nbsp; &lt;b&gt;for&lt;/b&gt; I := 0 &lt;b&gt;to&lt;/b&gt; PropCount - 1 &lt;b&gt;do&lt;br /&gt;&lt;/b&gt;&amp;nbsp; &lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := TParent(GetComponent( I)).Child &amp;lt;&amp;gt; &lt;b&gt;nil&lt;/b&gt;;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; &lt;b&gt;not&lt;/b&gt; Result &lt;b&gt;then&lt;/b&gt; Exit;&lt;br /&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&lt;br /&gt;&amp;nbsp; Result := &lt;b&gt;True&lt;/b&gt;;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The &lt;b&gt;GetAttributes&lt;/b&gt; method actually does the work of setting up the different persionalities.&amp;nbsp; Note: paVolatileSubProperties is available in Delphi6 and up only, but the property editor will function just fine in earlier IDEs (where all sub properties where assumed to be volatile).&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;function&lt;/b&gt; TParentChildProperty.GetAttributes: TPropertyAttributes;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; Result := inherited GetAttributes;&lt;br /&gt;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; &lt;b&gt;not&lt;/b&gt; HasSubProperties &lt;b&gt;then&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Exclude(Result, paSubProperties);&lt;br /&gt;&amp;nbsp; Result := Result - [paReadOnly] + [paValueList, paSortList, paRevertable, paVolatileSubProperties];&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Now we need to populate the drop down list from our Component registration object.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;procedure&lt;/b&gt; TParentChildProperty.GetValues(Proc: TGetStrProc);&lt;br /&gt;&lt;b&gt;var&lt;br /&gt;&lt;/b&gt;&amp;nbsp; I: Integer;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; &lt;b&gt;for&lt;/b&gt; I := 0 &lt;b&gt;to&lt;/b&gt; GetRegisteredChilds.Count - 1 &lt;b&gt;do&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Proc(GetRegisteredChilds.Descriptions[ I ]);&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;When a value is selected from the drop down it will be a class name.&amp;nbsp; We then have to tell the &lt;b&gt;TParent&lt;/b&gt; in the Object inspector to go ahead and make one of those and put it in its &lt;b&gt;Child&lt;/b&gt; property.&amp;nbsp; Then we call Modified to tell the object inspector to redraw this editor, and in doing that &lt;b&gt;getAttributes&lt;/b&gt; will be called and the new personality established.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;procedure&lt;/b&gt; TParentChildProperty.SetValue(&lt;b&gt;const&lt;/b&gt; Value: &lt;b&gt;String&lt;/b&gt;);&lt;br /&gt;&lt;b&gt;var&lt;br /&gt;&lt;/b&gt;&amp;nbsp; ChildClass: TCustomChildClass;&lt;br /&gt;&amp;nbsp; I: Integer;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; ChildClass := TCustomChildClass(GetRegisteredChilds.FindByClassName(Value));&lt;br /&gt;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; ChildClass = nil &lt;b&gt;then&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ChildClass := TCustomChildClass(GetRegisteredChilds.FindByDescription(Value));&lt;br /&gt;&amp;nbsp; &lt;b&gt;for&lt;/b&gt; I := 0 &lt;b&gt;to&lt;/b&gt; PropCount - 1 &lt;b&gt;do&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; TParent(GetComponent(I)).ChildClass := ChildClass;&lt;br /&gt;&amp;nbsp; Modified;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;We flesh out the editor by giving it the text we want to display when it has a valid class.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;function&lt;/b&gt; TParentChildProperty.GetValue: string;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; &lt;b&gt;if&lt;/b&gt; HasSubProperties &lt;b&gt;then&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := GetRegisteredChilds.GetDescriptionByClass(TCustomChild(GetOrdValue).ClassType)&lt;br /&gt;&amp;nbsp; &lt;b&gt;else&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; Result := &amp;#39;&amp;#39;;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Finally, you need to expose the components and property editors to the IDE in the register procedure.&amp;nbsp; Note we are actually &lt;b&gt;removing&lt;/b&gt; the property ChildClassName from the Object Inspector by giving it a nil editor.&amp;nbsp; We do this because with the &lt;b&gt;TParentChildProperty&lt;/b&gt; editor we are serving a dual purpose of selecting the class type and fixing it&amp;#39;s sub-properties in the object inspector.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;procedure&lt;/b&gt; Register;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; RegisterComponents(&amp;#39;RAM&amp;#39;, [TParent]);&lt;br /&gt;&amp;nbsp; RegisterPropertyEditor(TypeInfo(&lt;b&gt;String&lt;/b&gt;), TParent, &amp;#39;ChildClassName&amp;#39;, &lt;b&gt;nil&lt;/b&gt;);&lt;br /&gt;&amp;nbsp; RegisterPropertyEditor(TypeInfo(TCustomChild), TParent,&amp;#39;Child&amp;#39;, TParentChildProperty);&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;Can I add child events in the same way?&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;At Developer Express we have built utility classes to enable events to be cascaded in the same way properties are.&amp;nbsp; This is of course a proprietary technology and can not be redistributed; however for completeness I will show how to use these classes.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;If you are building components for developers who already have the Express Quantum Grid 4, for example custom editors that use the Express Editors 4 architecture, you can require the package dclcxLibraryVCLXX where XX is the compiler initial (D,C,K) and the version (ie; D4, C5, K3) and you will be able to descend from our nested event editors.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You will have to use the unit &lt;b&gt;cxPropEditors&lt;/b&gt; in the design-time unit.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;{$IFDEF DELPHI6}&lt;br /&gt;&amp;nbsp; Types, DesignIntf, DesignEditors,&lt;br /&gt;&amp;nbsp; {$IFDEF VCL}&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VCLEditors,&lt;br /&gt;&amp;nbsp; {$ENDIF}&lt;br /&gt;{$ELSE}&lt;br /&gt;&amp;nbsp; DsgnIntf,&lt;br /&gt;{$ENDIF}&lt;br /&gt;&amp;nbsp; TypInfo,&lt;br /&gt;&amp;nbsp; Classes,&lt;br /&gt;&amp;nbsp; SpecializedComponent,&lt;br /&gt;&amp;nbsp; cxPropEditors,&amp;nbsp;&amp;nbsp; // for NestedEvent property editor classes&lt;br /&gt;&amp;nbsp; cxClasses;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // for TcxRegisteredClasses generic class registration class&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;In your &lt;b&gt;TParent&lt;/b&gt; you will have to add a dummy editor to use as a placeholder for the location that the events of the child will be hosted.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; property ChildEvents: TNotifyEvent read FSubClassEvents write FSubClassEvents;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;The design-time editor is quite simple with the Developer Express , simply descend from the &lt;b&gt;TcxNestedEventProperty&lt;/b&gt; editor and override the GetInstance method to return a reference to the Child component being edited.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;// Property Editor to expose nested events from persistent sub components&lt;br /&gt;&lt;/em&gt;&lt;b&gt;type&lt;br /&gt;&lt;/b&gt;&amp;nbsp; TParentSpecilizationEventsProperty = &lt;b&gt;class&lt;/b&gt;(TcxNestedEventProperty)&lt;br /&gt;&amp;nbsp; &lt;b&gt;protected&lt;br /&gt;&lt;/b&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;b&gt;function&lt;/b&gt; GetInstance: TPersistent; &lt;b&gt;override&lt;/b&gt;;&lt;br /&gt;&amp;nbsp; &lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;function TParentSpecilizationEventsProperty.GetInstance: TPersistent;&lt;br /&gt;&lt;b&gt;begin&lt;br /&gt;&lt;/b&gt;&amp;nbsp; Result := TParent(GetComponent(0)).Child;&lt;br /&gt;&lt;b&gt;end&lt;/b&gt;;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;And finally register it for the dummy event made earlier.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; RegisterPropertyEditor(TypeInfo(TNotifyEvent),&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TParent,&amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;#39;ChildEvents&amp;#39;,&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; TParentSpecilizationEventsProperty);&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Next time you rebuild your design-time package, you will see any events in the Child component classes exposed in the &lt;b&gt;TParent&lt;/b&gt; object inspector.&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;Can I freely use this technique?&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;You are welcome to use this technique in your components as long as you do not redistribute any Developer Express units.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;To build one set of source for all platforms I suggest building a file similar to the cxGridVer.inc file from ExpressQuantumGrid 4 which will map versions into conditional definitions that will allow you to build uses statements that work correctly for all platforms.&amp;nbsp; You only need this for the Design-time unit.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;unit&lt;/b&gt; RegSpecializedComponent;&lt;/p&gt;
&lt;p&gt;{$I cxGridVer.inc}&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;interface&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;procedure&lt;/b&gt; Register;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;implementation&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;uses&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;{$IFDEF DELPHI6}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; Types, DesignIntf, DesignEditors,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp; {$IFDEF VCL}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; VCLEditors,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&amp;nbsp; {$ENDIF}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;{$ELSE}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; DsgnIntf,&lt;/p&gt;
&lt;p&gt;&lt;em&gt;{$ENDIF}&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp; TypInfo,&lt;/p&gt;
&lt;p&gt;&amp;nbsp; Classes,&lt;/p&gt;
&lt;p&gt;&amp;nbsp; SpecializedComponent,&lt;/p&gt;
&lt;p&gt;&amp;nbsp; cxClasses;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // for TcxRegisteredClasses generic class registration class&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;&lt;/em&gt;&lt;/h2&gt;
&lt;h2&gt;&lt;em&gt;Conclusion&lt;/em&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;This gives components a very powerful in-place delegation mechanism that will allow you to partition your components into container classes and behavior classes that the containers delegate to, so palette components can have multiple behaviors allowing you to reduce the palette clutter without reducing functionality.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve attached some source code, including code to implement events if you have the Quantm Grid.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=276838" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="VCL QuantumGrid" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/VCL+QuantumGrid/default.aspx" /></entry><entry><title>Technology of the QuantumGrid - Object Inspector tricks</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/09/07/technology-of-the-quantumgrid-object-inspector-tricks.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/09/07/technology-of-the-quantumgrid-object-inspector-tricks.aspx</id><published>2009-09-07T14:28:00Z</published><updated>2009-09-07T14:28:00Z</updated><content type="html">&lt;p&gt;I&amp;#39;m presenting a couple of sessions at CodeRage this week.&amp;nbsp; The first is, called &lt;b&gt;&amp;quot;The technology of the Quantum Grid&amp;quot;&lt;/b&gt; which will go live at &lt;i&gt;1pm PDT, Tuesday Sept 8th&lt;/i&gt;.&lt;/p&gt;
&lt;p&gt;This session is about how the QuantumGrid (since v4) does some Object Inspector magic to enable developers to specialize components by allowing you to dynamically add sub-components - it&amp;#39;s a very nice way of extending a class in many diverse directions while keeping the property noise to a minimum.&lt;/p&gt;
&lt;p&gt;You can see this happening when you add a column to a grid and select its Properties property.&amp;nbsp; To see this drop an empty grid on a form, click on &amp;lsquo;Customization&amp;rsquo; and add a column to the GridDBTableView and click on it and you will see the Column object in the Object Inspector. &lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;a href="http://community.devexpress.com/blogs/dxram/ObjectInspectorColumn.bmp"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/ObjectInspectorColumn.bmp" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Notice that the Properties Property is a regular drop down editor, this is the site that an editor class for all cells in this column will be defined.&amp;nbsp; If you click the drop down button you will see the list of available editor classes that can be used, these can be editors from the Express Editors package, or even your own descendants that you have registered with the Grid architecture.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/dxram/ObjectInspectorColumnProperties.bmp"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/ObjectInspectorColumnProperties.bmp" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Now if you actually select a class, let&amp;rsquo;s say the CalcEdit class, something special happens to the Properties property.&amp;nbsp; It changes into a subcomponent property of the class that was selected in the Dropdown. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/dxram/ObjectInspectorColumnCalcEdit.bmp"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/ObjectInspectorColumnCalcEdit.bmp" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;In this example we now have the class name CalcEdit in the Properties property and since this is now a subcomponent property we also have all the properties (and events if you look at the events page) specific to just that class.&amp;nbsp; In effect we have a container class called TcxGridDBColumn that we can specialize with any of a number of utility classes simply my selecting the type from a drop down.&lt;br /&gt;&lt;br /&gt;If you were to drop down and select a different element, say a CurrencyEdit you would then see all the properties and events specific to that class.&lt;br /&gt;&lt;br /&gt;This is a very powerful way to build component specialization by delegation to contained classes, and represents a new way of using the Delphi Object Inspector to improve in place customization of classes, and reduce the clutter of components in the Delphi Palette.&amp;nbsp; Now you don&amp;rsquo;t have to have different column classes for each type of Editor, you have just one generic column class that can embed and delegate to custom editors.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Want to add the same kind of functionality to your own components?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;Come to my CodeRage session at &lt;i&gt;1pm PDT, on Tuesday the 8th of September&lt;/i&gt; (sign up &lt;a href="http://conferences.embarcadero.com/coderage"&gt;here&lt;/a&gt; ) ... and I&amp;#39;ll show you how. &lt;img src="http://community.devexpress.com/emoticons/emotion-11.gif" alt="Cool" /&gt;&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=275577" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="CodeRage VCL" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/CodeRage+VCL/default.aspx" /></entry><entry><title>CodeRage - might be the future of Developer Conferences</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/09/05/coderage-might-be-the-future-of-developer-conferences.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/09/05/coderage-might-be-the-future-of-developer-conferences.aspx</id><published>2009-09-05T13:27:00Z</published><updated>2009-09-05T13:27:00Z</updated><content type="html">&lt;p&gt;CodeGear&amp;#39;s &lt;a href="http://conferences.embarcadero.com/coderage"&gt;CodeRage&lt;/a&gt; event next week is a virtual Developer Conference - Really!.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Speakers record their presentations in advance using TechSmiths excellent &lt;a href="http://www.techsmith.com/camtasia.asp"&gt;Camtasia&lt;/a&gt; (which is the same technology we use to record for tv.Devexpress.com ), the presentations are produced on a schedule from CodeGears web site and Speakers and attendees are able to mingle after the presentation for a Q&amp;amp;A session using Live Meeting.&amp;nbsp; I have two presentations, one a tour through the suites of the DevExpress VCL Subscription and the other a look into some of the technology of the QuantumGrid.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Even if you don&amp;#39;t use Delphi, the conference is a chance to see what the state of the art is in Prism (The 1st class .NET language based on Delphi) and hear a different perspective on the same issues that face all developers - and the price (Free) can&amp;#39;t be beat.&lt;/p&gt;
&lt;p&gt;The only downside for me is that Speakers have to have their presentation &amp;quot;in the can&amp;quot; way ahead of time, rather than just stepping on stage with an rough agenda of what you plan to show and cutting into some code and seeing where the presentation and audience feedback take you.&amp;nbsp; I usually prefer those more dynamic presentations (both as attendee and speaker) than ones &amp;quot;on rails&amp;quot; ... but the upside for me is I don&amp;#39;t have to take 2 x 14 hour plane trips in coach, and a week and a half of downtime for a 4 day conference ... not to mention the swine flu.&amp;nbsp; So it&amp;#39;s all good &lt;img src="http://community.devexpress.com/emoticons/emotion-2.gif" alt="Big Smile" /&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href="http://conferences.embarcadero.com/coderage"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/CodeRage.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I may have mentioned I lived in Las Vegas for 4 years while CTO of Developer Express (2002 - 2006), and there are many good things to love about Vegas for a small business ... especially a Technology related one.&amp;nbsp; Cheap direct airfares to everywhere, cheap accomodation, low taxes and every couple of months many of your customers come to town for a conference - and no one does a conference quite like Vegas does whether it be a massive event like CES or a smaller more intimate event like DevConnections.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;It seems however that the era of the large mega conference with 10,000+
software developers all converging upon one spot on the globe for a week,
might be coming to an end - no doubt killed off by the financial times
we live in.&amp;nbsp; Which is going to be tough for destinations like Las Vegas that had become so good at hosting them - I think there will still be some big events like PDC and WWDC, but I suspect more narrowly focused technology conferences will be very tempted to go virtual.&lt;/p&gt;
&lt;p&gt;For those of you who do decide to hang out in my presentations ... see ya next week.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;And for the rest ... see you virtually at a Developer Conference real soon.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=275474" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="delphi vcl CodeGear CodeRage conference" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/delphi+vcl+CodeGear+CodeRage+conference/default.aspx" /></entry><entry><title>DevExpress VCL subscription ready for Delphi 2010 and Windows 7</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/09/05/devexpress-vcl-subscription-ready-for-delphi-2010-and-windows-7.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/09/05/devexpress-vcl-subscription-ready-for-delphi-2010-and-windows-7.aspx</id><published>2009-09-05T02:59:00Z</published><updated>2009-09-05T02:59:00Z</updated><content type="html">&lt;p&gt;Go get your bits ... the DevExpress VCL Subscription v46 is live and ready, willing and able to be installed on a fresh new Delphi 2010.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;The complete &amp;quot;What&amp;#39;s new&amp;quot; is &lt;a href="http://www.devexpress.com/Support/WhatsNew/VCL/files/46.xml"&gt;over here&lt;/a&gt;.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;But for those who like to skip straight to the chase ... the highlights are;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;RAD Studio 2010 support&lt;/li&gt;
&lt;li&gt;Windows 7 Skin (+3 more)&lt;br /&gt;&lt;/li&gt;
&lt;li&gt;PDF output for the Printing System beta bits in the build &lt;/li&gt;
&lt;li&gt;**NEW** Layout Control beta bits in the build &lt;br /&gt;&lt;/li&gt;
&lt;li&gt;&amp;nbsp;... and a handful of other small but usefull feature requests fulfilled&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&amp;#39;ve been playing with the PDF stuff so far (managed to get a demo of the Printing System outputting PDF into my CodeRage presentation for next week) and it&amp;#39;s looking pretty solid.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;I know a bunch of guys are keenly awaiting the next Layout Control too.&amp;nbsp; If you want to install either of the 2 betas, you have to install 46 fully first to get the shipping versions, and then go back and re-run the install in Modify mode to replace the shipping bits with the beta bits &lt;/p&gt;
&lt;p&gt;NB:&amp;nbsp; The new Layout demos assume the shipping Printing System and vice versa so those demos might not build happily if you install both betas at the same time ... I did, but then I&amp;#39;m just the kind of risk taker that installs two beta components and I did it on Delphi 2010 on Windows 7 running in a VM on a Mac ... Mwahahahaha.&lt;/p&gt;
&lt;p&gt;As always let support@devexpress.com know if you notice anything strange with the beta bits.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=275449" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author></entry><entry><title>Delphi! Who goes there?</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/08/25/delphi-who-goes-there.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/08/25/delphi-who-goes-there.aspx</id><published>2009-08-25T00:18:00Z</published><updated>2009-08-25T00:18:00Z</updated><content type="html">&lt;p&gt;I recently posted about the imminent non-death of Delphi ... and
lots of people contacted me to let me know that they too noticed that
Delphi wasn&amp;#39;t going anywhere any time soon.&lt;/p&gt;
&lt;p&gt;Several people pointed out how hard it is to find Delphi developers, or Delphi jobs ... of course these are most likely related ... certainly both are true although I reckon it wouldn&amp;#39;t take long to teach a good C# developer how to become a handy Delphi developer if your project really needs one more Delphi developer, and just about all the C# developers here at Devexpress were once Delphi developers so going the other direction is quite easy too.&amp;nbsp; I guess what I am saying is that I wouldn&amp;#39;t let a lack of exclusively Delphi developers, stop you from using Delphi if it&amp;#39;s the best solution.&amp;nbsp; &amp;nbsp; &lt;/p&gt;
&lt;p&gt;Quite a few people were quite happy to give opinions why Delphi &amp;quot;lost&amp;quot; to C#, missing the point of my post which was that Delphi and C# are both excellent solutions for answering different questions.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;While I am on the topic of that blog post, a few people pointed out some errors in my post.&amp;nbsp; eg: while I spoke of AutomatedQA&amp;#39;s Test Complete I Showed AQTime ... oops sorry about that.&amp;nbsp; AFAIK both are built using Delphi and have high resolution timing made easier by virtue of being built using Delphi.&amp;nbsp; I also referred to Quests Toad product being built using Delphi, and as an example showed a screenie of Toad for SQL Server ... unfortunately it turns out that while some versions of TOAD were built in Delphi, TOAD for SQL Server was built in .NET.&amp;nbsp; Mea Culpa!&lt;/p&gt;
&lt;p&gt;Speaking of blogs about Delphi, I have few more Delphi tech blog posts
planned before I have to get back to blogging about XAF and ASPx and
other DX technologies I am working with.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve also been working with Emil and Amanda to produce scripts for Devexpress.TV screencasts of using our VCL products ... over the past week we&amp;#39;ve been building a few on using the SpellChecker component and you can find those &lt;a href="http://tv.devexpress.com/ExpressSpellChecker.tags"&gt;here&lt;/a&gt;.&amp;nbsp; If these prove popular we hope to produce more VCL screencasts ... so feel free to let other Delphi developers know about these, and let&amp;#39;s see if we can get the view counts above some of the .NET screencasts.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tv.devexpress.com/ExpressSpellChecker.tags"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/SpellCheck.png" border="0" alt="" /&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I&amp;#39;m also planning to present a couple of sessions at &lt;a target="_blank" href="http://conferences.embarcadero.com/coderage"&gt;Embarcaderos&amp;#39;s CodeRage conference&lt;/a&gt; in early September &lt;/p&gt;
&lt;p&gt;&lt;b&gt;PARTNER SOLUTION: The Technology of the QuantumGrid, 1:45pm Sept 8th&lt;/b&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;A
look at how the DevExpress QuantumGrid is able to present radically
different views, and how you can do the same thing in your own
components to expose different UI behaviors at design-time through the
property inspector, and in your applications at runtime.&lt;/p&gt;
&lt;p&gt;and &lt;/p&gt;
&lt;p&gt;&lt;b&gt;PARTNER SOLUTION: DevExpress&lt;/b&gt;&lt;b&gt;, 1pm Sept 9th&lt;br /&gt;&lt;/b&gt;A tour through the broad offering of components from Developer Express.&lt;/p&gt;
&lt;p&gt;You can register for this conference here ...  &lt;a target="_blank" href="http://conferences.embarcadero.com/coderage"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/CodeRage.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Once this goes live I&amp;#39;ll blog more about the code involved in enabling your own components to cascade different views like the Quantum Grid.&lt;/p&gt;
&lt;p&gt;While I&amp;#39;m on the topic of blogging and Delphi ... who else is
blogging about their Delphi development?&amp;nbsp; It&amp;#39;s always interesting and
often surprising to learn more about what developers are doing with
Devexpress components, and I reckon our VCL team will also get a kick
out of how the VCL components that they work on every day are being
used in the real world ... so what are you guys using our VCL components for?&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=270764" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="delphi vcl" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/delphi+vcl/default.aspx" /></entry><entry><title>Delphi ain't dead yet</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/07/31/delphi-ain-t-dead-yet.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/07/31/delphi-ain-t-dead-yet.aspx</id><published>2009-07-31T08:00:00Z</published><updated>2009-07-31T08:00:00Z</updated><content type="html">&lt;p&gt;I&amp;#39;ve heard people talking about the imminent death of &lt;a href="http://www.embarcadero.com/products/delphi/"&gt;Delphi&lt;/a&gt; for 15 years, and the language is only 14.5 years old.&amp;nbsp; It seems that every year or so some wise guy lobs a bomb into the blogosphere like &lt;a href="http://www.hans-eric.com/2007/09/02/rest-in-peace-delphi/"&gt;Rest In Peace Delphi&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;But the reality is that commercial developers are using Delphi every day to build applications that we all probably use every day, and most users probably don&amp;#39;t even know were written in Delphi.&lt;/p&gt;
&lt;p&gt;It is true that over the past 8 years C# has been embraced by a lot of corporate development shops (some ex-Delphi, probably many more ex-Java), because in an homogenous environment where you can control that every deployment will be to Vista with .NET 3.5 pre-installed and a common path to a local SQL server, a C# (or VB.NET) application is the path of least resistance.&amp;nbsp; But there are environments where a native Delphi application maintains a distinct advantage.&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;br /&gt;Shrink Wrapped applications&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;One strength of Delphi is that you compile into a windows executable, and your app just runs on almost every version of Windows built in the past decade.&amp;nbsp; No need for a specific version of an application deployment framework (like .NET) to be available.&lt;br /&gt;&lt;br /&gt;Nick Bradbury, who you may know as the developer of commercial hits like HomeSite and TopStyle uses Delphi and gives probably &lt;a href="http://nick.typepad.com/blog/2009/07/why-i-use-delphi.html"&gt;the best rationale on his blog&lt;/a&gt; for a micro-ISV developing applications choosing Delphi.&lt;br /&gt;&lt;br /&gt;You may have also noticed the recent &lt;a href="http://www.devexpress.com/Home/DeveloperStories/ECSoftware/"&gt;testimonial from EC Software&lt;/a&gt; the developers of Help&amp;amp;Manual who use ExpressBars to build a new revolutionary UI in their Delphi application.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.devexpress.com/Home/DeveloperStories/ECSoftware/"&gt;&lt;img src="http://www.devexpress.com/Home/DeveloperStories/ECSoftware/i/screenshot2.png" alt="" /&gt;&lt;/a&gt; &lt;br /&gt;Delphi is a good choice for creating shrink wrapped applications, or shareware applications for Windows, or just generally any application for deployment to a heterogeneous windows environment.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;b&gt;Real-time applications&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Delphi allows the same kind of &amp;quot;&lt;i&gt;to the metal&lt;/i&gt;&amp;quot; control of hardware as any Microsoft C++ application that would be impossible in a platform abstracted away from the hardware like Java or C#.&lt;br /&gt;&lt;br /&gt;You may know Developer Express is a geographically diverse company, with developers and evangelists spread around the globe (even the outback of Australia).&amp;nbsp; We use email, and IMs to communicate and coordinate but when text is just not rich enough we use Skype which was built in Delphi.&lt;br /&gt;&lt;br /&gt;Test Complete from AutomatedQA was built entirely in Delphi and is able to produce millisecond resolution automated testing for any kind of application development.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.devexpress.com/Home/DeveloperStories/AutomatedQA/index.xml"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/AQtime.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;If you are building applications like these that have to be responsible for the number of CPU cycles they consume, Delphi may be a good choice.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Component based development&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Sure you could build real time apps like Skype, or Shrink Wrapped apps like HomeSite in MicroSoft C++ but if your competitor is using Delphi they will leave you in the dust because they can leverage a broad palette of drop in components from third party companies like Developer Express that will propel an application development closer to completion.&lt;br /&gt;&lt;br /&gt;Imagine if you were trying to compete with &lt;a href="http://www.quest.com/toad-for-data-analysts/"&gt;Quests all purpose Database tool TOAD&lt;/a&gt; using something other than Delphi and didn&amp;#39;t have the luxury of being able to drop in a component like the Express QuantumGrid with all it&amp;#39;s sorting/grouping/filtering and master/detail&amp;nbsp; functionality at your fingertips.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.quest.com/toad-for-data-analysts/"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/Toad.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;It would take a team of developers several years just to build that functionality (http://www.devexpress.com/Products/VCL/ExQuantumGrid/) - and yet any Delphi developer can buy a component for $399 and drop it into his application and be there already.&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;&lt;b&gt;Delphi Community&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Finally there is an entire ecosystem of commercial developers making a good living from supporting Delphi, from CodeGear who are always working to extend the language, to companies like Developer Express building &lt;a href="http://www.devexpress.com/Products/VCL/index.xml%20"&gt;broad offerings of components&lt;/a&gt;, and even companies like Quest and Automated QA building developer tools using Delphi.&amp;nbsp; Here at DevExpress we have a commited team of developers that just love working with, and extending Delphi ... it&amp;#39;s not as big a market as .NET is for us, but many of us were also Delphi developers before .NET and still use Delphi regularly.&lt;br /&gt;&lt;br /&gt;Sure there are some scenarios where .NET has significant advantages over Delphi (Prism, which is both, is a subject for another blog post) - heck there are many scenarios where Ruby on Rails is a better platform than Delphi - but there are definite problems for which Delphi is a good solution.&lt;br /&gt;&lt;br /&gt;Like Mark Twain, it seems that the rumors of the death of Delphi have been greatly exaggerated.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=270655" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="delphi" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/delphi/default.aspx" /></entry><entry><title>Runtime customization, at a fraction of the cost!</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/07/15/run-time-customization-at-a-fraction-of-the-cost.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/07/15/run-time-customization-at-a-fraction-of-the-cost.aspx</id><published>2009-07-15T14:38:00Z</published><updated>2009-07-15T14:38:00Z</updated><content type="html">&lt;p&gt;I may have mentioned that I worked in the USA for for 7 years before returning to Australia, the last 4 of those for Developer Express in Las Vegas.&amp;nbsp; Prior to that I was working on Wall Street building financial analytics applications in Delphi for exposing credit risk in complex financial products.&amp;nbsp; However the job that I first moved to the USA to do, was for a Company in Florida who built an HRMS/Payroll application built in Delph.&amp;nbsp; The job I was brought in to do was to implement Run-time customization.&lt;/p&gt;
&lt;p&gt;Run-time customization is the ability for your customers to tweak the app you deliver them to show customized information.&amp;nbsp; In the case of a Payroll application, lets say one of your customers has some parking spots they assign to employees in their package - you might not want to clutter up your apps employee benefit screens with a field for storing an allocated parking spot for the 99.9% of your customers who don&amp;#39;t package parking.&amp;nbsp; So Run-time customization lets your customer (or a 3rd party consultant) add that field to just their own application.&amp;nbsp; It&amp;#39;s a pretty useful feature to deliver in ERP applications, but it&amp;#39;s tricky to implement and requires some complex and fiddly RTTI (Run Time Type Information) development.&lt;/p&gt;
&lt;p&gt;Back then I knew quite a bit about RTTI, in fact I used to have a regular gig speaking on the topic at Borland conferences, which is how I got this job - but you know there is a much easier way to implement Run-time customization that is not only a lot cheaper than importing an Australian RTTI expert for 12 months, it&amp;#39;s also a lot quicker.&lt;/p&gt;
&lt;p&gt;You&amp;#39;ve probably heard of the &lt;a href="http://devexpress.com/Products/VCL/ExLayoutControl/"&gt;ExpressLayout Control&lt;/a&gt; which is a library for helping you deliver a consistent User Interface.&amp;nbsp; UI consistency, as you probably recognize is the critical
element that differentiates great applications that users love from the
merely functional.&amp;nbsp; What is not so well known is that this library also enables Run-time Customization.&lt;/p&gt;
&lt;p&gt;Check out this *video ...&lt;/p&gt;
&lt;p&gt;&lt;a href="http://tv.devexpress.com/ExpressLayoutCreateCustomize.movie"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/LayoutControlVideo.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;... so with just one line of code you can implement run-time customization that allows your customers to tweak the User Interface of the apps you deliver to them and all you have to do is add a few generic fields (CustomField1, CustomField2, etc) to your table and drop a few hidden controls on the form and let the ExpressLayout Control do the rest of the work.&lt;/p&gt;
&lt;p&gt;At &lt;a href="https://www.devexpress.com/ClientCenter/OrderCenter.aspx?group=VCL"&gt;$149&lt;/a&gt; for the Layout control with full source, I can tell you its a fraction of the cost of importing an Australian RTTI expert to join your development team. &lt;/p&gt;
&lt;p&gt;Let us know how you use the ExpressLayout Control ... I&amp;#39;d love to blog about applications that use this or any of our components (VCL or otherwise).&lt;/p&gt;
&lt;p&gt;* BTW: we&amp;#39;re working on producing more videos on our VCL products, and some more on this topic ... watch this space.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=269074" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="VCL" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/VCL/default.aspx" /><category term="Layout" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/Layout/default.aspx" /></entry><entry><title>PDFs, VCL applications and more Revolutionary UIs. </title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/07/10/PDFs_2C00_-VCL-applications-and-more-Revolutionary-UIs.-.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/07/10/PDFs_2C00_-VCL-applications-and-more-Revolutionary-UIs.-.aspx</id><published>2009-07-10T10:54:00Z</published><updated>2009-07-10T10:54:00Z</updated><content type="html">&lt;p&gt;No rest for the wicked ... no sooner have the VCL development team here at Developer Express shipped &lt;a href="http://www.devexpress.com/Support/WhatsNew/VCL/files/45.xml"&gt;Build 45&lt;/a&gt;, than they are back in the labs working on the next release.&amp;nbsp; This time I was able to sneak a peek at the TODO list in front of the team working on the ExpressPrinting System&amp;trade; v4 which should be available as a beta in Build 46 (Providing, as always, it has met our Quality standard).&lt;/p&gt;
&lt;p&gt;&lt;a href="http://www.devexpress.com/Products/VCL/ExPrintingSystem/"&gt;The Printing System&lt;/a&gt; is a remarkable product that lets you take a grid that your user has specialized by sorting, grouping, re-ordering and filtering the data to get it looking just the way they want and then with one line of code print the data out, in that shape, as a report.&amp;nbsp; It works with a &lt;a href="http://www.devexpress.com/Products/VCL/ExPrintingSystem/ReportLinks.xml"&gt;whole range of controls&lt;/a&gt; from our Quantum, Vertical, and Pivot Grids, as well as Rich Edits, Schedulers, regular Forms, SpreadSheets and many more.&amp;nbsp; It really is the fastest way to deliver printed reports in a Delphi application.&amp;nbsp; &lt;/p&gt;
&lt;p&gt;Did you notice the recent &lt;a href="http://www.devexpress.com/Home/DeveloperStories/ECSoftware/"&gt;case study from EC Software&lt;/a&gt; the developers of Help &amp;amp; Manual, and the revolutionary UI they created using the Ribbon control from &lt;a href="http://www.devexpress.com/Products/VCL/ExBars/"&gt;ExpressBars&amp;trade;&lt;/a&gt;?&amp;nbsp; Well the Printing System team have become inspired and are adding the Ribbon control to the Print Preview dialog.&amp;nbsp; So with v4 if you have the &lt;a href="http://www.devexpress.com/Products/VCL/ExBars/"&gt;ExpressBars&lt;/a&gt; product installed you will be able to see the Ribbon in the Preview Dialog, and if you have the &lt;a href="http://www.devexpress.com/Products/VCL/ExSkins/"&gt;ExpressSkins&amp;trade;&lt;/a&gt; library installed you can skin all the dialogs with any custom skin.&lt;/p&gt;
&lt;p&gt;But that&amp;#39;s just the appetiser, can you guess the biggest new feature from the following sneak peek?&lt;/p&gt;
&lt;p&gt;&amp;nbsp; &lt;a href="http://community.devexpress.com/blogs/dxram/PS4%20-%20Preview_Export.png"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/PS4%20-%20Preview_Export.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That&amp;#39;s right!&amp;nbsp; With ExpressPrinting System v4 you will not only be able to print complex controls with ease, you can generate PDF files from the result.&lt;/p&gt;
&lt;p&gt;Personally I can&amp;#39;t wait to be able to drop a PivotGrid, a Reportlink and a Generate PDF button on a form, hit compile, and ship the exe to a particular middle level manager I know who is always trying to contract me into building him new reports on the same data.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=268351" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="VCL" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/VCL/default.aspx" /><category term="PDF" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/PDF/default.aspx" /><category term="PrintingSystem" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/PrintingSystem/default.aspx" /><category term="Ribbon" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/Ribbon/default.aspx" /></entry><entry><title>Apple logos pop up in the strangest places</title><link rel="alternate" type="text/html" href="http://community.devexpress.com/blogs/dxram/archive/2009/06/25/a-barrel-full-of-apples.aspx" /><id>http://community.devexpress.com/blogs/dxram/archive/2009/06/25/a-barrel-full-of-apples.aspx</id><published>2009-06-25T16:00:00Z</published><updated>2009-06-25T16:00:00Z</updated><content type="html">&lt;p&gt;So I&amp;#39;m sure you probably noticed more than a few DXers talking about Apples lately, Our CTO Julian just tweeted that his new IPhone 3GS was on it&amp;#39;s way to him, and Evangelist Gary &lt;a href="http://community.devexpress.com/blogs/garyshort/archive/2009/06/25/what-s-new-in-the-iphone-os-3-0.aspx"&gt;just blogged&lt;/a&gt; about new features in the latest IPhone 3.0 software, the other day Silverlight guru Azret had as his FaceBook status &amp;quot;Hating myself for loving the IPhone UI&amp;quot;, and you probably recognize these likely lads and that ... let&amp;#39;s face it ... &amp;quot;In Your Face&amp;quot; logo on the back of the latptop they are both clearly mocking. &lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/dxram/MacFanbois.png"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/MacFanbois.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That logo is so &amp;quot;In Your Face&amp;quot;, that at a recent conference (run by a company that shall not be named) where Oliver was speaking, a conference room functionary was dispatched by some marketing weasel to slap a sticker over the Apple logo on his laptop while he was in mid-present.&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve just got myself a new 17&amp;quot; MacBookPro myself (I&amp;#39;ll blog later about how to set up a Mac for developing .NET apps) and I&amp;#39;ve also been using an IPhone for 6 months so I guess I&amp;#39;m as much an Apple Fanbois as anyone else here ... but that gaudy Apple logo is giving me the irits. I paid enough for this laptop, I&amp;#39;m not going to give away any more free advertising to them.&lt;/p&gt;
&lt;p&gt;What I really want is to get some inkjet printed surface tension held &amp;quot;sticker&amp;quot; to put over it ... maybe I&amp;#39;d do an old school Apple II Rainbow (My first PC back in 1980) or a map of Australia or such.&lt;/p&gt;
&lt;p&gt;...&lt;/p&gt;
&lt;p&gt;Speaking of Australia, as you may know we&amp;#39;re drifting as a continent towards Japan at a rate of about 6cm a year ... or about one ninth of a cubit for my nonmetricated friends.&amp;nbsp; As we are headed north we seem to be dropping bits of giant limestone islands off the southern edge of the continent, and in our trip around Australia we took a very windswept trip out to see some of these called the 12 Apostles.&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/dxram/12Apostles.jpg"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/12Apostles.jpg" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is the southern most edge of Australia, and that wind is bitterly cold comes directly from Antarctica and smells of penguins.&amp;nbsp; You can see some of the 12 Apostles in the background.&amp;nbsp; Those are the giant limestone Islands, and because they are essentially chalk left out in the elements they erode rapidly and dramatically.&lt;/p&gt;
&lt;p&gt;Check out the interesting way this one is eroding ... at its top left ... see that hole in the limestone that you can see through to the waves behind?&lt;/p&gt;
&lt;p&gt;&lt;a href="http://community.devexpress.com/blogs/dxram/apple_apostle.JPG"&gt;&lt;img src="http://community.devexpress.com/blogs/dxram/apple_apostle.JPG" border="0" alt="" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;That bloody Apple logo ... it&amp;#39;s everywhere.&lt;/p&gt;&lt;img src="http://community.devexpress.com/aggbug.aspx?PostID=266665" width="1" height="1"&gt;</content><author><name>Richard Morris (DevExpress)</name><uri>http://community.devexpress.com/members/Richard-Morris-_2800_DevExpress_2900_.aspx</uri></author><category term="Apple" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/Apple/default.aspx" /><category term="IPhone" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/IPhone/default.aspx" /><category term="Logo" scheme="http://community.devexpress.com/blogs/dxram/archive/tags/Logo/default.aspx" /></entry></feed>
