<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.infosupport.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>blog community</title><link>http://blogs.infosupport.com/blogs/default.aspx</link><description /><dc:language>en-US</dc:language><generator>CommunityServer 2.1 (Build: 60809.935)</generator><item><title>... And moved back to InfoSupport again</title><link>http://blogs.infosupport.com/harryn/archive/2008/11/20/_2E002E002E00_-And-moved-back-to-InfoSupport-again.aspx</link><pubDate>Thu, 20 Nov 2008 09:34:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14754</guid><dc:creator>HarryN</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;After two years and three months I&amp;#39;m happy to announce that I&amp;#39;m back at InfoSupport again.&lt;/p&gt;&lt;p&gt;In those two years I did some interesting work at Getronics on their Getronics Delivery Process (a RUP based Software Factory), worked on several project for the Dutch Taxservice, participated in several CMMI appraisals and was given the opportunity to take a close look at Getronics Indian development partner &lt;a href="http://www.mindtree.com" title="Mindtree"&gt;Mindtree&lt;/a&gt;. My one week visit to their office at Bangalore was a real eye-opener for me and was the&amp;nbsp;beginning of several close personal relationships.&lt;/p&gt;&lt;p&gt;When I left InfoSupport some two years ago, the option to return was explicitly kept open and I&amp;#39;m glad to be back as a member of the Infosupport &lt;a href="http://www.infosupport.nl/ProfDev"&gt;Professional Development Center&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;My first two weeks are interesting from the start. I participated as a scribe in a SCAMPI-C CMMI level 3 Assesment supporting the Lead Appraiser Simon Porro from &lt;a href="http://www.spipartners.nl/english/home/index.html"&gt;SPI Partners&lt;/a&gt;. Next job is working together with &lt;a href="http://www.ivarjacobson.com/home.cfm"&gt;Ivar Jacobson International&lt;/a&gt; on process improvement using &lt;a href="http://www.ivarjacobson.com/products/essup.cfm"&gt;EssUp&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;I wil pick up blogging and jumping to conclusions right now.&lt;/p&gt;&lt;p&gt;Hope to see you all back at this&amp;nbsp;blog.&lt;/p&gt;&lt;p&gt;Harry Nieboer&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14754" width="1" height="1"&gt;</description></item><item><title>First release of Team System Web Access Translations now available!</title><link>http://blogs.infosupport.com/marcelv/archive/2008/11/17/First-release-of-Team-System-Web-Access-Translations-now-available_2100_.aspx</link><pubDate>Mon, 17 Nov 2008 22:56:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14740</guid><dc:creator>marcelv</dc:creator><slash:comments>4</slash:comments><description>&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;A few weeks ago I already posted about the fact that we have made great progress on the translation project at codeplex.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;I am proud to announce that we completed the first set of languages and we have a first release available for download at &lt;a href="http://www.codeplex.com/TSWAL/Release/ProjectReleases.aspx?ReleaseId=18055" target="_blank"&gt;codeplex&lt;/a&gt;.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;The following languages are now available in addition to the default languages available from Microsoft:&lt;/p&gt;&lt;p class="MsoListParagraphCxSpFirst" style="margin:6pt 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Croatian, done by &lt;a href="http://ognjenbajic.com/blog" target="_blank"&gt;Ognjen Bajic&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Portuguese (Brazilian), done by &lt;a href="http://igoravl.spaces.live.com/" target="_blank"&gt;Igor Abade&lt;/a&gt; and &lt;a href="http://blogs.2pc.com.br/ramonduraes" target="_blank"&gt;Ramon Dur&amp;atilde;es&lt;/a&gt;.&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Turkish, done by &lt;a href="http://www.cengizhan.com/" target="_blank"&gt;Cengiz Han&lt;/a&gt;, &lt;a href="http://blogs.infosupport.com/controlpanel/blogs/www.sunali.com" target="_blank"&gt;Coskun Sunali&lt;/a&gt; and &lt;a href="http://www.okantekeli.com" target="_blank"&gt;Okan Tekeli&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Danish, done by Gert Christiansen&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Swedish, done by &lt;a href="http://olausson.net/blog" target="_blank"&gt;Mathias Olausson&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpMiddle" style="margin:0in 0in 0pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Polish, done by &lt;a href="http://zine.net.pl/blogs/bysza" target="_blank"&gt;Marek Byszewski&lt;/a&gt;&lt;/p&gt;&lt;p class="MsoListParagraphCxSpLast" style="margin:0in 0in 3pt 47.35pt;text-indent:-0.25in;"&gt;&lt;span style="font-family:Symbol;"&gt;&lt;span&gt;&amp;middot;&lt;span style="font:7pt 'Times New Roman';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;Dutch, done by myself &lt;span style="font-family:Wingdings;"&gt;&lt;span&gt;J&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;So what do you get when you download the installer?&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;We provide you with a very straight trough installation process. We have a MSI installer and the only clicks needed are accepting the license agreement (the same as on &lt;a href="http://www.codeplex.com/TSWAL/license" target="_blank"&gt;codeplex&lt;/a&gt; and you are done. The installer will automatically detect if Team System Web Access SP1 is installed on your box and it will use the path found to install the additional resource files. If Team System Web Access is not installed, the installer will refuse to install, since installation would make no sense in these conditions.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;For a user to see the pages in its favorite language, he might need to set the profile options in Team System Web Access. If the user has e.g. an English OS setup, but wants to view the pages in e.g. Dutch, he can force Team System Web Access to always use Dutch and ignore the browser settings for the preferred language. To make this happen go to the settings-&amp;gt;profile-&amp;gt;options page (found at the right side of the home page) and there go to the regional Settings tab. There you see a drop down that defaults to &amp;quot;browser accepted language&amp;quot; and you can there select e.g. Dutch. After clicking OK, the page will refresh and you will see the site in the selected language. Any user that has already a localized version of the OS installed will most of the time get the translated pages, since the default browser settings will take the localization settings of the user as the preferred language.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;One question that might pop your mind is do I need SP1 of Team System Web Access? And the answer is yes you do. This is because SP1 enables the multi language feature that we use to provide the additional translation. The good news is that this does not mean you are required to install SP1 of TFS. Although it is a very good practice that you would keep your server to the latest service pack level, it is not required by team system web access Sp1.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Now that we have released, it is also time to address the fact that we might have made some mistakes in the translations. If you find any typo&amp;#39;s, misspelled words or other errors, please be so kind as to provide us with feedback, using the issue tracker at &lt;a href="http://www.codeplex.com/TSWAL/WorkItem/List.aspx" target="_blank"&gt;codeplex&lt;/a&gt;. Please make sure you provide information which language you found the bug, how it manifests itself and what the correct spelling would be. We will make sure as a team to fix them a.s.a.p. and provide you with a new version promptly.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;My special Thanks go out to all contributors to the project and Microsoft especially, since they were so kind as to help us with the resource files that are needed to do this project.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;For the next release we already have a few other people working on new languages. The once currently in development are Portuguese, Norwegian and Arabic.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;If you would like to contribute to this project, please contact me (using the contact tools on my blog or at codeplex) and I will get back to you a.s.a.p. and provide you with the proper access and instructions to contribute.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Please give us your feedback on what you think of this project.&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Cheers,&lt;/p&gt;&lt;p class="MsoNormal" style="margin:6pt 0in 3pt 11.35pt;"&gt;Marcel&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14740" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/marcelv/archive/tags/Team+System/default.aspx">Team System</category><category domain="http://blogs.infosupport.com/marcelv/archive/tags/Team+System+Extensibility/default.aspx">Team System Extensibility</category><category domain="http://blogs.infosupport.com/marcelv/archive/tags/MVP/default.aspx">MVP</category></item><item><title>Visual Studio integration for Jazz beta available</title><link>http://blogs.infosupport.com/peterhe/archive/2008/11/16/Visual-Studio-integration-for-Jazz-beta-available.aspx</link><pubDate>Sun, 16 Nov 2008 16:55:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14736</guid><dc:creator>peterhe</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;There now is a beta version available for &lt;a href="https://jazz.net/index.jsp"&gt;Jazz&lt;/a&gt; / Rational Team Concert integration in Visual Studio. See this &lt;a href="https://jazz.net/pub/learn/videos/data/visual-studio-intro/rtcvs-beta.html"&gt;video&lt;/a&gt; for more information. I&amp;#39;ve seen the VS client in action at the RSDC. It&amp;#39;s still pretty limited compared to the Eclipse based tooling, but good enough for developers to just work with the version system and some quick work item management. As with everything else involving Jazz the beta is available for download, but you&amp;#39;ll need a free jazz.net account to get to it.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14736" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Jazz/default.aspx">Jazz</category></item><item><title>Eye-candy in Windows 7 (part 3 of ???)</title><link>http://blogs.infosupport.com/ericd/archive/2008/11/15/Eyecandy-in-Windows-7-_2800_Part-3-of-_3F003F003F002900_.aspx</link><pubDate>Sat, 15 Nov 2008 11:12:35 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14732</guid><dc:creator>Eric Denekamp</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;While toying around in Windows 7 I started the calculator and to my surprise the interface that we all know has changed. it looks pretty cool.&lt;/p&gt;  &lt;p&gt;&lt;a target="_blank" href="http://blogs.infosupport.com/photos/ericd/images/14728/original.aspx"&gt;&lt;img src="http://blogs.infosupport.com/photos/ericd/images/14728/original.aspx" width="136" height="240" /&gt;&lt;/a&gt; &lt;a target="_blank" href="http://blogs.infosupport.com/photos/ericd/images/14729/original.aspx"&gt;&lt;img src="http://blogs.infosupport.com/photos/ericd/images/14729/original.aspx" width="240" height="238" /&gt;&lt;/a&gt; &lt;a target="_blank" href="http://blogs.infosupport.com/photos/ericd/images/14731/original.aspx"&gt;&lt;img src="http://blogs.infosupport.com/photos/ericd/images/14731/original.aspx" width="137" height="240" /&gt;&lt;/a&gt; &lt;a target="_blank" href="http://blogs.infosupport.com/photos/ericd/images/14730/original.aspx"&gt;&lt;img src="http://blogs.infosupport.com/photos/ericd/images/14730/original.aspx" width="240" height="219" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;It has now four modes: from left to right: Standard, Scientific, Statistic, Programmer.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14732" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/ericd/archive/tags/Microsoft+general/default.aspx">Microsoft general</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Future+Stuff/default.aspx">Future Stuff</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category></item><item><title>Interfaces and compatibility</title><link>http://blogs.infosupport.com/ernow/archive/2008/11/14/Interfaces-and-compatibility.aspx</link><pubDate>Fri, 14 Nov 2008 15:09:06 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14724</guid><dc:creator>Erno de Weerd</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Sticking to industry standard interfaces can safe your life... Last week I found out that an interface that I have been using for years and years might become more common than expected.&lt;/p&gt;  &lt;p&gt;For years manufactures created weak implementations that most of the time didn't stick to the original interface definition. That might have had something to do with patents and stuff.&lt;/p&gt;  &lt;p&gt;I can wait for good, solid, fitting and inspiring implementations.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.portfolio.com/news-markets/national-news/ap/2008/11/12/battle-of-the-bricks-lego-fails-in-trademark-bid" target="_blank"&gt;Read the announcement here.&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14724" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/ernow/archive/tags/Design/default.aspx">Design</category></item><item><title>Silverlight and the Mouse(Wheel)</title><link>http://blogs.infosupport.com/ernow/archive/2008/11/14/Silverlight-and-the-Mouse_2800_Wheel_2900_.aspx</link><pubDate>Fri, 14 Nov 2008 14:14:53 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14723</guid><dc:creator>Erno de Weerd</dc:creator><slash:comments>1</slash:comments><description>&lt;p&gt;The requested feature is simple: I want full mouse support in Silverlight. I want to use the mouse wheel and the right mouse button. &lt;/p&gt;  &lt;p&gt;After reading numerous blog posts and coding several proofs of concept I found that it is no easy task to get there. (Yes, browsers should be named as part of the evil axis)&lt;/p&gt;  &lt;p&gt;First the good news:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Mouse wheel support is possible. &lt;/li&gt;    &lt;li&gt;I created a very handsome (if I may say so) decorator-like control to add mouse wheel support to a Silverlight application. &lt;/li&gt;    &lt;li&gt;No javascript writing needed. &lt;/li&gt;    &lt;li&gt;You can download it here (look at the end of this post) &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The bad news:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Right mouse button support is a disaster. &lt;/li&gt;    &lt;li&gt;I did not add this to the decorator because I can not get a cross-browser solution to work correctly. &lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;&lt;strong&gt;The details on the good news&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;Browsers have different ways of getting the wheel event data. First of all: the browser events are different. Here is how I solved that:&lt;/p&gt;  &lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;   &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;     &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;private&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; AttachBrowserMouseWheelEvent()&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (HtmlPage.IsEnabled)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (HtmlPage.BrowserInformation.UserAgent.Contains(&lt;span style="color:#006080;"&gt;&amp;quot;Firefox&amp;quot;&lt;/span&gt;))&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;             HtmlPage.Plugin.AttachEvent(&lt;span style="color:#006080;"&gt;&amp;quot;DOMMouseScroll&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ProcessOnMouseWheel);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (HtmlPage.BrowserInformation.UserAgent.Contains(&lt;span style="color:#006080;"&gt;&amp;quot;MSIE&amp;quot;&lt;/span&gt;) ||&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;             HtmlPage.BrowserInformation.UserAgent.Contains(&lt;span style="color:#006080;"&gt;&amp;quot;Opera&amp;quot;&lt;/span&gt;) ||&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;             HtmlPage.BrowserInformation.UserAgent.Contains(&lt;span style="color:#006080;"&gt;&amp;quot;Safari&amp;quot;&lt;/span&gt;))&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;             HtmlPage.Plugin.AttachEvent(&lt;span style="color:#006080;"&gt;&amp;quot;onmousewheel&amp;quot;&lt;/span&gt;, &lt;span style="color:#0000ff;"&gt;this&lt;/span&gt;.ProcessOnMouseWheel);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Note that I only tested this code on IE7 and FF2 and FF3.&lt;/p&gt;

&lt;p&gt;A major difference between this code and several examples I found on the web is that I register for the Plugin events, NOT the document or page events. Another difference is that I try to register only one single event; most samples on the web register all and might end up getting the same event multiple times.&lt;/p&gt;

&lt;p&gt;Once you get the correct event you have to parse the event data and of course this is also different for different browsers.&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;public&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; ProcessOnMouseWheel(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, HtmlEventArgs e)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (_isMouseOverChild)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;double&lt;/span&gt; delta = 0;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;         ScriptObject eventObj = e.EventObject;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (eventObj.GetProperty(&lt;span style="color:#006080;"&gt;&amp;quot;wheelDelta&amp;quot;&lt;/span&gt;) != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;             delta = ((&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt;)eventObj.GetProperty(&lt;span style="color:#006080;"&gt;&amp;quot;wheelDelta&amp;quot;&lt;/span&gt;)) / 120;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (HtmlPage.Window.GetProperty(&lt;span style="color:#006080;"&gt;&amp;quot;opera&amp;quot;&lt;/span&gt;) != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;                 delta = -delta;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  17:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;else&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (eventObj.GetProperty(&lt;span style="color:#006080;"&gt;&amp;quot;detail&amp;quot;&lt;/span&gt;) != &lt;span style="color:#0000ff;"&gt;null&lt;/span&gt;)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  18:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  19:&lt;/span&gt;             delta = -((&lt;span style="color:#0000ff;"&gt;double&lt;/span&gt;)eventObj.GetProperty(&lt;span style="color:#006080;"&gt;&amp;quot;detail&amp;quot;&lt;/span&gt;)) / 3;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  20:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  21:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (HtmlPage.BrowserInformation.UserAgent.Contains(&lt;span style="color:#006080;"&gt;&amp;quot;Macintosh&amp;quot;&lt;/span&gt;))&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  22:&lt;/span&gt;                 delta = delta * 3;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  23:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  24:&lt;/span&gt;&amp;#160; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  25:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (delta != 0)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  26:&lt;/span&gt;         {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  27:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;bool&lt;/span&gt; handled = OnMouseWheel(delta);&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  28:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;if&lt;/span&gt; (handled)&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  29:&lt;/span&gt;             {&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  30:&lt;/span&gt;                 e.PreventDefault();&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  31:&lt;/span&gt;             }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  32:&lt;/span&gt;         }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  33:&lt;/span&gt;     }&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  34:&lt;/span&gt; }&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Don't get me started on this it only shows how decent people like me end up solving problems that shouldn't be our's in the first place.&lt;/p&gt;

&lt;p&gt;So, how do we get this code in our precious little Silverlight applications? All examples that I found on the web require page-wide handling of the events or subclassing controls but I wanted a the event to be fired per Silverlight control and I wanted to be able to get rid of this helper code with the least amount of hassle as soon as Microsoft comes out with a real solution.&lt;/p&gt;

&lt;p&gt;I wanted a decorator. Silverlight has no decorator (WPF does...) So I browsed to Codeplex and looked up the code on the Silverlight Viewbox which should be a decorator to find out how they solved that. &lt;em&gt;Whoohoo&lt;/em&gt; for open source: I was able to copy-paste most of the code (let me know if I violated any copyrights doing that). This caused the client code to be able to look like this:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;UserControl&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;x:Class&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;SilverlightApplication1.Page&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&amp;quot;&lt;/span&gt; &lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns:x&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;http://schemas.microsoft.com/winfx/2006/xaml&amp;quot;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#ff0000;"&gt;xmlns:m&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;clr-namespace:SilverlightMouseSupport;assembly=SilverlightMouseSupport&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;m:MouseSupport&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;MouseWheel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TextBoxOnMouseWheel&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;             &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Scroll the mouse wheel above this textbox.&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;m:MouseSupport&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Grid&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;UserControl&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&amp;#160;&lt;/p&gt;

&lt;p&gt;As you can see: no special requirements, just a namespace and a wrapping control (decorator).&lt;/p&gt;

&lt;p&gt;BTW: wouldn't it be nice to have attached events (like attached properties) so you could write this:&lt;/p&gt;

&lt;div style="border-right:gray 1px solid;padding-right:4px;border-top:gray 1px solid;padding-left:4px;font-size:8pt;padding-bottom:4px;margin:20px 0px 10px;overflow:auto;border-left:gray 1px solid;width:97.5%;cursor:text;max-height:200px;line-height:12pt;padding-top:4px;border-bottom:gray 1px solid;font-family:consolas, 'Courier New', courier, monospace;background-color:#f4f4f4;"&gt;
  &lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;m:MouseSupport&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;TextBox&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;m:MouseSupport&lt;/span&gt;.&lt;span style="color:#ff0000;"&gt;MouseWheel&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TextBoxOnMouseWheel&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Text&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;Scroll the mouse wheel above this textbox.&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;

    &lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, 'Courier New', courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;m:MouseSupport&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;Although there is no need to edit the TestPages (Html or Aspx) that are generated by Visual Studio, I did edit the Html page because I wanted to be able to use multiple Silverlight controls and the generated javascript simply lacks support for that. So any differences in this page are entirely optional. No need for javascript coding to be able to use the MouseSupport decorator.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Details on the bad news&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For some reason publishers of browser plug-ins think it is necessary to bother the users of our (Rich Internet) applications with the fact that that particular area of the browser is using Silverlight or Flash/Flex/JavaFX by having a hard-coded context menu (right mouse button menu) that allows the user to configure the plug-in. As nice as that may be for a developer, for a user it is totally inappropriate. What would you think when you right-click in Word and you get a menu that allows you to change the wallpaper of your desktop?&lt;/p&gt;

&lt;p&gt;So what to do? I tried to add &lt;em&gt;oncontextmenu=&amp;quot;return false;&amp;quot;&lt;/em&gt; to the Html body or the plug-in tag. This does work but not in Firefox and causes a non-XHTML 1.0 violation. In Firefox, the context menu is still appearing but by right-clicking a second time the event does trigger but that silly context menu is still there. So I resolved to kill this feature from the decorator. If you know how to fix it, let me know and I'll add back in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Disclaimers and download&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The code is provided as is. No fees and no guarantees. Also: let me know if I violated any copyrights.&lt;/p&gt;

&lt;p&gt;MouseSupport is a decorator which is used to add mouse events to Silverlight controls.It has been tested on Microsoft Internet Explorer 7 and Firefox versions 2 and 3. 
  &lt;br /&gt;Known issues/restrictions:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;When switching to full screen Silverlight, the mouse wheel events are no longer being send to the control. &lt;/li&gt;

  &lt;li&gt;The MouseWheel event is NOT a routed event. To catch the MouseWheel event on a parent decorate the parent with its own MouseSupport decorator. &lt;/li&gt;

  &lt;li&gt;The MouseSupport decorator has several properties like Background, BorderBrush etc. that should not be used, the control should remain UI-less. &lt;/li&gt;

  &lt;li&gt;The MouseSupport decorator has a Template property but it can NOT be set. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="http://blogs.infosupport.com/files/folders/ernow/entry14722.aspx" target="_blank"&gt;Go to the download...&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Some extra's&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I ran into a very nasty 'feature' of Silverlight while making this. Somehow child controls of custom controls could not be referenced in code. I added a solution for this problem to the download. Let's hope Microsoft fixes this soon.&lt;/p&gt;

&lt;p&gt;Somehow my installation of Visual Studio 2008 does no longer support my Mouse Wheel. The IDE does not respond nor do the web browsers that I open for debugging. In particular for this project that was a real pain as you can imagine. Let me know if you know a solution for this problem.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14723" width="1" height="1"&gt;</description></item><item><title>Grails now part of Spring Source</title><link>http://blogs.infosupport.com/blogs/paul_bakker/archive/2008/11/13/Grails-now-part-of-Spring-Source.aspx</link><pubDate>Thu, 13 Nov 2008 09:56:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14717</guid><dc:creator>Paulb</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;G2One, the company behind Grails is aquired by Spring Source (the company behind Spring). To my opinion this is great news. Spring Source is becoming a serious choice for enterprise development, and it will be easier to use Grails as the development environment in large companies when it&amp;#39;s part of Spring Source.&amp;nbsp;&lt;/p&gt;&lt;p&gt;So far nothing has changed for developers using Grails for smaller projects. I hope it stays that way, but it seems Spring Source has learned from their recent mistake to forget about the open source community.&lt;/p&gt;&lt;p&gt;The question is still if you should use non-standards based technology in large projects. While Spring is a great framework, it&amp;#39;s only backed by a single company. The JEE specs are implemented by different companies, making it&amp;#39;s future more stable. The current specs are also good enough to do some decent development. The reasons to prefer Spring over JEE are much less than at the EJB 2.x times. Grails does help making the &amp;#39;alternative&amp;#39; more attractive anyhow.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14717" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Spring/default.aspx">Spring</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Grails/default.aspx">Grails</category><category domain="http://blogs.infosupport.com/blogs/paul_bakker/archive/tags/Spring+Source/default.aspx">Spring Source</category></item><item><title>J-Fall 2008</title><link>http://blogs.infosupport.com/peterhe/archive/2008/11/12/J_2D00_Fall-2008-wrap-up.aspx</link><pubDate>Wed, 12 Nov 2008 20:17:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14715</guid><dc:creator>peterhe</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I visited &lt;a href="http://www.nljug.org/pages/events/content/jfall_2008/"&gt;J-Fall 2008&lt;/a&gt; today, another successful Java conference organized by the&lt;a href="http://www.nljug.org" title="Dutch Java User Group"&gt; NLJUG&lt;/a&gt;. J-Fall/J-Spring are the biggest Java events in the Netherlands, it&amp;#39;s always fun to visit, see what the latest developments are, what people are doing and how crazy the conference booths are. Although actually the booths were pretty quiet this time, which is a big plus, because it&amp;#39;s a lot easier to talk without all kinds of loud bells and other noise going on.&lt;/p&gt;&lt;p&gt;There was a lot of attention for JavaFX (Sun) and Flex/Flash (Adobe). It&amp;#39;s kind of funny to watch Adobe (also mac dudes paint tool vendor) really trying to show Flex as being more &amp;quot;Enterprise worthy&amp;quot;, while Sun (also building operating systems for nuclear submarines) pushing JavaFX as a cool tool to draw animating pictures and circles. I do want to give special credit to Sun though for some really cool demos that actually worked this time! Chuk Munn-Lee, a Sun JavaFX engineer, did a few sessions with some nice humor and a really fast demo during the second keynote. Knowing how hard it is to keep typing straight while presenting on a big screen, and that Chuk was banging away on some nightly unstable builds of both Netbeans and JavaFX, that was pretty impressive.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;There also was a session about IBM &lt;a href="https://jazz.net/pub/index.jsp"&gt;Jazz&lt;/a&gt;. I think that&amp;#39;s great as Jazz is a big step forward in ALM tooling, especially for Java projects. IBM is once again leading on features and vision, pushing competitors harder to innovate as well. After a couple of years of relatively few innovations in the tooling space, I think the upcoming period will be a lot more interesting.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;On the other hand, I missed some topics as well. Nothing on the coming soon release of Java EE 6, or information about the new &lt;a href="http://www.sun.com/software/products/glassfishv3_prelude/index.xml"&gt;Glassfish v3 &amp;quot;prelude&amp;quot;&lt;/a&gt; version that was released last week. No sessions on what Spring is up to with their new &amp;quot;DM&amp;quot; server and new commercial offerings strategy, which scared a lot of users in the past few months. Although all the sessions I have seen were on the okay to excellent scale, some talks in my opinion did go out on a limb without a lot of actual real-life experience with the topic. I think it is fine to talk about new tools without much experience (what else can you expect?). However, I think it&amp;#39;s very important to recognize that sometimes new technology is interesting and useful, but not (yet) something that can be recommended to the masses. I keep being impressed by the quality of the questions from the audience at NLJUG events though, and with some tough questions, presenters did not get off the hook easily.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;When walking on the pavillion I did have some nice conversations with people about what they were actually doing with new methods and technologies. A nice example was the Adobe showcase booth, where ISVs showed their real life products based on Flex. I talked a bit with a vendor that supplies software for payed parking lots. Payed parking lots are a serious frustration for me lately, because really often, it just doesn&amp;#39;t work, so I immediately got interested. It&amp;#39;s nice to hear about actually using agile concepts and Flex in relatively tough projects like parking lot automation, and how they dealt with some of the problems they faced. For me, a separate spot for showcases are a keeper for next NLJUG events. See you at the next J-Spring!&lt;br /&gt;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14715" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/JavaFX/default.aspx">JavaFX</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/NLJUG/default.aspx">NLJUG</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Flex/default.aspx">Flex</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Jazz/default.aspx">Jazz</category></item><item><title>Fout bij connecten vanuit Excel (NL) (op een Engels OS) naar Analysis Services 2005</title><link>http://blogs.infosupport.com/blogs/oscarz/archive/2008/11/12/Fout-bij-connecten-vanuit-Excel-_2800_NL_2900_-_2800_op-een-Engels-OS_2900_-naar-Analysis-Services-2005.aspx</link><pubDate>Wed, 12 Nov 2008 16:36:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14713</guid><dc:creator>oscarz</dc:creator><slash:comments>0</slash:comments><description>&lt;font face="times new roman"&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;Bij het connecten vanuit een Nederlandse Excel versie naar een Analysis Services 2005 versie komt de volgende foutmelding:&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&amp;quot;XML for Analysis parser: The LocaleIdentifier property is not overwritable and cannot be assigned a value.&amp;quot;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;Om gebruik te maken van een Nederlandse&amp;nbsp;&amp;nbsp;Excel versie&amp;nbsp; (Op een Engels OS) kunnen de Analysis Services gegevens worden omgezet in Nederlandse namen (Standaard Multi Language Support in SSAS). Echter dit wil niet altijd zeggen dat de connectiviteit vanuit een Nederlandse Excel lukt. Om dit te regelen moet eerst de SSAS omgeving in Dutch worden geplaatst.&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;(Server)-&amp;gt; Properties-&amp;gt;Language.&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;De tweede stap is de connectie string (OLEDB) aanpassen, zodat de&amp;nbsp;localeIdentiefier (LCID) naar Nederlands wijst.&amp;nbsp;Microsoft heeft een total lijst van LCID beschikbaar &lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&lt;a href="http://www.microsoft.com/globaldev/reference/lcid-all.mspx:" target="_blank"&gt;&lt;span&gt;http://www.microsoft.com/globaldev/reference/lcid-all.mspx:&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;De OLEDB connectiestring is te vinden onder C:\Documents and Settings\&amp;lt;username&amp;gt;\Application Data\Microsoft\Queries&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;Example:&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;Provider =MSOLAP.3;Initial Catalog=&amp;lt;&amp;gt;; Data Source=Localhost; Initial Catalog=&amp;lt;&amp;gt;;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;Locale Identifier=1043;&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;De Locale &amp;nbsp;Identifier overschrijft de default Language setting van het OS&lt;/span&gt;&lt;span style="font-size:10pt;font-family:'Verdana','sans-serif';"&gt;&lt;/span&gt;&lt;/p&gt;&lt;/font&gt;&lt;p&gt;&lt;font face="times new roman"&gt;&lt;/font&gt;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14713" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/oscarz/archive/tags/Excel+_2800_NL_2900_/default.aspx">Excel (NL)</category><category domain="http://blogs.infosupport.com/blogs/oscarz/archive/tags/Locale+Identifier/default.aspx">Locale Identifier</category><category domain="http://blogs.infosupport.com/blogs/oscarz/archive/tags/SSAS+2005/default.aspx">SSAS 2005</category><category domain="http://blogs.infosupport.com/blogs/oscarz/archive/tags/XML+for+Analysis+parser/default.aspx">XML for Analysis parser</category></item><item><title>Eye-candy in Windows 7 (part 2 of ???)</title><link>http://blogs.infosupport.com/ericd/archive/2008/11/12/Eye_2D00_candy-in-Windows-7-_2800_part-2-of-_3F003F003F002900_.aspx</link><pubDate>Wed, 12 Nov 2008 14:12:47 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14710</guid><dc:creator>Eric Denekamp</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When creating the screenshots in the previous post i used the new version of MSPaint. I remember now that I read about the fact that in Windows 7 the ribbon would turn up more. At least it did in MSPaint.exe:&lt;/p&gt;  &lt;p&gt;&lt;a target="_blank" href="http://blogs.infosupport.com/photos/ericd/images/14709/original.aspx"&gt;&lt;img src="http://blogs.infosupport.com/photos/ericd/images/14709/original.aspx" width="240" height="77" /&gt;&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14710" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/ericd/archive/tags/Microsoft+general/default.aspx">Microsoft general</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Future+Stuff/default.aspx">Future Stuff</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category></item><item><title>Eye-candy in Windows 7 (part 1 of???)</title><link>http://blogs.infosupport.com/ericd/archive/2008/11/12/Eye_2D00_candy-in-Windows-7-_2800_part-1-of_3F003F003F002900_.aspx</link><pubDate>Wed, 12 Nov 2008 14:07:36 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14708</guid><dc:creator>Eric Denekamp</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;When playing around in Windows 7 I noticed the following:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.infosupport.com/photos/ericd/images/14707/original.aspx" /&gt; &lt;/p&gt;  &lt;p&gt;When i hovered over it it showed:&lt;/p&gt;  &lt;p&gt;&lt;img src="http://blogs.infosupport.com/photos/ericd/images/14706/original.aspx" /&gt; &lt;/p&gt;  &lt;p&gt;the green in the folder button, is nothing more and nothing less than the progress bar of the copy process running. this means that you do not have to pull forward the progress window to show how for it is.&lt;/p&gt;  &lt;p&gt;I know it is eye-candy, but I love sweets.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14708" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/ericd/archive/tags/Microsoft+general/default.aspx">Microsoft general</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Future+Stuff/default.aspx">Future Stuff</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+Server+2008+R2/default.aspx">Windows Server 2008 R2</category></item><item><title>Old News about expiring computer accounts in demo/course environments.</title><link>http://blogs.infosupport.com/ericd/archive/2008/11/12/Old-News-about-expiring-computer-accounts-in-demo_2F00_course-environments_2E00_.aspx</link><pubDate>Wed, 12 Nov 2008 13:26:27 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14705</guid><dc:creator>Eric Denekamp</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;I was talking to a colleague trainer of mine today and we were talking about course images and how they might become “out of sync” with the domain controller. ( basically what happens is: like a user, a computer has a password as well, and if that expires, the machine “drops out of the domain”) normally a domain disjoin and a domain join will do the trick here.&lt;/p&gt;  &lt;p&gt;Because it seems that this information is less wide spread than i assumed, i will post it here hoping that this info will save some reboots during trainings. in every setup I build, I am using it. and I did not have to disjoin and join a machine to those setups ever.&lt;/p&gt;  &lt;p&gt;There is a very easy way of solving this for environments where the machines might not be up all the time and maybe even will be switched off for a longer time.&lt;/p&gt;  &lt;p&gt;The solution is a Simple Group policy setting in the default domain policy:&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;em&gt;Computer configuration,Policies&lt;/em&gt;&lt;/strong&gt; (if win 2008)&lt;strong&gt;&lt;em&gt;, Windows Settings, Security Settings, Local Policies, Security Options.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt; it is all about the policy setting: &lt;em&gt;Domain member: Disable machine account password changes.&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;Set this setting to enabled and you’re done, the machine account passwords will never expire again…&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14705" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/ericd/archive/tags/Microsoft+general/default.aspx">Microsoft general</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+Server+2008+_2800_aka+Longhorn_2900_/default.aspx">Windows Server 2008 (aka Longhorn)</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Courses/default.aspx">Courses</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+Server+2008/default.aspx">Windows Server 2008</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>Boot your machine from VHD</title><link>http://blogs.infosupport.com/ericd/archive/2008/11/12/Boot-your-machine-from-VHD.aspx</link><pubDate>Wed, 12 Nov 2008 10:49:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14704</guid><dc:creator>Eric Denekamp</dc:creator><slash:comments>2</slash:comments><description>&lt;p&gt;Last week at TechEd Barcelona, one of the coolest things we saw was the session from Mark Russinovich on the new stuff in Windows 7 and Windows Server 2008 R2, where he showed that with the new OS the boot mechanism allows for booting from vhd file. at that point I though: This is what I am going to try next week. and I did. I have it running now and in this blogpost I will try to write a step by step guide on how to set this up.&lt;/p&gt;&lt;p&gt;Before I do this, I have to say thanks to my colleague Martijn de Vries who did a lot of the preliminary work on this.&lt;/p&gt;&lt;p&gt;The whole story may start at two places: a running Vista install, in which case there is some preliminary work to be done by copying the dvd:\bootmgr and bcdedit from the windows 7 DVD to your harddrive to enable this. &lt;a href="http://blogs.infosupport.com/files/folders/ericd/entry14714.aspx"&gt;BCDedit can also be downloaded here.&lt;/a&gt;&lt;/p&gt;&lt;p&gt;Furthermore you have to create a couple more steps: copy a vhd to a location on your harddrive (f.i. c:\vhd) in Vista open an administrator Commandprompt and type:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;BCDedit /copy {current} /d &amp;ldquo;temp&amp;rdquo;&lt;/em&gt;&lt;/strong&gt; (this is just to get a repair option during the second part of the installation.)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Bcdedit /set &amp;lt;guid result of previous command&amp;gt; device vhd=[C:]\vhd\bestaandevhd.vhd&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Bcdedit /set &amp;lt;guid result&amp;nbsp;of previous&amp;nbsp;command&amp;gt; osdevice vhd=[C:]\vhd\bestaandevhd.vhd&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;When you boot from the DVD, choose the temp option to do a repair for.&lt;/p&gt;&lt;p&gt;If you start like I did, with a running windows 7 machine, it is a pretty straight forward process.&lt;/p&gt;&lt;p&gt;first you boot from the DVD and instead of going through the complete setup you go to a repair process. and open a command prompt there.&lt;/p&gt;&lt;p&gt;On this command prompt you do the following: &lt;/p&gt;&lt;p&gt;Open Diskpart.&lt;/p&gt;&lt;p&gt;on the diskpart prompt you type: &lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;create vdisk file=c:\vhd\win7server.vhd type=fixed maximum=15000&amp;nbsp; &lt;/strong&gt;&lt;/em&gt;(this will create a new (empty) vhd file from a fixed size of 15000 MB in the existing path c:\vhd)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Select vdisk file=c:\vhd\win7server.vhd &lt;/em&gt;&lt;/strong&gt;(this command will set the focus of diskpart to the newly created Virtual disk.)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Surface vdisk&lt;/em&gt;&lt;/strong&gt; (this &amp;ldquo;mounts&amp;rdquo; the virtual disk so it is available.)&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Exit&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;On the command prompt type SETUP&lt;/p&gt;&lt;p&gt;This will restart the installation of the OS you were installing (windows 7 or Windows Server 2008 R2.) now you can point the installation to begin at the just created VHD file.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14704" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/ericd/archive/tags/Vista/default.aspx">Vista</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Microsoft+general/default.aspx">Microsoft general</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/TechEd-ITForum/default.aspx">TechEd-ITForum</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Future+Stuff/default.aspx">Future Stuff</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+7/default.aspx">Windows 7</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Server+2008+R2/default.aspx">Server 2008 R2</category></item><item><title>Photoviewer part 5 - Printing in WPF</title><link>http://blogs.infosupport.com/blogs/willemm/archive/2008/11/11/Photoviewer-part-5-_2D00_-Printing-in-WPF.aspx</link><pubDate>Tue, 11 Nov 2008 19:04:59 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14701</guid><dc:creator>willemm</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;One might think that WPF is meant only for doing graphical user interface stuff, but it also contains an API to perform basic printing tasks. The printing API in WPF is actually more advanced than the one offered by windows forms so it will be a lot easier to work with.
&lt;/p&gt;&lt;h2&gt;Printing a basic visual
&lt;/h2&gt;&lt;p&gt;Printing something visual in WPF is dead simple, the following sample demonstrates how easy it is to print a basic photo (Contains actual code from the photoviewer application):
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;PrintablePhoto&lt;/span&gt; printable = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;PrintablePhoto&lt;/span&gt;(photo);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;PrintDialog&lt;/span&gt; dlg = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;PrintDialog&lt;/span&gt;();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt;(dlg.ShowDialog() == &lt;span style="color:blue;"&gt;true&lt;/span&gt;)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;{
&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-left:23pt;"&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;Size&lt;/span&gt; printSize = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Size&lt;/span&gt;(dlg.PrintableAreaWidth, dlg.PrintableAreaHeight);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;
			&lt;span style="color:#2b91af;"&gt;Image&lt;/span&gt; img = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Image&lt;/span&gt;();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;    
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;    img.Source = printable.ImageData;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;    img.Stretch = &lt;span style="color:#2b91af;"&gt;Stretch&lt;/span&gt;.UniformToFill;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;    img.Margin = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Thickness&lt;/span&gt;(48);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;    dlg.PrintVisual(img,photo.Title);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;}
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;The printable photo class here is a wrapper around a photo class that has the functionality required to load the image data for printing. The used ImageData property is an image representing the actual photo. This image instance can be printed by calling PrintVisual on the PrintDialog.
&lt;/p&gt;&lt;p&gt;All the logic required for page setup etc is contained in the PrintDialog, so you don't need to worry about that. I discovered just one thing that might be a bit strange. There are no page margins, so you will have to calculate those yourself. A unit of 96 for the margin is equal to an inch. The example has a margin of half an inch on all sides of the picture.
&lt;/p&gt;&lt;h2&gt;Printing a document with multiple pages
&lt;/h2&gt;&lt;p&gt;Printing a single image is fine, but most applications don't do that. For example if you need to print invoices you are going to need logic that handles printing multiple pages. This is possible in WPF but requires a bit more work.
&lt;/p&gt;&lt;p&gt;The basics of printing remain the same, except now PrintDocument is called. This method accepts a FixedDocumentSequence instance. This FixedDocumentSequence is actually an XPS document that you can either load from disk or generate on the fly.
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;PrintDialog&lt;/span&gt; dlg = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;PrintDialog&lt;/span&gt;();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:blue;"&gt;if&lt;/span&gt; (dlg.ShowDialog() == &lt;span style="color:blue;"&gt;true&lt;/span&gt;)
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;{
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;
			&lt;span style="color:#2b91af;"&gt;AlbumDocumentBuilder&lt;/span&gt; builder = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;AlbumDocumentBuilder&lt;/span&gt;();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;    builder.PageWidth = dlg.PrintableAreaWidth;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;    builder.PageHeight = dlg.PrintableAreaHeight;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;
			&lt;span style="color:#2b91af;"&gt;FixedDocumentSequence&lt;/span&gt; sequence = builder.BuildDocumentSequence(album);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;    dlg.PrintDocument(sequence.DocumentPaginator, album.Title);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;}
&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;Building the document to print
&lt;/h2&gt;&lt;p&gt;Generating a document to print is not that hard. The first step in generating a fixed document for printing is creating the sequence and adding an empty document to it:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;FixedDocument&lt;/span&gt; document = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;FixedDocument&lt;/span&gt;();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;FixedDocumentSequence&lt;/span&gt; sequence = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;FixedDocumentSequence&lt;/span&gt;();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;DocumentReference&lt;/span&gt; reference = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;DocumentReference&lt;/span&gt;();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;reference.SetDocument(document);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;sequence.References.Add(reference);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Next step is creating a page and adding it to the fixed document:
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;PageContent&lt;/span&gt; pageContent = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;PageContent&lt;/span&gt;();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;document.Pages.Add(pageContent);
&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;Defining page content
&lt;/h2&gt;&lt;p&gt;Once you have a fixed document sequence containing the document you want to print, you can add content to the page that you created. PageContent itself does not expose methods to add content, this can be achieved by casting the PageContent instance to IAddChild.
&lt;/p&gt;&lt;p&gt;The following example demonstrates how you can add a UniformGrid to a page.
&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;IAddChild&lt;/span&gt; childContainer = (&lt;span style="color:#2b91af;"&gt;IAddChild&lt;/span&gt;) page;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;&lt;span style="color:#2b91af;"&gt;UniformGrid&lt;/span&gt; grid = &lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;UniformGrid&lt;/span&gt;();
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;grid.Columns = 2;
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;
 &lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;childContainer.AddChild(grid);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;grid.Measure(pageSize);
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style="font-family:Consolas;"&gt;grid.Arrange(&lt;span style="color:blue;"&gt;new&lt;/span&gt;
			&lt;span style="color:#2b91af;"&gt;Rect&lt;/span&gt;(pageSize));
&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Fixed document pages can contain a wide range of visual components, such as paragraphs and text runs. But you can also add inline images and UI components.  Check MSDN for more information about documents.
&lt;/p&gt;&lt;p&gt;You have full control over what you put on a single page, while still making use of the rich layout techniques offered by WPF.
&lt;/p&gt;&lt;p&gt; Keep in mind however that you need to call arrange and transform yourself, otherwise you will end up with a blank page. Calling Measure and Arrange on the root object on the page is enough to get things going, because the root component will perform the Measure and Arrange operations on all its children automatically.
&lt;/p&gt;&lt;h2&gt;Conclusion
&lt;/h2&gt;&lt;p&gt;The amount of work required to print documents in WPF has been drastically reduced compared to what you need to do in windows forms to get something out of your printer.  And thanks to XPS printing multiple pages isn't all that hard anymore either.
&lt;/p&gt;&lt;h2&gt;Resources
&lt;/h2&gt;&lt;ul&gt;&lt;li&gt;Information about documents in WPF: &lt;a href="http://msdn.microsoft.com/en-us/library/ms748388.aspx#document_viewer"&gt;http://msdn.microsoft.com/en-us/library/ms748388.aspx#document_viewer&lt;/a&gt;
		&lt;/li&gt;&lt;li&gt;More information on printing in WPF: &lt;a href="http://msdn.microsoft.com/en-us/library/aa970449.aspx"&gt;http://msdn.microsoft.com/en-us/library/aa970449.aspx&lt;/a&gt;
		&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;
 &lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14701" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/willemm/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.infosupport.com/blogs/willemm/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category></item><item><title>Windows 7 is here.</title><link>http://blogs.infosupport.com/ericd/archive/2008/11/11/Windows-7-is-here_2E00_.aspx</link><pubDate>Tue, 11 Nov 2008 11:03:34 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14700</guid><dc:creator>Eric Denekamp</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;At the PDC conference two weeks ago ISO images from Windows 7 and Server 2008 R2 were handed out, they are the M3 build. I had to try this. I saw some nice stuff about it at TechEd last week, so I had to try these. &lt;/p&gt;  &lt;p&gt;I will post some nice stuff We tried during the coming week.&lt;/p&gt;  &lt;p&gt;Where possible I will add screenshots and screen movies.&lt;/p&gt;  &lt;p&gt;So keep your eyes on this blog this week.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14700" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/ericd/archive/tags/TechEd-ITForum/default.aspx">TechEd-ITForum</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Future+Stuff/default.aspx">Future Stuff</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/Windows+7/default.aspx">Windows 7</category></item><item><title>JavaFX: coming soon now</title><link>http://blogs.infosupport.com/peterhe/archive/2008/11/09/JavaFX_3A00_-coming-soon-now.aspx</link><pubDate>Sun, 09 Nov 2008 12:46:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14695</guid><dc:creator>peterhe</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Finally, a ship date is set for JavaFX: the new UI toolkit from Sun, designed to go head to head with Flash and Silverlight. &lt;a href="http://www.weiqigao.com/blog/2008/11/08/javafx_december_2.html"&gt;December 2nd (2008)&lt;/a&gt; is the date that JavaFX 1.0 final will be shipped. Sun will also announce some other news regarding the future of Swing and JavaFX at the Devoxx conference. It&amp;#39;s great news that at least this year, Sun can still make the release and a clear vision on how this stuff will evolve in 2009. Just a few more weeks of patience...&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14695" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/JavaFX/default.aspx">JavaFX</category></item><item><title>Team Concert 1.0.1</title><link>http://blogs.infosupport.com/peterhe/archive/2008/11/04/Team-Concert-1.0.1.aspx</link><pubDate>Tue, 04 Nov 2008 20:48:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14683</guid><dc:creator>peterhe</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;&lt;a href="https://jazz.net/pub/index.jsp"&gt;Rational Team Concert&lt;/a&gt; version 1.0.1 was released last week. The web site got a little refresh, check out the new overview of &lt;a href="https://jazz.net/pub/capabilities/"&gt;capabilities&lt;/a&gt; if you want to know more. There is also a little introduction video up on &lt;a href="http://www.youtube.com/watch?v=ILvsGQQqAF0"&gt;youtube&lt;/a&gt; with cheesy fake animations and lots of buzz words, but at least it has a little jazzy style to it.&lt;/p&gt;&lt;p&gt;Although the number suggests a &amp;quot;maintenance release&amp;quot;, it adds some interesting new features and improvements. First of all, RTC can now use SQL Server 2005/2008 as a database. That&amp;#39;s great news as it will make Jazz a much better fit in Windows environments. Second, the beloved dashboard is now available for limited use in the Express editions. The dashboard provides a quick portal for project info, but you still need standard if you want more than one dashboard per project. For smaller projects I think one dashboard is fine though.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Another new feature is the graphical flow editor, which visualizes streams and workspaces. It just looks cool, especially the layout animations. :) A great tool to get an overview of a Jazz repository and a must-use-feature when doing a live demo:&lt;/p&gt;&lt;p&gt;&lt;img alt="Flow editor" height="566" src="http://blogs.infosupport.com/photos/peterhe/images/14682/original.aspx" title="Flow editor" width="466" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14683" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Jazz/default.aspx">Jazz</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/IBM/default.aspx">IBM</category></item><item><title>Photoviewer part 4 - Drag and drop</title><link>http://blogs.infosupport.com/blogs/willemm/archive/2008/11/04/Photoviewer-part-4-_2D00_-Drag-and-drop.aspx</link><pubDate>Tue, 04 Nov 2008 17:24:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14681</guid><dc:creator>willemm</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;The photoviewer application is getting closer to a version 1.0 release and I&amp;#39;m anctious to get it all done. The list of TODO items is stable now and will soon start to drop towards zero. In this 4th part I want to show a little about the new drag and drop feature I added to the collage view.&lt;/p&gt;&lt;h3&gt;Idea behind the feature&lt;/h3&gt;&lt;p&gt;There are quite a few demos available on the net that show how to build a Microsoft surface like interface with pictures and they all look pretty cool. They aren&amp;#39;t quite the real thing and aren&amp;#39;t all that usable in applications. However the demos sparked an idea that lead to the development of the collage view, which until today wasn&amp;#39;t too interactive. You can select photos and that&amp;#39;s about it. &lt;/p&gt;&lt;p&gt;What I wanted to do with the view was to make it possible to move your pictures around on the screen and be able to select and view details about each photo in the pile. I just finished the last part of this process by adding a final touch to the drag and drop feature.&lt;/p&gt;&lt;div class="wlWriterSmartContent" id="scid:6960CE03-38FC-44df-87D4-FA4540212B06:436d5d0a-4aba-4ef9-b8f9-15b098810236" style="display:inline;float:none;margin:0px;width:171px;padding:0px;"&gt;&lt;a href="http://blogs.infosupport.com/photos/willemm/images/14680/original.aspx" target="_blank"&gt;&lt;img border="0" height="129" src="http://blogs.infosupport.com/photos/willemm/images/14680/original.aspx" style="width:171px;height:129px;" width="171" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h3&gt;Implementation details&lt;/h3&gt;&lt;p&gt;The collage view itself is pretty simple, the skin is completely done in XAML so the code is kept clean. Adding the drag and drop feature proofed to be really simple and was done in two basic steps.&lt;/p&gt;&lt;p&gt;First I added a MouseDown, MouseUp and MouseMove handler that take care of the actual drag and drop operation. I could have gone with a DragMove operation, but the drag operations in WPF cause mouse move events to stop firing. I need those events to do another cool trick, so I went with these.&lt;/p&gt;&lt;p&gt;The second step is actually quite complex, I created a DragAdorner control which draws a semi transparent version of the photo thumbnail on the adorner layer of the window. This is the layer that is on top of all the controls in the form. The adorner will move with the photo as it is dragged around.&lt;/p&gt;&lt;p&gt;To create the adorner I made a visual copy of the photo in the constructor using the following fragment:&lt;/p&gt;&lt;p&gt;VisualBrush brush = new VisualBrush(element); &lt;br /&gt;_visual = new Rectangle(); &lt;/p&gt;&lt;p&gt;_visual.Width = element.RenderSize.Width; &lt;br /&gt;_visual.Height = element.RenderSize.Height; &lt;br /&gt;_visual.Fill = brush; &lt;br /&gt;_visual.Opacity = 0.6;&lt;/p&gt;&lt;p&gt;You can check out the code on codeplex and reuse it if you like. The DragAdorner is very generic and can be used in a wide range of drag and drop scenarios.&lt;/p&gt;&lt;h3&gt;Other changes in the current drop&lt;/h3&gt;&lt;p&gt;I haven&amp;#39;t made a release for this drop, as the skin for the application is too mangled to call it beta worthy. However I did manage to put in a few other things that weren&amp;#39;t there before. &lt;/p&gt;&lt;ol&gt;&lt;li&gt;I&amp;#39;ve Added a way to print a whole album and individual photos. It&amp;#39;s pretty rough at this moment, but you will get a pretty good idea of where I&amp;#39;m heading with that. I will write a blogpost later on about printing in WPF. Printing can be tricky and I think it&amp;#39;s good to see some solutions to common problems. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;The application skin has been updated. I got rid of the other skin, because the color combination wasn&amp;#39;t all that. The skin still isn&amp;#39;t complete and I need to change a few things to be able to skin the various dialogboxes. &lt;br /&gt;&lt;/li&gt;&lt;li&gt;The custom window implementation contained a few things that were focusable that shouldn&amp;#39;t be focusable. I changed this and the window should react more natural now. &lt;/li&gt;&lt;/ol&gt;&lt;h3&gt;Download&lt;/h3&gt;&lt;p&gt;The changes that I talked about here can only be downloaded as source. You can contact me for questions about compiling the source as the source may not compile on every client right away.&lt;/p&gt;&lt;p&gt;The source code can be downloaded from: &lt;a href="http://www.codeplex.com/photoviewer"&gt;http://www.codeplex.com/photoviewer&lt;/a&gt;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14681" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/willemm/archive/tags/WPF/default.aspx">WPF</category><category domain="http://blogs.infosupport.com/blogs/willemm/archive/tags/.NET+3.5/default.aspx">.NET 3.5</category><category domain="http://blogs.infosupport.com/blogs/willemm/archive/tags/CompositeWPF/default.aspx">CompositeWPF</category></item><item><title>WPF Speed tips</title><link>http://blogs.infosupport.com/blogs/willemm/archive/2008/11/03/WPF-Speed-tips.aspx</link><pubDate>Mon, 03 Nov 2008 07:30:50 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14665</guid><dc:creator>willemm</dc:creator><slash:comments>4</slash:comments><description>&lt;p&gt;Lately I am confronted with quite a few cases where the performance of WPF is shady to say the least. This however does most of the time have a reason outside of the framework. In this article I want to show a few things that you can do to make your WPF application perform better and use less memory.&lt;/p&gt;  &lt;h3&gt;Layering&lt;/h3&gt;  &lt;p&gt;Layering controls in a user interface can be useful to achieve particular layouts, it however can also be misused to overcome basic layout problems that are better solved in a different way. One example is a case where a stackpanel contains three grids to make a form that has three textboxes with labels in front. This can also be done with one grid. While this is example is obviously not something most developers will do, it does happen with more complex scenarios. &lt;/p&gt;  &lt;p&gt;When you notice that the screen loads slow and you cannot find a reason in the code that loads the data to display; Consider checking how your GUI is build. It may well be that it has a lot of layers which all have to be processed by WPF. There are known limitations with layered window constructions in Windows Vista. Most of them are solved in SP1, but it's still a good idea to limit the amount of layers used.&lt;/p&gt;  &lt;h3&gt;Freezables&lt;/h3&gt;  &lt;p&gt;Each graphics object in WPF can have two states: Unfrozen and frozen. Most of the freezable objects used in WPF are graphics object. Because most of these objects use unmanaged resources WPF keeps track of the changes made to the freezable objects and update the unmanaged resources accordingly. This costs performance and sometimes quite a lot performance. &lt;/p&gt;  &lt;p&gt;To improve on this you can Freeze() an object. This will make your application a lot faster on some cases. It also makes it possible to share the frozen object between threads. This last feature doesn't actually improve performance, but make your life a whole lot easier if you work with multiple threads in WPF.&lt;/p&gt;  &lt;h3&gt;Slow listboxes&lt;/h3&gt;  &lt;p&gt;I have seen a lot of listboxes in WPF that were slow when you started the application. The main reason for this is because people have skinned their application, but failed to use a virtualizing panel for the items in the listbox that they had skinned. A virtualizing panel reuses items that are no longer visible to paint items that are currently visible. As you might have figured out: It only paints items that are visible, thus reducing the amount of work required to fill the listbox. &lt;/p&gt;  &lt;h3&gt;Dynamically building user interface components&lt;/h3&gt;  &lt;p&gt;You don't need this very often, but I found out that it makes a huge difference in which order you add controls to the logical control tree when not working with XAML. Appearantly, WPF doesn't handle building control trees bottom-up. It saved me 50% of the loading time of a printing job (!) reversing the code that builds the control tree of my FixedDocument class. &lt;/p&gt;  &lt;p&gt;After reading up on this on MSDN I discovered that WPF is optimized for top-down tree building. This is done so that once a parent is constructed only the properties that have something to do with its children are validated. This saves on rendering time and I can imagine makes it simpler to create WPF controls. When you construct the tree bottom-up you end up having to revalidate the whole tree each time a control is added to the tree. &lt;/p&gt;  &lt;p&gt;The best way to prevent this from happening is to use XAML as much as possible and to keep in mind that you need to construct control trees in code in a top-down fashion.&lt;/p&gt;  &lt;h3&gt;When to start optimizing&lt;/h3&gt;  &lt;p&gt;Optimizing WPF applications can take quite a lot of time, which you may not have when building an application for a client. All developers have this problem. WPF performance optimization is best done when you are either building custom controls or when you are starting to get to a point where you are noticing that the performance of certain areas of your application is substandard. This may sound like fixing something that you could have prevented in the first place. However most developers who work with the standard WPF controls and maybe skinning are not hitting these performance issues.&lt;/p&gt;  &lt;p&gt;There are cases where you want to check up on performance ahead of the game:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;You are asked to create a GUI with more then 30 controls.&lt;/li&gt;    &lt;li&gt;You are asked to create a GUI with a complex custom control.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;The moral of this story is: As long as you are not doing something really crazy you should not have to worry about these things.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14665" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/willemm/archive/tags/WPF/default.aspx">WPF</category></item><item><title>TechEd ItForum 2008 Barcelona day 0</title><link>http://blogs.infosupport.com/ericd/archive/2008/11/02/TechEd-ItForum-2008-Barcelona-day-0.aspx</link><pubDate>Sun, 02 Nov 2008 18:12:11 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14664</guid><dc:creator>Eric Denekamp</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Today we were invited to gather for the Proctor instructions, the venue is a known place to me, but the weather is a little bit different than expected, High winds and rain. so the proctors got up early, got in at nign o clock and got instructions. I already spoke to a lot of familiar people, it is always nice to see people you know again.&lt;/p&gt;  &lt;p&gt;the labs are relocated,they used to bet near the reception area and right by the entrance, they are relocated to the top floor near the lunch area.&lt;/p&gt;  &lt;p&gt;New machines, 8cores, 8GB of ram, some labs run on hyper-v and some on Virtual PC and even some on Virtual server. Nice setup again. &lt;/p&gt;  &lt;p&gt;I will be in the security area of the labs. if you want to meet up, look me up there.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14664" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/ericd/archive/tags/Microsoft+general/default.aspx">Microsoft general</category><category domain="http://blogs.infosupport.com/ericd/archive/tags/TechEd-ITForum/default.aspx">TechEd-ITForum</category></item><item><title>Laatste post</title><link>http://blogs.infosupport.com/blogs/hansg/archive/2008/10/31/Laatste-post.aspx</link><pubDate>Fri, 31 Oct 2008 11:11:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14657</guid><dc:creator>Hans Geurtsen</dc:creator><slash:comments>0</slash:comments><description>Vandaag neem ik afscheid van Info Support. Daarmee stopt ook deze blog. Mijn collega &lt;a href="http://blogs.infosupport.com/blogs/oscarz/default.aspx" target="_blank"&gt;Oscar Zonneveld&lt;/a&gt; neemt het stokje van mij over.&amp;nbsp;Ik weet nog niet zeker waar ik zelf verder ga bloggen. Ik ben gevraagd een bijdrage te gaan leveren aan de &lt;a href="http://nlbi.blogspot.com/" target="_blank"&gt;NL-Business Intelligence&lt;/a&gt; blog wat ik misschien ga doen, misschien ga ik verder bij mijn &lt;a href="http://blogs.moreinfo.nl/" target="_blank"&gt;nieuwe werkgever&lt;/a&gt;. En als dat beide niets wordt, heb ik nog een &lt;a href="http://technokrabbels.blogspot.com" target="_blank"&gt;priv&amp;eacute; blogje&lt;/a&gt; achter de hand. Waar ik jullie dan ook in de toekomst weer tegenkom, bedankt voor jullie aandacht het afgelopen jaar en graag tot elders!&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14657" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/hansg/archive/tags/BI/default.aspx">BI</category></item><item><title>Een generieke YTD opnemen in een kubus</title><link>http://blogs.infosupport.com/blogs/hansg/archive/2008/10/31/Een-generieke-YTD-opnemen-in-een-kubus.aspx</link><pubDate>Fri, 31 Oct 2008 10:54:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14656</guid><dc:creator>Hans Geurtsen</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;Zeker wanneer je een scorecard maakt op een Analysis Services kubus, wil je nog wel eens verschillende KPIs over verschillende jaren met elkaar kunnen vergelijken. Als dan het huidige kalenderjaar ook in de scorecard staat, zie je voor dat jaar eigenlijk de year-to-date waarde t/m de laatste maand. De cijfers worden dan moeilijk vergelijkbaar met vorige jaren. Je wilt dan eigenlijk voor ieder jaar het totaal t/m de huidige kalendermaand zien. Er zullen vast meerdere (en misschien eenvoudiger) oplossingen zijn om dit te doen, maar dit is mijn oplossing die in ieder geval doet wat ik wilde:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Neem een extra dimensie op, bijv. &amp;lsquo;Time View&amp;rsquo;, met twee vaste members: &amp;lsquo;Regulier&amp;rsquo; en &amp;lsquo;YTD&amp;rsquo;. Neem hiertoe in de data source view een named query op met bijv. het volgende statement: &lt;br /&gt;&lt;br /&gt;SELECT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 AS TimeViewKey, &amp;#39;Regular&amp;#39; AS TimeViewDesc&lt;br /&gt;UNION&lt;br /&gt;SELECT&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 2 AS TimeViewKey, &amp;#39;YTD&amp;#39; AS TimeViewDesc&lt;br /&gt;&lt;br /&gt;Link deze dimensie tabel aan de feitentabel middels een nieuwe calculated column met de vaste waarde 1 (voor Regular) in de feitentabel zodat de volgende view ontstaat:&lt;br /&gt;&lt;br /&gt;&lt;img border="0" height="184" src="http://blogs.infosupport.com/photos/hansg/images/14654/original.aspx" style="width:310px;height:184px;" width="310" /&gt;&lt;br /&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;De dimensie die je op deze tabel maakt, mag geen aggregaties hebben (IsAggregatable = False) op de enige attribuut hi&amp;euml;rarchie die de dimensie heeft. Neem de dimensie op als een nieuwe cube dimensie.&lt;br /&gt;&lt;font face="Verdana"&gt;&lt;br /&gt;&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;li&gt;&lt;div&gt;&lt;font face="Verdana"&gt;Neem in de kubus de volgende calculations op:&lt;/font&gt;&lt;/div&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt;"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;CREATE MEMBER CURRENTCUBE.[Current Month] AS&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt;"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;DatePart(&amp;quot;mm&amp;quot;,Now())),&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt;"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;VISIBLE = False;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt;"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt;"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;SCOPE ([Time View].[Time View].[YTD], [Time].[Year -&amp;nbsp; Quarter -&amp;nbsp; Month -&amp;nbsp; Day].[Year].Members);&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt;"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;this = Aggregate(CrossJoin([Time View].[Time View].[Regular], PeriodsToDate([Time].[Year -&amp;nbsp; Quarter -&amp;nbsp; Month -&amp;nbsp; Day].[Year], &lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class="MsoListParagraph" style="margin:0cm 0cm 0pt 36pt;"&gt;&lt;span&gt;&lt;font face="Verdana"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [Time].[Year -&amp;nbsp; Quarter -&amp;nbsp; Month -&amp;nbsp; Day].CurrentMember.FirstChild.FirstChild.Lead([Current Month] - 1))));&lt;/font&gt;&lt;/span&gt;&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;Wat doet dit script functioneel:&lt;/p&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;p&gt;De scope voor de assignment die er onder staat wordt beperkt tot de YTD plak in de Time View dimensie en tot de members in de tijddimensie op jaarniveau. Vervolgens wordt via de PeriodsToDate functie de set van maanden opgehaald tot en met de maand die gedefinieerd is via de Current Month berekening. Via een trucje wordt vervolgens voor ieder jaar binnen de scope (via CurrentMember op de tijd hierarchie) het eerste kind opgehaald (in mijn voorbeeld is dat het eerste kwartaal) en daar weer het eerste kind van (de eerste maand binnen het eerste kwartaal). Daar wordt vervolgens een Lead op gedaan met als aantal maanden vooruit het aantal in Current Month &amp;ndash; 1. Bij het getal&amp;nbsp;10 krijg je zo met de PeriodsToDate functie de maanden januari t/m oktober terug voor ieder jaar in de scope. Die set van maanden wordt gecombineerd (via de CrossJoin) met de Regular member in de TimeView dimensie. En de zo verkregen set wordt geaggregeerd (de Aggregate) zodat je door de hele kubus heen een YTD krijgt op jaar niveau.&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;Mijn oplossing heeft &amp;eacute;&amp;eacute;n beperking: je krijgt alleen een YTD op jaarnviveau, maar dit wilde ik ook juist. Een voorbeeld OLAP database waarin dit is ge&amp;iuml;mplementeerd, kun je &lt;a href="http://blogs.infosupport.com/files/folders/14655/download.aspx"&gt;hier&lt;/a&gt; downloaden. Hierin heb ik overigens hard de maand op 7 gezet gezien de voorbeeld database die data tot juli 2004 bevat.&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14656" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/hansg/archive/tags/BI/default.aspx">BI</category><category domain="http://blogs.infosupport.com/blogs/hansg/archive/tags/Analysis+Services/default.aspx">Analysis Services</category></item><item><title>Een transporttotaal per pagina tonen in een Reporting Services rapport (2)</title><link>http://blogs.infosupport.com/blogs/hansg/archive/2008/10/31/Een-transporttotaal-per-pagina-tonen-in-een-Reporting-Services-rapport-_2800_2_2900_.aspx</link><pubDate>Fri, 31 Oct 2008 10:47:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14653</guid><dc:creator>Hans Geurtsen</dc:creator><slash:comments>0</slash:comments><description>Nog even een aanvulling op mijn vorige post: stel dat je een doorlopend transporttotaal wilt hebben: dus pagina 1 toont het totaal van die pagina, pagina 2 het totaal t/m die pagina, enz. Dan heb je een iets andere oplossing nodig: neem een RunningValue expressie op in een textbox in je data region. Die textbox kun je vervolgens verbergen. Neem vervolgens in de page footer de expressie &amp;#39;=Last(ReportItems!&amp;lt;textbox met RunningValue expressie&amp;gt;.Value&amp;#39; op.&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14653" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/blogs/hansg/archive/tags/BI/default.aspx">BI</category><category domain="http://blogs.infosupport.com/blogs/hansg/archive/tags/Reporting+Services/default.aspx">Reporting Services</category></item><item><title>Jazz article published</title><link>http://blogs.infosupport.com/peterhe/archive/2008/10/30/Jazz-article-published.aspx</link><pubDate>Thu, 30 Oct 2008 16:16:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14648</guid><dc:creator>peterhe</dc:creator><slash:comments>1</slash:comments><description>Shameless plug: If you are a member of the &lt;a href="http://www.nljug.org/" title="Dutch Java User Group"&gt;NLJUG&lt;/a&gt; Dutch Java User Group you receive &lt;a href="http://www.javamagazine.nl" title="Java Magazine"&gt;Java Magazine&lt;/a&gt; for free. The latest edition of Java Magazine contains my article about the IBM &lt;a href="http://www.jazz.net/" title="Jazz project page"&gt;Jazz&lt;/a&gt; ALM tooling project. If you are interested in ALM tooling or what IBM is up to with Jazz, be sure to read it! If you are not a NLJUG member yet, &lt;a href="http://www.nljug.org/pages/membership/" title="Sign up for the NLJUG"&gt;sign up&lt;/a&gt;! It&amp;#39;s cheap, and besides the magazine, it entitles free entrance to the J-Spring and J-Fall conferences, and university sessions as well (a &lt;a href="http://www.nljug.org/pages/events/nljugcalendar/javafx/?template=showevent.html" title="JavaFX University"&gt;JavaFX session&lt;/a&gt; is coming up soon). &lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14648" width="1" height="1"&gt;</description><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Java/default.aspx">Java</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/NLJUG/default.aspx">NLJUG</category><category domain="http://blogs.infosupport.com/peterhe/archive/tags/Jazz/default.aspx">Jazz</category></item><item><title>ASP.NET HttpCookieCollection - be aware</title><link>http://blogs.infosupport.com/blogs/timm/archive/2008/10/29/ASP.NET-HttpCookie-_2D00_-be-aware.aspx</link><pubDate>Wed, 29 Oct 2008 18:39:00 GMT</pubDate><guid isPermaLink="false">56f6167b-0c51-4839-ab2d-34653eeb5c9c:14645</guid><dc:creator>timm</dc:creator><slash:comments>0</slash:comments><description>&lt;p&gt;HttpCookieCollection which you get when you access the Cookies properties from the HttpResponse and HttpRequest have a different implementation.&lt;/p&gt;&lt;p&gt;Just to convince you that you have to be very very very carefull, create a new web page and copy paste the following code. Attach your debugger and start to figure out how it works, little hint : open up System.Web.dll in reflector and start learning :)&lt;/p&gt;&lt;p&gt;int numberOfCookiesInitial = Request.Cookies.Count;&lt;br /&gt;&lt;br /&gt;Request.Cookies.Add(new HttpCookie(&amp;quot;Name&amp;quot;, &amp;quot;Value&amp;quot;));&lt;br /&gt;Debug.Assert(Request.Cookies[&amp;quot;Name&amp;quot;].Value == &amp;quot;Value&amp;quot;);&lt;br /&gt;// Request now contains Name cookie&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Response&lt;/strong&gt;.Cookies.Add(new HttpCookie(&amp;quot;NewName&amp;quot;, &amp;quot;NewValue&amp;quot;));&lt;br /&gt;Debug.Assert(&lt;strong&gt;Request&lt;/strong&gt;.Cookies.Count == numberOfCookiesInitial + 2);&lt;br /&gt;&lt;strong&gt;// Response contains now NewName, Request now contains Name and NewName !!&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Response.Cookies.Set(new HttpCookie(&amp;quot;NewName2&amp;quot;, &amp;quot;NewValue2&amp;quot;));&lt;br /&gt;Debug.Assert(Request.Cookies.Count == numberOfCookiesInitial + 2);&lt;br /&gt;&lt;strong&gt;// Response and Response contains now NewName and NewName2, Request does not contain Name anymore !&lt;/strong&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Debug.Assert(Request.Cookies[&amp;quot;Name&amp;quot;] == null);&lt;strong&gt; // Null returned, no lazy initalization&lt;/strong&gt;&lt;br /&gt;Debug.Assert(Response.Cookies[&amp;quot;Name&amp;quot;] != null); &lt;strong&gt;// Lazy initalization &lt;/strong&gt;&lt;/p&gt;&lt;p&gt;So please be aware as soon as you write generic code for an HttpCookieCollection ! &lt;br /&gt;&lt;/p&gt;&lt;img src="http://blogs.infosupport.com/aggbug.aspx?PostID=14645" width="1" height="1"&gt;</description></item></channel></rss>