<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet href="http://feeds.bewellup.com/~d/styles/rss2full.xsl" type="text/xsl" media="screen"?><?xml-stylesheet href="http://feeds.bewellup.com/~d/styles/itemcontent.css" type="text/css" media="screen"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1394832566265411957</atom:id><lastBuildDate>Wed, 16 Jul 2008 23:18:48 +0000</lastBuildDate><title>Dev</title><description>Merkenswertes aus meinen Projekten - vorwiegend datenbankbasierte .Net-Businessapplikationen.</description><link>http://devde.bewellup.com/</link><managingEditor>noreply@blogger.com (Günter Zöchbauer)</managingEditor><generator>Blogger</generator><openSearch:totalResults>17</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" href="http://feeds.bewellup.com/bewellup/devde" type="application/rss+xml" /><feedburner:emailServiceId>1526965</feedburner:emailServiceId><feedburner:feedburnerHostname>http://www.feedburner.com</feedburner:feedburnerHostname><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-3197376536900526335</guid><pubDate>Fri, 04 Jan 2008 17:52:00 +0000</pubDate><atom:updated>2008-01-04T18:52:12.602+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2005</category><category domain="http://www.blogger.com/atom/ns#">ADO.NET</category><category domain="http://www.blogger.com/atom/ns#">ODAC</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">DotNet</category><category domain="http://www.blogger.com/atom/ns#">Database</category><category domain="http://www.blogger.com/atom/ns#">Orcas</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Oracle</category><category domain="http://www.blogger.com/atom/ns#">.Net</category><title>Oracle ADO.Net Treiber für .Net 3.5</title><description>&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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/211255570" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/211255570/oracle-adonet-treiber-fr-net-35.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2008/01/oracle-adonet-treiber-fr-net-35.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-6270733798585695846</guid><pubDate>Tue, 18 Dec 2007 16:30:00 +0000</pubDate><atom:updated>2007-12-29T15:40:16.115+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ADO.NET</category><category domain="http://www.blogger.com/atom/ns#">DotNet</category><category domain="http://www.blogger.com/atom/ns#">Database</category><category domain="http://www.blogger.com/atom/ns#">CSharp</category><category domain="http://www.blogger.com/atom/ns#">C#</category><category domain="http://www.blogger.com/atom/ns#">.Net</category><title>ADO.NET Timeout</title><description>&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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899833" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899833/adonet-timeout.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/12/adonet-timeout.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-2946490286060999630</guid><pubDate>Sun, 16 Dec 2007 17:38:00 +0000</pubDate><atom:updated>2008-07-04T09:11:35.639+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2005</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio 2008</category><category domain="http://www.blogger.com/atom/ns#">DotNet</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">konvertieren</category><category domain="http://www.blogger.com/atom/ns#">.Net</category><title>Visual Studio 2008 Solution in VS 2005 öffnen</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899835" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899835/visual-studio-2008-solution-in-vs-2005.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/12/visual-studio-2008-solution-in-vs-2005.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-7789648161943963906</guid><pubDate>Sun, 09 Dec 2007 23:55:00 +0000</pubDate><atom:updated>2007-12-29T11:06:02.309+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Vista x64</category><category domain="http://www.blogger.com/atom/ns#">DotNet</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Entity Framework</category><category domain="http://www.blogger.com/atom/ns#">.Net</category><title>Entity Framework Beta 3 unter Vista x64 installieren</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899837" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899837/entity-framework-beta-3-unter-vista-x64.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/12/entity-framework-beta-3-unter-vista-x64.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-922707668247946642</guid><pubDate>Sun, 09 Dec 2007 23:45:00 +0000</pubDate><atom:updated>2007-12-14T07:36:24.450+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Vista</category><category domain="http://www.blogger.com/atom/ns#">Management Studio Express</category><category domain="http://www.blogger.com/atom/ns#">SQLServer</category><category domain="http://www.blogger.com/atom/ns#">UAC</category><title>Attach einer Datenbank funktioniert unter Windows Vista nicht.</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899838" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899838/attach-einer-datenbank-funktioniert.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/12/attach-einer-datenbank-funktioniert.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-2790560749002105503</guid><pubDate>Sun, 09 Dec 2007 23:01:00 +0000</pubDate><atom:updated>2007-12-14T07:35:38.992+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows Vista</category><category domain="http://www.blogger.com/atom/ns#">Management Studio Express</category><category domain="http://www.blogger.com/atom/ns#">SQLServer</category><category domain="http://www.blogger.com/atom/ns#">UAC</category><title>Unter Windows Vista schlägt die Installation von MS SQL Server Management Studio Express fehl: Error 29506</title><description>&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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899839" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899839/unter-windows-vista-schlgt-die.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/12/unter-windows-vista-schlgt-die.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-7293605071095773731</guid><pubDate>Fri, 07 Dec 2007 22:33:00 +0000</pubDate><atom:updated>2008-07-04T09:14:02.884+02:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Migration</category><category domain="http://www.blogger.com/atom/ns#">Firefox</category><title>In Firefox gespeicherte Passwörter übertragen</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899840" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899840/in-firefox-gespeicherte-passwrter.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/12/in-firefox-gespeicherte-passwrter.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-5787305698018544290</guid><pubDate>Sun, 25 Nov 2007 19:12:00 +0000</pubDate><atom:updated>2007-11-30T11:31:28.977+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Keyboard</category><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">TextBox</category><category domain="http://www.blogger.com/atom/ns#">Control</category><category domain="http://www.blogger.com/atom/ns#">Tastatur</category><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">DotNet</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">.Net</category><category domain="http://www.blogger.com/atom/ns#">Silverlight 1.1 Alpha</category><title>Tastaturereignisse in Silverlight Alpha 1.1</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899841" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899841/tastaturereignisse-in-silverlight-alpha.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/11/tastaturereignisse-in-silverlight-alpha.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-5514234101789824118</guid><pubDate>Sun, 18 Nov 2007 16:08:00 +0000</pubDate><atom:updated>2007-11-30T08:20:18.935+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">.Net</category><category domain="http://www.blogger.com/atom/ns#">Silverlight 1.1 Alpha</category><title>Silverlight 1.1 Alpha mit ASP.NET</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899842" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899842/silverlight-11-alpha-mit-aspnet.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/11/silverlight-11-alpha-mit-aspnet.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-9057995467550660291</guid><pubDate>Sun, 18 Nov 2007 15:58:00 +0000</pubDate><atom:updated>2007-11-18T17:12:17.558+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">ASP.NET</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">.Net</category><category domain="http://www.blogger.com/atom/ns#">Silverlight 1.1 Alpha</category><title>JavaScript debugging mit Silverlight 1.1 Alpha</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899843" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899843/javascript-debugging-mit-silverlight-11.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/11/javascript-debugging-mit-silverlight-11.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-8568144145532054030</guid><pubDate>Sun, 18 Nov 2007 12:47:00 +0000</pubDate><atom:updated>2007-11-29T23:36:02.396+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">DotNet</category><category domain="http://www.blogger.com/atom/ns#">Silverlight</category><category domain="http://www.blogger.com/atom/ns#">.Net</category><category domain="http://www.blogger.com/atom/ns#">Silverlight 1.1 Alpha</category><title>Silverlight 1.1 Alpha scriptable Methode liefert true anstatt false</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899844" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899844/scriptable-methode-liefert-true-anstatt.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/11/scriptable-methode-liefert-true-anstatt.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-2073936833058442291</guid><pubDate>Sun, 18 Nov 2007 08:46:00 +0000</pubDate><atom:updated>2007-11-30T07:16:09.437+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">JavaScript</category><category domain="http://www.blogger.com/atom/ns#">Orcas</category><category domain="http://www.blogger.com/atom/ns#">Intellisense</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Syntax Highlighting</category><title>JavaScript Syntax-Highlighting und Intellisense funktioniert in Visual Studio 2008 Beta 2 nicht</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899845" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899845/javascript-syntax-highlightning-und.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/11/javascript-syntax-highlightning-und.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-8512597292992523800</guid><pubDate>Tue, 30 Oct 2007 09:30:00 +0000</pubDate><atom:updated>2007-11-29T23:31:57.926+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Solution Explorer</category><category domain="http://www.blogger.com/atom/ns#">Visual Studio</category><category domain="http://www.blogger.com/atom/ns#">Macro</category><title>Visual Studio Macro zum finden des aktuellen Dokuments im Solution-Explorer (Projektmappe)</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899846" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899846/visual-studio-macro-zum-finden-des.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/10/visual-studio-macro-zum-finden-des.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-4119791702547620364</guid><pubDate>Sat, 20 Oct 2007 08:34:00 +0000</pubDate><atom:updated>2007-11-29T23:30:31.808+01:00</atom:updated><title>Zweidimensionales Array in einer C++ COM-Komponente erzeugen und an VB/VBA zurückgeben</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899847" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899847/zweidimensionales-array-in-einer-c-com.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/10/zweidimensionales-array-in-einer-c-com.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-8656736644913555086</guid><pubDate>Sat, 20 Oct 2007 08:22:00 +0000</pubDate><atom:updated>2007-11-30T08:58:13.520+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Windows</category><category domain="http://www.blogger.com/atom/ns#">C++</category><title>Verstrichene Zeit in C++ unter Windows messen ...</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899865" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899865/verstrichene-zeit-in-c-unter-windows.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/10/verstrichene-zeit-in-c-unter-windows.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-2976275807788679506</guid><pubDate>Sat, 20 Oct 2007 07:31:00 +0000</pubDate><atom:updated>2007-11-30T08:59:50.251+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">VBA</category><category domain="http://www.blogger.com/atom/ns#">Excel</category><title>Buttons dynamisch zur Laufzeit hinzufügen ist in Excel leicht realisiert, aber ...</title><description>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;&lt;br /&gt;Eine weitere gefundene Variante die mir besser gefällt habe ich nachfolgend zusammengefasst.&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; CButton&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 die automatisch die Ereignisprozedur &lt;code&gt;ButtonObject_Click&lt;/code&gt; zugeordnet.&lt;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899866" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899866/buttons-dynamisch-zur-laufzeit.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/10/buttons-dynamisch-zur-laufzeit.html</feedburner:origLink></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1394832566265411957.post-1020964068878049168</guid><pubDate>Fri, 19 Oct 2007 21:25:00 +0000</pubDate><atom:updated>2008-01-08T16:57:49.153+01:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">VBA</category><category domain="http://www.blogger.com/atom/ns#">Excel</category><title>Globale Variablen in Excel verlieren ihren Wert</title><description>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;img src="http://feeds.bewellup.com/~r/bewellup/devde/~4/209899867" height="1" width="1"/&gt;</description><link>http://feeds.bewellup.com/~r/bewellup/devde/~3/209899867/globale-variablen-in-excel-verlieren.html</link><author>noreply@blogger.com (Günter Zöchbauer)</author><feedburner:origLink>http://devde.bewellup.com/2007/10/globale-variablen-in-excel-verlieren.html</feedburner:origLink></item></channel></rss>
