<?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:slash="http://purl.org/rss/1.0/modules/slash/" 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>
	<lastBuildDate>Fri, 06 Nov 2009 07:39:13 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.5</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><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><item>
		<title>Krypton 4.1 Beta</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/ZTJuA4eG0_g/</link>
		<comments>http://www.componentfactory.com/blog/2009/11/559/#comments</comments>
		<pubDate>Fri, 06 Nov 2009 06:40:35 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Docking]]></category>
		<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=559</guid>
		<description><![CDATA[Krypton 4.1 Beta
For those interested in the new Office 2010 palettes or maybe the new KryptonGroupBox control you can download the Beta of the upcoming 4.1 release from here&#8230;
Download Beta
]]></description>
			<content:encoded><![CDATA[<p><strong>Krypton 4.1 Beta</strong></p>
<p>For those interested in the new <em>Office 2010</em> palettes or maybe the new <em>KryptonGroupBox</em> control you can download the Beta of the upcoming 4.1 release from here&#8230;</p>
<p><a href="http://www.componentfactory.com/downloads/KryptonSuite405.zip">Download Beta</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/ZTJuA4eG0_g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/11/559/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/11/559/</feedburner:origLink></item>
		<item>
		<title>Office 2010 Palettes</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/rfpqtb8ohvQ/</link>
		<comments>http://www.componentfactory.com/blog/2009/10/office-2010-palettes/#comments</comments>
		<pubDate>Fri, 30 Oct 2009 08:08:23 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Ribbon]]></category>
		<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=555</guid>
		<description><![CDATA[I can understand why very few Toolkit developers create their own palettes. It&#8217;s taken me three weeks to add three new palettes to match the new Office 2010 themes. Actually I&#8217;m still not finished and have only made the changes needed to update the ribbon and a few other related controls.
Office 2010 Blue
Here we have the [...]]]></description>
			<content:encoded><![CDATA[<p>I can understand why very few Toolkit developers create their own palettes. It&#8217;s taken me three weeks to add three new palettes to match the new Office 2010 themes. Actually I&#8217;m still not finished and have only made the changes needed to update the ribbon and a few other related controls.</p>
<p><strong>Office 2010 Blue<br />
</strong>Here we have the blue theme in active and inactive states&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/2010BlueA.png" alt="" /></p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/2010BlueI.png" alt="" /></p>
<p>Notice that the background of the  tabs area also changes with the window activation change. This gives a more consistent feel and makes the ribbon feel part of the window itself because its colour always matches that of the window chrome in the caption area above it. Also note the application button has been replaced with an application tab that is positioned at the start of the tabs area. New properties have been added allowing you to change the default blue colour and default <em>File</em> text.</p>
<p>On the far right of the tabs line you can see a new upwards pointing button. This is used to switch between minimized and full modes and is now present by default for all palettes. There is a new property that allows this to be turned hidden if you prefer to save the space. I think the button is a great idea as most end users are unlikely to discover that double clicking tabs with toggle the minimized mode.</p>
<p>If you look careful you might also have spotted that the cluster buttons no longer show with borders around them. Previously they would have a border around each button but now there is no border unless you actually move the mouse over the button. Instead each cluster has a small separator next to them so they are delineated from other group contents.</p>
<p>Give yourself a pat on the back if you have spotted this final change. Although not obvious the font is half a point smaller than under the Office 2007 themes and this allows more content to fit within the same space.</p>
<p><strong>Office 2010 Silver/Black<br />
</strong>Just like Office 2007 there are three themes in total and they are based on the same blue/silver and black base colours&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/2010SilverA.png" alt="" /></p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/2010BlackA.png" alt="" /><br />
<strong></strong></p>
<p><strong>Aero Glass Support<br />
</strong>Under Vista and Windows 7 the ribbon draws a little different to take advantage of the glass look and feel. Here you can see the blue scheme under Windows 7&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/2010BlueG.png" alt="" /></p>
<p>The window chrome has been extended downwards over the tabs area. In order to ensure the text for the tabs can still be read the background has a light gradient that extends upwards so that the darker text stands out. I have not managed to draw this exactly the same way as Office 2010 does but it is pretty close.</p>
<p>I&#8217;m keeping my fingers crossed that they do not make any changes between this Beta and the final release. Otherwise I will need to make additional changes. But as they have added all three schemes I expect that any changes are now going to be very minor.</p>
<p>Now onto the task of updating the rest of the controls with new settings.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/rfpqtb8ohvQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/10/office-2010-palettes/feed/</wfw:commentRss>
		<slash:comments>12</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/10/office-2010-palettes/</feedburner:origLink></item>
		<item>
		<title>Battle of the Ribbons</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/nhKrqE_y1Dc/</link>
		<comments>http://www.componentfactory.com/blog/2009/10/battle-of-the-ribbons/#comments</comments>
		<pubDate>Thu, 01 Oct 2009 13:07:16 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Ribbon]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=553</guid>
		<description><![CDATA[Now that Windows 7 is available and the Offie 2010 Beta released I wanted to look at the ribbon controls they use to see how the Krypton Ribbon should be updated to match them. More accurately it means adding one or more new palettes that draw according to a new style. The existing palettes will [...]]]></description>
			<content:encoded><![CDATA[<p>Now that Windows 7 is available and the Offie 2010 Beta released I wanted to look at the ribbon controls they use to see how the Krypton Ribbon should be updated to match them. More accurately it means adding one or more new palettes that draw according to a new style. The existing palettes will continue to draw the ribbon in the same way so the Office 2007 built in palettes will always draw the ribbon in the Office 2007 manner.</p>
<p><strong>Windows 7</strong><br />
The updated Microsoft Paint uses the Windows 7 ribbon control that is provided with the operating system. You can see straight away that it has done away with the application button as an orb and replaced it with a more traditional style button. The groups have also changed and now use a separator on the right hand side instead of having a box drawn around each one.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/RibbonWin7.png" alt="" /><br />
 </p>
<p><strong>Office 2010 Technical Preview</strong><br />
This screenshot was taken from an installation inside a virtual machine and so it does not have any Aero glass for the borders. Ignoring that detail we can see that Office 2010 also has a button instead of an orb for the application button. Also note that the button clusters inside the Font group no longer have a border around the buttons themselves. The border only appears when you move the mouse over them.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/Ribbon2010CTP.png" alt="" /></p>
<p> </p>
<p><strong>Office 2010 Beta</strong><br />
This Beta release is only slightly different from the previous technical preview. The main change has been the application button changing to have the more familiar <em>File</em> as its name. I presume that end users find it easier to relate to the traditional <em>File</em> menu option.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/Ribbon2010Beta.png" alt="" /></p>
<p>Another change that cannot be seen in the screenshots is that the Beta has three color schemes. These are Silver, Blue and Black of which the above screenshot is the Silver variation. So I think the best approach is to add three new palettes that represent those three new schemes. Although only a Beta I believe the fact they have added all three colors means they are pretty much finished in creating the visuals.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/nhKrqE_y1Dc" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/10/battle-of-the-ribbons/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/10/battle-of-the-ribbons/</feedburner:origLink></item>
		<item>
		<title>Roadmap Clarification</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/8bB7N-daHaM/</link>
		<comments>http://www.componentfactory.com/blog/2009/09/roadmap-clarification/#comments</comments>
		<pubDate>Tue, 22 Sep 2009 00:57:37 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=551</guid>
		<description><![CDATA[I want to quickly clarify my development priorities for the future. There seems to be concern that with my post about Silverlight/WPF yesterday that the usual Krypton work has slipped down my list of priorities. So let me clarify my immediate and longer term plans.
Priority One
My number one priority is Krypton. My number two and number three [...]]]></description>
			<content:encoded><![CDATA[<p>I want to quickly clarify my development priorities for the future. There seems to be concern that with my post about Silverlight/WPF yesterday that the usual Krypton work has slipped down my list of priorities. So let me clarify my immediate and longer term plans.</p>
<p><strong>Priority One<br />
</strong>My number one priority is Krypton. My number two and number three priorities are also Krypton. Maybe I should have pointed out that it took about a year to go from playing with Silverlight/WPF to actually having the <em>MetaPanel</em> control up and working as it is today. As you can see, it was very much a low priority background activity. I have been and will continue to dedicate 5 days per week to Krypton. But where possible I will continue to play around and learn Silverlight/WPF and maybe from time to time a useful control will emerge from that effort.</p>
<p>Version 4.0 of Krypton has been a real milestone for me because it completes the initial roadmap I created when I first started Component Factory four years ago. My original goal was to create a docking  system. To create the docking system would require the Workspace component. But to create the Workspace I first needed the Navigator. Hence the order in which I created those components was the order of dependency to build up to the docking system itself.</p>
<p><strong>Krypton 4.1<br />
</strong>So what next for Krypton? The current development work is building towards version 4.1 and will include a few smaller changes rather than one big change. Already completed is the new Toolkit control <em>KryptonGroupBox</em>. I will be adding a Windows 7 palette, updating the ribbon so it can display like the Windows 7 ribbon and adding the usual raft of bug fixes. There might be extra changes on top of this depending on the actual timing of the release.</p>
<p><strong>Krypton 4.X<br />
</strong>So what is the next major component to be added? Actually I have no idea at the moment. Should it be gauge controls a tree control or maybe something completely new that no other vendor has? This is where your feedback comes into play. Maybe I should email out a survey to find out? Or maybe it should not be a major component but instead I should spend several months just adding another 10 unique palettes? I have no preference and am happy to work on whatever the market indicates is the most needed.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/8bB7N-daHaM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/09/roadmap-clarification/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/09/roadmap-clarification/</feedburner:origLink></item>
		<item>
		<title>Silverlight and WPF</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/eR9E1KNEMcU/</link>
		<comments>http://www.componentfactory.com/blog/2009/09/silverlight-and-wpf/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 07:17:01 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Silverlight]]></category>
		<category><![CDATA[WPF]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=547</guid>
		<description><![CDATA[When WPF was released over three years ago I was expecting it to become the dominant desktop technology by now. This has not been the case, which is lucky for me because it has taken until now for me to complete the original set of components I wanted to create for Krypton.
But I do think [...]]]></description>
			<content:encoded><![CDATA[<p>When WPF was released over three years ago I was expecting it to become the dominant desktop technology by now. This has not been the case, which is lucky for me because it has taken until now for me to complete the original set of components I wanted to create for Krypton.</p>
<p>But I do think that given enough time it will gradually take over because of the extra power and flexibility it provides. Silverlight 3 now makes it possible to build desktop quality applications for the web which has the potential to really drive the adoption of XAML and WPF.</p>
<p>So to make sure I don&#8217;t completely miss the boat I need to start playing around with Silverlight/WPF and coming up with ideas for components. Given that Silverlight/WPF will be around for at least a decade it makes sense to create some controls or components that have a long potential lifetime of use. Write once and sell for a decade feels like a good business model. It also makes sense to start with components that can be used as building blocks for creating bigger and better components in the future.</p>
<p>The first result of my experimenting is an animating panel that this pluggable. This <em>MetaPanel</em> control is intended to solve two related problems. First is the problem of changing panel layouts. If you want to alter the layout of children between a <em>WrapPanel</em> to a <em>StackPanel</em> you need to create the <em>StackPanel</em>, move all the children across and then remove the old <em>WrapPanel</em>. Not difficult but a painful process.</p>
<p>The <em>MetaPanel</em> control instead has a pluggable layout algorithm so that you can switch the layout without having to create a new control. This is a much easier process to manage and also makes it easy for the developer to create custom pluggable layout algorithms for specialized scenarios.</p>
<p>The second problem is one of animation. As panel children are moved to new locations it would be nice to have some form of animation in order to give the user visual feedback. If you are moving all the children from one panel control to another this becomes very difficult to achieve. But as our children are always children of our single <em>MetaPanel</em> it becomes very easy. Whenever the layout is changed we animate the children to new positions. In fact the animation algorithm is also pluggable allowing maximum flexibility in specifying different animation requirements. With the layout and animation being pluggable you can see why I named it <em>MetaPanel</em>.</p>
<p>Use this <a href="http://www.componentfactory.com/sl/TestPage.html">MetaPanel TestPage</a> link to see a simple Silverlight application that allows you to play around with the control. You should see something like the following&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/SlTest.jpg" alt="" /></p>
<p>Use the top row to add and remove child items.<br />
Use the second row to change the layout algorithm.<br />
Use the third row to alter layout specific values.<br />
Use the last row to alter animation settings.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/eR9E1KNEMcU" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/09/silverlight-and-wpf/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/09/silverlight-and-wpf/</feedburner:origLink></item>
		<item>
		<title>KryptonGroupBox</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/NZE6kiNx8L8/</link>
		<comments>http://www.componentfactory.com/blog/2009/09/kryptongroupbox/#comments</comments>
		<pubDate>Mon, 21 Sep 2009 06:16:57 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=545</guid>
		<description><![CDATA[Feel the need to group your controls but finding that the KryptonHeaderGroup is taking up too much space?
Well now you can use the all new KryptonGroupBox control. Just like the standard windows forms control it draws a caption text over the top of a group border. Here you see an instance in the default Office [...]]]></description>
			<content:encoded><![CDATA[<p>Feel the need to group your controls but finding that the <em>KryptonHeaderGroup</em> is taking up too much space?</p>
<p>Well now you can use the all new <em>KryptonGroupBox</em> control. Just like the standard windows forms control it draws a caption text over the top of a group border. Here you see an instance in the default <em>Office 2007 Blue</em> palette.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KGB1.gif" alt="" /></p>
<p>You can actually specify two strings plus an image for the caption.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KGB2.gif" alt="" /></p>
<p>Or move the caption to one of the other three edges.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KGB3.gif" alt="" /></p>
<p>By default the border edge is indented 50% of the height of the caption area. If you specify 100% then you get the left image below and a value of 0% gives the variation on the right.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/KGB4.gif" alt="" /></p>
<p>The <em>KryptonGroupBox</em> is a simple little control but that does not make it any less useful in your Toolkit.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/NZE6kiNx8L8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/09/kryptongroupbox/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/09/kryptongroupbox/</feedburner:origLink></item>
		<item>
		<title>Krypton 4.0 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/v3ih2Gg47dQ/</link>
		<comments>http://www.componentfactory.com/blog/2009/08/krypton-40-released/#comments</comments>
		<pubDate>Wed, 26 Aug 2009 08:27:29 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Docking]]></category>
		<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=543</guid>
		<description><![CDATA[Download  using this direct link&#8230;
    Download 4.0
New for Version 4.0
   &#8211; VS2010 Style Docking system
   &#8211; KryptonWrapLabel
   &#8211; KryptonSeparator
   &#8211; Workspace persistence
   &#8211; Workspace max/restore feature
   &#8211; Various bug fixes
Change Lists
  &#8211; Toolkit
  &#8211; Navigator
  &#8211; Workspace
  &#8211; Ribbon
]]></description>
			<content:encoded><![CDATA[<p><strong>Download  using this direct link&#8230;</strong><br />
    <a href="http://www.componentfactory.com/downloads/KryptonSuite400.zip">Download 4.0</a></p>
<p><strong>New for Version 4.0</strong><br />
   &#8211; VS2010 Style Docking system<br />
   &#8211; KryptonWrapLabel<br />
   &#8211; KryptonSeparator<br />
   &#8211; Workspace persistence<br />
   &#8211; Workspace max/restore feature<br />
   &#8211; Various bug fixes</p>
<p><strong>Change Lists</strong><br />
  &#8211; <a href="http://www.componentfactory.com/downloads/changeLists/KryptonToolkitChangeList.doc">Toolkit</a><br />
  &#8211; <a href="http://www.componentfactory.com/downloads/changeLists/KryptonNavigatorChangeList.doc">Navigator<br />
</a>  &#8211; <a href="http://www.componentfactory.com/downloads/changeLists/KryptonWorkspaceChangeList.doc">Workspace</a><br />
  &#8211; <a href="http://www.componentfactory.com/downloads/changeLists/KryptonRibbonChangeList.doc">Ribbon</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/v3ih2Gg47dQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/08/krypton-40-released/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/08/krypton-40-released/</feedburner:origLink></item>
		<item>
		<title>Web Designer Required</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/cmSljVxa45I/</link>
		<comments>http://www.componentfactory.com/blog/2009/08/web-designer-required/#comments</comments>
		<pubDate>Tue, 25 Aug 2009 12:59:31 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[Add new tag]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=541</guid>
		<description><![CDATA[After more than 4 years with the same design the Component Factory website is ready for a facelift. So I am calling out to my blog readers to see if any are web designers or know someone who is.
Here is a list of websites of my competition.
   ComponentOne
   DevExpress
   Infragistics
You should feel you can create graphics [...]]]></description>
			<content:encoded><![CDATA[<p>After more than 4 years with the same design the Component Factory website is ready for a facelift. So I am calling out to my blog readers to see if any are web designers or know someone who is.</p>
<p>Here is a list of websites of my competition.<br />
   <a href="http://www.componentone.com">ComponentOne</a><br />
   <a href="http://www.devexpress.com">DevExpress</a><br />
   <a href="http://www.infragistics.com">Infragistics</a></p>
<p>You should feel you can create graphics of the same standard as the competition using the fairly detailed spec that I will provide. The actual page content is of course provided by myself when the actual site pages are built out. Your main skill should be graphic design with some additional knowledge of HTML/CSS creation.</p>
<p>And how much will I pay? I think $2000 (USD) to complete the initial design would be about right. That equates to $40 an hour for 50 hours of work. I think that would definitely cover all the time needed as the initial design is just a single master page. I will then pay for additional pages to be built that vary from the master page. These would have extra graphics or special elements on the page and so need extra design work.</p>
<p>This project would suit a professional that wants to make some extra pocket money on a side project or maybe a freelancer that has some spare hours in the schedule. Just email me directly using the following address to put yourself forward.</p>
<p><a href="mailto:phil.wright@componentfactory.com">phil.wright@componentfactory.com</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/cmSljVxa45I" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/08/web-designer-required/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/08/web-designer-required/</feedburner:origLink></item>
		<item>
		<title>Price increase coming…</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/C1b7n9siozQ/</link>
		<comments>http://www.componentfactory.com/blog/2009/08/price-increase-coming/#comments</comments>
		<pubDate>Fri, 21 Aug 2009 02:14:06 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Docking]]></category>
		<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=538</guid>
		<description><![CDATA[Expected Release Date
The release of Krypton Suite 4.0 is looking like being the middle of next week. So expect an announcement on Wednesday 26th if all goes to plan. Obviously this could slip if a major bug appears just before release but I promise it will not be released early!
Reduced Product Line-up
Something like 90% of [...]]]></description>
			<content:encoded><![CDATA[<p><strong>Expected Release Date</strong><br />
The release of Krypton Suite 4.0 is looking like being the middle of next week. So expect an announcement on Wednesday 26th if all goes to plan. Obviously this could slip if a major bug appears just before release but I promise it will not be released early!</p>
<p><strong>Reduced Product Line-up</strong><br />
Something like 90% of all sales are for the full Krypton Suite and so I intend to simplify the list of product offerings by selling only the full Suite. Existing customers with the Navigator, Workspace or Ribbon that are still within their 12 month subscription will get a free upgrade to the Suite + Source. So no customers will miss out because of the change in policy.</p>
<p>The Suite will also only be offered with the full source code included so the ability to buy just a license is being removed. Most companies want the source code anyway and so this reduces the number of purchase options making it a simpler decision. So the purchase page is going to have just the Krypton Suite + Source with the only options being the number of licenses you want to buy.</p>
<p><strong><span style="color: #ff0000;">BARGAIN ALERT</span></strong>: Yes, that means you could buy the Navigator at $149 before next Wednesday and get a free upgrade to the full Suite including the source code. Reading my blog means you get the inside track and your reward is a truly once in a lifetime bargain. Or why not get a 4 pack and save even more!</p>
<p><strong>New Pricing</strong><br />
Currently the Suite + Source is priced at $399 (USD) and the new price with the docking system added will be $499 (USD). Looking at other comparable products on the market I still think this is a reasonable price given the extra flexibility and features it offers.</p>
<p><strong>New Licence Options</strong><br />
Last is a change to provide customers with an upper limit on costs. I hope this will tempt more of the larger outfits to consider buying the Suite for the entire development department. I am introducing Site and Enterprise license options.</p>
<p>A Site license will allow an unlimited number of developers within your organization but limited to one geographic location. An Enterprise license allows for an unlimited number of developers at an unlimited number of locations for your organization. Customers with 16 or more licenses at the moment will be offered the chance to convert to either the Site or Enterprise depending on their licenses requirements.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/C1b7n9siozQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/08/price-increase-coming/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/08/price-increase-coming/</feedburner:origLink></item>
		<item>
		<title>Docking Beta 2 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/HR7OOsfRuDo/</link>
		<comments>http://www.componentfactory.com/blog/2009/08/docking-beta-2-released/#comments</comments>
		<pubDate>Tue, 18 Aug 2009 08:18:09 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Docking]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=535</guid>
		<description><![CDATA[The second and final beta for the upcoming Suite 4.0 release is now available for download. It has several bug fixes and additional features for the new docking component as well as a couple more general bugs. It is also now feature complete; so only bugs reported for this beta will be changed between now and the [...]]]></description>
			<content:encoded><![CDATA[<p>The second and final beta for the upcoming Suite 4.0 release is now available for download. It has several bug fixes and additional features for the new docking component as well as a couple more general bugs. It is also now feature complete; so only bugs reported for this beta will be changed between now and the full release.</p>
<p><strong>Changes in Beta 2<br />
</strong>- Drag reordering for Navigator/Workspace/Docking<br />
- Docking now has a dockable Navigator<br />
- KryptonWrapLabel added to Toolkit</p>
<p><a href="http://www.componentfactory.com/downloads/KryptonSuite356.zip">Download Beta 2</a></p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/HR7OOsfRuDo" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/08/docking-beta-2-released/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/08/docking-beta-2-released/</feedburner:origLink></item>
		<item>
		<title>Windows 7</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/jGfDSeyVRYA/</link>
		<comments>http://www.componentfactory.com/blog/2009/08/windows-7-2/#comments</comments>
		<pubDate>Tue, 11 Aug 2009 08:57:37 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=533</guid>
		<description><![CDATA[Nothing ever goes wrong in isolation. The family of problems has countless brothers and sisters and they are ready to trip you up at every opportunity. With the release of Windows 7 I thought it would be a good idea to upgrade my Vista machine to the latest and greatest. But what should have taken [...]]]></description>
			<content:encoded><![CDATA[<p>Nothing ever goes wrong in isolation. The family of problems has countless brothers and sisters and they are ready to trip you up at every opportunity. With the release of Windows 7 I thought it would be a good idea to upgrade my Vista machine to the latest and greatest. But what should have taken a couple of hours turned into a long weekend.</p>
<p>Luckily for me I had read a blog post by <a href="http://www.hanselman.com/blog/VistaUsersUninstallVisualStudio2010Beta1BeforeUpgradingToWindows7.aspx">Hanselman</a> indicating that you should uninstall <em>Visual Studio 2010 Beta 1</em> before upgrading to Win7. So I did just that. Then I uninstalled the  <em>C++ 2010 Redistributable </em>which had been installed along with VS2010. Unluckily for me I did not read his post very carefully because it says you should reboot between the first uninstall and the second. Oh well, surely rebooting after uninstalling both would be fine?</p>
<p>I soon discovered the importance of that missed reboot when pretty much every application on my machine stopped working. All of them demanding a DLL that no longer exists. So I tried to reinstall the <em>Visual Studio 2010 Beta 1</em> hoping it would put back the missing file. Sadly this was not going to happen because even the installer refused to run without our now notorious DLL. Oh well, instead of an upgrade I would bite the bullet and just perform a clean install of Win7. Probably for the best anyway.</p>
<p>After several attempts to boot from my Win7 DVD I slapped my large forehead as I suddenly realized my mistake. I had simply copied all the Win7 files onto the DVD and so made it a data disc. I should have burnt the ISO directly to the disk so it was bootable. Oh well, easy enough to correct.</p>
<p>Installing Windows 7 is simple and surprisingly quick. I had my fresh OS up and running in around 30 minutes. My first task was to get connected to the inter-tubes and check for any updates or new drivers etc. But hang on, I cannot see the Internet or indeed my local network either. After much gnashing of teeth it turns out that no matter what I do the OS refuses to accept there is a relevant driver for my ethernet card. I&#8217;ve had a separate PCI Ethernet card for some months, ever since a power surge caused the two controllers provided on the motherboard to die. I&#8217;m guessing the cheap and cheerful card I am using is so cheap and cheerful that Windows 7 cannot bear to use it.</p>
<p>A quick trip down town and I manage to find a store that actually sells an Ethernet card. I also manage to pick up a nice looking <a href="http://www.westerndigital.com/en/products/products.asp?driveid=357">Western Digital 1TB</a> external hard drive. Obviously after all the weekend trauma I had to cheer myself up with a new toy. So I swap over the Ethernet controllers and bish bash bosh, its up and working. Great, now I can play with the new toy instead.</p>
<p>My motherboard comes with an eSata connection and so does the 1TB external drive. Given how slow my existing USB based external drive feels I&#8217;m really looking forward to some serious improvement. So I take out the cables that came with the 1TB drive and guess what? Yep, there is no eSata to eSata cable supplied. The drive has an eSata port and the computer has an eSata port but is there a cable that has eSata at both ends? No chance. So until I get a cable I&#8217;m still stuck with a slow USB connection between them.</p>
<p>Just when I see light at the end of the tunnel I meet the final obstacle. When installing the various applications I need for building <em>Krypton</em> I meet the dreaded, you must activate this product online, issue. And because my machine configuration has changed since I first installed those apps they refuse to activate. So now I have to email support people in order to get them to let me install the software. To their credit <em>Innovasy</em>s were very quick and got my <em>Help Studio 3</em> and <em>Document X!</em> apps up and running in a couple of hours.</p>
<p>Unfortunately my experience with <em>PreEmptive</em> in order to get <em>Dotfuscator</em> up and working is less impressive. I was awoken at 4am by a call from someone in <em>Europe </em>to ask about the problem. The caller even asked if I liked living in Australia so there is no excuse for not realizing I would be in bed! It is now 24 hours since I emailed their support and still have not been able to get it activated. Luckily I don&#8217;t need to build a release at the moment.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/jGfDSeyVRYA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/08/windows-7-2/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/08/windows-7-2/</feedburner:origLink></item>
		<item>
		<title>Navigator Tab Reordering</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/S3n6p5yBkVw/</link>
		<comments>http://www.componentfactory.com/blog/2009/08/navigator-tab-reordering/#comments</comments>
		<pubDate>Tue, 04 Aug 2009 09:27:08 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Docking]]></category>
		<category><![CDATA[Krypton Navigator]]></category>
		<category><![CDATA[Krypton Workspace]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=530</guid>
		<description><![CDATA[Finally we can now use the mouse to drag a page header into a new position. This feature is a must for the docking system but I am sure it is helpful for those using the Navigator or Workspace standalone controls. It has been requested quite a few times over the last couple of years and [...]]]></description>
			<content:encoded><![CDATA[<p>Finally we can now use the mouse to drag a page header into a new position. This feature is a must for the docking system but I am sure it is helpful for those using the <em>Navigator</em> or <em>Workspace</em> standalone controls. It has been requested quite a few times over the last couple of years and finally it has made it to the top of the to-do list.</p>
<p>The feature works with all the <em>Navigator</em> modes that display elements per-page. So any of the modes that have tabs, ribbon tabs or check buttons per-page can be reordered. Even the <em>Outlook</em> modes have the ability as they contain a set of check buttons at the bottom of the control.</p>
<p>I would show some screenshots but there is no effective way of showing it working. Just wait until the docking beta 2 in a couple of week&#8217;s time and then you can play with it.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/S3n6p5yBkVw" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/08/navigator-tab-reordering/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/08/navigator-tab-reordering/</feedburner:origLink></item>
		<item>
		<title>KryptonWrapLabel</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/4dedlpn3Cq0/</link>
		<comments>http://www.componentfactory.com/blog/2009/07/kryptonwraplabel/#comments</comments>
		<pubDate>Fri, 31 Jul 2009 11:18:28 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=528</guid>
		<description><![CDATA[Due to popular demand we have a new label control that automatically performs line wrapping. The KryptonWrapLabel is probably the simplest control in the Toolkit but that does not make it the least useful (that honor goes I think to the KryptonBorderEdge). This control actually derives from the standard windows forms Label control and automatically [...]]]></description>
			<content:encoded><![CDATA[<p>Due to popular demand we have a new label control that automatically performs line wrapping. The <em>KryptonWrapLabel</em> is probably the simplest control in the <em>Toolkit</em> but that does not make it the least useful (that honor goes I think to the <em>KryptonBorderEdge</em>). This control actually derives from the standard windows forms <em>Label</em> control and automatically updates the <em>ForeColor</em> and <em>Font</em> to match the appropriate palette setting. So if you need automatic line wrapping this is the control for you.</p>
<p>I did make a couple of other minor changes. First of all the background of the control is transparent instead of using the controls <em>BackColor</em> property. I also uses the palette text rendering hint so that the text has the same appearance as text everywhere else in the <em>Krypton Toolkit</em>. You can see the result in this image&#8230;</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/WrapLabel.gif" alt="" /></p>
<p>At the top is a <em>KryptonWrapLabel</em> and at the bottom a standard windows forms <em>Label</em>.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/4dedlpn3Cq0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/07/kryptonwraplabel/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/07/kryptonwraplabel/</feedburner:origLink></item>
		<item>
		<title>Serial Keys App</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/NeKT2xV0wuA/</link>
		<comments>http://www.componentfactory.com/blog/2009/07/serial-keys-app/#comments</comments>
		<pubDate>Wed, 29 Jul 2009 11:12:57 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=526</guid>
		<description><![CDATA[One valid complaint that customers make is that it is not easy to see which serial keys are currently registered. Plus it is not easy to register a new serial key in a way that is simple and fool proof. In response to this a new application has been added into the just released beta.
You can [...]]]></description>
			<content:encoded><![CDATA[<p>One valid complaint that customers make is that it is not easy to see which serial keys are currently registered. Plus it is not easy to register a new serial key in a way that is simple and fool proof. In response to this a new application has been added into the just released beta.</p>
<p>You can start the app but running the <em>Krypton Explorer</em>, selecting the <em>Applications</em> tab and then using the <em>Krypton Serial Keys</em> link. Here you can see it running on my development machine.</p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/SerialKeys.gif" alt="" /></p>
<p>The bottom of the screen lists all the currently registered serial keys in the registry. To register a new key just enter it into the text box and use the register button. If it succeeds then the bottom section will update to show it.</p>
<p>So when a new release is made in the future you can uninstall, install the latest version and then run this app to register your new serial key. Then you should be able to load up and build your application without further actions.</p>
<p><strong>NOTE</strong>: No, the serial keys in the image are not valid; they were randomly generated strings for demo purposes only!</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/NeKT2xV0wuA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/07/serial-keys-app/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/07/serial-keys-app/</feedburner:origLink></item>
		<item>
		<title>Docking Beta 1 Released</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/DlxZYMJrzMs/</link>
		<comments>http://www.componentfactory.com/blog/2009/07/docking-beta-1-released/#comments</comments>
		<pubDate>Tue, 28 Jul 2009 12:50:11 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Docking]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=517</guid>
		<description><![CDATA[The new Krypton Docking capability is ready for release as a first beta. It has a couple of missing features that I will be working on whilst waiting for beta feedback but it is close enough to completed to play around with. I have created samples that can be accessed from the Krypton Explorer as well as full [...]]]></description>
			<content:encoded><![CDATA[<p>The new <em>Krypton Docking</em> capability is ready for release as a first beta. It has a couple of missing features that I will be working on whilst waiting for beta feedback but it is close enough to completed to play around with. I have created samples that can be accessed from the K<em>rypton Explorer</em> as well as full documentation.</p>
<p><a href="http://www.componentfactory.com/downloads/KryptonSuite354.zip"><strong>Download Beta</strong></a></p>
<p><img src="http://www.componentfactory.com/blog/data/upimages/DockTutorial1.gif" alt="" /></p>
<p>As a beta release I do not recommend using this in a commerical application. It should be used for experimenting only. I anticipate at least one more beta before the full Suite 4.0 release is ready. I would certainly appreciate any feedback on bugs, missing functionality or any advice on how it could be improved. If there is any area that needs more explaining in the documentation or an extra sample to demonstrate something tricky then just drop me a line. I will setup a forum just for this beta release so that would be a good place to note bugs etc.</p>
<p>The beta version number is 3.5.4 so it will work with all existing 3.5 serial keys. Although the docking component is the headline change there are also numerous bug fixes and updates across the other components.</p>
<p><strong>Change Summary<br />
</strong>- Docking component<br />
- Workspace persistence<br />
- Workspace cell maximize/restore<br />
- KryptonSeparator added to Toolkit</p>
<p><strong>Known Issues<br />
</strong>- Drag reordering of tabs not implemented<br />
- Occasional crash with floating windows</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/DlxZYMJrzMs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/07/docking-beta-1-released/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/07/docking-beta-1-released/</feedburner:origLink></item>
		<item>
		<title>Serial keys</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/A8ucIlhkwoA/</link>
		<comments>http://www.componentfactory.com/blog/2009/07/serial-keys/#comments</comments>
		<pubDate>Tue, 21 Jul 2009 10:31:07 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=514</guid>
		<description><![CDATA[Probably half of all support requests relating to Krypton are about the licensing.
How do you enter the serial key?  How do I ensure the latest key is being used? How do I to handle licensing on a build machine? Why am I getting a license the first time my app starts on a new machine? 
Clearly the current mechanism is [...]]]></description>
			<content:encoded><![CDATA[<p>Probably half of all support requests relating to Krypton are about the licensing.</p>
<p>How do you enter the serial key?  How do I ensure the latest key is being used? How do I to handle licensing on a build machine? Why am I getting a license the first time my app starts on a new machine? </p>
<p>Clearly the current mechanism is just not good enough. So I propose changing the licensing system for the next release to make it super easy for customers to enter the key and license their applications. But what system to use? Roll my own from scratch, modify the existing system or buy an commercial solution?</p>
<p>I&#8217;m looking for feedback on your experience with licensing systems to see if there is a good one that people would recommend. It must be able to support the following requirements&#8230;</p>
<ul>
<li>Work with a component library</li>
<li>Easy customer entry of license keys</li>
<li>Not validate against machine settings</li>
<li>Not validate against a server</li>
</ul>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/A8ucIlhkwoA" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/07/serial-keys/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/07/serial-keys/</feedburner:origLink></item>
		<item>
		<title>Palette Composer</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/37MQOrjyxbs/</link>
		<comments>http://www.componentfactory.com/blog/2009/07/palette-composer/#comments</comments>
		<pubDate>Sun, 19 Jul 2009 09:15:40 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Toolkit]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=511</guid>
		<description><![CDATA[I just noticed there is a codeplex project called Palette Composer.
It takes a set of custom palettes and compiles them into your assembly for ease of use. You can check it out here&#8230;
]]></description>
			<content:encoded><![CDATA[<p>I just noticed there is a codeplex project called <em>Palette Composer</em>.</p>
<p>It takes a set of custom palettes and compiles them into your assembly for ease of use. You can check it out <a href="http://kryptonpalcomposer.codeplex.com/">here</a>&#8230;</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/37MQOrjyxbs" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/07/palette-composer/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/07/palette-composer/</feedburner:origLink></item>
		<item>
		<title>Simplifying product lineup</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/XHmLS-Lxt5Y/</link>
		<comments>http://www.componentfactory.com/blog/2009/07/simplifying-product-lineup/#comments</comments>
		<pubDate>Wed, 15 Jul 2009 06:13:08 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=509</guid>
		<description><![CDATA[I’m thinking of changing the product lineup for the next release cycle. Reducing to just the Krypton Suite and the Krypton Toolkit Source products.
I get a fair number of questions from people that are confused because of the dependencies that exist. If you buy the Workspace you automatically get the Navigator. With Docking it will [...]]]></description>
			<content:encoded><![CDATA[<p>I’m thinking of changing the product lineup for the next release cycle. Reducing to just the Krypton Suite and the Krypton Toolkit Source products.</p>
<p>I get a fair number of questions from people that are confused because of the dependencies that exist. If you buy the Workspace you automatically get the Navigator. With Docking it will get more confusing because it will come with Workspace and Navigator because they are both dependencies of the Docking system. This confusion would be completely removed by having just the Krypton Suite which has everything provided.</p>
<p>Of course I would need to give all existing customers a free upgrade to the full Suite but I am sure those customers would be happy with the change! Any thoughts?</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/XHmLS-Lxt5Y" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/07/simplifying-product-lineup/feed/</wfw:commentRss>
		<slash:comments>10</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/07/simplifying-product-lineup/</feedburner:origLink></item>
		<item>
		<title>Twitter is dead</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/sc7OzAe6yNg/</link>
		<comments>http://www.componentfactory.com/blog/2009/07/twitter-is-dead/#comments</comments>
		<pubDate>Mon, 13 Jul 2009 06:24:50 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[General]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=507</guid>
		<description><![CDATA[Like a dumb sheep I followed the hype and joined the twitter flock. After spending several weeks following a few dozen people I came to stunning conclusion. I was mistaken and will never get back those wasted hours. I learnt nothing new except trivia I never wanted to know and wish I could forget.
I&#8217;ve removed [...]]]></description>
			<content:encoded><![CDATA[<p>Like a dumb sheep I followed the hype and joined the twitter flock. After spending several weeks following a few dozen people I came to stunning conclusion. I was mistaken and will never get back those wasted hours. I learnt nothing new except trivia I never wanted to know and wish I could forget.</p>
<p>I&#8217;ve removed the twitter gadget from the blog sidebar and hope never to use the service again.</p>
<p>Twitter is dead to me.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/sc7OzAe6yNg" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/07/twitter-is-dead/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/07/twitter-is-dead/</feedburner:origLink></item>
		<item>
		<title>Docking persistence</title>
		<link>http://feedproxy.google.com/~r/PhilWrightComponentFactory/~3/R8BKSYG65lE/</link>
		<comments>http://www.componentfactory.com/blog/2009/07/docking-persistence/#comments</comments>
		<pubDate>Thu, 09 Jul 2009 11:08:22 +0000</pubDate>
		<dc:creator>Phil Wright</dc:creator>
				<category><![CDATA[Krypton Docking]]></category>

		<guid isPermaLink="false">http://www.componentfactory.com/blog/?p=505</guid>
		<description><![CDATA[SaveConfigToFile/LoadConfigFromFile
Saving and restoring your docking config is crucial for a good user experience. Typically when you close down an application you want to store the current layout so that at restart you can restore that layout. This allows a smooth experience for the end user. You can do this easily with the docking system by using the [...]]]></description>
			<content:encoded><![CDATA[<p><strong>SaveConfigToFile/LoadConfigFromFile</strong><br />
Saving and restoring your docking config is crucial for a good user experience. Typically when you close down an application you want to store the current layout so that at restart you can restore that layout. This allows a smooth experience for the end user. You can do this easily with the docking system by using the file variations of the save/load methods.</p>
<p><strong>SaveConfigToXml/LoadConfigFromXml<br />
SaveConfigToArray/LoadConfigFromArray</strong><br />
<strong>SaveConfigToStream/LoadConfigFromStream</strong><br />
To allow maximum flexibility you can also persist configurations to xml streams, bytes arrays and arbitrary streams. Using byte arrays is really useful if you want to store configs inside a database. You can easily convert a byte array to and from base64 and so have it stored as a string.</p>
<p><strong>GlobalSaving/GlobalLoading</strong><br />
Extensibility is provided via a set of events. Use these two events to add your own custom data into the configuration data. Adding your own custom arbritary information into the docking config might serve as the only persistence mechanism needed for your entire application.</p>
<p><strong>PageSaving/PageLoading</strong><br />
Store per-page custom information using this pair of events. For example, your page might represent a file and so you could use the <em>PageSaving</em> event to store the name of the file the page is displaying. On loading you use the <em>PageLoading</em> to associate the file with a page and  initialize the page contents.</p>
<p>When a docking configuration is being loaded the process begins by creating a list of all the current pages inside the docking hierarchy. Then the entire contents of the hierarchy are reset. So all floating windows are killed, auto hidden groups wiped and docked windows removed. Now the config is loaded to create new floating window, auto hidden groups and so forth as defined in the config.</p>
<p>Each time a page definition is found in the config it attempts to reuse any existing page with that same unique name. So if the page existed at the time of the load operation and the config refers to that page it will simply be reused. The <em>PageLoading</em> event is fired so the existing page can be modified if required by event handlers based on any custom data that is stored with the page config.</p>
<p><strong>RecreateLoadingPage</strong><br />
If the configuration contains details of a page that does not exist in the current hierarchy at load time then this event is fired so that an appropriate page can be created. If you want the config page ignored then you can cancel the event.</p>
<p><strong>OrphanedPages</strong><br />
Once the config has been reloaded there might be pages that were in the hierarchy before the load but were not inside the config itself. These are orphan pages in that they are no longer part of the docking system as they were removed but never added back again. This event is fired at the end of the load process and gives a list of all these orphan pages. This event is useful if you need to perform extra processing for a page that is no longer needed, such as closing file handles or releasing other resources.</p>
<p>The above set of events allows two common scenarios to be handled. Applications that have a constant set of docking pages can easily be saved and reloaded without needing to handle any events. As the loading config will always refer to every docking page it means that all the pages are preserved after loads. Applications that have a dynamic set of pages are handled easily by using the <em>RecreateLoadingPage</em> and <em>OrphanedPages</em> events.</p>
<img src="http://feeds.feedburner.com/~r/PhilWrightComponentFactory/~4/R8BKSYG65lE" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://www.componentfactory.com/blog/2009/07/docking-persistence/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/07/docking-persistence/</feedburner:origLink></item>
		<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>
		<slash:comments>22</slash:comments>
		<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>
		<slash:comments>3</slash:comments>
		<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>
		<slash:comments>0</slash:comments>
		<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>
		<slash:comments>7</slash:comments>
		<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>
		<slash:comments>0</slash:comments>
		<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>
		<slash:comments>1</slash:comments>
		<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>
		<slash:comments>7</slash:comments>
		<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 &#8211; 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>
		<slash:comments>0</slash:comments>
		<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 &#8211; 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 &#8211; 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>
		<slash:comments>2</slash:comments>
		<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>
		<slash:comments>2</slash:comments>
		<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>
		<slash:comments>5</slash:comments>
		<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>
		<slash:comments>1</slash:comments>
		<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>
		<slash:comments>2</slash:comments>
		<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>
		<slash:comments>1</slash:comments>
		<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>
		<slash:comments>6</slash:comments>
		<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>
		<slash:comments>2</slash:comments>
		<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>
		<slash:comments>0</slash:comments>
		<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>
		<slash:comments>6</slash:comments>
		<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>
		<slash:comments>4</slash:comments>
		<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>
		<slash:comments>5</slash:comments>
		<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>
		<slash:comments>0</slash:comments>
		<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>
		<slash:comments>0</slash:comments>
		<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>
		<slash:comments>7</slash:comments>
		<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>
		<slash:comments>0</slash:comments>
		<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>
		<slash:comments>8</slash:comments>
		<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>
		<slash:comments>7</slash:comments>
		<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>
		<slash:comments>0</slash:comments>
		<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>
		<slash:comments>10</slash:comments>
		<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>
		<slash:comments>1</slash:comments>
		<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>
		<slash:comments>4</slash:comments>
		<feedburner:origLink>http://www.componentfactory.com/blog/2009/02/no-cigar/</feedburner:origLink></item>
	</channel>
</rss>
