This Blog


Favorite Posts


November 2006 - Posts

  • Pondering .NET Framework support (again)

    Now we've released volume 2006.3 of DXperience (that is, of our UI controls and frameworks for .NET), it is time to think about volume 2007.1, the first version of next year.

    Coincidentally, I've set aside Wednesday, the day after tomorrow, as the day I install Vista on my main machine (and already I can hear you say, huh? what's that got to do with the next version of DXperience?). At that point I will be using .NET 3.0 full-time, on an operating system that automatically comes with it. Already Windows XP SP2 comes with .NET 2.0, although I suppose you can elect not to install it, but Vista will have .NET available as part of the install. From next January, Vista will start the uphill task of becoming as ubiquitous as XP: it will start to be shipped with new PCs and will be available as a paid upgrade.

    Now, I, of all people, have no idea at all how quick that process will be. How many people will upgrade and how quickly? Dunno. Haven't the foggiest, old chum. No matter what though, .NET 2.0 will continue its onward march to become the version of .NET to target, especially as .NET 3.0 is "just" a few more .NET assemblies thrown on the top of .NET 2.0. And .NET 3.5 is not that far away (at least I think that's what it's going to be called).

    And we, as third-party vendors of .NET products, have to be there before our customers, because when our customers need some .NET control that targets .NET 2.0/3.0 we have to have written it already. And we had better have all the .NET 2.0 bells and whistles as part of that control.

    Now this can be read to mean WPF (Windows Presentation Foundation) controls, and I won't deny it: we have already started our investigations and research in this area, but we're way too early for me to even begin discussing what we're going to do. It doesn't help that WPF controls have to work on two different design surfaces: that provided by Cider in Orcas (the designer for the next version of Visual Studio) and that provided by Microsoft Expression Interactive Designer, both of which are in a state of flux.

    But it also applies to our WinForms controls and ASP.NET controls and our application frameworks. We need to target .NET 2.0 more strongly than we have done in the past. I admit we've started the process: some of the functionality we have in our controls is only there for .NET 2.0 (for example, our accessibility support is better in a .NET 2.0 application than in a .NET 1.x application because the underlying support is more full-featured in .NET 2.0). And the XPO guys have already started blogging about what we're thinking with regard to LINQ support, and that's .NET 3.5 material.

    So, here I am thinking about what to do with .NET 1.x. I really feel as if we are starting to hobble ourselves and our customers by attempting to target all versions of .NET. There was a tech support case recently that I was asked to comment on whose solution was downright obvious: use a nullable type wrapping a value type. Except that our control has no knowledge of nullable types: it's a .NET 2.0 feature. So we're going to have to use a "special" value to represent a database null. It's just a horrible hack; I hated it way back when I had to do that, and I still hate it now (there's inevitably some code that doesn't "know" about the special value -- a bug waiting to happen, which is why I was called in on this particular support case).

    One of the plans I'm considering and that we're now discussing for 2007.1 is this: freeze the set of controls that work with .NET 1.x to the set that were shipped with 2006.3. Maintain them, provide tech support for them, deliver bug fixes and workarounds for the foreseeable future (at least well into 2008 and maybe even as far as 2009). In essence, continue providing minor releases of 2006.3 for the next 18 to 24 months (or longer, depending on demand).

    However, under this plan, the new controls and functionality we'll make available in 2007.1 will be for .NET 2.0 and 3.0 only. We can fully take advantage of the new functionality embedded in the .NET 2.0 framework, as well as use new features like generics, iterators, and anonymous methods (and the aforementioned nullable types) to in turn deliver the features you need in that environment.

    Given that this is one of the plans we're considering, what do you think?

  • Reactions to Microsoft Office UI licensing

    It's been a few days now since Microsoft's announcement, so I thought I'd present some of the reactions to it. Remember, gentle reader, I am not a lawyer and, if you are considering using our or anyone else's ribbon implementation and are worried about it, you should seek the necessary legal advice from your attorney.

    By far the most prevalent reaction has been the "how can they force you to license a look-and-feel?" This is usually accompanied by reference to the controversial Lotus/Borland lawsuit from years gone by, or the Microsoft/Borland settlement, or that Microsoft appropriated the whole Windows look-and-feel from Apple/Xerox PARC/all of the above, and how dare they now try and license look-and-feel. Funnily enough, this was my wife's first reaction too, and she's a lawyer. I always thought the Lotus/Borland suit was about the fact that QuattroPro had to mimic the menu structure of Lotus 1-2-3 exactly otherwise macros wouldn't work, but I freely admit my memory is completely rusty about this.

    Anyway, search me, I don't know: Microsoft believe that they have certain legally-enforceable rights (copyrights? patents?) in the Office 2007 UI and they're willing to license those rights for free and make them royalty-free to boot.

    Following along the heels of this reaction is the "just ignore the license, they'll never come after you; besides which you'd win in court anyway" one, again with many of the same references. I note that the purveyors of this advice don't actually come out and say something like "that's what I'm going to do when I release SuperRSSFileTextPodcaster next month"; no, they want someone else to take the risk by doing it first while they presumably watch from the sidelines, and, by the way, if you're going to sign the license, you're just a wuss.

    Sometimes this is accompanied by the idea that "if everyone ignores the license, Microsoft will be forced to limp home to Redmond, whimpering." To me, this is akin to the "RIAA will never come after all the P2P MP3 music file sharers out there" idea. Good luck with that one; let me know how it goes.

    Someone even intimated that we, Developer Express, have sold out in some way, that we've become part of the Borg: "it sounds like you're proud of what you've done to help formulate this license." Wow, that's rough. Given the choice between no legal restrictions and a license, we would have gone for the no legal restrictions every time. But we weren't given that nice black-and-white choice. Instead, we were given the black option and we had to try and make it grayer: we were part of a partner panel that could comment on various drafts of the license as they were produced. Personally, I think the panel did as good a job as they could in getting the Office team and Microsoft Legal to remove or water down restrictions from the license. Is the final document ideal? In a pragmatic sense, given that Microsoft were adamant about having a license, probably yes. All in all, I am pretty impressed with what we managed to achieve: you didn't see some of the drafts.

    And not being part of the partner panel wasn't an option: once invited, we thought we could provide better feedback as the license was being written, rather than just passively waiting it out to see the result and then complaining.

    A lot of people have been confused about whether they're covered if they buy a ribbon control from an "approved" vendor, one that has already signed the license. The answer to this one is simple: no. Read the FAQ on the licensing site: if you are producing an application that will use some aspect of the Office 2007 UI, you will need to sign the license, whether you buy a ribbon control from someone else (licensed or not) or write one yourself. Contact your attorney if you are in doubt.

    Update 1-Dec-2006: Eric Sink makes a very pithy comment on this topic that made me laugh out loud, which considering I feel like death warmed up today is particularly miraculous.

  • Microsoft Office UI licensing and our ribbons

    Today Microsoft announced their program for licensing the new 2007 Microsoft Office system UI, including the famous ribbon. Later on this month, there will a link on the MSDN site that will enable you to license the new Office UI design and functionality using a royalty-free agreement, but, for now, the licensing page just introduces the new agreement in a FAQ-like manner.

    We, Developer Express, are one of the initial partners in the Office UI licensing program. We have been instrumental in discussing the draft program with Microsoft and have been at the forefront in ensuring that we and our customers get the most benefit from the program.

    To summarize, if you want to use a ribbon in your applications (whether you decide to use either our .NET or our VCL components or, horror, someone else's :) ), you will have to sign the Office UI licensing agreement with Microsoft. This no-cost license is a royalty-free agreement between yourselves and Microsoft that enables you to take advantage of the intellectual property (IP) that they've embodied in the new Office 2007 UI (including copyrights, trademarks, and patents). Part of this license is a remarkable document: the Office UI Design Guidelines that describe, in almost excruciating detail, how the ribbon and its associated controls must work and must look in an application in order to satisfy the license.

    We have already signed this license. For component vendors like ourselves, the license describes what we have to do in order to implement a ribbon component that application developers can then use in their end-products. Of course, since we have been involved in this program from the very earliest days, we have had time to make every effort to ensure that both our ribbon implementations follow the design guidelines and the license agreement to the letter. When you use either or both of our ribbon implementations, you can rest assured that you will be able to adhere to your agreement with Microsoft with ease.

    Lurkers and active members of our newsgroups will have noticed that we've been downright evasive about our plans for enhancing our ribbon implementations. We've been asked for some very reasonable enhancements, such as docking the ribbon vertically or along the bottom edge of the application window. Well, now you understand our ambiguous replies: according to the license agreement we are prohibited from doing most of them. Now that the Office UI Licensing program is public knowledge, we can start to categorize the enhancements we've been asked for into those we can do and those we cannot, and also to talk about them in more detail.

    Note also that you, our customers, are not covered by our license agreement with Microsoft. The terms of the license are not transferable in that way: despite the fact that you are using our components, you will have to sign the Microsoft license yourselves for your own applications.

    (Updated: the god of the new Office UI, Jensen Harris, has just blogged about the Office UI License.)

  • DXperience volume 2006.3 Breaking Changes

    Despite our best intentions, sometimes we have to make some breaking changes to our libraries or their behavior in order to provide extra or better functionality. Volume 2006.3 of DXperience is no different.

    Here are the changes of which you should be aware when you come to upgrade your DXperience subscription to volume 6.3.

    ASPxMenu, ASPxTabControl, ASPxNavBar

    DXperience 2006 vol. 3 introduces the SyncSelectionWithCurrentPath property. This is set true by default. When you upgrade to the new version, the element (tab, menu item, navigation bar item) that refers to the currently selected page will be selected automatically.

    XtraCharts Suite

    The Axis.Reverse property no longer changes the position of the other axis. The position of axes is now defined by the Axis.Alignment and XYDiagram.Rotated properties only. Hence, if you have a reversed axis in an application, the position of the orthogonal axis may change after you upgrade. Please retest your application after upgrading.

    XtraBars Suite and XtraNavBar

    The XtraBars Suite and the XtraNavBar no longer automatically provide mappings to transparent backgrounds for images assigned to items directly via the Glyph, SmallImage or LargeImage property. Instead the controls support image formats that natively provide transparency.

    For instance, if you used BMP files with a magenta background, intending for magenta to be mapped to a transparent background, you will suddenly see magenta in item images when you upgrade. To work around this issue, we suggest that you use PNG or GIF images instead, since these support transparent backgrounds. Another workaround is to call the Bitmap.MakeTransparent() method. Lastly, you can use ImageList or ImageCollection components as image sources.

    Note that this change now makes it possible for you to use all of the pixels in assigned images. Previously, one corner pixel would be considered as the pixel that defines the transparency color, and it wouldn't be visible as a result.

  • OK, so we're crazy

    Today will live on in Developer Express folklore as the day we announced three new products. Of course, that means our download servers are now wimpering on their knees, sweat pouring off their hard drives, and the T1 router is glowing white-hot.

    • DXperience volume 6.3. I've already blogged about this, including saying that it was "only hours away". Well, the 168 hours between my talking about it and it being announced was "only hours". Really. Well, that's my story and I'm sticking to it :).
    • ExpressQuantumGrid v6. The sine qua non of VCL grids has had a great update. You can read about the changes here.
    • ExpressBars v6 beta. This one is only available to our VCL product subscribers. There are many changes to this product, but of course the main one that everyone has been waiting for is the addition of our VCL Ribbon. Just like our ribbon in our .NET XtraBars product, it's one of the most full-featured ribbons out there with the added benefit that it's for Delphi and the VCL. You too can write full-speed Win32 applications with a state-of-the-art user interface. I've seen a couple of our customers' applications with our VCL ribbon, and they're just awesome.

    Although we've described the changes to the products we're shipping on our web site, we don't for the ExpressBars beta. Here's the summary of features introduced in this beta:

    Ribbon UI

    With the TdxRibbon, TdxCustomRibbonForm, TdxRibbonPopupMenu, and TdxRibbonStatusBar components, you can build ribbon interfaces similar to those found in Microsoft Office® 2007.

    In-Place Editors Extension

    All in-place editors from the ExpressEditors Library can be used within toolbar items. Use the cxBarEditItem to create this type of item (note the ExpressEditors Library must be purchased separately).

    Form Inheritance Enhancements

    • TdxBar is now a TComponent descendant (was a TCollectionItem descendant in the previous versions). This eliminates the problem when changes applied to the base form are not reflected in the changes to inherited forms after modifying a toolbar on an inherited form. Forms with older versions of toolbars are fully supported.
    • Toolbars on both the base and inherited forms can be reset.

    Parented Forms and Frames

    Parented forms and frames are fully supported. Problems with common keyboard shortcuts, accelerator keys, tab navigation, and hints in parented forms have been addressed.

    Improved Support for Images and Image Lists

    • 32-bit icons with alpha blending.
    • Now you can optionally use the TImageList.TransparentColor property to determine the transparent color of an image instead of using its left-bottom pixel.
    • The image mask of a transparent glyph is now taken into account when painting an image from an image list.

    Extended Appearance Control

    Added the capability to apply custom color and font settings to a toolbar item's caption and in-place editor (via the item's Style and StyleEdit properties).

    Runtime Usability Improvements

    • A centralized way to postpone painting and calculation of toolbars has been introduced via a bar manager's BeginUpdate/EndUpdate methods.
    • New specially designed methods to simplify the creation, modification and repositioning of toolbars have been introduced.

    Merging Mechanism Improvements

    • More than two toolbars can be merged.
    • You can now merge bar managers.
    • You can use the specially designed MergeKind and MergeIndex properties of a bar item to control merging.

    Design-Time Improvements

    • Toolbars can now be selected using the mouse.
    • You can also select multiple items and toolbars by holding down the Shift and Ctrl keys.
    • It's much easier to delete the selected links, items, and toolbars using the Del and Ctrl+Del keys.
    • You can press the Esc key to access the selected object's parent component (for instance, press the Esc key to move to the parent toolbar of a bar item which is currently selected).

    Bug Fixes

    • Several bugs related to the position of a toolbar which was not correctly saved/restored after the toolbar was hidden/shown have now been fixed.
    • New items, which are added to a toolbar after storing its settings to the registry, an INI file or stream, will be visible after restoring the settings.

    As mentioned previously, this beta is only available to active VCL subscribers. To obtain your beta copy, logon to our Client Center and download our Unified VCL installers.

  • CodeGear := TSubsidiaryFactory.NewSubsidiary;

    Unless you've been living the good life and relaxing over the past 24 hours, you'll most likely have heard that Borland have split off their Developers Tools Group into a new wholly-owned subsidiary called CodeGear.

    Um. OK, then. After all the palava, that was a damp squib, wasn't it?

    I'm sorry but to this outside observer the whole cleaving-in-twain story is just ridiculous, and is made especially so by this statement in the "Borland Forms CodeGear" FAQ:

    "The challenge came when we went about separating two operations that have been interlinked for over 23 years. We found we were not able to adequately separate the financials in a way that could demonstrate what we believe to be the true value of this business."

    So Borland were able to, er, "adequately separate the financials" in order to create a brand new subsidiary with its own balance sheet, budget, staff, and wherewithal to succeed (which presumably would be easier to sell in the future -- ooh, did I just say that?) but were unable to do so for a divestiture? Somehow, I don't think so. Maybe the problem lies in the words "true value"; perhaps Borland's "true value" was at odds to that of all those white knights in waiting.

    It also smacks a little of desperation: the decision seems to have happened so quickly that, although they had purchased CodeGear.com some time ago (December 2004), they didn't have time to create, you know, a web site with more than one animated GIF and a link to a PR company. In this age of Web 2.0 mega-functionality, it's severely minimalist, perhaps even Japanese in its outlook. Edgy, that.

    (Note for future historians: on the day of the announcement, the main page of CodeGear.com consisted of an animated GIF that cycled through some code snippets that said "CodeGear = new Company();" in various programming languages, together with a link to a PR company.)

    And I'm not quite sure why this split wasn't done first anyway. Possibly to hide the financials of the DTG for a little longer is my best guess.

    Anyway, I wish CodeGear all the best. They have some good, if a little underdeveloped, products, some excellent and enthusiastic people on staff, and lots of get-up-and-go. I hope that Borland leave them alone—although I'm sure that, like subsidiaries the world over, they have some strong deliverables to the parent company—for long enough for them to find their feet and succeed. Certainly the doubts of the past ten months can be cast aside and the plans for the future pursued with vigor.

  • DXperience v6.3

    Well, we're almost there. A couple more t's to be crossed and i's to be dotted and we can release version 6.3 of our DXperience suites. For our customers who haven't been involved in the beta test, it's a little like watching a swan gliding along the water: all seems calm and collected but you don't notice all the thrashing underneath. Simply put, there has been some incredible activity behind the scenes over the past few weeks as we've striven to get this release ready. The various teams have done a great job.

    So, it's about time to reveal some of the new things we've been doing to the suite, especially as Release Day is mere hours away. Although this is going to be a bit of a list, I'll talk about some of the new things later on in more detail in further blog posts.

    First off, let's look at the new ASP.NET controls. There's the ASPxPivotGrid for starters: we've taken our pivot grid technology from our WinForms controls and adapted it for the web. It enables you to create pivot reports for your web apps, just as with Microsoft Excel or Microsoft Access, that your end-users can manipulate by dragging field headers around to slice and dice their data, in order to get at the data's underlying meaning and sense. At long last, and a very nice implementation to boot.

    After that we have the ASPxPopupControl that enables you to easily add popup windows or advanced hints to your web pages.

    Of course, we haven't neglected to enhance our existing ASP.NET controls either. Overall we do a better job with our XHTML compliance (the disabled style is properly supported in all browsers); there's a new option called SyncSelectionWithCurrentPath that, when enabled, will automatically select the element (be it tab, menu item, or navbar item) that refers to the current path; and we've improved the ASPxNavBar, ASPxMenu, and ASPxPopupControl controls to enable you to bind template elements directly to the fields of the underlying data source.

    Let's look at the individual ASP.NET controls now. This one is cool: the ASPxNavBar's groups can now be expanded or collapsed with a neat animation effect. Talking of collapsed headers, you can now associate an image to be displayed within the header when collapsed, and you can now even hide group headers altogether.

    The ASPxMenu has had a couple of enhancements: we've added mouse over and mouse exit events to individual items, and root level items are stretched to fill the control when you resize it.

    The ASPxGrid now comes with compiled resources for scripts and images, which helps with the end-user's experience when first navigating to a page with a grid. The source code comes with the scripts uncompressed, enabling you to modify them if needed and to recompress them when needed.

    The Site map controls have also been enhanced. A categorized view is now available, whereby you can split your site map into several horizontal sections, and, within each section, you can arrange your links into multiple columns. Additionally, you can now control the layout direction of site map groups, whether you prefer the across- then-down or down-then across layouts, and you can arrange items within groups using a flow layout.

    Now, let's check out some of the changes to the WinForms controls. I think I'll structure this to leave the best 'til last, so if you're the type of mystery reader who wants to see whodunnit rather than read through it all, you can skip to the last paragraph :)

    We've done some great changes to the XtraCharts product, continuing our drive to make it a must-use, let alone a must-have. We have three new 2D chart types: Area, Stacked Area, and Full-Stacked Area (I'll talk about these chart types in a later post). We now support multiple secondary X and Y axes on the same chart (I know this has been requested a lot), and we can export a chart to Excel's XLS format. Based on other customer requests, we've enhanced the Gantt chart options so that each Gantt chart bar can show the duration rather than the start/end times, and the Gantt View now enables you to show arrows between tasks. Datetime axes are now supported; and you can specify whether a series' axes show qualitative, numeric or datetime values.

    Like XtraCharts, XtraReports just keeps on getting better too. You can now embed shapes into your reports (we ship with rectangles, rounded rectangles, ellipses, arrows, polygons, stars, crosses, lines, braces, and brackets). The next thing is way cool (I saw it for the first time in the booth at TechEd Barcelona --sometimes even the CTO only gets to see these things very late in the process): you can zoom a report from 50% to 800% at design time. This makes it extremely easy to nudge controls into their correct place at design time. The ReportToolbar control has been much improved too: you now have full control over the buttons collection and each button's visibility. A new action has been added to the report toolbar to save the report result to a file without showing it in the browser.

    We've added a Filter control to the XtraEditors library, a stand-alone version of the Filter Editor that ships with XtraGrid and that enables the end-user to easily construct simple and complex filter criteria. Validation has been enhanced for a form or control with the new DXDataErrorProvider.

    XPO now has an ODP.NET provider for Oracle support; the new upcasting support enables you to combine base and derived classes in the same query; and there is a new easier way to implement persistent properties.

    The XtraTreeList control has some spiffy new functionality. It now has fixed column support (when a column is anchored to the left or right edge, it isn't affected by horizontal scrolling). You can now find columns by the bound field's name. End-users can now move the focus away from the tree list control by using the keyboard (Ctrl+Tab). The FilterNodes method now forces the control to refilter its data, and you now have control over the incremental search facility.

    The PropertyGridControl within the XtraVerticalGrid product has had some long-awaited enhancements: you can now display properties of multiple objects, and you can specify the list of browsable attributes and only properties with those attributes will be displayed. Other news for XtraVertcalGrid: grids can no be printed with the XtraPrinting library, and the grid's data can be exported to the usual suspects: XML, HTML, PDF, RTF, TXT, XLS and MHT.

    On to XtraLayoutControl. I just love this control, it's so nifty; I wish I'd had it years ago. Anyway, it now has splitters, so that end- users can resize layout items without resorting to the customization form. The layout items themselves now support skinning. We've exposed some extra events so that you have finer control over whether groups can be expanded or collapsed (and when a group is expanded or collapsed), and whether the user can switch to another tab. We've also provided binding to the StyleController component, so that you can centralize layout style settings in a central place (the layout control defers its settings to the style controller). Also, at design time, when a column from Server Explorer is dragged onto a layout control, a layout item is automatically created with an editor bound to the dropped data column.

    Finally, the big one (if you've jumped here from the beginning of this post, this is where you should land): XtraBars has the most complete Ribbon control that I've seen yet. We were demoing this at TechEd in Barcelona, alongside Microsoft Word from the 2007 Office System for comparison. It's so good, it's spooky. You start off with the RibbonForm which provides the big button on the top left and the re- drawn caption bar. Needless to say, not only does it work beautifully in non-Vista OSes, but in Windows Vista, it supports the standard transparency of the caption bar. The ribbon itself has all the standard controls like tabs, groups, controls (such as split buttons), galleries, the application menu, etc. It has the same animation behavior as the real thing (the animations are terrific, by the way), as well as the same popup (or is it dropdown?) gallery behavior (which you can customize). We've mimicked the ribbon behavior when the application window is resized. We've got super-tooltips and a convenient tooltip content editor for them. You can move the Quick Access Bar from the caption bar to underneath the ribbon. The ribbon has the correct hide behavior. Heck, it's almost as if I should be listing the differences in behavior, rather than what you can do with our ribbon.

    That's about it for this post. Look out for more as I explore some of the new features in DXperience 6.3 and the benefits you'll see from using the suite.


Chat is one of the many ways you can contact members of the DevExpress Team.
We are available Monday-Friday between 7:30am and 4:30pm Pacific Time.

If you need additional product information, write to us at info@devexpress.com or call us at +1 (818) 844-3383


DevExpress engineers feature-complete Presentation Controls, IDE Productivity Tools, Business Application Frameworks, and Reporting Systems for Visual Studio, along with high-performance HTML JS Mobile Frameworks for developers targeting iOS, Android and Windows Phone. Whether using WPF, ASP.NET, WinForms, HTML5 or Windows 10, DevExpress tools help you build and deliver your best in the shortest time possible.

Copyright © 1998-2017 Developer Express Inc.
All trademarks or registered trademarks are property of their respective owners