This Blog


Favorite Posts


October 2010 - Posts

  • A story for Halloween: Is Silverlight a Zombie?

    This morning, Mary Jo Foley  of ZDNet, published an article called Microsoft: Our strategy with Silverlight has shifted, in which she describes the fact that Silverlight has been all but missing from the current PDC2010, and then proceeds to quote Bob Muglia (president of server and tools):

    Silverlight is our development platform for Windows Phone,” he said. Silverlight also has some “sweet spots” in media and line-of-business applications, he said.

    But when it comes to touting Silverlight as Microsoft’s vehicle for delivering a cross-platform runtime, “our strategy has shifted,” Muglia told me.

    Silverlight will continue to be a cross-platform solution, working on a variety of operating system/browser platforms, going forward, he said. “But HTML is the only true cross platform solution for everything, including (Apple’s) iOS platform,” Muglia said.

    This is exactly the same story that came out about six weeks ago from Scott Barnes, a former Silverlight PM at Microsoft, after he presumably had some private chats with people he knew. The main conclusion from his blog post was that Silverlight is being pushed aside for web technologies in favor of HTML5 with IE9 driving it all. Oh, and that WPF is dead.

    The thing for me is that WPF and Silverlight were two of the future tracks for .NET (the third being ASP.NET MVC). Failure of either or both (I’m still uncertain as to how important Windows Phone 7 is going to be, especially as the launch seemed to be a bit of a washout), will mean that .NET’s future will be tied to ASP.NET MVC and — you guessed it — HTML5. (I’m especially struck by Anders Hejlsberg’s presentation yesterday at PDC10 on async programming in C# 5; very oriented to the web, I’d say.) And given the importance of web programming for mobile devices versus native apps — especially for so-called business apps rather than gaming — it’s looking like Silverlight is turning into a zombie.

    So, what do you think?

  • VCL Grid for Delphi and C++Builder: improved navigator

    As part of our work on the new ExpressQuantumGrid 7, we’ve improved the grid’s navigator feature. I’ve grabbed a couple of screenshots to show you what’s coming, although I will note that we are still tweaking it a little, so the final version and its API may look slightly different.

    First of all, this is what the user sees. Notice that we’re now displaying the record position (that is, the current record is number such-and-such of so many records) in a new section of the navigator called the info panel. In the detail pane, we’re showing it in the form “Record 4 of 92” whereas in the master list, it’s shown as “1 / 20”.

    New Grid Navigator

    Obviously then, there must be some properties associated with the navigator so that we can more easily set the text in its info panel.


    Of course there is an event associated with the navigator’s info panel as well, the OnClick event so that you can do some special processing if the user clicks on the panel.


    I’ll be providing more looks into what’s being prepared for ExpressQuantumGrid 7 as I get them. Stay tuned.

  • WinForms skin choosers: using your own skin names

    In the recent couple of blog posts on the new skin chooser that’s coming up in v2010 vol. 2, there were many comments about requiring the need to change the names of the skins we provide in WinForms. For some unknown reason ;), the example name that came up most often was “DevExpress Style”, although we are in negotiations with Nike to use it in their new Spring collection.

    Anyway, no sooner than the requests started to come in that the team implemented support for it in v2010.2. Well, actually, they merged it into the localization support for the bars library, but it works extremely well for just “renaming” certain skins.

    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    using DevExpress.XtraBars.Ribbon;
    using DevExpress.XtraBars.Helpers;
    using DevExpress.XtraBars.Localization;
    namespace HowToUseBarSkinHelper {
        public partial class Form1 : RibbonForm {
            public Form1() {
            private void Form1_Load(object sender, EventArgs e) {
                BarLocalizer.Active = new MyBarLocalizer();
                SkinHelper.InitSkinGallery(ribbonGalleryBarItem1, true);
        // Custom localizer that changes skin captions 
        public class MyBarLocalizer : BarLocalizer {
            public override string GetLocalizedString(BarString id) {
                if (id == BarString.SkinCaptions) {
                    //Default value for BarString.SkinCaptions:
                    //"|DevExpress Style|Caramel|Money Twins|The Asphalt World|..."
                    string defaultSkinCaptions = base.GetLocalizedString(id);
                    string newSkinCaptions = 
                            defaultSkinCaptions.Replace("|DevExpress Style|", "|My Hip Style|");
                    return newSkinCaptions;
                return base.GetLocalizedString(id);

    Here, you can see that we make use of the BarLocalizer.Active property to set an instance of a special localizer class. This class overrides the GetLocalizedString method to look out for the new BarString.SkinCaptions enum value and if found to replace "|DevExpress Style|" with "|My Hip Style|" in the default skin captions string (this string is a pipe delimited string of skin names, in a particular fixed order).

    And that’s it, really. Nice and neat. Incidentally in the code you can see the use of the new SkinHelper class to populate an existing RibbonGalleryBarItem or any menu (PopupMenu or SubMenu) with items that correspond to the DevExpress skins.

    (Aside: this blog post is taken from a new knowledgebase example E2523 which will be published with the release of v2010.2.)

    OK, I admit it. I was joking about Nike.

  • DevExpress Newsletter 36: Message from the CTO

    This time around, because of the difficulties we had in creating a good video for the last newsletter, I’m publishing a text-only message. We’re hoping to improve the recording process for the next one but we still have to experiment some more to fine-tune it.

    Writing apps for mobile devices

    All of a sudden it seems the smartphone has grown up. It now has some great benefits, compared to that old Nokia I used to have. Data always on, check. Internet access, check. Fast CPU, check. Touch screen, check. And big too, check. A myriad of different OSes, check.

    Er, what? How's that a benefit again?

    At first glance, it seems that it isn't. There's iOS4, Android, Blackberry OS6, WP7, WebOS, not to mention Symbian^3, all completely different from one another. Writing a business app to target smartphones would seem to indicate that you've got a big hill to climb: write for one, then the next, then the next, and so on. Not something I'd look forward to.

    However, they all have something in common: the use of web technologies. They all have a fairly robust speedy browser (most of them in fact based on the open source WebKit engine) with an efficient JavaScript interpreter. In writing an application that targets mobile devices, we should take advantage of this similarity between them so that our work can apply to the many instead of just the one by one.

    The kinds of web technologies I'm talking about are the standard ones of HTML, CSS, and JavaScript. Using some very simple techniques we can discover what device our application is running on (or even if it's on a boring old PC) and use JavaScript with some well-supported open source libraries to optimize the application or website for that particular device. You only have to look at applications like GMail for the mobile device to see what's possible.

    It doesn't stop there, of course. There are libraries such as Appcelerator's Titanium that will compile your web application into native code for certain devices. Suddenly you are using technologies you already understand and are familiar with to create native apps.

    So, yes, embrace the myriad OSes and devices and just write web apps for their browsers.

    Yes, I reckon knowing how to write web apps is the way to go, especially as sales of mobile devices are really starting to threaten the PC stronghold. Gaming aside (for now), the platform/device the apps run on is becoming less and less important. I’m going to continue learning about HTML5, CSS3, and more and more JavaScript.

  • New skin chooser for traditional WinForms bars/menus (coming in v2010 vol. 2)

    Yesterday I revealed the new skin chooser gallery for our ribbon control, and so of course today the team sent me an image of the same functionality, this time available with traditional bar menus.

    Skin Chooser with bars and menus

    Cool, eh?

  • New skin chooser gallery for WinForms Ribbon (Coming in v2010 vol 2)

    You know all those movies where the hero has to get into a computer lab with a USB stick, copy some vital information onto it from one of the PCs (with the screen showing a countdown of bytes to go with a big red progress bar) — all the time with an ear cocked for the heavy footsteps of the security guard — and then get out without being seen?

    I just did that to get these images to you. Don’t tell DevExpress Security about this...

    It’s a couple of screenshots of our new Skin Chooser Gallery for the WinForms ribbon control. You’ll be able to add this to your ribbon app to give your end-users full control over how their instance of your app looks.

    Here’s what it looks like in the ribbon:


    And here’s the fully expanded Gallery (click for full size). Yes, we have that many skins...


    So keep schtum, OK? DevExpress Security don’t read these blogs and we might get away with it.

  • Project wizard for WinForms (coming in v2010 vol.2)

    One of the most popular items in our WPF control package is the Project Wizard. With it you can, by checking off a few options, create a brand new project using our controls for a great user interface. The template has all the required code already set up to place the controls properly on the form and is of great use if you are new to our controls, or you just want the tried-and-trusted application layout without having to go through all the tedious drag/drop work and writing the glue code.

    The WinForms team thought this was such a neat idea, they’ve now implemented the same functionality for WinForms. They’d like to get it out in DXperience v2010 vol.2 but for that they need feedback as soon as possible. We’re thinking of calling it XtraProjectWizard, although it wouldn’t be a separate product per se, just something that’s included as part of DXperience WinForms or higher. (Notice that the screenshots use the older “DXProject Wizard” name that followed the naming convention for our WPF products. This will change in the released version.)

    The first thing to realize is that you would create a new project by selecting a special DXperience project template. This template then runs the wizard. Let’s take a look at some of the functionality.

    Choosing form type

    The first option is to decide on what kind of form container to use.  The main choices are the XtraForm or the RibbonForm, although you can choose a standard Form if you wish (although some other functionality would be missing, if so — see the documentation on XtraForm).

    Setting up the command area

    The next option is to decide on the command area of the application: are you going to need a menu and toolbars? or are you designing a ribbon app,, in which case the ribbon is the way to go. Obviously you would also decide on the style of ribbon you need.

    Choosing the navigational aspects

    Next up: deciding on the navigational aspects of your application. Do you want an Outlook-style navigation bar (and if so which style?); a tree list, perhaps; or none at all?

    Choosing the client area

    And to finish off the basic layout: what kind of client area does the application need? As you can see from the image above, there’s quite a choice here: a grid, a chart, a scheduler, and so on. With each of these options, you might have to choose among other options; for example, if a grid, should it show tabular data or the layout view.

    ClientArea-Chart Control

    As an example, here’s how you would fine-tune the chart client area.

    Choosing the skin

    Of course, since an application built with DXperience can easily be skinnable, the project wizard also allows you to choose the skin for the application. The wizard will insert all of the required code to show the various skins we provide with DXperience (including the standard, Bonus, and Office skins). The wizard also generates all of the skin registration code, as well as adding the required assemblies to the project. I’d say that just for this alone, it’s worth using this project wizard.

    As I said above this is still under some final tweaking. Let us know what you think before we release and set it into stone.

  • Sneak preview: DevExpress at DevConnections

    The Fall DevConnections is going to be November 1-4 at the Mandalay Bay in Las Vegas. DevExpress will of course be there and be big. Well, huge, really.

    We’ve got a couple of sessions: Steve Andrews in a session talking about Advanced ASP.NET MVC Extensibility and Mark Miller with an Introduction to High Speed Coding in Visual  Studio with CodeRush. We have a nice big booth with more areas to demo our products than ever before. Here’s an early rendering:

    Draft view of DevExpress booth for DevConnections

    Mark has also been working on a really cool demo for CodeRush that goes way beyond the Xbox guitar demo we did for PDC 2009 a year ago. See that demo area above? Well, that’s where he will show off CodeRush’s ability to code quickly, intuitively, and above all accurately, even with a [censored]. It’s a shame that we can’t talk just yet about the details of how we interfaced a [censored] attached to his [censored] to work with CodeRush in Visual Studio, but it’s quite incredible. Intelligent programming at its best. You’ll have to be there to see it (but of course we’ll be providing video of it all for those who can’t make it).

    We shall of course be demoing the new features of DXperience v2010 vol.2 at the booth. You can come along for a one-to-one discussion with Mark, Mehul, Steve, Seth, Emil, and me about how you are using our products, about what’s coming in the next release, about our support, about anything you like really. Amanda and Jeff will both be there of course making sure we record the events at the booth for posterity.

    So if you are going to DevConnections, pop over to the booth and say hello. We’d love to see you and have a chat.

  • Right-to-left language (RTL) support in our WPF controls

    Something we haven’t made much hoopla about is the fact that our WPF controls, such as the DXGrid for WPF) support RTL languages out of the box. One of the reasons is simple: we’re all LTR people at DevExpress, of different languages and countries, sure, but we all read from the left to the right.

    So Emil Mesropian, tech evangelist for our XPF products, ran a test (he knows Farsi, but heck no one knew...) on the DXGrid using Farsi.

    DXGrid - RTL

    The immediate thought is: aren’t the numbers supposed to be right-justified? Or does the justification of numbers flip to the other side of the column (like we have it here) when using an RTL language? We didn’t know so Emil did some more research:

    TSE - RTL Table

    This is a screenshot from the Tehran Stock Exchange. The problem here is that they use Eastern Arabic numerals and center-align them. Hmm.

    Next bit of research:

    TASE - RTL Table


    This is from the Tel-Aviv Stock Exchange and shows Western Arabic digits like we’re used to in the West and right aligns them like we’re used to. So no numeric column flipping.

    The mire gets deeper, though:

    Israel RTL Percent

    This shows that Hebrew shows that numbers with symbols are shown in the way we in the West expect. 


    KFH - RTL Percent

    On this Kuwaiti site, percentages are shown with the symbol before the number. Emil was unable to find anything during this bit of research that showed dollar amounts (like $123.45) or Euro values (like €123,45), and so on, so we’re not sure how those would be represented.

    The problem now is: what should we do? Whose conventions should we follow? The Hebrew/Israeli one? Or should we pay just as much attention to Arabic languages?

    And more importantly who can help us clarify how to do this properly?

    [Aside 1: This is explicitly about our WPF controls. I am not going to answer any questions about RTL on other platforms.]

    [Aside 2: Please remember we cannot export to several Arabic countries under our export license. One of those is Iran, so even though I’m showing a screenshot from a Tehran government entity’s website, it’s only for illustration purposes.]

  • DevExpress Newsletter 35: Message from the CTO

    A bit of a lightweight thought for this particular newsletter: I was concentrating more on the videoing of it more than anything else. Why? See below, but first the message:

    Writing readable code

    Recently, as part of my writing gig with PC Plus magazine in the UK, my editor asked me to write an article on the 10 mistakes every programmer makes. Number 1 in my list was the propensity for developers to write for the compiler, not for other programmers. The reason it came up first is that every programmer I know is guilty of this at some stage, even me.

    The problem is people tend to forget that the verbose grammar and syntactical sugar required to make programming easier and more like writing text is tossed aside in the process of converting prose to machine code. A compiler or interpreter doesn't care if you use a single-letter identifier or a more human-readable one. The compiler doesn't care if you write optimized expressions with full knowledge of operator precedence, or whether you envelop sub-expressions with parentheses. It merely takes your human-readable code, parses it into abstract syntax trees, and then converts those trees into machine code (or possibly some kind of intermediate language). Your names are by then history.

    So, why not use more readable or semantically-significant identifiers than just i, j, or x? These days, the extra time you would spend waiting for the compiler to look up longer identifiers is miniscule to the point of immeasurable. Similarly, using your knowledge of the ins-and-outs of the sub-sub-clauses of your preferred language's operator precedence rules in order to reduce the number of parentheses in some misguided effort to be more elegant will make no difference to compile time.

    However, the much-reduced time it takes you or another programmer to read your source code when that code was expressly written to be self-explanatory, to be more easily understandable, to not require knowledge of arcane language rules, is quite remarkable.

    Studies have shown that the proportion of some code's lifecycle spent being maintained is easily five times more than just being written initially. It makes sense to write your code for someone else to read and understand. Let your compiler sweat.

    See the video here.

    The quote that flashes up on the video at the end is from Robert L Glass’ excellent and thought-provoking book Facts and Fallacies of Software Engineering: “Maintenance typically consumes 40% to 80% of software costs. It is probably the most important life cycle phase of software.” In essence, the more we do to help the maintenance side of things at the outset when we write the code, the more we’ll help reduce the ridiculous amount of time we spend maintaining it. This preparatory work runs the gamut from writing clear, lucid code to using agile methods and continuous integration techniques. Do none of this and maintaining a program is quite simply a pain in the neck and will consume extra resources and time.

    You may think that I seem to be poking at operator precedence a bit. The animation that Jeff added to the video at that point shows the complete operator precedence rules for C++. To expect anyone but C++ junkies to know it all and furthermore to take advantage of them to eliminate needless parentheses is completely counter-productive. Yes, the rules need to be formulated and written down for the compiler writers to follow, but everyone else? I tend to assume the multiplicative operators are of higher precedence than the additive ones, but after that, no way, José. Parentheses here I come.

    [Aside. For various reasons, I was not able to be in Glendale for the recording of this message. I had to do it at home instead. I bought a Flip UltraHD video camera, a 7’ x 5’ green screen that folds up into a little bag, and a set of lights and stands. Jeff, our videographer here at DevExpress, and I then spent some time fiddling with the look-and-feel (I’d record something, upload it to Dropbox, then he’d download it and make suggestions to improve the end-result) to get an acceptable video. My first set of attempts was in our living room, but it has high ceilings and a wood floor so the sounds was very echo-ey. I then moved to our garage to try it there — it’s full of bits and pieces at the moment, no cars — and we worked out the set up that produced the best audio/video. Of course, the morning I recorded it I had to stop every now and then because someone would drive by.]


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, Delphi, HTML5 or iOS & Android development. 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-2018 Developer Express Inc.
All trademarks or registered trademarks are property of their respective owners