<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Component Factory</title>
	
	<link>http://www.componentfactory.com/blog</link>
	<description>Windows Forms Controls for .NET Smart Client Applications</description>
	<pubDate>Mon, 29 Jun 2009 23:34:05 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.7.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.feedburner.com/PhilWrightComponentFactory" type="application/rss+xml" /><feedburner:browserFriendly>This is an XML content feed. It is intended to be viewed in a newsreader or syndicated to another site.</feedburner:browserFriendly><item>
		<title>Wright 2.0</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/4byTFxkHxkU/</link>
		<comments>http://www.componentfactory.com/blog/2009/06/wright-20/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 23:34:05 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=503</guid>
		<description><![CDATA[The future has arrived and it&#8217;s the next generation of Wright programmer. I might be a little slow answering email for the next couple of days as young Dominic gets used to the real world. Normal service should be resumed towards the end of the week.

]]></description>
			<content:encoded><![CDATA[<p>The future has arrived and it&#8217;s the next generation of Wright programmer. I might be a little slow answering email for the next couple of days as young Dominic gets used to the real world. Normal service should be resumed towards the end of the week.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/Wright20.gif" alt="" /></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/4byTFxkHxkU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/06/wright-20/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/06/wright-20/</feedburner:origLink></item>
		<item>
		<title>Drag Repositioning</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/xZkChpg4Www/</link>
		<comments>http://www.componentfactory.com/blog/2009/06/drag-repositioning/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 07:58:17 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Docking]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=501</guid>
		<description><![CDATA[The very essence of docking windows is the ability to drag and drop content into new positions quickly and easily. Showing such a dynamic feature in pictures is a little difficult but you can see here that I have implemented the drop indicators.

In this example I am dragging the floating window by using the caption [...]]]></description>
			<content:encoded><![CDATA[<p>The very essence of docking windows is the ability to drag and drop content into new positions quickly and easily. Showing such a dynamic feature in pictures is a little difficult but you can see here that I have implemented the drop indicators.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockDropDown3.jpg" alt="" /></p>
<p>In this example I am dragging the floating window by using the caption bar and then hovering over the top drop indicator for the target docking control. The light blue rectangle at the top of the docking control shows the relative position of the content when it is added using this indicator. On releasing the mouse we get the following result.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockDropDown4.jpg" alt="" /></p>
<p>Because each docking control is actually a <em>KryptonWorkspace</em> it means we can organize the content pages in any way we wish. To show this I then dragged <em>Page 1</em> and <em>Page 2</em> in order to create a more complicated layout that might not be very useful in practice.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockDropDown5.jpg" alt="" /></p>
<p>The user can create whatever arrangement they like. This also applies to floating windows as the client area of the floating window is also derived from KryptonWorkspace. If you have multiple monitors then this allows you to make the best use of the screen real estate. Create a floating window per extra monitor, maximize each floating window and then use drag and drop to organize content as needed. This would allow your application to be used on 2, 3 or more monitors and really get the best use of that space.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/xZkChpg4Www" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/06/drag-repositioning/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/06/drag-repositioning/</feedburner:origLink></item>
		<item>
		<title>Docking DropDown</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/k_ZvVdHKzAA/</link>
		<comments>http://www.componentfactory.com/blog/2009/06/docking-dropdown/#comments</comments>
		<pubDate>Thu, 25 Jun 2009 07:27:51 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Docking]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=497</guid>
		<description><![CDATA[The operation of the docking windows is designed to closely mimic the way that Visual Studio 2010 Beta operates and not the current VS2008. So if the following does not look or feel quite right that is most likely because you have not played around with VS2010. Each docking window has a drop down button [...]]]></description>
			<content:encoded><![CDATA[<p>The operation of the docking windows is designed to closely mimic the way that Visual Studio 2010 Beta operates and not the current VS2008. So if the following does not look or feel quite right that is most likely because you have not played around with VS2010. Each docking window has a drop down button that when pressed gives a list of possible docking options. Like this&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockDropDown1.gif" alt="" /></p>
<p>The <em>Close</em> and <em>Auto Hide</em> options are just alternate ways of performing the same actions as the pin and close buttons  that were already described in the last post. <em>Float</em> and <em>Dock</em> options are fairly obvious and switch the individual page between being a floating window and docked back again against a control edge. <em>Tabbed Document</em> is used to move the page into the filler control that occupies the client area of the control. Under VS2010 this means the page is moved to the editing area so you can see that page alongside code editing or design surface windows. If we select the above <em>Float</em> option we get the following modeless windows appear&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockDropDown2.gif" alt="" /></p>
<p>You probably think the window looks a little odd. Under VS2010 the appearance and operation of the window has changed to make it easier to use docking windows on multi-monitor machines. If you double click the window caption in VS2008 it would restore the contents back to be docked windows. With VS2010 and Krypton Docking it maximizes the window. This allows you to place several pages inside the floating window and then maximize it on a different monitor in order to make use of multiple monitors effectively.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/k_ZvVdHKzAA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/06/docking-dropdown/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/06/docking-dropdown/</feedburner:origLink></item>
		<item>
		<title>Docked and AutoHidden</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/Z-EOs-8cKIo/</link>
		<comments>http://www.componentfactory.com/blog/2009/06/docked-and-autohidden/#comments</comments>
		<pubDate>Fri, 05 Jun 2009 04:09:34 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Docking]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=494</guid>
		<description><![CDATA[Finally I have gotten far enough that I can actually take a couple of screen snapshots and show something happening. Here we have three pages in a tabbed setup docked on the left side of form. The mouse is hovering over the pin that is used to switch to the auto hidden mode&#8230;

When pressed you [...]]]></description>
			<content:encoded><![CDATA[<p>Finally I have gotten far enough that I can actually take a couple of screen snapshots and show something happening. Here we have three pages in a tabbed setup docked on the left side of form. The mouse is hovering over the pin that is used to switch to the auto hidden mode&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockLeft1.gif" alt="" /></p>
<p>When pressed you get the expected group on the left edge of the form.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockLeft2.gif" alt="" /></p>
<p>Move the mouse over the auto hidden tab and after a short delay it will slide out so it overlaps the client area. It operates like the Visual Studio environment where moving the mouse away from the area causes it to slide back again.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockLeft3.gif" alt="" /></p>
<p>Now onto floating pages and the ability to restore back to where they came from.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/Z-EOs-8cKIo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/06/docked-and-autohidden/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/06/docked-and-autohidden/</feedburner:origLink></item>
		<item>
		<title>Bits and Bobs</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/0DFP8KyH7UI/</link>
		<comments>http://www.componentfactory.com/blog/2009/05/492/#comments</comments>
		<pubDate>Tue, 26 May 2009 04:32:38 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Navigator]]></category>

		<category><![CDATA[Krypton Workspace]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=492</guid>
		<description><![CDATA[I&#8217;m currently deep in the bowels of adding docking functionality. I&#8217;ve reached the point where you can add/remove/show/hide pages on the edges of a container control. This includes docking them as well as the auto hidden feature where they slide into view when you hover over the tab stubs on the edge.
To help me out I needed to [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m currently deep in the bowels of adding docking functionality. I&#8217;ve reached the point where you can add/remove/show/hide pages on the edges of a container control. This includes docking them as well as the auto hidden feature where they slide into view when you hover over the tab stubs on the edge.</p>
<p>To help me out I needed to add some new events, methods and properties to the workspace and navigator controls. I thought you might find some of these handy for y0ur own applications so here is a quick summary&#8230;</p>
<p><strong>KryptonWorkspace<br />
   <span style="color: #333399;">Methods</span><br />
      </strong><em>HideAllPages()<br />
      ShowAllPages()<br />
      FirstVisibleCell()<br />
      NextVisibleCell(&#8230;)</em><em><br />
      PreviousVisibleCell(&#8230;)</em><em><br />
</em>      LastVisibleCell()<em><br />
</em>      IsCellPresent(&#8230;)<br />
      PageForUniqueName(&#8230;)<br />
<em>      CellForUniqueName(&#8230;)</em><br />
<strong>   <span style="color: #333399;">Properties</span><br />
      </strong><em>CellVisibleCount</em><br />
<strong>   <span style="color: #333399;">Events</span></strong><br />
<em>      CellCountChanged<br />
      CellVisibleCountChanged<br />
</em></p>
<p><strong>KryptonNavigator</strong><br />
<strong>   <span style="color: #333399;">Methods</span><br />
      </strong><em>HideAllPages()<br />
      ShowAllPages()</em><br />
<strong>   <span style="color: #333399;">Properties</span><br />
      </strong><em>AllowTabSelect<br />
      Bar.BarLastItemInset<br />
</em><strong>   <span style="color: #333399;">Events</span></strong><br />
<em>      TabCountChanged<br />
      TabVisibleCountChanged<br />
</em><em>      TabMouseHoverStart<br />
</em><em>      TabMouseHoverEnd</em></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/0DFP8KyH7UI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/05/492/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/05/492/</feedburner:origLink></item>
		<item>
		<title>Control.Visible is broken</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/1iOiO8tgFDM/</link>
		<comments>http://www.componentfactory.com/blog/2009/05/controlvisible-is-broken/#comments</comments>
		<pubDate>Sat, 16 May 2009 09:53:46 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=485</guid>
		<description><![CDATA[I hate the Control.Visible property. It tries to do two things instead of one and so broken.
Imagine you have a Panel somewhere in your application and you add a Button onto that Panel. Set the Button.Visible to be False and then back again to True. It works exactly as you would expect by hiding the [...]]]></description>
			<content:encoded><![CDATA[<p>I hate the <em>Control.Visible</em> property. It tries to do two things instead of one and so broken.</p>
<p>Imagine you have a <em>Panel</em> somewhere in your application and you add a <em>Button</em> onto that <em>Panel</em>. Set the <em>Button.Visible</em> to be <em>False</em> and then back again to <em>True</em>. It works exactly as you would expect by hiding the control and then displaying it again.</p>
<p>Now move up a level and try setting the <em>Panel.Visible</em> to be <em>False</em> so the whole <em>Panel</em>, including the contained <em>Button</em>, is hidden away. Whilst hidden try asking for the <em>Button.Visible</em> value and you will see it comes back with <em>False</em>! This is bad because it&#8217;s clearly returning a value indicating if the <em>Button</em> is currently visible rather than a value indicating if the <em>Button</em> would like to be visible. There is a big difference between those two semantics.</p>
<p>This problem becomes evident when you want to create your own custom layout panel. Your custom control will need to scan the set of child controls and decide how to arrange them. To make your control behave itself you want to honor the visible setting of child controls. But your stuck because asking a child control for its visible property will not always give the correct answer. If your control performs a layout when it happens to be hidden then all the children will automatically say they want to be hidden as well. Not because they really want to be invisible but purely because at the time the child control was asked the parent chain had a control that was not currently visible.</p>
<p>What we really need is two properties. The <em>Control.Visible</em> should act as an indication of the visible state the control would like to have. So the &#8216;get&#8217; should return the same value as the last &#8217;set&#8217;. Then a new property called <em>Control.CurrentlyVisible </em>that returns if the control is currently visible based on the state of all the parent controls up the chain of controls up to and including the owning <em>Form</em>.</p>
<p>This is something I have had to get around for the <em>KryptonNavigator</em> and <em>KryptonWorkspace</em> controls because they suffer from exactly this issue. They both have child collections of controls and need to honor the visible state of those controls. Luckily I can get around it because they can only have child controls of a type I have defined. So I can easily add the extra properties needed to those defined types. But this would fail if my collection could take any arbitrary control and not just my own types.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/1iOiO8tgFDM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/05/controlvisible-is-broken/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/05/controlvisible-is-broken/</feedburner:origLink></item>
		<item>
		<title>KryptonSeparator</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/_0YvH-x7wbE/</link>
		<comments>http://www.componentfactory.com/blog/2009/05/kryptonseparator/#comments</comments>
		<pubDate>Mon, 11 May 2009 05:46:01 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=483</guid>
		<description><![CDATA[Here we have a brand spanking new control for the KryptonToolkit called KryptonSeparator.  It is however a very simple control that draws as an area separator and provides splitter functionality. Here you can see the control at various sizes and orientations in the Office 2008 Black scheme&#8230;

As the user moves the mouse over the control [...]]]></description>
			<content:encoded><![CDATA[<p>Here we have a brand spanking new control for the <em>KryptonToolkit</em> called <em>KryptonSeparator</em>.  It is however a very simple control that draws as an area separator and provides splitter functionality. Here you can see the control at various sizes and orientations in the Office 2008 Black scheme&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/SeparatorBlack.gif" alt="" /></p>
<p>As the user moves the mouse over the control it changes the mouse cursor to indicate that it provides splitter functionality. If you press the mouse and start dragging then you see feedback drawn over the application that shows what change will occur if you release the mouse. Here you can see the visual feedback as a drag occurs&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/SeparatorDragging.gif" alt="" /></p>
<p>The <em>KryptonSeparator </em>does not actually do anything when you release the mouse at the end of the drag as there is no way for the control to know what other controls should be resized and positioned. Instead it generates events that you can monitor and once the drag ends you use that event to decide what action to take.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/_0YvH-x7wbE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/05/kryptonseparator/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/05/kryptonseparator/</feedburner:origLink></item>
		<item>
		<title>Docking appearance</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/NoqSEp2Xtds/</link>
		<comments>http://www.componentfactory.com/blog/2009/05/docking-appearance/#comments</comments>
		<pubDate>Mon, 04 May 2009 07:45:09 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Docking]]></category>

		<category><![CDATA[Krypton Navigator]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=480</guid>
		<description><![CDATA[The KryptonNavigator is going to be the primary container used within the docking framework for hosting docking pages. So we need to ensure we can manipulate the appearance of the navigator so it looks appropriate when inside the docking framework. By default we have the following&#8230;

I have added HeaderBarTabGroup as a new navigator mode that displays [...]]]></description>
			<content:encoded><![CDATA[<p>The <em>KryptonNavigator </em>is going to be the primary container used within the docking framework for hosting docking pages. So we need to ensure we can manipulate the appearance of the navigator so it looks appropriate when inside the docking framework. By default we have the following&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockNav1.gif" alt="" /></p>
<p>I have added <em>HeaderBarTabGroup</em> as a new navigator mode that displays two headers around the edge of the tab headers area. As with all the header modes the buttons are placed inside the primary header instead of inside the tab bar. Switching to the new mode we get the following&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockNav2.gif" alt="" /></p>
<p>To replicate the <em>Visual Studio 2008</em> docking windows we need to remove the secondary header and change the tabs orientation so they appear at the bottom. We can do that by changing a couple of existing properties. For this example I have removed the display of the context button so we have just a close button showing&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockNav3.gif" alt="" /></p>
<p>Now we have the correct layout we need to add some new palette styles so the appearance can be customized for just the docking scenario. Two new header styles called <em>HeaderDockActive</em> and <em>HeaderDockInactive</em> allow the header to indicate the active state of the navigator. The next two images show the header in each of the two styles.</p>
<p>Also added are a new <em>TabBorderStyle</em> called <em>Dock</em> and a tab style of <em>Dock</em> that allow the shape and appearance of the tabs to be defined specifically for the docking scenario. These changes give the final look and feel as follows for the <em>Office 2007 - Blue</em> palette&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockNav4.gif" alt="" /></p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockNav5.gif" alt="" /></p>
<p>Once I get to write the docking code there will be an event that is fired whenever a navigator is created. Just before the event is fired the navigator will be customized so it looks as seen above. But you will be able to hook into that event and alter the appearance to whatever you prefer instead. For example, you might decide to have a stacking buttons style instead. Allowing easy customization of appearance and operation are a key goal of the docking windows system.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/NoqSEp2Xtds" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/05/docking-appearance/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/05/docking-appearance/</feedburner:origLink></item>
		<item>
		<title>25% Sale - Only 2 Days Left</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/wXFEo4NetQk/</link>
		<comments>http://www.componentfactory.com/blog/2009/04/25-sale-only-2-days-left/#comments</comments>
		<pubDate>Wed, 29 Apr 2009 02:36:54 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=478</guid>
		<description><![CDATA[Krypton Sale - 25% Off for April 2009
(You only have 2 days left to take advantage)
To celebrate the release of Krypton Suite 3.5 we are offering a 25% sale on all prices for April. Combine this with our 60 day money back guarantee and you would be mad not to give Krypton a try out.
Use [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Krypton Sale - 25% Off for April 2009</strong><br />
(You only have 2 days left to take advantage)</p>
<p>To celebrate the release of Krypton Suite 3.5 we are offering a 25% sale on all prices for April. Combine this with our 60 day money back guarantee and you would be mad not to give Krypton a try out.</p>
<p>Use Krypton to build WinForms applications with the latest look and feel including the Office 2007 and Windows Media Player themes.</p>
<p><strong>See our 25% off prices&#8230;</strong><br />
<a href="http://www.componentfactory.com/purchase.php">Prices Page</a></p>
<p><strong>Download Krypton Suite&#8230;<br />
</strong><a href="http://www.componentfactory.com/downloads/KryptonSuite352.zip">KryptonSuite352.zip</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/wXFEo4NetQk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/04/25-sale-only-2-days-left/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/04/25-sale-only-2-days-left/</feedburner:origLink></item>
		<item>
		<title>Cell Maximize/Restore</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/j-R-HUROG0c/</link>
		<comments>http://www.componentfactory.com/blog/2009/04/cell-maximizerestore/#comments</comments>
		<pubDate>Fri, 24 Apr 2009 13:21:11 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Navigator]]></category>

		<category><![CDATA[Krypton Workspace]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=475</guid>
		<description><![CDATA[KryptonWorkspace has a new property called MaximizedCell that positions a cell to occupy the entire client area of the workspace. This allows the user to concentrate on an area of special interest for a period of time before returning to the previous layout. Here we have a simple workspace with three cells defined.

Right clicking on the [...]]]></description>
			<content:encoded><![CDATA[<p><em>KryptonWorkspace</em> has a new property called <em>MaximizedCell</em> that positions a cell to occupy the entire client area of the workspace. This allows the user to concentrate on an area of special interest for a period of time before returning to the previous layout. Here we have a simple workspace with three cells defined.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/WsMaxRestore1.gif" alt="" /></p>
<p>Right clicking on the <em>Workstation</em> tab header shows a context menu with a new <em>Maximize</em> option.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/WsMaxRestore2.gif" alt="" /></p>
<p>Selecting the option gives the following maximized layout with all but the maximized cell hidden from view.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/WsMaxRestore3.gif" alt="" /></p>
<p>Right click the tab header again and you will find the <em>Maximize</em> option has changed to become <em>Restore</em> instead. Keyboard users can use the shortcut <em>Ctrl + Shift + M </em>combination to toggle between maximized and restored.</p>
<p>In the examples above you can see a <em>ButtonSpec</em> that I added with appropriate images that allows an easier method of switching without requiring the user to discover the feature by looking at the context menu. This <em>ButtonSpec</em> is not added by the workspace and so if you want the same ability you will need to add it manually just as I did. You can see the new <em>Cell Maximize + Restore</em> sample to discover the few lines of code needed to add this capability.</p>
<p><strong>Double Clicking Tabs<br />
</strong>I&#8217;ve also added a new event to the <em>KryptonNavigator</em> called <em>TabDoubleClicked </em>which is fired whenever the user double clicks with the left mouse button on the tab header. In my new sample this is used to toggle the maximzed state but you could use this as a trigger for any default action you would like to perform.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/j-R-HUROG0c" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/04/cell-maximizerestore/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/04/cell-maximizerestore/</feedburner:origLink></item>
		<item>
		<title>Workspace Persistence</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/eoMADFlHTJQ/</link>
		<comments>http://www.componentfactory.com/blog/2009/04/workspace-persistence/#comments</comments>
		<pubDate>Tue, 21 Apr 2009 14:28:33 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Workspace]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=473</guid>
		<description><![CDATA[I love the KryptonWorkspace. When you combine the flexibility of the KryptonNavigator with drag and drop positioning you have a great control. But a missing feature is the ability to persist the workspace layout so that it can be restored again. Many applications would like to save the layout when closed and reload it again at restart. [...]]]></description>
			<content:encoded><![CDATA[<p>I love the <em>KryptonWorkspace</em>. When you combine the flexibility of the <em>KryptonNavigator</em> with drag and drop positioning you have a great control. But a missing feature is the ability to persist the workspace layout so that it can be restored again. Many applications would like to save the layout when closed and reload it again at restart. Even better would be allowing the user to save multiple layouts so they can quickly switch between them as needed at the click of a button.</p>
<p><strong>Persistence Formats<br />
</strong>Use <em>SaveLayoutToFile </em>and <em>LoadLayoutFromFile</em> in order to persist to/from a file. The actual contents of the file will be an XML document but you can ignore this as modifying the contents risks making it invalid. Alternatively use the <em>SaveLayoutToArray</em> and <em>LoadLayoutFromArray</em> methods to deal with arrays of bytes. An array of bytes makes it easy to save the data into a database and so associate the layout with user&#8217;s details. Or you could convert the array of bytes into a Base64 string and include it into your own applications persistence mechanism.</p>
<p>There are two other formats for those needing even more options. <em>SaveLayoutToXml</em> and <em>LoadLayoutFromXml </em>use references to instances of <em>XmlTextWriter</em> and <em>XmlTextReader</em> classes respectively. So if you are already using these two classes for streaming your own data you can call into these methods and have the layout data inserted into your own XML data. Finally th <em>SaveLayoutToStream</em> and <em>LoadLayoutFromStream</em> are the most flexible and allow you to supply any <em>Stream</em> derived class.</p>
<p><strong>Persisted Information<br />
</strong>The hierarchy of the layout is saved starting with the <em>Root</em> sequence of the control. Each workspace sequence and cell is saved along with the details needed to recreate that item. Each cell can contain any number of individual <em>KryptonPage</em> instances, so details about each page are also saved including most, but not all, of the properties of the page. You should assume that everything about the page is saved except for two types of information. The actual set of child controls that exist on the page are not persisted and neither are the modified values of the <em>State</em> properties. We can see the implications of this by looking at the two likely scenarios for usage.</p>
<p>In the static scenario the set of pages in the workspace are going to be fixed and so every time you run your application the pages are identical. This is the easiest situation to handle.  Reloading is only expected to result in the repositioning of pages into a new layout but not cause the creation or removal of pages. You do not need to write any additional code to handle this scenario and simply calling the <em>Save</em>/<em>Load</em> methods will perform this default behavior. This is because when a page is loaded the control attempts to lookup the named page in the existing set of pages. If found it simply uses that existing page. In this static scenario the loading page will always be found and so reused.</p>
<p>In a dynamic scenario the set of pages could be different every time the application is run. Here you would be creating new pages depending on the users actions. Now when you load a layout you are likely to find that none of the existing pages match those being loaded. When a loading page does not match any of the existing ones then it creates a new page instance and updates the page with the loading data. Once the loading is complete it will remove any pages that are no longer required. This scenario does require you to write some additional code because the child controls on a page need to be created by the developer and are not persisted by the workspace control. Hook into the <em>PageLoading</em> event which is called each time a page is loaded and add the child controls as appropriate for that page (more on this below).</p>
<p><strong>Customization Events</strong><br />
It is very likely you will want to save some additional application specific information along with the automatically generated content. To allow this use the <em>GlobalSaving</em> and <em>GlobalLoading</em> events to persist whatever arbitrary data you like. Use the <em>PageLoading</em> and <em>PageSaving</em> to persist custom data on a per-page basis.</p>
<p>As noted above, the <em>PageLoading</em> is the event used to not just recover custom data but also allow you to modify the page instance before it is used. If you have pages being created then this is where you would add the appropriate child controls and perform whatever data binding etc might be required. You can go even futher than that and assign a new page instance to the returned event data so that your assigned page is used in place of the original. It will probably be easier to create a new page in your event handler than try to customize the page provided by adding the child controls in code. Note you could assign <em>null</em> to the returned event data and so prevent a page being added at all. This is the technique needed to prevent a loading page from being added to the workspace, effectively ensuring the loading page is ignored as no longer required.</p>
<p>Our final event is fired at the end of the loading process and called <em>PagesUnmatched</em>. This event provides you with a list of pages that were present before the load started but were not matched with any loaded page. By default, if you do nothing then those unmatched pages will be deleted from the workspace. Hook this event if you need to examine that list of unmatched pages and instead use code to add them into the workspace again so they are not removed.</p>
<p>I have added a new workspace demo that shows per-page custom data being added to the persisted information so that you can see in code how easy it is.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/eoMADFlHTJQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/04/workspace-persistence/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/04/workspace-persistence/</feedburner:origLink></item>
		<item>
		<title>The Great Recession</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/mkp1ENKf37M/</link>
		<comments>http://www.componentfactory.com/blog/2009/04/the-great-recession/#comments</comments>
		<pubDate>Thu, 16 Apr 2009 02:00:06 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=464</guid>
		<description><![CDATA[The global recession has been underway for a year and I&#8217;ve been wondering how long will it last. How bad can it get before the return of growth?
Being from the UK I often read the BBC News website and spotted this graph that really puts it into perspective. It shows a comparison between the current downturn and the recessions in [...]]]></description>
			<content:encoded><![CDATA[<p>The global recession has been underway for a year and I&#8217;ve been wondering how long will it last. How bad can it get before the return of growth?</p>
<p>Being from the UK I often read the BBC News website and spotted this graph that really puts it into perspective. It shows a comparison between the current downturn and the recessions in 1980 and 1990. Keep in mind these figures are for the UK only.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/GreatRecession.gif" alt="" /></p>
<p>We can clearly see that the red line is marching downwards without any sign yet of turning. The recession is already much worse than that of the 1990&#8217;s and seems to be matching that of the 1980&#8217;s. Obviously no one knows when it will actually turn but lets assume it matches the 1980&#8217;s recession. In that case we can expect all of 2009 to consist of negative growth. Starting in 2010 we could see growth return but it would still take another two years for output to reach pre-recession levels.</p>
<p>If however, the red line keeps going past the 1980&#8217;s level then we can expect even more than 3 years before the economy is back in reasonably good shape. That means we will be telling our kids about the Great Recession.</p>
<p>But we need to take care before becoming as depressed as the economists. This recession is going to split people into two groups. If you&#8217;re laid off then things are going to be pretty rough for quite a long time. But remember that 90% of people will not lose their job. That means 90% of households are paying much lower interest rates of their mortgage and if you need to replace your car then now is the best time of your life. So most people will have the chance to emerge from the downturn in a much better financial position than when they entered it. I hope that that most of us fit into that category.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/mkp1ENKf37M" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/04/the-great-recession/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/04/the-great-recession/</feedburner:origLink></item>
		<item>
		<title>Krypton 3.5.2 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/C_z8HioMdFs/</link>
		<comments>http://www.componentfactory.com/blog/2009/04/krypton-352-released/#comments</comments>
		<pubDate>Wed, 15 Apr 2009 06:45:13 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=468</guid>
		<description><![CDATA[Includes an important fix with the KryptonTextBox that was displaying the password text when in disabled mode. This made the text box unusable when disabled.
Download 3.5.2
]]></description>
			<content:encoded><![CDATA[<div class="content">Includes an important fix with the KryptonTextBox that was displaying the password text when in disabled mode. This made the text box unusable when disabled.</div>
<p><a href="http://www.componentfactory.com/downloads/KryptonSuite352.zip">Download 3.5.2</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/C_z8HioMdFs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/04/krypton-352-released/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/04/krypton-352-released/</feedburner:origLink></item>
		<item>
		<title>Krypton 3.5.1 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/FRybMM0Du7E/</link>
		<comments>http://www.componentfactory.com/blog/2009/04/krypton-351-released/#comments</comments>
		<pubDate>Tue, 14 Apr 2009 12:31:42 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=466</guid>
		<description><![CDATA[A maintenance release that fixes issues mainly in the new KryptonDateTimePicker and KryptonMonthCalender controls. Also an important fix with the KryptonTextBox that was displaying the password text when in disabled mode.
Download 3.5.1
]]></description>
			<content:encoded><![CDATA[<p>A maintenance release that fixes issues mainly in the new KryptonDateTimePicker and KryptonMonthCalender controls. Also an important fix with the KryptonTextBox that was displaying the password text when in disabled mode.</p>
<p><a class="postlink" href="http://www.componentfactory.com/downloads/KryptonSuite351.zip">Download 3.5.1</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/FRybMM0Du7E" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/04/krypton-351-released/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/04/krypton-351-released/</feedburner:origLink></item>
		<item>
		<title>Silverlight vs WPF vs Flash</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/2KcAVpSMlNI/</link>
		<comments>http://www.componentfactory.com/blog/2009/04/silverlight-vs-wpf-vs-flash/#comments</comments>
		<pubDate>Mon, 06 Apr 2009 02:00:30 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[MicroISV]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=459</guid>
		<description><![CDATA[Silverlight vs WPF vs WinForms
When thinking about future development plans you need to take technical as well as the market demands into account. We know that WinForms is no longer being actively developed by Microsoft and so the a long slow decline in sales of WinForms components can be expected. WPF is the new desktop story with [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Silverlight vs WPF vs WinForms</strong></p>
<p>When thinking about future development plans you need to take technical as well as the market demands into account. We know that WinForms is no longer being actively developed by Microsoft and so the a long slow decline in sales of WinForms components can be expected. WPF is the new desktop story with little brother Silverlight being heavily pushed for RIA (Rich Internet Applications). Does that mean all WinForms development is now a waste of time? Should I stop developing WinForms components/controls immediately?</p>
<p>Far from it, just think of the existing WinForms installed base as well as the huge number of .NET developers that have achieved technical competence in that technology. Few companies can afford to rewrite applications in WPF just because it&#8217;s now flavor of the month. Besides, when it comes to line of business applications WinForms is perfectly acceptable. No doubt WPF will become more and more compelling for new projects but it has yet to become de facto for new desktop apps.</p>
<p>We can use the handy <a href="http://www.google.com/trends?q=silverlight%2Cwpf%2Cwindows+forms&amp;ctab=0&amp;geo=us&amp;geor=all&amp;date=all&amp;sort=1">Good Trends</a> service to check out the relative popularity of different keywords. If we assume there is some rough correlation between keyword searching and actual technology usage we get the following&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/SilverlightWPFWinForms.gif" alt="" /></p>
<p>We can see the WPF trend moving steadily upwards as WinForms usage switches over. More interesting is the Silverlight trend. Despite being the new kid on the block we can see it&#8217;s already very popular and the upward trend is much steeper than for WPF. Of the two technologies it seems that Silverlight is where the interest and action is going to be.<br />
<strong>Silverlight vs Flash</strong></p>
<p>As Silverlight is judged to be in competition to Flash, whether Microsoft choose to admit it or not, it might be handy to compare them. Doing so gives us the following rather sobering graph&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/SilverlightFlash.gif" alt="" /></p>
<p>Clearly Silverlight is not going to replace Flash in the immediate future. Then again any new technology for developing rich sites is always going to be in a minority for many years to come. I cannot imagine Facebook, MySpace, New York Times etc becoming Flash/Silverlight. I can see that any small startup is going to be tempted by the ease of outputting simple HTML pages rather than building an RIA as the first iteration. So maybe RIA is destined to be limited to business applications and niche areas.<br />
<strong>Silverlight vs Adobe Flex</strong></p>
<p>A fairer comparison might be Silverlight and the Adobe Flex environment as that truly represents the actual development competition. In that case things look a little brighter&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/SilverlightFlex.gif" alt="" /></p>
<p>Things are pretty even here and it could be some time before a clear leader emerges.<br />
<strong>Conclusion</strong></p>
<p>As a component vendor what strategy can be we take away from this? First of all I think there is still some mileage in WinForms for two reasons. First is the large installed base and existing knowledge base that means many projects will continue to use it for many years to come. Second is the advantage of being a small one man vendor. A legacy development base would still provide enough income to make a respectable living for a lone wolf like myself, although it only represents executive wash room costs for the big vendors. So I intend to be actively developing Krypton for some time yet. Indeed my next major burst of coding will be adding the much delayed docking windows capability.</p>
<p>Long term I still need to get involved in the Silverlight/WPF market. From the above analysis it seems that targeting Silverlight should be the priority. The fact WPF uses essentially the same framework means that with care the same code base could be used to create WPF versions of the same components. I will use my limited spare time to play around with Silverlight and think about ideas for components that would add value for RIA scenarios.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/2KcAVpSMlNI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/04/silverlight-vs-wpf-vs-flash/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/04/silverlight-vs-wpf-vs-flash/</feedburner:origLink></item>
		<item>
		<title>25% April Sale</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/ng61OSKETnQ/</link>
		<comments>http://www.componentfactory.com/blog/2009/04/25-april-sale/#comments</comments>
		<pubDate>Thu, 02 Apr 2009 02:00:00 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[MicroISV]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=462</guid>
		<description><![CDATA[There is one sales technique you rarely see in the software business, especially from components vendors, and that&#8217;s offering a sale. I have no idea is this will work but you don&#8217;t know unless you try. So for the month of April I&#8217;m offering a 25% discount on all Component Factory sales. That includes renewals [...]]]></description>
			<content:encoded><![CDATA[<p>There is one sales technique you rarely see in the software business, especially from components vendors, and that&#8217;s offering a sale. I have no idea is this will work but you don&#8217;t know unless you try. So for the month of April I&#8217;m offering a 25% discount on all Component Factory sales. That includes renewals as well as new purchases.</p>
<p>Although the sale started on the 1st April I decided to wait until the 2nd before adding a blog entry. I didn&#8217;t want people to think it was some sort of twisted April Fool’s Joke. I will post a forum message and notify my list of email subscribers in order to spread the message far and wide. I suspect the email list is where most extra sales will come from, if there are any, as it represents a large pool of developers that have not bought but expressed an interest at some point in the past</p>
<p>In order to make this work I need to increase the number of orders by 33% in order to cover the fact each sales is worth 25% less. Anything above 33% represents an actually benefit from having a sale. I will let you know at the end of the month how it works out.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/ng61OSKETnQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/04/25-april-sale/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/04/25-april-sale/</feedburner:origLink></item>
		<item>
		<title>Solid State Drives</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/joSH1OyUai8/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/solid-state-drives/#comments</comments>
		<pubDate>Sun, 29 Mar 2009 14:00:00 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=457</guid>
		<description><![CDATA[There&#8217;s been plenty of hype over the last couple of years that the trusty rotating hard drive is going to be replaced by solid state drives. So far they have been expensive, slow and and low capacity, making it more of a future tech than a now tech. But has the future finally arrived?
It seems that everyone is getting into [...]]]></description>
			<content:encoded><![CDATA[<p>There&#8217;s been plenty of hype over the last couple of years that the trusty rotating hard drive is going to be replaced by solid state drives. So far they have been expensive, slow and and low capacity, making it more of a future tech than a now tech. But has the future finally arrived?</p>
<p>It seems that everyone is getting into a lather about the newly introduced <a href="http://www.intel.com/design/flash/nand/mainstream/index.htm">Intel X25-M SSD</a>. Although still expensive at $400 for 80GB ($800 for 160GB) it does at least solve the slow speed and low capacity complaints. But just how fast is this new bad boy?</p>
<p>Check out this video showing <a href="http://www.youtube.com/watch?v=96dWOEa4Djs">24 x SSD in Raid 0</a> to see some pretty awesome desktop performance. On the down side 24 drives would set you back around $9,600. For a more realistic use of these drives <a href="http://www.joelonsoftware.com/items/2009/03/27.html">Joel Spolsky</a> has a blog entry about his attempt to use them for speeding up compile times on developer machines.</p>
<p>Give it another couple of years and my next development machine is definitely going to have a couple of SSD drives in Raid 0 for holding the OS and applications. Reserve those large terabyte spindles for storing pictures and videos of the family cat.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/joSH1OyUai8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/solid-state-drives/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/solid-state-drives/</feedburner:origLink></item>
		<item>
		<title>Ribbon Mania</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/-zpuzClhbK0/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/ribbon-mania/#comments</comments>
		<pubDate>Fri, 27 Mar 2009 07:09:57 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=455</guid>
		<description><![CDATA[Microsoft has never been able to achieve the same level of UX consistency as Apple (or any other major software vender for that matter). The usual excuse is that Microsoft cannot control the way other developers write applications and although they produce style guidelines they cannot enforce them. This is certainly a valid point but I [...]]]></description>
			<content:encoded><![CDATA[<p>Microsoft has never been able to achieve the same level of UX consistency as Apple (or any other major software vender for that matter). The usual excuse is that Microsoft cannot control the way other developers write applications and although they produce style guidelines they cannot enforce them. This is certainly a valid point but I think Microsoft make problems for themselves.</p>
<p>Take as an example the Ribbon control, a recent innovation that started out in Office 2007. This is a recent control and so there is really no excuse for getting it wrong. So how many implementations of the ribbon would you expect there to be? Let us count them&#8230;</p>
<p>1, Office 2007 has the original.<br />
2, Windows 7 has a different implementation.<br />
3, Visual C++ now has a ribbon MFC classes.<br />
4, WPF has a version written in managed code.</p>
<p>No wonder they need 100,000 developers at Microsoft when they duplicate so much work. Although they did cheat with the Visual C++ version as they bought it from a component vendor. Versions 1, 2 and 3 all have different code bases even though they all use C++ for the core implementation. I will cut them some slack on the WPF version as it needs to be written in a managed language and not C++.</p>
<p>Now add into the mix all the different ribbon controls from venders, including myself, for Window Forms, WPF, Silverlight and C++ and you&#8217;re talking about a massive level of coding duplication. Still, keeps us all in work I suppose.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/-zpuzClhbK0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/ribbon-mania/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/ribbon-mania/</feedburner:origLink></item>
		<item>
		<title>Follow me!</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/nDjbDhB2h0s/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/follow-me/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 14:00:34 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=445</guid>
		<description><![CDATA[I&#8217;ve finally decided to check out twitter.
Seems like every developer I come across uses it and thinks its wonderful. I have doubts but you don&#8217;t know till you try. At this point in time I have a mere 6 people following me so I&#8217;m not sure that my tweets are providing much value to the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve finally decided to check out twitter.</p>
<p>Seems like every developer I come across uses it and thinks its wonderful. I have doubts but you don&#8217;t know till you try. At this point in time I have a mere 6 people following me so I&#8217;m not sure that my <em>tweets</em> are providing much value to the world!</p>
<p><a href="http://twitter.com/Philip_Wright">Follow Phil</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/nDjbDhB2h0s" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/follow-me/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/follow-me/</feedburner:origLink></item>
		<item>
		<title>Krypton 3.5 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/pZ6GUsptdVw/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/krypton-35-released/#comments</comments>
		<pubDate>Mon, 23 Mar 2009 10:34:50 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=450</guid>
		<description><![CDATA[Krypton 3.5 Released
This version includes date, time and calendar controls so that you can create line of business applications with a professional look and feel. The number of free controls/components in the Toolkit is now an impressive 41.
New features in 3.5 include…
KryptonDateTimePicker
KryptonMonthCalendar
DateTimePicker for KryptonRibbon
MonthCalendar for KryptonContextMenu
Per-KryptonPage ButtonSpecs
Many bug fixes (consult change lists)
Download 3.5
]]></description>
			<content:encoded><![CDATA[<p><strong>Krypton 3.5 Released</strong></p>
<p>This version includes date, time and calendar controls so that you can create line of business applications with a professional look and feel. The number of free controls/components in the Toolkit is now an impressive 41.</p>
<p>New features in 3.5 include…</p>
<p>KryptonDateTimePicker<br />
KryptonMonthCalendar<br />
DateTimePicker for KryptonRibbon<br />
MonthCalendar for KryptonContextMenu<br />
Per-KryptonPage ButtonSpecs<br />
Many bug fixes (consult change lists)</p>
<p><a href="http://www.componentfactory.com/downloads/KryptonSuite350.zip">Download 3.5</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/pZ6GUsptdVw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/krypton-35-released/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/krypton-35-released/</feedburner:origLink></item>
		<item>
		<title>Adopt Silverlight?</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/QqG9-O1p5-I/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/adopt-silverlight/#comments</comments>
		<pubDate>Sat, 21 Mar 2009 06:02:27 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=440</guid>
		<description><![CDATA[Third time&#8217;s a charm?
A common belief is it takes three versions before Microsoft really gets a new technology right. Now that Silverlight 3 has been announced at MIX09 it would seem a good time to take a look at this platform.
WPF, the big brother of Silverlight, has been around since Vista was released and although [...]]]></description>
			<content:encoded><![CDATA[<p><span style="FONT-WEIGHT: bold">Third time&#8217;s a charm?</span><br />
A common belief is it takes three versions before Microsoft really gets a new technology right. Now that Silverlight 3 has been announced at MIX09 it would seem a good time to take a look at this platform.</p>
<p>WPF, the big brother of Silverlight, has been around since Vista was released and although a critical success has only slowly gained traction in desktop development. I think this is because WinForms, despite many shortcomings, is good enough for most business focused applications. With few &#8216;must have&#8217; reasons to immediately make the jump, adoption is rising but only slowing.</p>
<p>Silverlight adoption has the potential to happen much faster for two reasons. First is the continuing trend towards richer internet applications. Although you can create nice websites using Ajax, jQuery and HTML it takes great developers pushing the limits to achieve it. Silverlight makes it possible for average developers to do the same but in less time.</p>
<p>The second force is just shear weight of numbers. With about a million .NET developers in the world you are instantly opening up rich internet development for them all. Asking a C#/WinForms developer to learn all about Ajax, jQuery, CSS and so forth is a steep learning curve with no leverage of existing skills. But ask the same developer to keep using C# and much of the same base class library and it becomes much more appealing. Plus once you have mastered Silverlight you can transition that knowledge over to your desktop apps with WPF.</p>
<p>This entire preamble merely explains why I find Silverlight interesting as an area I should start thinking about. I would like to hear bad about others opinions and get a discussion going about this topic.</p>
<p><strong>1, Should Component Factory get involved in Silverlight?</p>
<p>2, What type of controls/components etc would be useful?</strong></p>
<p>I have started a <a href="http://www.componentfactory.com/forums/viewtopic.php?f=4&amp;t=2005#p8301">forum thread</a> for this discussion. This will make it easier to track the full set of responses on an ongoing basis. Thanks.</p>
<p><a href="http://silverlight.net/getstarted/silverlight3/default.aspx">Silverlight 3 Beta Site</a><br />
<a href="http://timheuer.com/blog/archive/2009/03/18/silverlight-3-whats-new-a-guide.aspx">Silverlight Development Links</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/QqG9-O1p5-I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/adopt-silverlight/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/adopt-silverlight/</feedburner:origLink></item>
		<item>
		<title>IE8 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/pifdA_4WDUw/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/ie8-released/#comments</comments>
		<pubDate>Fri, 20 Mar 2009 00:19:41 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=438</guid>
		<description><![CDATA[You can now download the full release of IE8 from Microsoft.
Download IE8
]]></description>
			<content:encoded><![CDATA[<p>You can now download the full release of IE8 from Microsoft.</p>
<p><a href="http://www.microsoft.com/ie">Download IE8</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/pifdA_4WDUw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/ie8-released/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/ie8-released/</feedburner:origLink></item>
		<item>
		<title>Beta 2 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/xdXcTZKTuxI/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/beta-2-released/#comments</comments>
		<pubDate>Wed, 18 Mar 2009 04:56:28 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Navigator]]></category>

		<category><![CDATA[Krypton Ribbon]]></category>

		<category><![CDATA[Krypton Toolkit]]></category>

		<category><![CDATA[Krypton Workspace]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=436</guid>
		<description><![CDATA[Krypton 3.5 Beta 2 Released
This new beta has quite a few changes based on the feedback from testers of the first version earlier in the week. Most of the changes are in the date time picker and month calendar controls. Here is a full list of changes since the first beta&#8230;
KryptonDateTimePicker

Text property now returns the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Krypton 3.5 Beta 2 Released</strong></p>
<p>This new beta has quite a few changes based on the feedback from testers of the first version earlier in the week. Most of the changes are in the date time picker and month calendar controls. Here is a full list of changes since the first beta&#8230;</p>
<p><strong>KryptonDateTimePicker</strong></p>
<ul>
<li>Text property now returns the actual displayed text, used to always return an empty string.</li>
<li>MouseWheel now performs the key up/down action of the active text field.</li>
<li>Entering 31 for the day number would not select the correct day.</li>
<li>Up/Down actions on the day would not overflow within the same month.</li>
<li>Mouse down on non-day parts of calendar would dismiss the context menu.</li>
</ul>
<p><strong>KryptonMonthCalendar</strong></p>
<ul>
<li>Drawing was corrupted for many non-English culture settings.</li>
<li>Can now set the background to transparent so parent background shows through.</li>
<li>Changing the DayStyle could crash when using a KryptonPalette.</li>
<li>When number of rows and columns were different mouse selection could crash.</li>
<li>Can now enter 1 or 2 digits for the descriptive month field to change the value.</li>
</ul>
<p><strong>Other</strong></p>
<ul>
<li>Palette upgrade tool now converts versions 12 and below to latest version 13.</li>
<li>Switching Navigator between Outlook modes would cause a crash.</li>
<li>KryptonComboBox would select text when you minimize/restore the form.</li>
</ul>
<p><a href="http://www.componentfactory.com/downloads/KryptonSuite3044.zip">Download Beta 2</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/xdXcTZKTuxI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/beta-2-released/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/beta-2-released/</feedburner:origLink></item>
		<item>
		<title>Krypton 3.5 Beta Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/bLKUR2udc14/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/krypton-35-beta-released/#comments</comments>
		<pubDate>Mon, 16 Mar 2009 05:46:49 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Navigator]]></category>

		<category><![CDATA[Krypton Ribbon]]></category>

		<category><![CDATA[Krypton Toolkit]]></category>

		<category><![CDATA[Krypton Workspace]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=434</guid>
		<description><![CDATA[You can now download the 3.5 Beta version using the link at the bottom of the post. The actual version number is 3.0.40 which ensures that existing serial keys, which are locked to 3.0.X, will work. New features include the following&#8230;
KryptonDateTimePicker
KryptonMonthCalendar
DateTimePicker for KryptonRibbon
MonthCalendar for KryptonContextMenu
Per-KryptonPage ButtonSpecs
Many bug fixes (consult change lists)
I will create a forum so [...]]]></description>
			<content:encoded><![CDATA[<p>You can now download the 3.5 Beta version using the link at the bottom of the post. The actual version number is 3.0.40 which ensures that existing serial keys, which are locked to 3.0.X, will work. New features include the following&#8230;</p>
<p>KryptonDateTimePicker<br />
KryptonMonthCalendar<br />
DateTimePicker for KryptonRibbon<br />
MonthCalendar for KryptonContextMenu<br />
Per-KryptonPage ButtonSpecs<br />
Many bug fixes (consult change lists)</p>
<p>I will create a forum so that bugs and other feedback can be logged for the beta specific release.</p>
<p><a href="http://www.componentfactory.com/downloads/KryptonSuite3040.zip">Download Beta</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/bLKUR2udc14" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/krypton-35-beta-released/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/krypton-35-beta-released/</feedburner:origLink></item>
		<item>
		<title>Per-Page ButtonSpecs</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/AwMbHRlqstA/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/per-page-buttonspecs/#comments</comments>
		<pubDate>Thu, 12 Mar 2009 07:16:10 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Navigator]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=432</guid>
		<description><![CDATA[Ever since Internet Explorer 7 I have been receiving requests for adding ButtonSpecs to each individual KryptonPage within the KryptonNavigator. You could use this to add a close button to each page so it mimics the IE7 way of working.
Because the button spec collection is provided on a per-page basis you do not have to [...]]]></description>
			<content:encoded><![CDATA[<p>Ever since Internet Explorer 7 I have been receiving requests for adding <em>ButtonSpecs</em> to each individual <em>KryptonPage</em> within the <em>KryptonNavigator</em>. You could use this to add a close button to each page so it mimics the IE7 way of working.</p>
<p>Because the button spec collection is provided on a per-page basis you do not have to provide exactly the same button spec for every page, you can have different sets of buttons per-page. Here I have added a drop down button spec to the first page, a close button to the second and a couple of navigation buttons to the fourth.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/NavPageBS1.gif" alt="" /></p>
<p>As with all button specs you can specify tool tip information as shown in the above picture. You can also assign a <em>KryptonContextMenu</em> to the button spec so that clicking causes a popup menu thus&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/NavPageBS2.gif" alt="" /></p>
<p>Of course, the ability works not just for the default tab headers mode. Here you can see one of the <em>CheckButton</em> modes&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/NavPageBS3.gif" alt="" /></p>
<p>Even the <em>Outlook Full</em> mode will show buttons as specified.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/NavPageBS4.gif" alt="" /></p>
<p>Now that the <em>KryptonMonthCalendar</em> and <em>KryptonDateTimePicker</em> controls are finished I am working on a few minor enhancements like the one here before I make release a beta version. I expect it to be about a week from now when that gets released into the wild.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/AwMbHRlqstA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/per-page-buttonspecs/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/per-page-buttonspecs/</feedburner:origLink></item>
		<item>
		<title>Editable DateTimePicker</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/d_Qkma3ZeEA/</link>
		<comments>http://www.componentfactory.com/blog/2009/03/editable-datetimepicker/#comments</comments>
		<pubDate>Thu, 05 Mar 2009 04:54:13 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=430</guid>
		<description><![CDATA[Finally we are approaching a completed DateTimePicker implementation. I&#8217;ve now added a keyboard interface so you can use the left/right arrows to move between the different elements of the format. For example, navigating from the date field to month field to the year field and around to the start again.  You can also us the up/down keys to [...]]]></description>
			<content:encoded><![CDATA[<p>Finally we are approaching a completed DateTimePicker implementation. I&#8217;ve now added a keyboard interface so you can use the left/right arrows to move between the different elements of the format. For example, navigating from the date field to month field to the year field and around to the start again.  You can also us the up/down keys to modify the values or if you prefer the up/down buttons if you choose to display them inside of the drop down button.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KDTP2A.gif" alt="" /></p>
<p>Also update is the ribbon so you can display and modify dates inside the ribbon groups as shown here.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KDTP2B.gif" alt="" /></p>
<p>There is only one remaining task, allowing the entry of numeric values using the keyboard numbers. Up and down keys are fine but entering the number directly is a feature of the built-in control that speeds up data entry.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/d_Qkma3ZeEA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/03/editable-datetimepicker/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/03/editable-datetimepicker/</feedburner:origLink></item>
		<item>
		<title>Visual Studio 2010</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/kdq0aMhnCkI/</link>
		<comments>http://www.componentfactory.com/blog/2009/02/visual-studio-2010/#comments</comments>
		<pubDate>Thu, 26 Feb 2009 07:07:34 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=427</guid>
		<description><![CDATA[You can see a first glimpse of the new user interface for Visual Studio 2010 on the following Microsoft employee blog. Looks quite nice and makes use of WPF for the editing window.
Visual Studio 2010
]]></description>
			<content:encoded><![CDATA[<p>You can see a first glimpse of the new user interface for Visual Studio 2010 on the following Microsoft employee blog. Looks quite nice and makes use of WPF for the editing window.</p>
<p><a href="http://blogs.msdn.com/jasonz/archive/2009/02/20/a-new-look-for-visual-studio-2010.aspx">Visual Studio 2010</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/kdq0aMhnCkI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/02/visual-studio-2010/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/02/visual-studio-2010/</feedburner:origLink></item>
		<item>
		<title>DateTimePicker Reloaded</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/-xRCiws5VqM/</link>
		<comments>http://www.componentfactory.com/blog/2009/02/datetimepicker-reloaded/#comments</comments>
		<pubDate>Wed, 25 Feb 2009 00:35:07 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=425</guid>
		<description><![CDATA[Starting afresh the new KryptonDateTimePicker is starting to look like the finished product although there is still one major feature yet to be completed. I have tried to add the same set of properties as the standard windows version to make it easy to upgrade to the new control. I hope in most cases a simple [...]]]></description>
			<content:encoded><![CDATA[<p>Starting afresh the new <em>KryptonDateTimePicker</em> is starting to look like the finished product although there is still one major feature yet to be completed. I have tried to add the same set of properties as the standard windows version to make it easy to upgrade to the new control. I hope in most cases a simple find/replace of the class name will be enough to get people up and working. Although I cannot promise there will not be edge cases where you need to spend extra time manually checking/updating.</p>
<p>Here we have the control displayed with each of the four <em>Format</em> property settings of <em>Long</em>, <em>Short</em>, <em>Time</em> and <em>Custom</em>. The associated <em>CustomFormat</em> is defined as &#8220;<em>MMMM dd &#8216;at&#8217; hh:mm tt</em>&#8220;.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KDTP1.gif" alt="" /></p>
<p>Clicking the drop down button presents the new <em>KryptonMonthCalendar</em> control inside a <em>KryptonContextMenu</em> instance that allows the selection of a new date. The <em>DropDown</em> event is fired before the calendar is displayed and allows you to customize the context menu with additional menu items as required. This could be very handy if you need to add extra options such as predefined date selection.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KDTP2.gif" alt="" /></p>
<p>As with the standard control you can show a check box that allows the user to specify that the date should be null. In fact I have added an extra property called <em>ValueNullable</em> that will help with annoying data binding scenarios. The <em>Value</em> property works like the standard control and always returns a <em>DateTime</em> value but <em>ValueNullable</em> will return <em>DBNull</em> when the check box is cleared and return a <em>DateTime</em> when the check box is set. That should making binding against database columns easier.</p>
<p>Use <em>ShowUpDown</em> to show a pair of spin buttons instead of the default drop down button. As with most <em>Krypton</em> controls you can use <em>ButtonSpec</em> definitions to add extra buttons to the control area.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KDTP3.gif" alt="" /></p>
<p><strong><br />
Text Editing</strong></p>
<p>The one feature currently missing, and my next task, is the ability to modify the text area using the keyboard. I need to take the focus and highlight the different fragments of text such as just the month, day, hours and so forth. Then allow the up/down buttons and other keyboard actions to modify the value. This requires parsing the format and working out the correct drawing of different sections. Not that hard but it requires quite a bit work to get it working smoothly.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/-xRCiws5VqM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/02/datetimepicker-reloaded/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/02/datetimepicker-reloaded/</feedburner:origLink></item>
		<item>
		<title>New direction</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/QZb9LJKgNew/</link>
		<comments>http://www.componentfactory.com/blog/2009/02/new-direction/#comments</comments>
		<pubDate>Wed, 18 Feb 2009 01:51:21 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=423</guid>
		<description><![CDATA[Thanks for all the suggestions and ideas people have presented in the blog and also in the forums about ways to go about getting the DateTimePicker to work under visual styles of Vista. None of them actually solves the problem 100% and so I have decided to just write the control from scratch instead.
Even if all [...]]]></description>
			<content:encoded><![CDATA[<p>Thanks for all the suggestions and ideas people have presented in the blog and also in the forums about ways to go about getting the <em>DateTimePicker</em> to work under visual styles of Vista. None of them actually solves the problem 100% and so I have decided to just write the control from scratch instead.</p>
<p>Even if all the hacks could be make to give the correct presentation if would still be unpleasant having to hope that they continue to work for all future versions of Windows. It is much more work to start from scratch but I hope it will pay off in the long run and allow a greater level of flexibility. Adding additional functionality will be easier when you have the full source code and can do anything you want.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/QZb9LJKgNew" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/02/new-direction/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/02/new-direction/</feedburner:origLink></item>
		<item>
		<title>No cigar</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/s26RGDzXmlQ/</link>
		<comments>http://www.componentfactory.com/blog/2009/02/no-cigar/#comments</comments>
		<pubDate>Mon, 16 Feb 2009 10:13:53 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=421</guid>
		<description><![CDATA[I started work on the KryptonDateTimePicker a couple of days ago and it all seemed to be going pretty well. I took the same approach as for many of the other controls and embedded the standard DateTimePicker inside a Krypton container that provides the border. Here you can see a picture with the standard control at [...]]]></description>
			<content:encoded><![CDATA[<p>I started work on the <em>KryptonDateTimePicker</em> a couple of days ago and it all seemed to be going pretty well. I took the same approach as for many of the other controls and embedded the standard <em>DateTimePicker </em>inside a Krypton container that provides the border. Here you can see a picture with the standard control at the top and the Kryptonized version below&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KDTP1.bmp" alt="" /></p>
<p>The next step was to update the background color to match the palette setting. This is where things start to go downhill as I discover the <em>DateTimePicker</em> does not actually have a <em>BackColor</em> property. No problem I think to myself, I just need to override the <em>WndProc</em> and handle the <em>WM_ERASEBKGND</em> message myself. Draw the background in the required color myself and we are good to go.</p>
<p>Well not so fast. Although my code is executed it makes no difference to the displayed background. This is odd so I do some Google research and discover this is a well known bug in the control. Apparently the <em>WM_ERASEBKGND</em> approach works with controls that do not have visual styles enabled but fails otherwise. So I removed the application level call to <em>EnableVisualStyles</em> and tried again. Yep, now it draws the background correctly using my code. In practice almost all .NET applications call <em>EnableVisualStyles</em> when they are started so I need a solution that does not insist this line of code is removed from apps.</p>
<p>There is one last possibility which is to call <em>SetWindowTheme(Handle, &#8220;&#8221;, &#8220;&#8221;)</em> for the control instance and so turn off visual styles just for that one individual control. This allows the rest of the application to run as it likes but ensures we get the background drawn for our <em>KryptonDateTimePicker</em> instance.</p>
<p>Unfortunately this last gasp attempt just falls short. It draws the border and drop down button of the control in the <em>Windows Classic</em> appearance which is exactly what I expect when visual styles are turned off. But it still stubbornly does not draw the text background using the <em>WM_ERASEBKGND</em> code! Close but no cigar.</p>
<p>Unless someone out there has a clever idea it looks like I need to scrap the work and begin again with a new approach.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/s26RGDzXmlQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/02/no-cigar/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/02/no-cigar/</feedburner:origLink></item>
		<item>
		<title>Calendar in Menu</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/QyyXhyoK5DY/</link>
		<comments>http://www.componentfactory.com/blog/2009/02/calendar-in-menu/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 05:28:19 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=416</guid>
		<description><![CDATA[When developing the standalone KryptonMonthCalendar I ensured it was compatible with the mechanism used to place its drawing code as an element inside the KryptonContextMenu. So you can embed a calendar inside the context menu to create rich date selection functionality. Here you can see a simple example where the calendar is inside a menu [...]]]></description>
			<content:encoded><![CDATA[<p>When developing the standalone <em>KryptonMonthCalendar</em> I ensured it was compatible with the mechanism used to place its drawing code as an element inside the KryptonContextMenu. So you can embed a calendar inside the context menu to create rich date selection functionality. Here you can see a simple example where the calendar is inside a menu that is associated with the drop down button.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KCM3F.gif" alt="" /></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/QyyXhyoK5DY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/02/calendar-in-menu/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/02/calendar-in-menu/</feedburner:origLink></item>
		<item>
		<title>New Month Colors</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/2hsuLkQ-xIY/</link>
		<comments>http://www.componentfactory.com/blog/2009/02/new-month-colors/#comments</comments>
		<pubDate>Thu, 12 Feb 2009 01:58:21 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=414</guid>
		<description><![CDATA[Although the original colors look pretty good I did not feel entirely happy with them. So I have redesigned the colors in what I feel is a big improvement. Here you can see the three Office 2007 color schemes&#8230;



&#8230;the Sparkle Blue palette&#8230;

&#8230;and finally the System palette&#8230;

I know some would prefer the gradient effect colors for [...]]]></description>
			<content:encoded><![CDATA[<p>Although the original colors look pretty good I did not feel entirely happy with them. So I have redesigned the colors in what I feel is a big improvement. Here you can see the three Office 2007 color schemes&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KCM3A.gif" alt="" /></p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KCM3B.gif" alt="" /></p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KCM3C.gif" alt="" /></p>
<p>&#8230;the Sparkle Blue palette&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KCM3D.gif" alt="" /></p>
<p>&#8230;and finally the System palette&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KCM3E.gif" alt="" /></p>
<p>I know some would prefer the gradient effect colors for selection but I feel this is more appropriate.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/2hsuLkQ-xIY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/02/new-month-colors/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/02/new-month-colors/</feedburner:origLink></item>
		<item>
		<title>Today and ButtonSpecs</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/8xyvnJOgaoQ/</link>
		<comments>http://www.componentfactory.com/blog/2009/02/today-and-buttonspecs/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 04:52:49 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=412</guid>
		<description><![CDATA[ShowToday and ShowTodayCircle
These two properties mimic those available in the standard MonthCalendar control and perform the same funtions. Use ShowToday to have a button placed on the bottom header that is used to change the current selection to today. ShowTodayCircle will provide a highlight around today&#8217;s date so that you can find it quickly. This [...]]]></description>
			<content:encoded><![CDATA[<p><strong>ShowToday and ShowTodayCircle</strong></p>
<p>These two properties mimic those available in the standard <em>MonthCalendar</em> control and perform the same funtions. Use <em>ShowToday</em> to have a button placed on the bottom header that is used to change the current selection to today. <em>ShowTodayCircle </em>will provide a highlight around today&#8217;s date so that you can find it quickly. This image show both of these properties defined.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KCMT1.gif" alt="" /></p>
<p>There is an <em>OverrideToday</em> property so that you can alter the way in which the today&#8217;s date entry is highlighted. So if you prefer to change the background or text color then you can easily do so.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KCMT2.gif" alt="" /><br />
<strong>ButtonSpecs</strong></p>
<p>As with many of the Krypton controls you can specify <em>ButtonSpec</em> instances in order to add extra functionality to the control. In the above pictures you can see an extra button with the text &#8216;XYZ&#8217; added to the bottom header. All button specs are added to the bottom header. If you need to add many additional options you should set a button spec to have a drop down context menu.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/8xyvnJOgaoQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/02/today-and-buttonspecs/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/02/today-and-buttonspecs/</feedburner:origLink></item>
		<item>
		<title>Bold and Weeks</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/wRP9i6M1aro/</link>
		<comments>http://www.componentfactory.com/blog/2009/02/bold-an-weeks/#comments</comments>
		<pubDate>Thu, 05 Feb 2009 10:09:05 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=409</guid>
		<description><![CDATA[Bolded Dates
You can use three properties to describe the dates you would like to appear in bold. These are the same as those for the standard MonthCalendar and allow arbitrary dates, per-month dates and per-year dates. If you prefer to show the dates in a different way you can alter the OverrideBolded state information to achieve [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Bolded Dates</strong></p>
<p>You can use three properties to describe the dates you would like to appear in bold. These are the same as those for the standard MonthCalendar and allow arbitrary dates, per-month dates and per-year dates. If you prefer to show the dates in a different way you can alter the <em>OverrideBolded</em> state information to achieve the required appearance.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KMCBold.gif" alt="" /></p>
<p><strong>Week Numbers</strong></p>
<p>Many accounting applications needs to show the week number alongside the dates to help the user correctly select the day of interest. Just like the standard MonthCalendar you can set the <em>ShowWeekNumbers</em> property as needed.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KMCWeeks.gif" alt="" /></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/wRP9i6M1aro" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/02/bold-an-weeks/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/02/bold-an-weeks/</feedburner:origLink></item>
		<item>
		<title>Perfect Storm</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/cIBEUv_gxH0/</link>
		<comments>http://www.componentfactory.com/blog/2009/01/perfect-storm/#comments</comments>
		<pubDate>Fri, 30 Jan 2009 02:01:15 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=407</guid>
		<description><![CDATA[Since the turn of the year I have been very busy dealing with a host of customer support requests. For some unknown reason it seems everyone decided to wait until the new year and then email me at the same time. Hence some of you might have assumed I had gone into hiding because of [...]]]></description>
			<content:encoded><![CDATA[<p>Since the turn of the year I have been very busy dealing with a host of customer support requests. For some unknown reason it seems everyone decided to wait until the new year and then email me at the same time. Hence some of you might have assumed I had gone into hiding because of no blog postings. Now that I have caught up with the backlog we should be back to business as usual.</p>
<p>I&#8217;ve been able to restart work on the KryptonMonthCalendar and have it up and working as a standalone control although with limited functionality at the moment. Here is a picture of the current state&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KMC2.gif" alt="" /></p>
<p>You can use the mouse or keyboard to select a continuous date range and use the previous/next buttons to shift the displayed months forwards and backwards. Next I intend adding the ability to define dates that need to be shown in bold. This is something you can do with the standard month calendar as well so I guess many people will want the same ability in the Krypton version.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/cIBEUv_gxH0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/01/perfect-storm/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/01/perfect-storm/</feedburner:origLink></item>
		<item>
		<title>KryptonMonthCalendar</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/TNmyhFdx5Gc/</link>
		<comments>http://www.componentfactory.com/blog/2008/12/kryptonmonthcalendar/#comments</comments>
		<pubDate>Sat, 13 Dec 2008 11:46:11 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=405</guid>
		<description><![CDATA[Now I am firmly established in the new house I&#8217;ve managed to get back to working properly. Half the week was spent catching up with emails and the other getting on with the new KryptonMonthCalendar control. I have just completed the basic appearance as you can see here.

Now I need to add this as an element for use inside [...]]]></description>
			<content:encoded><![CDATA[<p>Now I am firmly established in the new house I&#8217;ve managed to get back to working properly. Half the week was spent catching up with emails and the other getting on with the new <em>KryptonMonthCalendar</em> control. I have just completed the basic appearance as you can see here.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KryptonMonthCalendar1.gif" alt="" /></p>
<p>Now I need to add this as an element for use inside a <em>KryptonContextMenu</em>. This will allow it to appear in a drop down that will be required later when a date picker is created. It also means you&#8217;ll be able to create your own context menus that include a month calendar element. You could add menu options for pre-defined dates or other actions that are specific to your application.</p>
<p>With much more disruption than anticipated I am waaaaay behind the schedule I had set myself. I wanted to have the month calendar and date picker both finished at around this point. As it is I am only maybe a third of the way through creating just the month calendar.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/TNmyhFdx5Gc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/12/kryptonmonthcalendar/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/12/kryptonmonthcalendar/</feedburner:origLink></item>
		<item>
		<title>Still alive</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/75PnoEfbSo0/</link>
		<comments>http://www.componentfactory.com/blog/2008/11/still-alive/#comments</comments>
		<pubDate>Thu, 27 Nov 2008 01:25:59 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=403</guid>
		<description><![CDATA[No blog posts for a whole month is unprecedented. This is the longest gap between posts since I started blogging several years ago. But have no fear I haven&#8217;t broken another bone or disbanded the company and run off to Brazil. I am simply in the middle of moving house.
If you have ever moved house [...]]]></description>
			<content:encoded><![CDATA[<p>No blog posts for a whole month is unprecedented. This is the longest gap between posts since I started blogging several years ago. But have no fear I haven&#8217;t broken another bone or disbanded the company and run off to Brazil. I am simply in the middle of moving house.</p>
<p>If you have ever moved house then you will know how much time and aggravation it entails. Luckily the process is almost done and the removal company arrives tomorrow to truck our meager possessions to the new place. Internet access will not be supplied at the new house until the middle of next week and so I will be ex-communicated from today until then.</p>
<p>I have started work on the KryptonMonthCalendar control and although the disruption has put me a couple of weeks behind schedule I will be back to full coding speed very soon!</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/75PnoEfbSo0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/11/still-alive/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/11/still-alive/</feedburner:origLink></item>
		<item>
		<title>Collection Editors</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/0qyjcSp5PDs/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/collection-editors/#comments</comments>
		<pubDate>Tue, 28 Oct 2008 11:16:25 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Toolkit]]></category>

		<category><![CDATA[Krypton Workspace]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=401</guid>
		<description><![CDATA[KryptonBreadCrumb
Creating the hierarchy of bread crumb items at design is very painful at the moment. You need to edit each set of child items as a flat list of items. So if you need to edit a node several levels down the structure you end up with several collection editors all open at the same time, one [...]]]></description>
			<content:encoded><![CDATA[<p><strong>KryptonBreadCrumb</strong></p>
<p>Creating the hierarchy of bread crumb items at design is very painful at the moment. You need to edit each set of child items as a flat list of items. So if you need to edit a node several levels down the structure you end up with several collection editors all open at the same time, one for each level of the structure as you make your way down to the node of interest. Not pretty.</p>
<p>I have now implemented a collection editor that presents all the items in a tree view so that you can see all the nodes at once and easily move them around as needed. Here you can see it in action&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/BreadCrumbEditor.gif" alt="" /></p>
<p> </p>
<p><strong>KryptonWorkspace</strong></p>
<p>The same problem applies to the recently introduced KryptonWorkspace control. It consists of a tree like hierarchy of elements that would benefit from a user friendly editor. In fact it needs the editor more than the bread crumb control because it is much harder to visualize the structure with the workspace. Here is the new improved editing dialog&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/WorkspaceEditor.gif" alt="" /></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/0qyjcSp5PDs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/collection-editors/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/collection-editors/</feedburner:origLink></item>
		<item>
		<title>Yahoo vs Microsoft</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/Mv5K7KkIz3o/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/yahoo-vs-microsoft/#comments</comments>
		<pubDate>Wed, 22 Oct 2008 03:51:59 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=399</guid>
		<description><![CDATA[Yahoo have announced they are cutting 10% of its global workforce, about 1500 people, as it tries to cope with its ongoing problems. They also reported a 64% drop in third quarter profits and only a 1% increase in revenue over a year ago. So things are looking pretty rough at the moment for Yahoo [...]]]></description>
			<content:encoded><![CDATA[<p>Yahoo have announced they are cutting 10% of its global workforce, about 1500 people, as it tries to cope with its ongoing problems. They also reported a 64% drop in third quarter profits and only a 1% increase in revenue over a year ago. So things are looking pretty rough at the moment for Yahoo and this is before the upcoming recession/depression really starts to bite.</p>
<p>Remember this is the same company that turned down a $47.5bn offer from Microsoft last January. I wonder if Jerry Yang still thinks that offer &#8216;undervalued the company&#8217;. This is where the problem of having the original founder as CEO really causes problems. Is he really thinking about getting the best value for shareholders? I don&#8217;t think so and I doubt he would have sold the company to Microsoft for any price. Not only because he hates the mother ship but also because he would lose control of his baby. Yahoo is his creation, his project, his ego trip and so he naturally wants to keep it independent and keep control over it. Once Yahoo is sold off he is no longer &#8216;the founder&#8217; and &#8216;the special one&#8217; inside Yahoo. Instead he becomes just another employee and that assumes that he would actually be kept on after a takeover.</p>
<p>His inability to think like a real CEO has cost the shareholders 10&#8217;s of billions of dollars. I believe he will keep driving the company to nowhere until the other execs finally push him aside and appoint someone that can bear to sell the company. Although I suspect anyone interested in Yahoo should just wait another year till the bottom of the recession is reached and then pick it up for a fraction of even the current share price.</p>
<p>I bet Steve Ballmer is thanking his lucky stars he managed to dodge this bullet.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/Mv5K7KkIz3o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/yahoo-vs-microsoft/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/yahoo-vs-microsoft/</feedburner:origLink></item>
		<item>
		<title>Writer = Fails</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/b1DM-suEnVc/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/writer-fails/#comments</comments>
		<pubDate>Sat, 18 Oct 2008 01:55:30 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=397</guid>
		<description><![CDATA[I know that writers are not usually techies and so might struggle getting the terminology right. But surely they could at least consult somebody before using techno-speak in TV programs. In what possible way could this line ever make sense?
&#8220;I&#8217;ll create a GUI interface using Visual Basic, see if I can track an IP address.&#8221;
Check it [...]]]></description>
			<content:encoded><![CDATA[<p>I know that writers are not usually techies and so might struggle getting the terminology right. But surely they could at least consult somebody before using techno-speak in TV programs. In what possible way could this line ever make sense?</p>
<p><em>&#8220;I&#8217;ll create a GUI interface using Visual Basic, see if I can track an IP address.&#8221;</em></p>
<p>Check it out for yourself <a href="http://www.youtube.com/watch?v=Ni_rAamVP2s">CSI:New York Clip</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/b1DM-suEnVc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/writer-fails/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/writer-fails/</feedburner:origLink></item>
		<item>
		<title>Krypton 3.0.8 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/0r2HmuKWOzw/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/krypton-308-released/#comments</comments>
		<pubDate>Thu, 16 Oct 2008 02:59:37 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=395</guid>
		<description><![CDATA[This point release fixes the KryptonConextMenu bug where changes are not correctly saved when you exit the editor. The bug is not obvious to begin with because it looks as if the changes have been remembered but once you run the application you notice they have not been persisted.
Download 3.0.8
]]></description>
			<content:encoded><![CDATA[<p>This point release fixes the <em>KryptonConextMenu</em> bug where changes are not correctly saved when you exit the editor. The bug is not obvious to begin with because it looks as if the changes have been remembered but once you run the application you notice they have not been persisted.</p>
<p><a href="http://www.componentfactory.com/downloads/KryptonSuite308.zip">Download 3.0.8</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/0r2HmuKWOzw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/krypton-308-released/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/krypton-308-released/</feedburner:origLink></item>
		<item>
		<title>Is it you?</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/baVoHRmb_Ww/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/is-it-you/#comments</comments>
		<pubDate>Wed, 15 Oct 2008 13:35:17 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=393</guid>
		<description><![CDATA[There is an interesting theory in software development that the quality of your software is limited to that of the second worst programmer on the team. Why the second worst and not the worst programmer?
The theory goes something like this. Everybody in the team knows who the worst programmer is. They usually stand out like [...]]]></description>
			<content:encoded><![CDATA[<p>There is an interesting theory in software development that the quality of your software is limited to that of the second worst programmer on the team. Why the second worst and not the worst programmer?</p>
<p>The theory goes something like this. Everybody in the team knows who the worst programmer is. They usually stand out like a sore thumb and so everyone is carefully watching his work. But because his work is so closely monitored it is also corrected before it impacts the code base. Sure, you end up losing time but you can mitigate the problem because you are aware of it.</p>
<p>Now think about your own team and you will no problems deciding who the worst is. But who is the next worst? Who is the one that nobody is watching but is still checking in poor quality code? Their code spreads like a web throughout the project and so ultimately they limit the quality of the whole teams work. While you are carefully monitoring Mr. Dunce you are blissfully unaware of the time bombs being planted by his prodigy.</p>
<p>So take a look around your office and decide who is wearing the dunce&#8217;s hat and then decide who the runner up is. If you come to conclusion that there is no weakest player in your outfit then I have bad news. In poker they have a saying &#8220;If you don&#8217;t know who the patsy is&#8230;&#8221; and I hope I don&#8217;t need to finish the quote for you.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/baVoHRmb_Ww" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/is-it-you/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/is-it-you/</feedburner:origLink></item>
		<item>
		<title>5 Hidden Features of C#</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/fdZ1176Pg04/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/5-hidden-features-of-c/#comments</comments>
		<pubDate>Mon, 13 Oct 2008 08:14:17 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=382</guid>
		<description><![CDATA[When you learn a new language you tend to settle into using it in a particular way. So if you missed a little known feature it is unlikely you will suddenly find it unless someone points it out. Here are 5 of my favorite C# features that you might not already be using.
1 - ?? Operator
The [...]]]></description>
			<content:encoded><![CDATA[<p>When you learn a new language you tend to settle into using it in a particular way. So if you missed a little known feature it is unlikely you will suddenly find it unless someone points it out. Here are 5 of my favorite C# features that you might not already be using.</p>
<p><strong>1 - ?? Operator<br />
</strong>The <span><span class="keyword">??</span></span> operator is called the null-coalescing operator and is used to define a default value for a nullable value types as well as reference types. It returns the left-hand operand if it is not null; otherwise it returns the right operand. So instead of using code like this&#8230;</p>
<pre><span style="color: #0000ff;">if (reference == null)
   return _defaultInstance;
else
   return reference;</span></pre>
<p>You can just write the following statement instead&#8230;</p>
<pre><span style="color: #0000ff;">return reference ?? _defaultInstance;</span></pre>
<p>Much cleaner and it even works for nullable value types.</p>
<p> </p>
<p><strong>2 - DebuggerStepThrough<br />
</strong>This attribute can be added to a method or property accessor and used to speed up debugging. When debugging and using step-into the debugger will step past the method with this attribute. This is really useful in preventing you stepping in and out of the many one liners in the code. To apply do this&#8230;</p>
<pre><span style="color: #0000ff;"><span class="kwd">public</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> Name</span></span><span style="color: #0000ff;"><span class="pln"> 
</span><span class="pun">{</span></span><span class="pln">
<span style="color: #0000ff;">   </span></span><span style="color: #0000ff;"><span class="pun">[</span><span class="typ">DebuggerStepThrough</span><span class="pun">]</span></span><span class="pln">
<span style="color: #0000ff;">   </span></span><span style="color: #0000ff;"><span class="kwd">get</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">return</span><span class="pln"> _name</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span></span><span class="pln">
<span style="color: #0000ff;">    
   </span></span><span style="color: #0000ff;"><span class="pun">[</span><span class="typ">DebuggerStepThrough</span><span class="pun">]</span></span><span class="pln">
<span style="color: #0000ff;">   </span></span><span style="color: #0000ff;"><span class="kwd">set</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">_name</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> value</span><span class="pun">;</span><span class="pln"> </span><span class="pun">}</span></span><span class="pln">
</span><span class="pun"><span style="color: #0000ff;">}</span></span></pre>
<pre> </pre>
<p><strong>3 - Automatic Properties<br />
</strong>Sick and tired of adding get/set code for simple properties? This is no longer a problem with the automatic properties added in C# 3.0. Instead of this&#8230;</p>
<pre><span style="color: #0000ff;"><span class="kwd">private</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> _name</span><span class="pun">;</span></span><span class="pln">
</span><span style="color: #0000ff;"><span class="kwd">public</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> </span><span class="typ">Name</span></span><span class="pln">
</span><span class="pun"><span style="color: #0000ff;">{</span></span><span class="pln">
<span style="color: #0000ff;">   </span></span><span style="color: #0000ff;"><span class="kwd">get { </span><span class="kwd">return</span><span class="pln"> _name</span><span class="pun">; </span><span class="pun">}</span></span><span class="pln">
</span><span style="color: #0000ff;"><span class="kwd">   set </span><span class="pun">{ </span><span class="pln">_name </span><span class="pun">=</span><span class="pln"> value</span><span class="pun">; </span><span class="pun">}</span></span><span class="pln">
</span><span class="pun"><span style="color: #0000ff;">}</span></span></pre>
<p><span class="pun">&#8230;just do this&#8230;</span></p>
<pre><span class="pun"><span style="color: #0000ff;"><span class="kwd">public</span><span class="pln"> </span><span class="kwd">string</span><span class="pln"> </span><span class="typ">Name</span><span class="pln"> </span><span class="pun">{</span><span class="pln"> </span><span class="kwd">get</span><span class="pun">;</span><span class="pln"> </span><span class="kwd">set</span><span class="pun">; }</span></span></span></pre>
<pre> </pre>
<p><strong>4 - Object Initializers</strong></p>
<p>Also introduced in C# 3.0 are object initializers. This allows you to set property values inside the new statement. Without this you either create additional overloaded constructor with the possible set of initial values or you write the long hand like this&#8230;</p>
<pre><span style="color: #0000ff;"><span class="typ">Employee</span><span class="pln"> emp </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Employee</span><span class="pun">();</span><span class="pln">
emp</span><span class="pun">.</span><span class="typ">Name</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> </span><span class="str">"John Smith"</span><span class="pun">;</span><span class="pln">
emp</span><span class="pun">.Age</span><span class="pln"> </span><span class="pun">=</span><span class="pln"> 10</span><span class="pun">;</span></span></pre>
<p><span class="pun">&#8230;but this is clearer&#8230;</span></p>
<pre><span style="color: #0000ff;"><span class="pun"><span class="typ">Employee</span><span class="pln"> emp </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">Employee </span><span class="pun">{</span><span class="typ">Name</span><span class="pun">=</span><span class="str">"John Smith"</span><span class="pun">,</span><span class="pln"> </span><span class="typ">Age</span><span class="pun">=</span><span class="typ">10}
</span></span></span></pre>
<pre></pre>
<p><strong>5 - Constant flags</strong></p>
<p>Want to specify a float instead of a double for a constant? Most people know the &#8216;f&#8217; modifier after a constant number informs the compiler to make it a single float value. But did you know the full list of others flags?</p>
<pre class="prettyprint"><code><span style="color: #0000ff;"><span class="pln">100m  (decimal)
100f  (float)
100d  (double)
100u  (uint)
100l  (long)
100ul (ulong)</span></span></code></pre>
<p>Let me know if I have missed one you really like.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/fdZ1176Pg04" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/5-hidden-features-of-c/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/5-hidden-features-of-c/</feedburner:origLink></item>
		<item>
		<title>Fatal attraction</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/Qx71CCbJEfY/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/fatal-attraction/#comments</comments>
		<pubDate>Fri, 10 Oct 2008 04:38:07 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=380</guid>
		<description><![CDATA[Am I the only one that is actually getting some enjoyment from watching the global financial crises?
I know I shouldn’t find it quite so fascinating but for some reason I do. Like watching a beautiful tornado just before it smacks you in the face. Just because you know it’s going to hurt doesn’t stop it [...]]]></description>
			<content:encoded><![CDATA[<p>Am I the only one that is actually getting some enjoyment from watching the global financial crises?</p>
<p>I know I shouldn’t find it quite so fascinating but for some reason I do. Like watching a beautiful tornado just before it smacks you in the face. Just because you know it’s going to hurt doesn’t stop it looking amazing on the way in.</p>
<p>I’m sure I won’t find it so fascinating as I stand inline at the soup kitchen. But watching the stock market and governments panic is not an everyday sight. If the financial world is sinking like the Titanic then I might as well stand of deck and enjoy the view.</p>
<p>Actually I blame the <a href="http://www.thedailyshow.com/">The Daily Show</a> and the <a href="http://www.colbertnation.com">The Colbert Report</a>, they could make the end of days sound funny.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/Qx71CCbJEfY" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/fatal-attraction/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/fatal-attraction/</feedburner:origLink></item>
		<item>
		<title>Krypton Icon Pack</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/WzsJDdiUfFk/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/krypton-icon-pack/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 09:17:53 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=378</guid>
		<description><![CDATA[If you&#8217;re building an application using the Krypton controls then you need to add a final polish by using a set of professional icons. Otherwise all that hard work creating a nice looking app is going to waste.
To help make this process as easy as possible you can now buy a pack of 265 icons. [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re building an application using the Krypton controls then you need to add a final polish by using a set of professional icons. Otherwise all that hard work creating a nice looking app is going to waste.</p>
<p>To help make this process as easy as possible you can now buy a pack of 265 icons. As an introductory offer the price is just $79 during this month. Each icon has&#8230;</p>
<p><strong>Three different sizes</strong></p>
<p><img src="http://www.componentfactory.com/images/IconSizes.png" alt="" /></p>
<p><strong>Three different states</strong></p>
<p><img src="http://www.componentfactory.com/images/IconStates.png" alt="" /> </p>
<p><strong>6 different file formats</strong></p>
<p><strong>- </strong>PNG, GIF<br />
- ICO, PSD<br />
- BMP (24bit &amp; 32bit).</p>
<p>You can see a preview of all the icons <a href="http://www.componentfactory.com/products_iconpack.php">here</a>.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/WzsJDdiUfFk" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/krypton-icon-pack/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/krypton-icon-pack/</feedburner:origLink></item>
		<item>
		<title>VisualHint.com</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/NLwEguJa1PU/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/visualhintcom/#comments</comments>
		<pubDate>Thu, 09 Oct 2008 02:47:30 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=376</guid>
		<description><![CDATA[If you&#8217;re looking for Kryptonized controls for date and time entry then take a look at VisualHint.com that have recently added KryptonPalette support. Also offered are a property grid control and other input controls that might interest you.

As many of you will already know I am going to be adding some Kryptonized date and calendar controls [...]]]></description>
			<content:encoded><![CDATA[<p>If you&#8217;re looking for Kryptonized controls for date and time entry then take a look at <a href="http://www.visualhint.com">VisualHint.com</a> that have recently added KryptonPalette support. Also offered are a property grid control and other input controls that might interest you.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/krypton_date.png" alt="" /></p>
<p>As many of you will already know I am going to be adding some Kryptonized date and calendar controls to the Toolkit for the next major release. I am doubtful that the Toolkit versions will have the same level of customization as the commercial version from VisualHint.</p>
<p><strong>Update</strong>: Here is a <a href="http://www.visualhint.com/index.php/blog/post/the_calendar_is_now_kryptonized/">link </a>you should check out.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/NLwEguJa1PU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/visualhintcom/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/visualhintcom/</feedburner:origLink></item>
		<item>
		<title>Krypton 3.0.6 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/-Od4xjFVgVc/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/krypton-306-released/#comments</comments>
		<pubDate>Wed, 08 Oct 2008 02:53:07 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[Krypton Navigator]]></category>

		<category><![CDATA[Krypton Ribbon]]></category>

		<category><![CDATA[Krypton Toolkit]]></category>

		<category><![CDATA[Krypton Workspace]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=374</guid>
		<description><![CDATA[This maintenance release has several major bug fixes and a bonus control added to the Toolkit.
Download Link for 3.0.6
Major Bug Fixes
- Locking/Unlocking computer causes text to disappear.
- Text not drawing at all for some Visual Studio projects.
- ComboBox drop down not working on some computers.
- Cannot edit Image properties with KryptonContextMenu.
- Design time change of Ribbon.MinimizedMode crashes.
- Removing all [...]]]></description>
			<content:encoded><![CDATA[<p>This maintenance release has several major bug fixes and a bonus control added to the Toolkit.</p>
<p><a href="http://www.componentfactory.com/downloads/KryptonSuite306.zip">Download Link for 3.0.6</a></p>
<p><strong>Major Bug Fixes<br />
</strong>- Locking/Unlocking computer causes text to disappear.<br />
- Text not drawing at all for some Visual Studio projects.<br />
- ComboBox drop down not working on some computers.<br />
- Cannot edit Image properties with KryptonContextMenu.<br />
- Design time change of Ribbon.MinimizedMode crashes.<br />
- Removing all Ribbon tabs still draws last tab shown.</p>
<p><strong>Feature Changes</strong><br />
- KryptonDomainUpDown added to the Toolkit.<br />
- KryptonBreadCrumb now has overflow button feature.</p>
<p>If you have a valid subscription to one of the commercial products the you should already have received an email notification with download details. You do not need new serial keys, existing 3.0 keys will work just fine. Also remember to uninstall your current version before installing the new one.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/-Od4xjFVgVc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/krypton-306-released/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/krypton-306-released/</feedburner:origLink></item>
		<item>
		<title>Release inflation</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/ky_UHjjI76o/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/release-inflation/#comments</comments>
		<pubDate>Tue, 07 Oct 2008 02:19:11 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=372</guid>
		<description><![CDATA[Is it my imagination or is Microsoft releasing technologies faster and faster than ever before? When I was a young developer using Visual C++ it seemed that you could easily know all the technologies at any one time. All you had to learn was a language, a framework and a library (C++, MFC and STL).
Fast forward to [...]]]></description>
			<content:encoded><![CDATA[<p>Is it my imagination or is Microsoft releasing technologies faster and faster than ever before? When I was a young developer using Visual C++ it seemed that you could easily know all the technologies at any one time. All you had to learn was a language, a framework and a library (C++, MFC and STL).</p>
<p>Fast forward to today and there would seem to be inflation in the number of product releases from Microsoft. From the release of Vista onwards we have the following client side technologies&#8230;</p>
<p>  <a href="http://msdn.microsoft.com/en-us/netframework/aa663326.aspx">WPF</a>   <a href="http://msdn.microsoft.com/en-us/netframework/aa663324.aspx">WCF</a>   <a href="http://msdn.microsoft.com/en-us/netframework/aa663328.aspx">WF</a>   <a href="http://msdn.microsoft.com/en-us/netframework/aa904594.aspx">LINQ</a></p>
<p>Each of these covers a large area that would require many months to really understand well. In fact WPF alone is going to take you a year of full time use before you can say you&#8217;re truly proficient in it. If you want to include the server side then add the following into the mix&#8230;</p>
<p>  <a href="http://msdn.microsoft.com/en-us/library/bb398874.aspx">ASP.NET AJAX</a>  <br />
  <a href="http://weblogs.asp.net/scottgu/archive/2008/10/02/october-2nd-links-asp-net-asp-net-mvc-asp-net-dynamic-data.aspx">ASP.NET MVC</a><br />
  <a href="http://weblogs.asp.net/scottgu/archive/2008/10/02/october-2nd-links-asp-net-asp-net-mvc-asp-net-dynamic-data.aspx">ASP.NET Dynamic Data</a><br />
  <a href="http://msdn.microsoft.com/en-us/library/aa697427(VS.80).aspx">ADO.NET Entity Framework</a><br />
  <a href="http://www.microsoft.com/SILVERLIGHT/">Silverlight</a></p>
<p>I think I know why this rapid increase has happened and it&#8217;s all the fault of the .NET Framework. When I switched from developing applications with MFC/ATL to WinForms I noticed my productivity increased several fold. Maybe as much as a 5 fold increase in output once I was up to speed with using all the .NET goodness. Now you apply this same productivity increase to all the cubicles at the mothership and you have the above technology tsunami.</p>
<p>When I started as a Windows developer the only real distinction between us was the language that you used (C++ or VB). With the rise of the Internet the community split into server side and client side specialists. It was very hard to master both areas because of the sheer amount of knowledge needed although the better programmers could probably just about manage it.</p>
<p>Now I see the community is splitting again into even smaller groupings. Do you use WinForms or WPF? Do you use classic ASP.NET or the MVC Framework? Over time I expect to see this kind of fracturing into smaller and smaller groups to continue. Or at least that&#8217;s what I was expecting to happen. Maybe Microsoft has seen this trend and decided to try and reverse it. Is the use of XAML with WPF and Silverlight an attempt to unify your client and web developers back into one happy community again? Time will tell.</p>
<p>A worrying trend for Microsoft is that your average programmer is not even bothering to try and learn all the latest goodness. How many developers in your outfit actually use generics beyond List&lt;T&gt;? Generics have been around forever, at least compared to the above technologies, and still most developers are hardly using it. I heard a podcast where an interviewer for a .NET position found that only around 20% of the candidates actually used generics at all. Yikes.</p>
<p>Actually this is not really surprising as the majority of developers spend all day working on business applications that are going to generate revenue. When do you have the time to learn WPF/WCF/LINQ/etc when learning them is almost a full time job in itself? It is all very well for <a href="http://weblogs.asp.net/Scottgu/">Scott Guthrie</a> or <a href="http://www.hanselman.com/blog/">Scott Hanselman</a> to tell the world how great the new stuff is but real developers just don&#8217;t have the schedule to stop and learn for six months.</p>
<p>For me this is the biggest problem that Microsoft is facing. They have some great technologies but the challenge is how to get the bulk of developers, the average developer, to move forward and learn them. I expect the upcoming PDC2008 will release even more new tech but I wonder what they are going to do that makes it easier or more compelling for businesses to move forward and actually use them.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/ky_UHjjI76o" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/release-inflation/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/release-inflation/</feedburner:origLink></item>
		<item>
		<title>Windows Cloud</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/tccWbZEemoI/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/windows-cloud/#comments</comments>
		<pubDate>Fri, 03 Oct 2008 09:14:29 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[.NET]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=368</guid>
		<description><![CDATA[Did you realise that Microsoft are releasing a new operating system in just four weeks that is currently being called Windows Cloud? No, me neither. Steve Ballmer made the announcement at a conference in London on Wednesday. Luckily &#8216;Cloud&#8217; is just the project name as it gets a snazzier name at release.
It seems that if you [...]]]></description>
			<content:encoded><![CDATA[<p>Did you realise that Microsoft are releasing a new operating system in just four weeks that is currently being called Windows Cloud? No, me neither. Steve Ballmer made the <a href="http://news.zdnet.co.uk/internet/0,1000000097,39497208,00.htm">announcement</a> at a conference in London on Wednesday. Luckily &#8216;Cloud&#8217; is just the project name as it gets a snazzier name at release.</p>
<p>It seems that if you are building on .NET then they want to make it real easy to just push a button and have that application deployed into the &#8216;cloud&#8217; so that it just works. Taking away the headache of finding a hosting provider, installing and configuring software such as SQL Server would certainly appeal to many. I suspect that the operating system is really just some extensions on top of Windows Server 2008. Just like Small Business Server is not really a different operating system but just Windows with some packaging for businesses placed on top.</p>
<p><a href="http://news.zdnet.co.uk/software/0,1000000121,39497201,00.htm">Amazon</a> are also extending some love to .NET developers by adding support for Windows Server and SQL Server within their EC2 (Elastic Compute Cloud) service. Currently in private beta testing this addition will help Windows developers that need to scale their web service without needing to handle all the scaling issues themselves. You pay only for the compute time used.</p>
<p>If we look into the future a little way we can image what Microsoft would like to achieve. They want .NET developers working on web applications to be able to sign up for a &#8216;cloud&#8217; account and then just press a button within Visual Studio to have it deployed as a live system. With Microsoft, Amazon, Network Solutions and so on being providers of the actual hardware and providing a scalable system for you. Then you pay only for the amount of CPU/Disk used and need never worry about where the server is located. Add in Hyper-V and it becomes much easy for a provider to give every account their own isolated operating system that can then be moved around to different servers as needed.</p>
<p>Another new technology from Microsoft called Live Mesh is going to be presented at the PDC later this month and may well integrate into this story. It seems that the mothership has well and truely embraced &#8216;cloud computing&#8217;. But whatever you do don&#8217;t use that term with Larry Ellison from Oracle. When someone asked Larry what &#8216;cloud computing&#8217; meant he said&#8230;</p>
<p><em>“The interesting thing about cloud computing is that we’ve redefined cloud computing to include everything that we already do. I can’t think of anything that isn’t cloud computing with all of these announcements. The computer industry is the only industry that is more fashion-driven than women’s fashion. Maybe I’m an idiot, but I have no idea what anyone is talking about. What is it? It’s complete gibberish. It’s insane. When is this idiocy going to stop? </em></p>
<p><em>We’ll make cloud computing announcements. I’m not going to fight this thing. But I don’t understand what we would do differently in the light of cloud computing other than change the wording of some of our ads. That’s my view.”</em></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/tccWbZEemoI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/windows-cloud/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/windows-cloud/</feedburner:origLink></item>
		<item>
		<title>Krypton roadmap</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/HOjj-mx8Gmw/</link>
		<comments>http://www.componentfactory.com/blog/2008/10/krypton-roadmap/#comments</comments>
		<pubDate>Thu, 02 Oct 2008 12:26:15 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
		
		<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=366</guid>
		<description><![CDATA[My recent blog post about the WPF adoption caused a couple a few people to ask about the future of Krypton. In particular they wanted to know if I would switch to creating WPF components or stick exclusively with WinForms. Here I hope to clarify my current roadmap.
Krypton Roadmap
The immediate future for the Krypton Toolkit [...]]]></description>
			<content:encoded><![CDATA[<p>My recent blog post about the WPF adoption caused a couple a few people to ask about the future of Krypton. In particular they wanted to know if I would switch to creating WPF components or stick exclusively with WinForms. Here I hope to clarify my current roadmap.</p>
<p><strong>Krypton Roadmap<br />
</strong>The immediate future for the Krypton Toolkit is to add some date/time related controls. In particular a standalone calendar control and a standalone datetimepicker plus a calendar element that can be used inside the KryptonContextMenu. A docking system will also be added that is provided as a commerical add-on and become part of the Krypton Suite product. I expect all this to be wrapped up as version 3.5 and to be delivered at the end of the year or not long after.</p>
<p>Further out will be version 4.0 and include more Toolkit controls such as a progress bar, track bar and scroll bars. Included will be improvements to the docking and workspace components. The initial release of the workspace and docking windows have a minimal feature set and so this release will build on those and add extra features. For example the Workspace needs a persistence mechanism as well as a maximized mode so users can concentrate on a single cell for a period of time. The due date for this would be around 3 or 4 months after version 4.0.</p>
<p>Release 4.0+ is not currently determined so I am open to feedback for deciding on the direction to take. I will be asking for feedback nearer the time and decide then if I should create a data grid, gauge controls etc. Maybe at this point we will see a Beta version of the next Office and Windows revisions and so that might throw up some requests.</p>
<p>Longer term I expect to keep improving and adding to the Krypton set of components, including the free Toolkit, for as long as there is demand for WinForms components. I expect this to be quite a few years into the future as many companies have invested heavily in WinForm applications and have no big need to switch over to something else. As a small company I can live on the niche position of being an active WinForm developer when other vendors have had to switch away because they have large teams to pay.</p>
<p><strong>WPF Roadmap</strong><br />
There are two factors driving my WPF strategy. First is the current slow adoption of WPF for new projects and the second is the potential redundancy of any new controls that are created. The slow uptake means there is no panic to quickly create something just because your sales have disappeared. In fact my sales have steadily improved right from the first release. This means I can take a more measured approach and watch how the market shapes up before deciding on how to structure any offering.</p>
<p>How long will the WPF market last should it become the de facto standard for client applications? I would estimate that 10-15 years is not unreasonable as GDI has lasted much longer than that. To get the most bang for your buck you want to create components/controls that will be valuable and useful for that entire 10-15 years. Now if you look at all the vendors that have rushed out WPF Ribbon controls you can see that the effort was of little long term value. Microsoft have stated that they are creating a WPF Ribbon that should be released by the end of this year. Now unless the Microsoft version is really bad I imagine most developers would use the Microsoft version rather than pay for one. Given WPF is now the main focus for client apps at the Microsoft it means they will doubtless add additional controls over time.</p>
<p>My current thinking is that I will wait until around the middle of next year before starting any serious coding of WPF components. At that point I will concentrate on components that  provide long lasting value and minimize the chances of them becoming obsolete because of Microsoft. That might sound a hard proposition but I have several ideas for initial components that I think would be very handy for developers and are unlikely to ever come from Microsoft themselves.</p>
<p><strong>Summary<br />
</strong>I will be continuing development of Krypton for as long as there is demand for the WinForms components, which I anticipate being several years. Around the middle of next year I will start spending some of my time working on WPF but note that I will still be working on Krypton as well.</p>
<p>Obviously any strategy is subject to change depending on market conditions but this is my current thinking. I would be interesting in hearing your feedback. If you have any better ideas or see fundamental problems with this then don&#8217;t be afraid to speak up!</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/HOjj-mx8Gmw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2008/10/krypton-roadmap/feed/</wfw:commentRss>
		<feedburner:origLink>http://www.componentfactory.com/blog/2008/10/krypton-roadmap/</feedburner:origLink></item>
	</channel>
</rss>
