<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1394832566265411957</id><updated>2011-11-28T01:22:30.748+01:00</updated><category term='Solution Explorer'/><category term='Visual Studio'/><category term='Windows Vista'/><category term='Windows Vista x64'/><category term='.Net'/><category term='Visual Studio 2005'/><category term='Migration'/><category term='Control'/><category term='DotNet'/><category term='SQLServer'/><category term='Windows'/><category term='Oracle'/><category term='Syntax Highlighting'/><category term='Keyboard'/><category term='ASP.NET'/><category term='konvertieren'/><category term='ADO.NET'/><category term='C#'/><category term='Orcas'/><category term='C++'/><category term='VBA'/><category term='Visual Studio 2008'/><category term='Firefox'/><category term='UAC'/><category term='Database'/><category term='Macro'/><category term='Silverlight 1.1 Alpha'/><category term='Intellisense'/><category term='CSharp'/><category term='TextBox'/><category term='Tastatur'/><category term='JavaScript'/><category term='Management Studio Express'/><category term='ODAC'/><category term='Entity Framework'/><category term='Silverlight'/><category term='Windows 7'/><category term='Excel'/><title type='text'>Dev</title><subtitle type='html'>Merkenswertes aus meinen Projekten - vorwiegend datenbankbasierte .Net-Businessapplikationen.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://devde.bewellup.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>19</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-3350479740494846133</id><published>2009-06-16T20:10:00.001+02:00</published><updated>2009-06-16T20:13:05.392+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows 7'/><title type='text'>Vermisstes Feature in Windows 7 endlich vorhanden</title><content type='html'>&lt;p&gt;Seit ein paar Tagen habe ich Windows 7 RC im VMWare Player laufen. Windows XP ist mir irgendwie schon zu altbacken und Vista benötigt einfach zu viel Speicher, daher habe ich Windows 7 versucht. Neugierig war ich sowieso obwohl ich mir nicht allzuviel erwartet habe.&lt;/p&gt;  &lt;p&gt;Ein Hauptgrund, warum ich eine virtuelle Maschine eingerichtet habe, war Visual Studio 2010 Beta 1. Darauf war ich wesentlich neugieriger als auf das neue Windows.&lt;/p&gt;  &lt;p&gt;Während dem Arbeiten habe ich immer wieder darüber gewundert, dass sich der Bildschirm himmelblau einfärbt, wenn ich ein Fenster an den Bildschirmrand zog.&lt;/p&gt;  &lt;p&gt;Irgendwann habe ich es dann gecheckt. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://lh3.ggpht.com/_4fxc7zFrrxo/SjfgBqj5djI/AAAAAAAAASQ/2cqezJeKzWQ/s1600-h/20090616Windows7Feature%5B3%5D.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="20090616Windows7Feature" border="0" alt="20090616Windows7Feature" src="http://lh5.ggpht.com/_4fxc7zFrrxo/SjfgC3kqu6I/AAAAAAAAASU/thTCdjWtbl0/20090616Windows7Feature_thumb%5B1%5D.png?imgmax=800" width="596" height="460" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;Zieht man das Fenster an den seitlichen Rand, wird es auf “&lt;strong&gt;Halbbild&lt;/strong&gt;” umgeschaltet, also wie Vollbild aber nur die halbe Bildschirmbreite. &lt;/p&gt;  &lt;p&gt;Auf meinem Notebook mit 1920x1200 Auflösung habe ich &lt;strong&gt;gerne zwei Applikationen nebeneinander&lt;/strong&gt; und auf diese Art sind zwei Fenster wesentlich schneller perfekt positioniert als wenn man sie manuell einpassen muss. Ich habe mir dieses Feature schon lange gewünscht.&lt;/p&gt;  &lt;p&gt;Weniger sinnvoll ist die Möglichkeit, das Fenster an den oberen Bildschirmrand zu ziehen um es auf Vollbild umzuschalten. Dafür verwende ich lieber den Doppelklick auf die Titelleiste.&lt;/p&gt;  &lt;p&gt;Wieder durch Zufall (ich habe die Windows-Taste anstatt der Ctrl-Taste erwischt) habe ich entdeckt, dass es auch &lt;strong&gt;Tastenkombinationen&lt;/strong&gt; für oben beschriebene Funktionen gibt -&amp;gt; &lt;strong&gt;Windowstaste+Cursortaste&lt;/strong&gt;. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Windows+Links/Rechts macht Halbbild&lt;/strong&gt;, Windows+Oben macht Vollbild und Windows-Unten minimiert das Fenster. Im Grunde ist das recht praktisch, da ich aber oft die Windows-Taste anstatt der Ctrl-Taste erwische kann das auch ärgerlich werden, aber das wird die Praxis zeigen.&lt;/p&gt;  &lt;p&gt;Übrigens VisualStudio 2010 Beta 1 läuft schon recht gut. Die Stabilität lässt noch etwas zu Wünschen übrig, aber ansonsten recht ansprechend.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-3350479740494846133?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/3350479740494846133/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=3350479740494846133' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/3350479740494846133'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/3350479740494846133'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2009/06/vermisstes-feature-in-windows-7-endlich.html' title='Vermisstes Feature in Windows 7 endlich vorhanden'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://lh5.ggpht.com/_4fxc7zFrrxo/SjfgC3kqu6I/AAAAAAAAASU/thTCdjWtbl0/s72-c/20090616Windows7Feature_thumb%5B1%5D.png?imgmax=800' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-3301614566150790530</id><published>2009-01-22T15:31:00.001+01:00</published><updated>2009-01-22T15:31:17.724+01:00</updated><title type='text'>eBook zum Microsoft ADO.NET Entity Framework</title><content type='html'>&lt;p&gt;Unter &lt;a href="http://www.entityframework.de/2009/01/das-entity-framework-im-vergleich-mit.html" target="_blank"&gt;Entity Framework eBook&lt;/a&gt; gibt es einen ausf&amp;#252;hrlichen Vergleich des ADO.NET Entity Framework mit dem kommerziellen O/R-Mapper Genome von TechTalk sowie der Opensource-L&amp;#246;sung NHibernate.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-3301614566150790530?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/3301614566150790530/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=3301614566150790530' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/3301614566150790530'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/3301614566150790530'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2009/01/ebook-zum-microsoft-adonet-entity.html' title='eBook zum Microsoft ADO.NET Entity Framework'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-3197376536900526335</id><published>2008-01-04T18:52:00.001+01:00</published><updated>2008-01-04T18:52:12.602+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='ADO.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='ODAC'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='DotNet'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='Orcas'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Oracle ADO.Net Treiber für .Net 3.5</title><content type='html'>&lt;p&gt;&lt;a href="http://www.oracle.com"&gt;Oracle&lt;/a&gt; hat per Newsletter bekannt gegeben, dass unter &lt;a title="http://www.oracle.com/technology/software/tech/windows/odpnet/index.html?msgid=6196246" href="http://www.oracle.com/technology/software/tech/windows/odpnet/index.html?msgid=6196246"&gt;Oracle Data Access Components (ODAC) Downloads&lt;/a&gt; Tools, Provider und Zugriffskomponenten f&amp;#252;r Visual Stuido 2008 und .Net 3.5 zum Download angeboten werden.&lt;/p&gt;  &lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-3197376536900526335?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/3197376536900526335/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=3197376536900526335' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/3197376536900526335'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/3197376536900526335'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2008/01/oracle-adonet-treiber-fr-net-35.html' title='Oracle ADO.Net Treiber für .Net 3.5'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-6270733798585695846</id><published>2007-12-18T17:30:00.001+01:00</published><updated>2007-12-29T15:40:16.115+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ADO.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='DotNet'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='CSharp'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>ADO.NET Timeout</title><content type='html'>&lt;h4&gt;Aufwändige Abfrage&lt;/h4&gt;&lt;br /&gt;Wird aus einer &lt;strong&gt;.Net Applikation per ADO.NET&lt;/strong&gt; eine &lt;strong&gt;aufwändige Abfrage an einen SQL-Server&lt;/strong&gt; abgesetzt, kann es zu folgender &lt;strong&gt;Fehlermeldung&lt;/strong&gt; kommen, wenn das Ergebnis nicht rechtzeitig geliefert wird:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;"The timeout period elapsed prior to completion of the operation or the server is not responding."&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Connect Timeout im ConnectionString&lt;/h4&gt;&lt;br /&gt;Im &lt;strong&gt;ConnectionString&lt;/strong&gt; kann ein längerer Zeitraum festgelegt werden (z.B.: server=myServer;uid=myUser;pwd=myPassword;database=myDatabase;&lt;strong&gt;Connect&amp;nbsp;Timeout=60&lt;/strong&gt;)&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;Hinweis&lt;/h4&gt;&lt;br /&gt;Unter &lt;a href="http://www.dotnet247.com/247reference/msgs/57/289664.aspx"&gt;http://www.dotnet247.com/247reference/msgs/57/289664.aspx&lt;/a&gt; bin ich auf den interessanten Hinweis gestossen, dass die Zeitangabe &lt;strong&gt;mindestens&lt;/strong&gt; bedeutet, nicht höchstens.&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;CommandTimeout&lt;/h4&gt;&lt;br /&gt;Das Connection-Timeout anzupassen ist nicht genug.&lt;br /&gt;Beim SqlCommand-Objekt ist noch das Property CommandTimeout auf die gewünschte Anzahl Sekunden zu setzen (z.B.: &lt;code&gt;cmd.CommandTimeout=100;&lt;/code&gt;).&lt;br /&gt;&lt;br /&gt;Diese Lösung stammt von &lt;a href="http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=357"&gt;http://www.eggheadcafe.com/PrintSearchContent.asp?LINKID=357&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-6270733798585695846?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/6270733798585695846/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=6270733798585695846' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/6270733798585695846'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/6270733798585695846'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/12/adonet-timeout.html' title='ADO.NET Timeout'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-2946490286060999630</id><published>2007-12-16T18:38:00.001+01:00</published><updated>2008-07-04T09:11:35.639+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2005'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio 2008'/><category scheme='http://www.blogger.com/atom/ns#' term='DotNet'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='konvertieren'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Visual Studio 2008 Solution in VS 2005 öffnen</title><content type='html'>Wenn man eine Visual Studio Solution, die mit VS 2005 erstellt wurde, in VS 2008 öffnet, wird &lt;strong&gt;automatisch ein Assistent zum konvertieren&lt;/strong&gt; der Solution gestartet.&lt;br /&gt;&lt;br /&gt;Will man diese Solution dann wieder in &lt;strong&gt;VS 2005 öffnen, weigert sich dieses&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Da VS 2008 wahlweise &lt;strong&gt;auch für .Net 2.0 verwendet werden kann, sollte nichts dagegen sprechen&lt;/strong&gt; daran mit VS 2005 weiterzuarbeiten.&lt;br /&gt;&lt;br /&gt;Ich war in der Situation, dass eine Applikation die ich mit VS 2008 begonnen habe, von jemandem, dem nur VS 2005 zur Verfügung stand, weiter entwickelt werden sollte.&lt;br /&gt;&lt;br /&gt;Der Vergleich einer VS 2005- und einer VS 2008-Solution-Datei hat &lt;strong&gt;keine wesentlichen Unterschiede&lt;/strong&gt; feststellen lassen.&lt;br /&gt;&lt;br /&gt;So sehen die ersten beide Zeilen einer Solution-Datei aus VS 2008 aus:&lt;br /&gt;&lt;br /&gt;&lt;code&gt;Microsoft Visual Studio Solution File, Format Version 10.00&lt;br /&gt;# Visual Studio 2008&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Nach dem ändern von &lt;br /&gt;  &lt;code&gt;... Format Version 10.00&lt;/code&gt; &lt;br /&gt;auf &lt;br /&gt;  &lt;code&gt;... Format Version 9.00&lt;/code&gt;&lt;br /&gt;und &lt;br /&gt;  &lt;code&gt;# Visual Studio 2008&lt;/code&gt; &lt;br /&gt;auf &lt;br /&gt;  &lt;code&gt;#Visual Studio 2005&lt;/code&gt;&lt;br /&gt;lässt sich die Solution in VS 2005 wieder öffnen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-2946490286060999630?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/2946490286060999630/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=2946490286060999630' title='7 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/2946490286060999630'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/2946490286060999630'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/12/visual-studio-2008-solution-in-vs-2005.html' title='Visual Studio 2008 Solution in VS 2005 öffnen'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-7789648161943963906</id><published>2007-12-10T00:55:00.000+01:00</published><updated>2007-12-29T11:06:02.309+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista x64'/><category scheme='http://www.blogger.com/atom/ns#' term='DotNet'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Entity Framework'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><title type='text'>Entity Framework Beta 3 unter Vista x64 installieren</title><content type='html'>ADO.NET Entity Framework wird für x86 und x64 zum Download angeboten, die &lt;strong&gt;Tools nur für x86&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Es &lt;strong&gt;lassen sich auch die Tools unter Windows Vista x64 installieren&lt;/strong&gt; und scheinen soweit problemlos zu funktionieren.&lt;br /&gt;&lt;br /&gt;Für die Tools wird &lt;strong&gt;vorausgesetzt, dass der XML Editor QFE istalliert ist&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Nachfolgend die Links zum Download &lt;strong&gt;in der Reihenfolge wie sie installiert werden&lt;/strong&gt; müssen:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyID=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en&amp;amp;mdc_uxref=sl"&gt;ADO.NET Entity Framework Beta 3 (x86 und x64)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=104985"&gt;XML Editor QFE (x86)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D8AE4404-8E05-41FC-94C8-C73D9E238F82&amp;amp;displaylang=en"&gt;ADO.Net Entity Framework Tools Dec 07 Community Technology Preview (x86)&lt;/a&gt;&lt;/li&gt;&lt;/ol&gt;Weitere interessante Links zum Entity Framework:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=104770"&gt;Readme&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=104984"&gt;MSDN Online Dokumentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkID=104849"&gt;Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href="http://go.microsoft.com/fwlink/?LinkId=105977"&gt;Die wichtigsten Änderungen seit der Beta 2&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-7789648161943963906?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/7789648161943963906/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=7789648161943963906' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/7789648161943963906'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/7789648161943963906'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/12/entity-framework-beta-3-unter-vista-x64.html' title='Entity Framework Beta 3 unter Vista x64 installieren'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-922707668247946642</id><published>2007-12-10T00:45:00.000+01:00</published><updated>2007-12-14T07:36:24.450+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Management Studio Express'/><category scheme='http://www.blogger.com/atom/ns#' term='SQLServer'/><category scheme='http://www.blogger.com/atom/ns#' term='UAC'/><title type='text'>Attach einer Datenbank funktioniert unter Windows Vista nicht.</title><content type='html'>Wieder hat Vista's UAC hier seine Finger im Spiel.&lt;br /&gt;&lt;br /&gt;Umgehen lässt sich das Problem indem man dem Benutzer, unter dem das Management Studio gestartet wurde, Vollzugriff auf das Verzeichnis mit den Datenbankdateien gewährt.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-922707668247946642?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/922707668247946642/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=922707668247946642' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/922707668247946642'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/922707668247946642'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/12/attach-einer-datenbank-funktioniert.html' title='Attach einer Datenbank funktioniert unter Windows Vista nicht.'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-2790560749002105503</id><published>2007-12-10T00:01:00.000+01:00</published><updated>2007-12-14T07:35:38.992+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Management Studio Express'/><category scheme='http://www.blogger.com/atom/ns#' term='SQLServer'/><category scheme='http://www.blogger.com/atom/ns#' term='UAC'/><title type='text'>Unter Windows Vista schlägt die Installation von MS SQL Server Management Studio Express fehl: Error 29506</title><content type='html'>&lt;div style="text-align: left;"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; width: 380px; height: 185px;" src="http://lh4.google.at/gzoechi/R12A2uD8zbI/AAAAAAAAAEg/BCVYcIdgvME/s400/MSSQL_MSE_Error29506.JPG" alt="Fehlermeldung" border="0" /&gt;&lt;br /&gt;Wenn unter Windows Vista die Installation des Management Studio Express mit obiger Fehlermeldung abbricht, liegt es an Vista's UAC&lt;/div&gt;&lt;br /&gt;Das Problem kann umgangen werden, indem die Installation über einen &lt;strong&gt;Command Prompt mit Administratorenrechten&lt;/strong&gt; startet.&lt;br /&gt;&lt;br /&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; width: 356px; height: 362px;" src="http://lh5.google.at/gzoechi/R1x4rOD8zaI/AAAAAAAAADc/6DsRwy2hVt4/s400/CommandPromptAsAdmin.JPG" alt="Command  Prompt mit Administratorrechten" border="0" /&gt;&lt;br /&gt;Im Command Prompt einfach die Installationsdatei (z.B.: c:\Download\SQLServer2005_SSMSEE_x64.msi) ausführen. Damit sollte es funktionieren.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-2790560749002105503?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/2790560749002105503/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=2790560749002105503' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/2790560749002105503'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/2790560749002105503'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/12/unter-windows-vista-schlgt-die.html' title='Unter Windows Vista schlägt die Installation von MS SQL Server Management Studio Express fehl: Error 29506'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-7293605071095773731</id><published>2007-12-07T23:33:00.001+01:00</published><updated>2008-07-04T09:14:02.884+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Migration'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox'/><title type='text'>In Firefox gespeicherte Passwörter übertragen</title><content type='html'>Mein Notebook hat eine &lt;strong&gt;neue Harddisk&lt;/strong&gt; verpasst bekommen :-)&lt;br /&gt;&lt;br /&gt;Nach einem halben Jahr ist es sowieso höchste Zeit Windows neu aufzusetzen, daher habe ich nicht die bestehende Installation auf die neue HD übertragen, sondern Windows Vista (x64) frisch aufgesetzt.&lt;br /&gt;&lt;br /&gt;Die im Firefox &lt;strong&gt;gespeicherten Passwörter&lt;/strong&gt; wollte ich nicht neu erfassen sondern direkt &lt;strong&gt;übernehmen&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Die alte HD wurde in ein externes Gehäuse gesteckt und als Laufwerk I: gemounted.&lt;br /&gt;&lt;br /&gt;Um die Passwörter zu übertragen sind &lt;strong&gt;zwei Dateien zu kopieren&lt;/strong&gt; (Firefox vorher beenden):&lt;br /&gt;&lt;br /&gt;&lt;code&gt;I:\Dokumente und Einstellungen\MeinWindowsUserName\Anwendungsdaten\Mozilla\Firefox\Profiles\9x399sre.default\key3.db&lt;/code&gt;&lt;br /&gt;sowie &lt;code&gt;&lt;br /&gt;I:\Dokumente und Einstellungen\MeinWindowsUserName\Anwendungsdaten\Mozilla\Firefox\Profiles\9x399sre.default\signons2.txt&lt;/code&gt;&lt;br /&gt;in das Verzeichnis&lt;br /&gt;&lt;code&gt;C:\Users\MeinWindowsUserName\AppData\Roaming\Mozilla\Firefox\Profiles\sb459zt1.default&lt;/code&gt;&lt;br /&gt;&lt;br /&gt;Wer schlau genug ist und &lt;strong&gt;vor dem Ausbauen der alten HD&lt;/strong&gt; daran denkt, dass er die Firefox-Konfiguation übernehmen will, kann sich die Arbeit erleichtern indem er z.B. das Firefox-Add-In &lt;a href="http://customsoftwareconsult.com/extensions/febe/locale/en-US/FEBEwelcome%5Ben-US%5D.html"&gt;Firefox Environment Backup Extension&lt;/a&gt; installiert und damit die gesamte Firefox-Konfiguration sichert.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-7293605071095773731?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/7293605071095773731/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=7293605071095773731' title='1 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/7293605071095773731'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/7293605071095773731'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/12/in-firefox-gespeicherte-passwrter.html' title='In Firefox gespeicherte Passwörter übertragen'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-5787305698018544290</id><published>2007-11-25T20:12:00.001+01:00</published><updated>2007-11-30T11:31:28.977+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Keyboard'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='TextBox'/><category scheme='http://www.blogger.com/atom/ns#' term='Control'/><category scheme='http://www.blogger.com/atom/ns#' term='Tastatur'/><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='DotNet'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 1.1 Alpha'/><title type='text'>Tastaturereignisse in Silverlight Alpha 1.1</title><content type='html'>Mich interessiert viel mehr ob und wie man LOB-Applikationen mit Silverlight realisieren kann, als toll designte Multimediale Seiten oder Spiele.&lt;br /&gt;Dabei fällt zuallererst auf, dass dafür keine Eingabe-Controls zur Verfügung stehen (die aber mit der Beta-Version von Silverlight 1.1 geliefert werden sollen).&lt;br /&gt;&lt;br /&gt;Für einen Softwareentwickler sollte das kein Problem darstellen.&lt;br /&gt;Ich versuche mich also an einer TextBox für Silverlight.&lt;br /&gt;&lt;br /&gt;Bereits mehrfach bin ich auf den Hinweis gestossen, dass Spiele die mit Silverlight realisiert wurden, nicht die Cursurtasten für die Steuerung verwenden da diese kein KeyDown-Event liefern. Nachdem auch eine TextBox intensiv von Tastaturereignissen gebrauch macht ;-) habe ich diesen Aspekt zuerst untersucht.&lt;br /&gt;&lt;br /&gt;Es stimmt, Silverlight liefert einige Tastaturereignisse nicht.&lt;br /&gt;Aber es gibt Abhilfe - die fehlenden Ereignisse kann man sich einfach vom Browser liefern lassen.&lt;br /&gt;&lt;br /&gt;In CreateSilverlight.js werden die Tastaturereignisse registriert und beim Auftreten an das Silverlight-Plugin weitergereicht:&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;var&lt;/span&gt; sl_Sender&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;var&lt;/span&gt; sl_Plugin&lt;span style="color:#000000"&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;var&lt;/span&gt; sl_PluginHost&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;var&lt;/span&gt; sl_Context&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   6 &lt;/span&gt;&lt;span style="color:#838183; font-style:italic"&gt;//contains calls to silverlight.js, example below loads Page.xaml&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   7 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;function&lt;/span&gt; &lt;span style="color:#010181"&gt;createSilverlight&lt;/span&gt;&lt;span style="color:#000000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   8 &lt;/span&gt;&lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   9 &lt;/span&gt;    Silverlight&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#010181"&gt;createObjectEx&lt;/span&gt;&lt;span style="color:#000000"&gt;({&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  10 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;source&lt;/span&gt;&lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;Page.xaml&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  11 &lt;/span&gt;        parentElement&lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;document&lt;/span&gt;&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;getElementById&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000"&gt;&amp;quot;SilverlightControlHost&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;),&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  12 &lt;/span&gt;        id&lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;SilverlightControl&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  13 &lt;/span&gt;        properties&lt;span style="color:#000000"&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  14 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;width&lt;/span&gt;&lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;100%&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  15 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;height&lt;/span&gt;&lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;100%&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  16 &lt;/span&gt;            version&lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;1.1&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  17 &lt;/span&gt;            enableHtmlAccess&lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;true&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  18 &lt;/span&gt;        &lt;span style="color:#000000"&gt;},&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  19 &lt;/span&gt;        events&lt;span style="color:#000000"&gt;: {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  20 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;onError&lt;/span&gt;&lt;span style="color:#000000"&gt;:&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;null&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  21 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;onLoad&lt;/span&gt;&lt;span style="color:#000000"&gt;:&lt;/span&gt;sl_OnLoad&lt;br /&gt;&lt;span style="color:#555555"&gt;  22 &lt;/span&gt;        &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  23 &lt;/span&gt;    &lt;span style="color:#000000"&gt;});&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  24 &lt;/span&gt;      &lt;br /&gt;&lt;span style="color:#555555"&gt;  25 &lt;/span&gt;      &lt;br /&gt;&lt;span style="color:#555555"&gt;  26 &lt;/span&gt;    &lt;span style="color:#838183; font-style:italic"&gt;// Give the keyboard focus to the Silverlight control by default&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  27 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;document&lt;/span&gt;&lt;span style="color:#000000"&gt;.&lt;/span&gt;body&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;onload&lt;/span&gt; &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;function&lt;/span&gt;&lt;span style="color:#000000"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  28 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;var&lt;/span&gt; silverlightControl &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;document&lt;/span&gt;&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;getElementById&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000"&gt;'SilverlightControl'&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  29 &lt;/span&gt;   &lt;br /&gt;&lt;span style="color:#555555"&gt;  30 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;if&lt;/span&gt; &lt;span style="color:#000000"&gt;(&lt;/span&gt;silverlightControl&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  31 &lt;/span&gt;            silverlightControl&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;focus&lt;/span&gt;&lt;span style="color:#000000"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  32 &lt;/span&gt;  &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  33 &lt;/span&gt;   &lt;br /&gt;&lt;span style="color:#555555"&gt;  34 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  35 &lt;/span&gt;    &lt;span style="color:#838183; font-style:italic"&gt;//onkeypress doesn't work in IE (7?) if Silverlight has focus&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  36 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;document&lt;/span&gt;&lt;span style="color:#000000"&gt;.&lt;/span&gt;onkeypress &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;function&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;evt&lt;span style="color:#000000"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  37 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;var&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;charCode&lt;/span&gt; &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  38 &lt;/span&gt;       &lt;br /&gt;&lt;span style="color:#555555"&gt;  39 &lt;/span&gt;        evt &lt;span style="color:#000000"&gt;= (&lt;/span&gt;evt&lt;span style="color:#000000"&gt;)&lt;/span&gt; ? evt &lt;span style="color:#000000"&gt;: ((&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;event&lt;/span&gt;&lt;span style="color:#000000"&gt;)&lt;/span&gt; ? &lt;span style="color:#000000; font-weight:bold"&gt;event&lt;/span&gt; &lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;null&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  40 &lt;/span&gt;       &lt;br /&gt;&lt;span style="color:#555555"&gt;  41 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;if&lt;/span&gt; &lt;span style="color:#000000"&gt;(&lt;/span&gt;evt&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  42 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;charCode&lt;/span&gt; &lt;span style="color:#000000"&gt;=&lt;/span&gt; evt&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;charCode&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt; &lt;span style="color:#838183; font-style:italic"&gt;// || evt.keyCode;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  43 &lt;/span&gt;         &lt;br /&gt;&lt;span style="color:#555555"&gt;  44 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;return&lt;/span&gt; sl_Plugin&lt;span style="color:#000000"&gt;.&lt;/span&gt;Content&lt;span style="color:#000000"&gt;.&lt;/span&gt;smRootCanvas&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#010181"&gt;DoHostKeyPress&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;charCode&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  45 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  46 &lt;/span&gt;   &lt;br /&gt;&lt;span style="color:#555555"&gt;  47 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;document&lt;/span&gt;&lt;span style="color:#000000"&gt;.&lt;/span&gt;onkeydown &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;function&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;evt&lt;span style="color:#000000"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  48 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;var&lt;/span&gt; keyCode &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  49 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  50 &lt;/span&gt;        evt &lt;span style="color:#000000"&gt;= (&lt;/span&gt;evt&lt;span style="color:#000000"&gt;)&lt;/span&gt; ? evt &lt;span style="color:#000000"&gt;: ((&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;event&lt;/span&gt;&lt;span style="color:#000000"&gt;)&lt;/span&gt; ? &lt;span style="color:#000000; font-weight:bold"&gt;event&lt;/span&gt; &lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;null&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  51 &lt;/span&gt;       &lt;br /&gt;&lt;span style="color:#555555"&gt;  52 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;if&lt;/span&gt; &lt;span style="color:#000000"&gt;(&lt;/span&gt;evt&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  53 &lt;/span&gt;            keyCode &lt;span style="color:#000000"&gt;=&lt;/span&gt; evt&lt;span style="color:#000000"&gt;.&lt;/span&gt;keyCode&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  54 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  55 &lt;/span&gt;        &lt;span style="color:#838183; font-style:italic"&gt;// returning bool from [Scriptable] doesnt work properly so int is used instead&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  56 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#000000"&gt;(&lt;/span&gt;sl_Plugin&lt;span style="color:#000000"&gt;.&lt;/span&gt;Content&lt;span style="color:#000000"&gt;.&lt;/span&gt;smRootCanvas&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#010181"&gt;DoHostKeyDown&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;keyCode&lt;span style="color:#000000"&gt;) !=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;/span&gt; &lt;br /&gt;&lt;span style="color:#555555"&gt;  57 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  58 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  59 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;document&lt;/span&gt;&lt;span style="color:#000000"&gt;.&lt;/span&gt;onkeyup &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;function&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;evt&lt;span style="color:#000000"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  60 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;var&lt;/span&gt; keyCode &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  61 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  62 &lt;/span&gt;        evt &lt;span style="color:#000000"&gt;= (&lt;/span&gt;evt&lt;span style="color:#000000"&gt;)&lt;/span&gt; ? evt &lt;span style="color:#000000"&gt;: ((&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;event&lt;/span&gt;&lt;span style="color:#000000"&gt;)&lt;/span&gt; ? &lt;span style="color:#000000; font-weight:bold"&gt;event&lt;/span&gt; &lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;null&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  63 &lt;/span&gt;       &lt;br /&gt;&lt;span style="color:#555555"&gt;  64 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;if&lt;/span&gt; &lt;span style="color:#000000"&gt;(&lt;/span&gt;evt&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  65 &lt;/span&gt;            keyCode &lt;span style="color:#000000"&gt;=&lt;/span&gt; evt&lt;span style="color:#000000"&gt;.&lt;/span&gt;keyCode&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  66 &lt;/span&gt;        &lt;br /&gt;&lt;span style="color:#555555"&gt;  67 &lt;/span&gt;        &lt;span style="color:#838183; font-style:italic"&gt;// returning bool from [Scriptable] doesnt work properly so int is used instead&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  68 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#000000"&gt;(&lt;/span&gt;sl_Plugin&lt;span style="color:#000000"&gt;.&lt;/span&gt;Content&lt;span style="color:#000000"&gt;.&lt;/span&gt;smRootCanvas&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#010181"&gt;DoHostKeyUp&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;keyCode&lt;span style="color:#000000"&gt;) !=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;/span&gt; &lt;br /&gt;&lt;span style="color:#555555"&gt;  69 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  70 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  71 &lt;/span&gt;   &lt;br /&gt;&lt;span style="color:#555555"&gt;  72 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;function&lt;/span&gt; &lt;span style="color:#010181"&gt;sl_OnLoad&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;plugin&lt;span style="color:#000000"&gt;,&lt;/span&gt; userContext&lt;span style="color:#000000"&gt;,&lt;/span&gt; sender&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  73 &lt;/span&gt;&lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  74 &lt;/span&gt;    &lt;span style="color:#838183; font-style:italic"&gt;//alert(plugin.id + &amp;quot; : &amp;quot; + userContext + &amp;quot; : &amp;quot; + sender.toString());&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  75 &lt;/span&gt;    sl_Sender &lt;span style="color:#000000"&gt;=&lt;/span&gt; sender&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  76 &lt;/span&gt;    sl_Plugin &lt;span style="color:#000000"&gt;=&lt;/span&gt; sender&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#010181"&gt;getHost&lt;/span&gt;&lt;span style="color:#000000"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  77 &lt;/span&gt;    sl_PluginHost &lt;span style="color:#000000"&gt;=&lt;/span&gt; plugin&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  78 &lt;/span&gt;    sl_Context &lt;span style="color:#000000"&gt;=&lt;/span&gt; userContext&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  79 &lt;/span&gt;   &lt;br /&gt;&lt;span style="color:#555555"&gt;  80 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;if&lt;/span&gt; &lt;span style="color:#000000"&gt;(&lt;/span&gt;plugin&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  81 &lt;/span&gt;        plugin&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;focus&lt;/span&gt;&lt;span style="color:#000000"&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  82 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ein Custom Control in Silverlight kann die Tastaturereignisse empfangen und verarbeiten:&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;namespace&lt;/span&gt; SaveMethod&lt;span style="color:#000000"&gt;.&lt;/span&gt;Silverlight&lt;span style="color:#000000"&gt;.&lt;/span&gt;Controls&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;&lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;    &lt;span style="color:#000000"&gt;[&lt;/span&gt;Scriptable&lt;span style="color:#000000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;public class&lt;/span&gt; SmCanvas &lt;span style="color:#000000"&gt;:&lt;/span&gt; System&lt;span style="color:#000000"&gt;.&lt;/span&gt;Windows&lt;span style="color:#000000"&gt;.&lt;/span&gt;Controls&lt;span style="color:#000000"&gt;.&lt;/span&gt;Canvas&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;    &lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   6 &lt;/span&gt;        &lt;span style="color:#000000"&gt;[&lt;/span&gt;Scriptable&lt;span style="color:#000000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   7 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;public&lt;/span&gt; &lt;span style="color:#830000"&gt;int&lt;/span&gt; &lt;span style="color:#010181"&gt;DoHostKeyPress&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#830000"&gt;int&lt;/span&gt; keyCode&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   8 &lt;/span&gt;        &lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   9 &lt;/span&gt;            System&lt;span style="color:#000000"&gt;.&lt;/span&gt;Diagnostics&lt;span style="color:#000000"&gt;.&lt;/span&gt;Debug&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#010181"&gt;WriteLine&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;String&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#010181"&gt;Format&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000"&gt;&amp;quot;HostKeyPress - keyCode: {0}&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt; keyCode&lt;span style="color:#000000"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  10 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  11 &lt;/span&gt;            &lt;span style="color:#838183; font-style:italic"&gt;// process keyboard events here ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  12 &lt;/span&gt;            &lt;br /&gt;&lt;span style="color:#555555"&gt;  13 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  14 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;return&lt;/span&gt; Convert&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#010181"&gt;ToInt32&lt;/span&gt;&lt;span style="color:#000000"&gt;(!&lt;/span&gt;&lt;span style="color:#010181"&gt;AbsorbKey&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;e&lt;span style="color:#000000"&gt;.&lt;/span&gt;HostKey&lt;span style="color:#000000"&gt;));&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  15 &lt;/span&gt;            &lt;span style="color:#838183; font-style:italic"&gt;// AbsorbKey is a custom method (not presented here)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  16 &lt;/span&gt;            &lt;span style="color:#838183; font-style:italic"&gt;// to decide if the event should be handled back to the browser for further processing outside Silverlight&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  17 &lt;/span&gt;            &lt;span style="color:#838183; font-style:italic"&gt;// returning 0 disables and 1 enables further event processing&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  18 &lt;/span&gt;        &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  19 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  20 &lt;/span&gt;        &lt;span style="color:#000000"&gt;[&lt;/span&gt;Scriptable&lt;span style="color:#000000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  21 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;public&lt;/span&gt; &lt;span style="color:#830000"&gt;int&lt;/span&gt; &lt;span style="color:#010181"&gt;DoHostKeyDown&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#830000"&gt;int&lt;/span&gt; keyCode&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  22 &lt;/span&gt;        &lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  23 &lt;/span&gt;            &lt;span style="color:#838183; font-style:italic"&gt;// process keyboard events here ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  24 &lt;/span&gt;        &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  25 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  26 &lt;/span&gt;        &lt;span style="color:#000000"&gt;[&lt;/span&gt;Scriptable&lt;span style="color:#000000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  27 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;public&lt;/span&gt; &lt;span style="color:#830000"&gt;int&lt;/span&gt; &lt;span style="color:#010181"&gt;DoHostKeyUp&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#830000"&gt;int&lt;/span&gt; keyCode&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  28 &lt;/span&gt;        &lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  29 &lt;/span&gt;            &lt;span style="color:#838183; font-style:italic"&gt;// process keyboard events here ...&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  30 &lt;/span&gt;        &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  31 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  32 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Das Scriptable Attribut für die Klasse und die Methode macht die Methode für JavaScript aufrufbar.&lt;br /&gt;&lt;br /&gt;Das "Schlucken" des Ereignisses durch einen Returnwert 0 ist besonders für die Tab-Taste interessant, denn wenn auch der Browser das Ereignis verarbeitet, wird der Cursor in die Adressleiste (IE7) gesetzt. Das ist bei Dateneingabeformularen kaum gewünscht.&lt;br /&gt;&lt;br /&gt;In diesem custom Control kann man die empfangenen Tastaturereignisse per C# Events weiteren Controls zum Abonnement anbieten.&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;&lt;li&gt;Ist dieser Beitrag hilfreich?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Fehlen Informationen?&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Kann man das besser, einfacher, kürzer, ... lösen?&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;Schreibe einen Kommentar um diesen Beitrag noch nützlicher zu machen.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-5787305698018544290?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/5787305698018544290/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=5787305698018544290' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/5787305698018544290'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/5787305698018544290'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/11/tastaturereignisse-in-silverlight-alpha.html' title='Tastaturereignisse in Silverlight Alpha 1.1'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-5514234101789824118</id><published>2007-11-18T17:08:00.000+01:00</published><updated>2007-11-30T08:20:18.935+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 1.1 Alpha'/><title type='text'>Silverlight 1.1 Alpha mit ASP.NET</title><content type='html'>Um in einem Silverlight-Projekt JavaScript debuggen zu können habe ich folgende Lösung zusammengebaut:&lt;br /&gt;&lt;br /&gt;Ausgangspunkt ist eine neue Solution (VS2008 Beta2), in die ein Silverlight-Projekt "SilverlightApp" und ein ASP.NET Projekt "SilverlightWeb" eingefügt wurden.&lt;br /&gt;&lt;br /&gt;In SilverlightWeb habe ich einen neuen Ordner "js" hinzugefügt in das ich die Dateien Silverlight.js sowie TestPage.html.js (als CreateSilverlight.js) aus SilverlightApp kopiert habe.&lt;br /&gt;&lt;br /&gt;Den Inhalt aus TestPage.html (SilverlightApp) habe ich in in Default.aspx kopiert, wobei die erste Zeile &lt;br /&gt;&lt;pre&gt;"&amp;lt;%@ Page Language="C#" ..."&lt;/pre&gt; in Default.aspx bestehen bleibt und der Rest durch den Inhalt aus TestPage.html ersetzt wird.&lt;br /&gt;&lt;br /&gt;In Default.aspx sind zwei Zeilen entsprechend anzupassen&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;&amp;lt;script&lt;/span&gt; type=&lt;span style="color:#ff0000"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span style="color:#ff0000"&gt;&amp;quot;js/Silverlight.js&amp;quot;&lt;/span&gt;&amp;gt;&lt;span style="color:#000000; font-weight:bold"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;&amp;lt;script&lt;/span&gt; type=&lt;span style="color:#ff0000"&gt;&amp;quot;text/javascript&amp;quot;&lt;/span&gt; src=&lt;span style="color:#ff0000"&gt;&amp;quot;js/CreateSilverlight.js&amp;quot;&lt;/span&gt;&amp;gt;&lt;span style="color:#000000; font-weight:bold"&gt;&amp;lt;/script&amp;gt;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Damit die benötigten Dateien des SilverlightApp-Projektes in das SilverlightWeb-Projekt kopiert werden ist noch eine Verbindung herzustellen.&lt;br /&gt;Über das Kontextmenü des SilverlightWeb-Projektes "Add Silverlight Link ..." aufrufen und SilverlightApp auswählen.&lt;br /&gt;&lt;br /&gt;In den Properties des SilverlightWeb-Projektes Register "Web" kann der Debugger für Silverlight ein- und ausgeschaltet werden, da nur Script- *oder* Silverlight-debugging unterstützt wird.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-5514234101789824118?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/5514234101789824118/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=5514234101789824118' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/5514234101789824118'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/5514234101789824118'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/11/silverlight-11-alpha-mit-aspnet.html' title='Silverlight 1.1 Alpha mit ASP.NET'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-9057995467550660291</id><published>2007-11-18T16:58:00.000+01:00</published><updated>2007-11-18T17:12:17.558+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='ASP.NET'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 1.1 Alpha'/><title type='text'>JavaScript debugging mit Silverlight 1.1 Alpha</title><content type='html'>Möglicherweise habe ich etwas übersehen, aber ich schaffe es nicht in einem Silverlight Projekt JavaScript zu debuggen.&lt;br /&gt;&lt;br /&gt;Breakpoints im Codebehind C#-Code funktionieren, aber Breakpoints im JavaScript-Code werden ignoriert.&lt;br /&gt;&lt;br /&gt;Debuggen von JavaScript in ASP.NET-Seiten funktioniert problemlos.&lt;br /&gt;&lt;br /&gt;Meine Schlussfolgerung: Es liegt daran, dass im Silverlight-Projekt eine .html-Seite verwendet wird und Debuggen damit nicht unterstützt wird.&lt;br /&gt;&lt;br /&gt;Wie ich das Projekt umgebaut habe, damit alles über ASP.NET läuft erläutere ich in einem eigenen Blogpost: &lt;a href="http://zoechi.blogspot.com/2007/11/silverlight-11-alpha-mit-aspnet.html#links"&gt;Silverlight 1.1 Alpha mit ASP.NET&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-9057995467550660291?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/9057995467550660291/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=9057995467550660291' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/9057995467550660291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/9057995467550660291'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/11/javascript-debugging-mit-silverlight-11.html' title='JavaScript debugging mit Silverlight 1.1 Alpha'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-8568144145532054030</id><published>2007-11-18T13:47:00.001+01:00</published><updated>2007-11-29T23:36:02.396+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DotNet'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight'/><category scheme='http://www.blogger.com/atom/ns#' term='.Net'/><category scheme='http://www.blogger.com/atom/ns#' term='Silverlight 1.1 Alpha'/><title type='text'>Silverlight 1.1 Alpha scriptable Methode liefert true anstatt false</title><content type='html'>Bei meinen ersten Versuchen mit Silverlight (1.1 Alpha) bin ich auf folgenden Bug (?) gestoßen.&lt;br /&gt;&lt;br /&gt;Die Methode&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000"&gt;[&lt;/span&gt;Scriptable&lt;span style="color:#000000"&gt;]&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;public&lt;/span&gt; &lt;span style="color:#830000"&gt;bool&lt;/span&gt; &lt;span style="color:#010181"&gt;GiveMeFalse&lt;/span&gt;&lt;span style="color:#000000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;&lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;return false&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;liefert beim ersten Aufruf mit&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;alert&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;sl_Plugin&lt;span style="color:#000000"&gt;.&lt;/span&gt;Content&lt;span style="color:#000000"&gt;.&lt;/span&gt;smRootCanvas&lt;span style="color:#000000"&gt;.&lt;/span&gt;&lt;span style="color:#010181"&gt;GiveMeFalse&lt;/span&gt;&lt;span style="color:#000000"&gt;());&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;true, bei allen weiteren Aufrufen dann aber den erwarteten Wert false.&lt;br /&gt;&lt;br /&gt;Ich verwende als Workaround eine Methode die 0 bzw 1 als int zurückliefert, das funktioniert soweit.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-8568144145532054030?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/8568144145532054030/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=8568144145532054030' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/8568144145532054030'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/8568144145532054030'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/11/scriptable-methode-liefert-true-anstatt.html' title='Silverlight 1.1 Alpha scriptable Methode liefert true anstatt false'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-2073936833058442291</id><published>2007-11-18T09:46:00.000+01:00</published><updated>2007-11-30T07:16:09.437+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript'/><category scheme='http://www.blogger.com/atom/ns#' term='Orcas'/><category scheme='http://www.blogger.com/atom/ns#' term='Intellisense'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Syntax Highlighting'/><title type='text'>JavaScript Syntax-Highlighting und Intellisense funktioniert in Visual Studio 2008 Beta 2 nicht</title><content type='html'>Ich verwende den Visual Studio 2008 Beta 2 und Team Foundation Server in der VirtualPC-Variante wie sie von Microsoft zum Download angeboten wird..&lt;br /&gt;&lt;br /&gt;Das vielgepriesene Intellisense für JavaScript zeigt sich nicht und nicht mal mehr Syntaxhighlighting funktioniert - das kann nicht sein.&lt;br /&gt;&lt;br /&gt;Hier gibts die Lösung &lt;a href="http://blogs.msdn.com/angus_logan/archive/2007/07/30/visual-studio-2008-beta-2-not-showing-your-javascript-intellisense-intellicode-syntax-highlighting.aspx"&gt;Angus Logan's Blog&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-2073936833058442291?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/2073936833058442291/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=2073936833058442291' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/2073936833058442291'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/2073936833058442291'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/11/javascript-syntax-highlightning-und.html' title='JavaScript Syntax-Highlighting und Intellisense funktioniert in Visual Studio 2008 Beta 2 nicht'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-8512597292992523800</id><published>2007-10-30T10:30:00.000+01:00</published><updated>2007-11-29T23:31:57.926+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Solution Explorer'/><category scheme='http://www.blogger.com/atom/ns#' term='Visual Studio'/><category scheme='http://www.blogger.com/atom/ns#' term='Macro'/><title type='text'>Visual Studio Macro zum finden des aktuellen Dokuments im Solution-Explorer (Projektmappe)</title><content type='html'>Die Option "Track Active Item in Solution Explorer" (unter Tools/Options/Projekts and Solutions/) habe ich generell deaktiviert, da es mich nervös macht wenn beim wechseln zwischen geöffneten Dateien die Solution-Explorer Ansicht auf und ab springt.&lt;br /&gt;&lt;br /&gt;Bei umfangreichen Solutions mit vielen Projekten und Ordnern kann es so gelegentlich schwierig werden herauszufinden in welchem Ordner die gerade bearbeitete Datei abgelegt ist.&lt;br /&gt;&lt;br /&gt;Folgendes Visual Studio Macro (getestet unter VS 2005 und VS 2008 Beta2) öffnet im Solution Explorer den Ordner unter dem die angezeigte Datei abgelegt ist.&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;Imports System&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;Imports EnvDTE&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;Imports EnvDTE80&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;Imports System.Diagnostics&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   6 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Public Module&lt;/span&gt; FindFileInSolutionExplorer&lt;br /&gt;&lt;span style="color:#555555"&gt;   7 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;Sub&lt;/span&gt; &lt;span style="color:#010181"&gt;FindFileInSolutionExplorer&lt;/span&gt;&lt;span style="color:#000000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   8 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   9 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;Dim&lt;/span&gt; myDTE &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; EnvDTE80.DTE2 &lt;span style="color:#000000"&gt;=&lt;/span&gt; DTE&lt;br /&gt;&lt;span style="color:#555555"&gt;  10 &lt;/span&gt;        &lt;span style="color:#838183; font-style:italic"&gt;'myDTE = DTE&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  11 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  12 &lt;/span&gt;        myDTE.Solution.&lt;span style="color:#010181"&gt;FindProjectItem&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;myDTE.ActiveDocument.FullName&lt;span style="color:#000000"&gt;)&lt;/span&gt;.&lt;span style="color:#010181"&gt;ExpandView&lt;/span&gt;&lt;span style="color:#000000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  13 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  14 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  15 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  16 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;End Module&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Einfügen kann man das Macro mit der Macros IDE (Tools/Macros/Macros IDE oder Alt-F11). Im Project Explorer "Add Class" wählen und den Code hineinkopieren.&lt;br /&gt;&lt;br /&gt;Noch schnell ein Symbol in der Taskleiste dafür erstellt und schon sollte es funktionieren.&lt;br /&gt;&lt;br /&gt;Leider wird nur der Ordner geöffnet in dem die Datei liegt, die Datei aber nicht ausgewählt. &lt;br /&gt;Nachdem man den richtigen Ordner gefunden hat sollte es aber nicht mehr schwierig sein die Datei zu finden. &lt;br /&gt;Vielleicht komme ich noch dahinter wie sich dieses Manko ausmerzen lässt ...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-8512597292992523800?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/8512597292992523800/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=8512597292992523800' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/8512597292992523800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/8512597292992523800'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/10/visual-studio-macro-zum-finden-des.html' title='Visual Studio Macro zum finden des aktuellen Dokuments im Solution-Explorer (Projektmappe)'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-4119791702547620364</id><published>2007-10-20T10:34:00.000+02:00</published><updated>2007-11-29T23:30:31.808+01:00</updated><title type='text'>Zweidimensionales Array in einer C++ COM-Komponente erzeugen und an VB/VBA zurückgeben</title><content type='html'>Ich habe den Code aus einer konkreten Anwendung herausgelöst und die Bezeichner verallgemeintert, das Ergebnis aber nicht getestet.&lt;br /&gt;Womöglich habe ich den einen oder anderen Tippfehler oder ähnliches hinzugefügt ...&lt;br /&gt;&lt;br /&gt;Ein Beispiel für SafeArrayGetElement() fehlt noch.&lt;br /&gt;Bei Gelegenheit werde ich das nachzuholen.&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#838183; font-style:italic"&gt;// MyCOM.idl&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;interface ICo4COM &lt;span style="color:#000000"&gt;:&lt;/span&gt; IUnknown &lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;  HRESULT &lt;span style="color:#010181"&gt;GetArray&lt;/span&gt;&lt;span style="color:#000000"&gt;([&lt;/span&gt;out&lt;span style="color:#000000"&gt;,&lt;/span&gt;retval&lt;span style="color:#000000"&gt;]&lt;/span&gt; &lt;span style="color:#010181"&gt;SAFEARRAY&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#830000"&gt;short&lt;/span&gt;&lt;span style="color:#000000"&gt;)*&lt;/span&gt; arr&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   6 &lt;/span&gt;&lt;span style="color:#838183; font-style:italic"&gt;// MyCOM.h&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   7 &lt;/span&gt;interface IMyCOM &lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;public&lt;/span&gt; IUnknown &lt;span style="color:#000000"&gt;{&lt;/span&gt; &lt;br /&gt;&lt;span style="color:#555555"&gt;   8 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;virtual&lt;/span&gt; HRESULT __stdcall &lt;span style="color:#010181"&gt;GetArray&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#010181"&gt;SAFEARRAY&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#830000"&gt;short&lt;/span&gt;&lt;span style="color:#000000"&gt;)**&lt;/span&gt; arr&lt;span style="color:#000000"&gt;) =&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   9 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  10 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  11 &lt;/span&gt;&lt;span style="color:#838183; font-style:italic"&gt;// MyCom.cpp&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  12 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;class&lt;/span&gt; MyCOMImpl &lt;span style="color:#000000"&gt;:&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;public&lt;/span&gt; ICo4COM &lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  13 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;private&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  14 &lt;/span&gt;    SAFEARRAY&lt;span style="color:#000000"&gt;*&lt;/span&gt; arr&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  15 &lt;/span&gt;    SAFEARRAYBOUND rgsabound&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;2&lt;/span&gt;&lt;span style="color:#000000"&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  16 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  17 &lt;/span&gt;    &lt;span style="color:#000000"&gt;~&lt;/span&gt;&lt;span style="color:#010181"&gt;Co4COMImpl&lt;/span&gt;&lt;span style="color:#000000"&gt;() {&lt;/span&gt; &lt;br /&gt;&lt;span style="color:#555555"&gt;  18 &lt;/span&gt;        gObjCnt&lt;span style="color:#000000"&gt;--;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  19 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  20 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;arr &lt;span style="color:#000000"&gt;!=&lt;/span&gt; NULL&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  21 &lt;/span&gt;        &lt;span style="color:#000000"&gt;{&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  22 &lt;/span&gt;            &lt;span style="color:#010181"&gt;SafeArrayDestroy&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;arr&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  23 &lt;/span&gt;            arr &lt;span style="color:#000000"&gt;=&lt;/span&gt; NULL&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  24 &lt;/span&gt;        &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  25 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  26 &lt;/span&gt;    &lt;br /&gt;&lt;span style="color:#555555"&gt;  27 &lt;/span&gt;    HRESULT __stdcall &lt;span style="color:#010181"&gt;GetArray&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;SAFEARRAY&lt;span style="color:#000000"&gt;**&lt;/span&gt; arr&lt;span style="color:#000000"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  28 &lt;/span&gt;        &lt;span style="color:#000000"&gt;*&lt;/span&gt;arr &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;this&lt;/span&gt;&lt;span style="color:#000000"&gt;-&amp;gt;&lt;/span&gt;arr&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  29 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;return&lt;/span&gt; S_OK&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  30 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  31 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  32 &lt;/span&gt;    &lt;span style="color:#830000"&gt;void&lt;/span&gt; &lt;span style="color:#010181"&gt;AddElement&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#830000"&gt;long&lt;/span&gt; x&lt;span style="color:#000000"&gt;,&lt;/span&gt; &lt;span style="color:#830000"&gt;long&lt;/span&gt; y&lt;span style="color:#000000"&gt;,&lt;/span&gt; &lt;span style="color:#830000"&gt;short&lt;/span&gt; val&lt;span style="color:#000000"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  33 &lt;/span&gt;        &lt;span style="color:#830000"&gt;long&lt;/span&gt; index&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;2&lt;/span&gt;&lt;span style="color:#000000"&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  34 &lt;/span&gt;        index&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;] =&lt;/span&gt; x&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  35 &lt;/span&gt;        index&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;] =&lt;/span&gt; y&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  36 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  37 &lt;/span&gt;        &lt;span style="color:#830000"&gt;short&lt;/span&gt; data &lt;span style="color:#000000"&gt;=&lt;/span&gt; val&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  38 &lt;/span&gt;        &lt;span style="color:#010181"&gt;SafeArrayPutElement&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;arr&lt;span style="color:#000000"&gt;,&lt;/span&gt; index&lt;span style="color:#000000"&gt;, &amp;amp;&lt;/span&gt;data&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  39 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  40 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  41 &lt;/span&gt;    &lt;span style="color:#830000"&gt;long&lt;/span&gt; &lt;span style="color:#010181"&gt;ArrayXCount&lt;/span&gt;&lt;span style="color:#000000"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  42 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#830000"&gt;long&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;rgsabound&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;].&lt;/span&gt;cElements&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  43 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  44 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  45 &lt;/span&gt;    &lt;span style="color:#830000"&gt;long&lt;/span&gt; &lt;span style="color:#010181"&gt;ArrayYCount&lt;/span&gt;&lt;span style="color:#000000"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  46 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;return&lt;/span&gt; &lt;span style="color:#830000"&gt;long&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;rgsabound&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;].&lt;/span&gt;cElements&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  47 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  48 &lt;/span&gt;    &lt;br /&gt;&lt;span style="color:#555555"&gt;  49 &lt;/span&gt;    &lt;span style="color:#830000"&gt;bool&lt;/span&gt; &lt;span style="color:#010181"&gt;InitArray&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#830000"&gt;long&lt;/span&gt; sizeX&lt;span style="color:#000000"&gt;,&lt;/span&gt; &lt;span style="color:#830000"&gt;long&lt;/span&gt; sizeY&lt;span style="color:#000000"&gt;) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  50 &lt;/span&gt;        &lt;span style="color:#830000"&gt;short&lt;/span&gt; data &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  51 &lt;/span&gt;        &lt;span style="color:#830000"&gt;long&lt;/span&gt; index&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;2&lt;/span&gt;&lt;span style="color:#000000"&gt;];&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  52 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  53 &lt;/span&gt;        rgsabound&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;].&lt;/span&gt;lLbound &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  54 &lt;/span&gt;        rgsabound&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;].&lt;/span&gt;cElements &lt;span style="color:#000000"&gt;=&lt;/span&gt; sizeX&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  55 &lt;/span&gt;        rgsabound&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;].&lt;/span&gt;lLbound &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  56 &lt;/span&gt;        rgsabound&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;].&lt;/span&gt;cElements &lt;span style="color:#000000"&gt;=&lt;/span&gt; sizeY&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  57 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  58 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;arr &lt;span style="color:#000000"&gt;!=&lt;/span&gt; NULL&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  59 &lt;/span&gt;            &lt;span style="color:#010181"&gt;SafeArrayDestroy&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;arr&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  60 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  61 &lt;/span&gt;        arr &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#010181"&gt;SafeArrayCreate&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;VT_I2&lt;span style="color:#000000"&gt;,&lt;/span&gt; &lt;span style="color:#2928ff"&gt;2&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt; rgsabound&lt;span style="color:#000000"&gt;);&lt;/span&gt; &lt;span style="color:#838183; font-style:italic"&gt;// array of short&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  62 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  63 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;arr &lt;span style="color:#000000"&gt;==&lt;/span&gt; NULL&lt;span style="color:#000000"&gt;) {&lt;/span&gt; &lt;span style="color:#838183; font-style:italic"&gt;//SafeArray create failed&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  64 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;return false&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt; &lt;br /&gt;&lt;span style="color:#555555"&gt;  65 &lt;/span&gt;        &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  66 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  67 &lt;/span&gt;        &lt;span style="color:#838183; font-style:italic"&gt;// init with 0&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  68 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;for&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#830000"&gt;long&lt;/span&gt; i &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt; i &lt;span style="color:#000000"&gt;&amp;lt;&amp;gt;&lt;/span&gt;cols&lt;span style="color:#000000"&gt;;&lt;/span&gt; i&lt;span style="color:#000000"&gt;++) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  69 &lt;/span&gt;            &lt;span style="color:#000000; font-weight:bold"&gt;for&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#830000"&gt;long&lt;/span&gt; j &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt; j &lt;span style="color:#000000"&gt;&amp;lt;&amp;gt;&lt;/span&gt;rows&lt;span style="color:#000000"&gt;;&lt;/span&gt; j&lt;span style="color:#000000"&gt;++) {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  70 &lt;/span&gt;                index&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;] =&lt;/span&gt; i&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  71 &lt;/span&gt;                index&lt;span style="color:#000000"&gt;[&lt;/span&gt;&lt;span style="color:#2928ff"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;] =&lt;/span&gt; j&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  72 &lt;/span&gt;                data &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  73 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  74 &lt;/span&gt;                &lt;span style="color:#010181"&gt;SafeArrayPutElement&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;arr&lt;span style="color:#000000"&gt;,&lt;/span&gt; index&lt;span style="color:#000000"&gt;, &amp;amp;&lt;/span&gt;data&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  75 &lt;/span&gt;            &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  76 &lt;/span&gt;        &lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  77 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  78 &lt;/span&gt;        &lt;span style="color:#000000; font-weight:bold"&gt;return true&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  79 &lt;/span&gt;    &lt;span style="color:#000000"&gt;}&lt;/span&gt;    &lt;br /&gt;&lt;span style="color:#555555"&gt;  80 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-4119791702547620364?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/4119791702547620364/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=4119791702547620364' title='5 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/4119791702547620364'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/4119791702547620364'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/10/zweidimensionales-array-in-einer-c-com.html' title='Zweidimensionales Array in einer C++ COM-Komponente erzeugen und an VB/VBA zurückgeben'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-8656736644913555086</id><published>2007-10-20T10:22:00.000+02:00</published><updated>2007-11-30T08:58:13.520+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Windows'/><category scheme='http://www.blogger.com/atom/ns#' term='C++'/><title type='text'>Verstrichene Zeit in C++ unter Windows messen ...</title><content type='html'>hat mich einige Zeit gekostet eine Lösung zu finden.&lt;br /&gt;Fündig wurde ich unter &lt;a href="http://en.allexperts.com/q/C-1040/time-milliseconds-Windows.htm"&gt;Get time in milliseconds in Windows&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Nachfolgend ein Beispiel wie ich es konkret eingesetzt habe.&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;ULONGLONG endCalculationAt&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;ULONGLONG &lt;span style="color:#010181"&gt;GetSystemTimeInMS&lt;/span&gt;&lt;span style="color:#000000"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;  SYSTEMTIME systemTime&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;  &lt;span style="color:#010181"&gt;GetSystemTime&lt;/span&gt;&lt;span style="color:#000000"&gt;(&amp;&lt;/span&gt;systemTime&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   6 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   7 &lt;/span&gt;  FILETIME fileTime&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   8 &lt;/span&gt;  &lt;span style="color:#010181"&gt;SystemTimeToFileTime&lt;/span&gt;&lt;span style="color:#000000"&gt;(&amp;&lt;/span&gt;systemTime&lt;span style="color:#000000"&gt;, &amp;&lt;/span&gt;fileTime&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   9 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  10 &lt;/span&gt;  ULARGE_INTEGER uli&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  11 &lt;/span&gt;  uli&lt;span style="color:#000000"&gt;.&lt;/span&gt;LowPart &lt;span style="color:#000000"&gt;=&lt;/span&gt; fileTime&lt;span style="color:#000000"&gt;.&lt;/span&gt;dwLowDateTime&lt;span style="color:#000000"&gt;;&lt;/span&gt; &lt;span style="color:#838183; font-style:italic"&gt;// could use memcpy here!&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  12 &lt;/span&gt;  uli&lt;span style="color:#000000"&gt;.&lt;/span&gt;HighPart &lt;span style="color:#000000"&gt;=&lt;/span&gt; fileTime&lt;span style="color:#000000"&gt;.&lt;/span&gt;dwHighDateTime&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  13 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  14 &lt;/span&gt;  ULONGLONG &lt;span style="color:#010181"&gt;systemTimeIn_ms&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;uli&lt;span style="color:#000000"&gt;.&lt;/span&gt;QuadPart&lt;span style="color:#000000"&gt;/&lt;/span&gt;&lt;span style="color:#2928ff"&gt;10000&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  15 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;return&lt;/span&gt; systemTimeIn_ms&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  16 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  17 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  18 &lt;/span&gt;&lt;span style="color:#830000"&gt;void&lt;/span&gt; &lt;span style="color:#010181"&gt;InitCalculationTime&lt;/span&gt;&lt;span style="color:#000000"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  19 &lt;/span&gt;  endCalculationAt &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#010181"&gt;GetSystemTimeInMS&lt;/span&gt;&lt;span style="color:#000000"&gt;() + (&lt;/span&gt;ULONGLONG&lt;span style="color:#000000"&gt;)(&lt;/span&gt;&lt;span style="color:#2928ff"&gt;10&lt;/span&gt; &lt;span style="color:#000000"&gt;*&lt;/span&gt; &lt;span style="color:#2928ff"&gt;1000&lt;/span&gt;&lt;span style="color:#000000"&gt;);&lt;/span&gt; &lt;span style="color:#838183; font-style:italic"&gt;// ab jetzt 10 Sekunden Zeit&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  20 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  21 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  22 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  23 &lt;/span&gt;&lt;span style="color:#830000"&gt;bool&lt;/span&gt; &lt;span style="color:#010181"&gt;CheckCalculationTimeElapsed&lt;/span&gt;&lt;span style="color:#000000"&gt;() {&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  24 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;if&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#010181"&gt;GetSystemTimeInMS&lt;/span&gt;&lt;span style="color:#000000"&gt;() &amp;gt;=&lt;/span&gt; endCalculationAt&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  25 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;return true&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  26 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;else&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  27 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;return false&lt;/span&gt;&lt;span style="color:#000000"&gt;;&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  28 &lt;/span&gt;&lt;span style="color:#000000"&gt;}&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-8656736644913555086?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/8656736644913555086/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=8656736644913555086' title='0 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/8656736644913555086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/8656736644913555086'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/10/verstrichene-zeit-in-c-unter-windows.html' title='Verstrichene Zeit in C++ unter Windows messen ...'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-2976275807788679506</id><published>2007-10-20T09:31:00.005+02:00</published><updated>2009-05-01T10:24:41.102+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Buttons dynamisch zur Laufzeit hinzufügen ist in Excel leicht realisiert, aber ...</title><content type='html'>wie bringt man diese Buttons dazu dass ein Klick darauf etwas sinnvolles macht?&lt;br /&gt;&lt;br /&gt;Eine Variante, die ich im Netz gefunden habe, ist entsprechende Ereignisprozeduren dynamisch zu erzeugen.&lt;br /&gt;Eine weitere gefundene Variante die mir besser gefällt habe ich nachfolgend zusammengefasst.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;[hinzugefügt am 2008-11-18 12:15]&lt;/span&gt;&lt;br /&gt;Ein vollständiges lauffähiges Beispiel steht &lt;a href="http://members.inode.at/zehethofer/devde/DynamischeButtons.zip"&gt;unter diesem Link&lt;/a&gt; zum Download bereit.&lt;br /&gt;Die Codeteile sind im VBA-Editor unter "Diese Arbeitsmappe", "DynamicButtonSheet (Tabelle1)" und im Klassenmodul "ButtonObject" zu finden.&lt;br /&gt;&lt;br /&gt;Nachfolgend die wichtigsten Codeteile mit einigen Anmerkungen:&lt;br /&gt;&lt;span style="font-style:italic;"&gt;[hinzugefügt bis hier]&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Folgendes Klassen-Modul wird benötigt.&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Option Explicit&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Public WithEvents&lt;/span&gt; ButtonObject &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; MSForms.CommandButton&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Public&lt;/span&gt; btnName &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; &lt;span style="color:#830000"&gt;String&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   6 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Public&lt;/span&gt; btnId &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; &lt;span style="color:#830000"&gt;Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   7 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   8 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Private Sub&lt;/span&gt; &lt;span style="color:#010181"&gt;ButtonObject_Click&lt;/span&gt;&lt;span style="color:#000000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   9 &lt;/span&gt;  Module1.MoveButton_Click btnId&lt;br /&gt;&lt;span style="color:#555555"&gt;  10 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Der globalen Variable &lt;code&gt;ButtonObject&lt;/code&gt; wird später der neu erstellt Button zugewiesen.&lt;br /&gt;&lt;code&gt;btnName&lt;/code&gt; und &lt;code&gt;btnId&lt;/code&gt; sind Beispiele für zusätzliche Properties zur Identifikation welcher konkrete Butten gedrückt wurde.&lt;br /&gt;&lt;br /&gt;&lt;code&gt;ButtonObject_Click()&lt;/code&gt; ist die Ereignis-Prozedur die im Fall eines Button-Click aufgerufen wird.&lt;br /&gt;&lt;code&gt;Module1.MoveButton_Click btnId&lt;/code&gt; ist eine zentrale Prozedur in der die Button-Click-Ereignisse verarbeitet werden, an die der Aufruf weitergeleitet wird.&lt;br /&gt;&lt;br /&gt;Es folgt ein Beispielcode wie die Buttons erstellt werden.&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Private&lt;/span&gt; Buttons &lt;span style="color:#000000; font-weight:bold"&gt;As New&lt;/span&gt; Collection&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Dim&lt;/span&gt; btnWidth &lt;span style="color:#000000; font-weight:bold"&gt;as&lt;/span&gt; &lt;span style="color:#830000"&gt;Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Dim&lt;/span&gt; btnHeight &lt;span style="color:#000000; font-weight:bold"&gt;as&lt;/span&gt; &lt;span style="color:#830000"&gt;Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   6 &lt;/span&gt;btnWidth &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;50&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   7 &lt;/span&gt;btnHeight &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;25&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   8 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   9 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;For&lt;/span&gt; i &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;To&lt;/span&gt; &lt;span style="color:#2928ff"&gt;10&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  10 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;Set&lt;/span&gt; btn &lt;span style="color:#000000"&gt;=&lt;/span&gt; ws.OLEObjects.&lt;span style="color:#010181"&gt;Add&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;ClassType&lt;span style="color:#000000"&gt;:=&lt;/span&gt;&lt;span style="color:#ff0000"&gt;&amp;quot;Forms.CommandButton.1&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt; Link&lt;span style="color:#000000"&gt;:=&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;False&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt; DisplayAsIcon&lt;span style="color:#000000"&gt;:=&lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;False&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt; _&lt;br /&gt;&lt;span style="color:#555555"&gt;  11 &lt;/span&gt;                                Left&lt;span style="color:#000000"&gt;:=&lt;/span&gt; i &lt;span style="color:#000000"&gt;*&lt;/span&gt; btnWidth&lt;span style="color:#000000"&gt;,&lt;/span&gt; _&lt;br /&gt;&lt;span style="color:#555555"&gt;  12 &lt;/span&gt;                                Top&lt;span style="color:#000000"&gt;:=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;200&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt; Width&lt;span style="color:#000000"&gt;:=&lt;/span&gt;btnWidth&lt;span style="color:#000000"&gt;,&lt;/span&gt; Height&lt;span style="color:#000000"&gt;:=&lt;/span&gt;btnHeight&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  13 &lt;/span&gt;    btn.Name &lt;span style="color:#000000"&gt;=&lt;/span&gt; RT_PREFIX &lt;span style="color:#000000"&gt;&amp;&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;MoveButton&amp;quot;&lt;/span&gt; &lt;span style="color:#000000"&gt;&amp;&lt;/span&gt; i&lt;br /&gt;&lt;span style="color:#555555"&gt;  14 &lt;/span&gt;    btn.&lt;span style="color:#000000; font-weight:bold"&gt;Object&lt;/span&gt;.Caption &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;Button &amp;quot;&lt;/span&gt; &lt;span style="color:#000000"&gt;&amp;&lt;/span&gt; i&lt;br /&gt;&lt;span style="color:#555555"&gt;  15 &lt;/span&gt;    btn.&lt;span style="color:#000000; font-weight:bold"&gt;Object&lt;/span&gt;.TakeFocusOnClick &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;False&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  16 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Next&lt;/span&gt; i&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Nach dem Erstellen der Buttons kommt ein kleiner Trick der Excel eine kurze Verschnaufpause verschafft damit es nicht außer Tritt kommt.&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;Application.OnTime Time &lt;span style="color:#000000"&gt;+&lt;/span&gt; &lt;span style="color:#010181"&gt;TimeSerial&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;span style="color:#000000"&gt;,&lt;/span&gt; &lt;span style="color:#2928ff"&gt;1&lt;/span&gt;&lt;span style="color:#000000"&gt;),&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;Module1.prcAssign&amp;quot;&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Damit wird die Prozedur prcAssign aus dem Module1 zeitversetzt aufgerufen.&lt;br /&gt;prcAssign sieht folgendermaßen aus:&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Public Sub&lt;/span&gt; &lt;span style="color:#010181"&gt;prcAssign&lt;/span&gt;&lt;span style="color:#000000"&gt;()&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;Dim&lt;/span&gt; ws &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; Worksheet&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;Dim&lt;/span&gt; btn &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; OLEObject&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;Dim&lt;/span&gt; button &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; ButtonObject&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;Dim&lt;/span&gt; i &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; &lt;span style="color:#830000"&gt;Integer&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   6 &lt;/span&gt;  &lt;br /&gt;&lt;span style="color:#555555"&gt;   7 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;Set&lt;/span&gt; ws &lt;span style="color:#000000"&gt;=&lt;/span&gt; ActiveWorkbook.&lt;span style="color:#010181"&gt;Worksheets&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000"&gt;&amp;quot;Tabelle1&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   8 &lt;/span&gt;  i &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#2928ff"&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   9 &lt;/span&gt;  &lt;br /&gt;&lt;span style="color:#555555"&gt;  10 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;For Each&lt;/span&gt; btn &lt;span style="color:#000000; font-weight:bold"&gt;In&lt;/span&gt; ws.OLEObjects&lt;br /&gt;&lt;span style="color:#555555"&gt;  11 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;If&lt;/span&gt; &lt;span style="color:#010181"&gt;Left&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;btn.Name&lt;span style="color:#000000"&gt;,&lt;/span&gt; &lt;span style="color:#010181"&gt;Len&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;RT_PREFIX&lt;span style="color:#000000"&gt;)) =&lt;/span&gt; RT_PREFIX &lt;span style="color:#000000; font-weight:bold"&gt;Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  12 &lt;/span&gt;      &lt;span style="color:#000000; font-weight:bold"&gt;Set&lt;/span&gt; button &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;New&lt;/span&gt; CButton&lt;br /&gt;&lt;span style="color:#555555"&gt;  13 &lt;/span&gt;      &lt;span style="color:#000000; font-weight:bold"&gt;Set&lt;/span&gt; button.ButtonObject &lt;span style="color:#000000"&gt;=&lt;/span&gt; btn.&lt;span style="color:#000000; font-weight:bold"&gt;Object&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  14 &lt;/span&gt;      button.Id &lt;span style="color:#000000"&gt;=&lt;/span&gt; i&lt;br /&gt;&lt;span style="color:#555555"&gt;  15 &lt;/span&gt;      button.Name &lt;span style="color:#000000"&gt;=&lt;/span&gt; RT_PREFIX &lt;span style="color:#000000"&gt;&amp;&lt;/span&gt; &lt;span style="color:#ff0000"&gt;&amp;quot;Button&amp;quot;&lt;/span&gt; &lt;span style="color:#000000"&gt;&amp;&lt;/span&gt; i&lt;br /&gt;&lt;span style="color:#555555"&gt;  16 &lt;/span&gt;      Buttons.Add button&lt;br /&gt;&lt;span style="color:#555555"&gt;  17 &lt;/span&gt;       &lt;br /&gt;&lt;span style="color:#555555"&gt;  18 &lt;/span&gt;      i &lt;span style="color:#000000"&gt;=&lt;/span&gt; i &lt;span style="color:#000000"&gt;+&lt;/span&gt; &lt;span style="color:#2928ff"&gt;1&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  19 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  20 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;Next&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  21 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;  22 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;End Sub&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Beim Zuordnen eines Buttons in der beschriebenen Art an die &lt;code&gt;ButtonObject&lt;/code&gt; Variable einer &lt;code&gt;CButton&lt;/code&gt; Instanz wird automatisch die Ereignisprozedur &lt;code&gt;ButtonObject_Click&lt;/code&gt; zugeordnet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-2976275807788679506?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/2976275807788679506/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=2976275807788679506' title='7 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/2976275807788679506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/2976275807788679506'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/10/buttons-dynamisch-zur-laufzeit.html' title='Buttons dynamisch zur Laufzeit hinzufügen ist in Excel leicht realisiert, aber ...'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1394832566265411957.post-1020964068878049168</id><published>2007-10-19T23:25:00.000+02:00</published><updated>2008-01-08T16:57:49.153+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='VBA'/><category scheme='http://www.blogger.com/atom/ns#' term='Excel'/><title type='text'>Globale Variablen in Excel verlieren ihren Wert</title><content type='html'>Ein bekanntes Problem scheint zu sein, dass Excel (ich hatte das Problem mit Excel 2003) &lt;strong&gt;während der Laufzeit&lt;/strong&gt; aus verschiedenen Anlässen die &lt;strong&gt;Werte globaler Variablen "vergisst"&lt;/strong&gt;.&lt;br /&gt;&lt;br /&gt;Lt. Informationen aus dem Web passiert das wenn&lt;br /&gt;&lt;ul&gt;&lt;li&gt;der Code neu compiliert wird &lt;/li&gt;&lt;li&gt;ein Laufzeitfehler auftritt&lt;/li&gt;&lt;/ul&gt;Wenn Änderungen am Code durchgeführt werden ist es nachvollziehbar, dass neu compiliert werden muss.&lt;br /&gt;Die Werte gehen aber auch verloren wenn keine Änderungen gemacht wurden und keine Laufzeitfehler aufgetreten sind (ist mit "Unterbrechen bei Fehlern" auf "Bei jedem Fehler" gesetzt leicht überprüfbar).&lt;br /&gt;&lt;br /&gt;In meinem Fall dürfte die Ursache daran gelegen sein, dass ich zur Laufzeit per Programmcode Buttons hinzugefügt und entfernt habe (siehe Beitrag &lt;a href="http://zoechi.blogspot.com/2007/10/buttons-dynamisch-zur-laufzeit.html"&gt;Buttons dynamisch zur Laufzeit hinzufügen ist in Excel leicht realisiert, aber ...&lt;/a&gt;).&lt;br /&gt;&lt;strong&gt;Dadurch entsteht die Notwendigkeit den Programmcode neu zu kompilieren&lt;/strong&gt; und das führt zum hier beschriebenen Phänomen.&lt;br /&gt;&lt;br /&gt;Nach langer erfolgloser Suche im Web bin ich auf folgende Lösung gekommen, die in meiner Situation das Problem gelöst hat&lt;br /&gt;&lt;br /&gt;Ich habe eine neue leere Arbeitsmappe erstellt und in ein Codemodul folgenden Code eingefügt&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Option Explicit&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Public&lt;/span&gt; Co4COMObj &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; SWK5_P1.Co4COM&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Public Function&lt;/span&gt; &lt;span style="color:#010181"&gt;Co4COM&lt;/span&gt;&lt;span style="color:#000000"&gt;()&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; SWK5_P1.Co4COM&lt;br /&gt;&lt;span style="color:#555555"&gt;   6 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;If&lt;/span&gt; Co4COMObj Is &lt;span style="color:#000000; font-weight:bold"&gt;Nothing Then&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   7 &lt;/span&gt;    &lt;span style="color:#000000; font-weight:bold"&gt;Set&lt;/span&gt; Co4COMObj &lt;span style="color:#000000"&gt;=&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;New&lt;/span&gt; SWK5_P1.Co4COM&lt;br /&gt;&lt;span style="color:#555555"&gt;   8 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;End If&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   9 &lt;/span&gt;  &lt;br /&gt;&lt;span style="color:#555555"&gt;  10 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;Set&lt;/span&gt; Co4COM &lt;span style="color:#000000"&gt;=&lt;/span&gt; Co4COMObj&lt;br /&gt;&lt;span style="color:#555555"&gt;  11 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;und die Arbeitsmappe als "Microsoft Office Excel-Add-In (*.xla)" gespeichert.&lt;br /&gt;&lt;br /&gt;Bei diesem Beispiel geht es darum, dass eine Instanz einer COM-Komponente (SWK5_P1.Co4COM) erstellt wird und diese über einen längeren Zeitraum verfügbar bleiben soll.&lt;br /&gt;&lt;br /&gt;Nach dem Prinzip des Singleton-Patterns wird geprüft ob die Variable Co4COMObj schon zugwiesen wurde.&lt;br /&gt;Wenn ja wird sofort eine Referenz zurückgeliefert andernfalls wird zuvor mit New eine neue Instanz zugewiesen.&lt;br /&gt;&lt;br /&gt;In der Arbeitsmappe, in der die globale Variable verwendet wird, wird diese *.xla (in diesem Fall Co4COM.xla) über das "Menü Extras/Add-Ins..." eingebunden.&lt;br /&gt;&lt;br /&gt;Eine Prozedur kapselt den Zugriff darauf:&lt;br /&gt;&lt;br /&gt;&lt;pre style="color:#000000; background-color:#f7f7f7; font-size:10pt; font-family:Courier New;"&gt;&lt;span style="color:#555555"&gt;   1 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;Public Function&lt;/span&gt; &lt;span style="color:#010181"&gt;Co4COM&lt;/span&gt;&lt;span style="color:#000000"&gt;()&lt;/span&gt; &lt;span style="color:#000000; font-weight:bold"&gt;As&lt;/span&gt; SWK5_P1.Co4COM&lt;br /&gt;&lt;span style="color:#555555"&gt;   2 &lt;/span&gt;  &lt;span style="color:#838183; font-style:italic"&gt;' to trick the damned Excel loosing the value of global variables occassionally,&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   3 &lt;/span&gt;  &lt;span style="color:#838183; font-style:italic"&gt;' the public variable holding the COM component was moved to an AddIn&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   4 &lt;/span&gt;  &lt;span style="color:#000000; font-weight:bold"&gt;Set&lt;/span&gt; Co4COM &lt;span style="color:#000000"&gt;=&lt;/span&gt; Application.&lt;span style="color:#010181"&gt;Run&lt;/span&gt;&lt;span style="color:#000000"&gt;(&lt;/span&gt;&lt;span style="color:#ff0000"&gt;&amp;quot;Co4COM.xla!Co4COM&amp;quot;&lt;/span&gt;&lt;span style="color:#000000"&gt;)&lt;/span&gt;&lt;br /&gt;&lt;span style="color:#555555"&gt;   5 &lt;/span&gt;&lt;span style="color:#000000; font-weight:bold"&gt;End Function&lt;/span&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Hieraus wird ersichtlich, dass der Zugriff auf die Prozedur im Add-In, die eine Referenz auf die gewünschte Variable zurückliefert, etwas umständlicher ist als gewohnt.&lt;br /&gt;&lt;br /&gt;Es können meines Wissens auch keine Variablen im Add-In direkt angesprochen werden sondern es müssen entsprechende Getter- und Setter-Prozeduren bzw Functions bereitgestellt werden.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/1394832566265411957-1020964068878049168?l=devde.bewellup.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://devde.bewellup.com/feeds/1020964068878049168/comments/default' title='Kommentare zum Post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=1394832566265411957&amp;postID=1020964068878049168' title='2 Kommentare'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/1020964068878049168'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1394832566265411957/posts/default/1020964068878049168'/><link rel='alternate' type='text/html' href='http://devde.bewellup.com/2007/10/globale-variablen-in-excel-verlieren.html' title='Globale Variablen in Excel verlieren ihren Wert'/><author><name>Günter Zöchbauer</name><uri>http://www.blogger.com/profile/11437488755301998747</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry></feed>
