Silverlight2用ガジェット

以前にSilverlight2用ガジェットを
電卓(Silverlight用)、
見出しニュース[Yahoo!JAPAN版](Silverlight用)と
作成しました。

しかしSilverlight4に更新すると
動かなくなります。

Windows サイドバーガジェットとして
公開していたのですが
動作させるためには
作り直すしか方法がありません。

Silverlight4にすると動かない旨を
コメントとして更新しようとしたのですが
動作しないガジェットのため
それも拒否されてしまいました。

作り直す時間もとれないのと
同様機能を持つガジェットが
あるので今回は申し訳ありませんが
Windows サイドバーガジェットからは
削除させていただきました。

ご迷惑おかけしますが
電卓(Silverlight用)、
見出しニュース[Yahoo!JAPAN版](Silverlight用)を
お使いの方は電卓、
見出しニュース[Yahoo!JAPAN版]へと
移行していただけると幸いです。

 

Silverlight4だと動かない

以前Silverlight2で動く
Windows サイドバーガジェットを
作成したのですが
Silverlight4にアップデートしてから
エラーが出て動かなくなりました。
困りました。。

Mac OS X Dashboard ウィジェットでも
同様に作成したのですが
こちらは何故か掲載されなかったので
まあよいとしましょう。

ちなみに作成したのは
電卓(Silverlight用)、
見出しニュース[Yahoo!JAPAN版](Silverlight用)です。

Silverlight2では
Managed JScriptを使って作成しました。

そして下記URLを参照してみたら
 http://msdn.microsoft.com/ja-jp/library/cc645049%28VS.95%29.aspx
 http://dlr.codeplex.com/Thread/View.aspx?ThreadId=58121
Silverlight4ではManaged JScriptは
サポート対象外となったようです。
参りました。。

 

Mac OS X Dashboard ウィジェットへのフィードバック

以前作成しました。
“電卓(Silverlight用)”と
“見出しニュース[Yahoo!JAPAN版](Silverlight用)”についてです。

Windows サイドバーガジェットと
Mac OS X Dashboard ウィジェット用に
作成たのですが
Windows サイドバーガジェットには
下記のURLにちゃんと登録されているのですが
 http://gallery.live.com/liveItemDetail.aspx?li=de1631d1-555f-4fca-a331-f38021025db4
 http://gallery.live.com/liveItemDetail.aspx?li=da4be84d-d600-41ca-82ca-b1638a28e3e9

Mac OS X Dashboard ウィジェットには
なぜか登録されませんでした。

問い合わせてみたところ
Mac OS X Dashboard ウィジェット関連は
下記のURLから問い合わせてくださいとのことでした。
 http://www.apple.com/downloads/dashboard/feedback/

なるほど。
日本語のページにはなかったけれども
英語のMac OS X Dashboard ウィジェットのページには
フィードバックへのリンクが張られていたのですね。
まったくもって気づきませんでした。

そして今まで登録してあるガジェットは
英語版には登録されないのですね。
一応、英語対応してあるんだけれども
各言語毎に登録しろってことなのでしょう。

見出しニュース[Yahoo!JAPAN版](Silverlight用)

作成したガジェット紹介です。
“見出しニュース[Yahoo!JAPAN版](Silverlight用)ガジェット”です。

“電卓(Silverlight用)”と同様に
Silverlight2が動く
Windows サイドバーガジェット、
Mac OS X Dashboard ウィジェットにて
“見出しニュース[Yahoo!JAPAN版]”を
Silverlight2にて作りなおしてみました。

なのでSilverlight2が
インストールされていないと
動きません。

Yahoo!JAPANのトップページに表示されている
ニューストピックスを
PVが多い順に5件表示します。

矢印ボタンを押下することにより
見出しニュースの
カテゴリを切換えが行えます。

見出しニュースをマウスオーバーすることにより
途切れたトピックスが表示されます。
クリックするとデフォルトのブラウザで
詳細ページを開きます。

オプション画面にて背景色、
デフォルトの表示カテゴリ、
表示を行うカテゴリ、
データ更新時間の変更が設定できます。

Mac OS X Dashboard ウィジェットは
2009年1月に登録申請しましたが
未だに紹介されません。
なにか悪かったのかもわかりません。。

下記のURLよりダウンロードすることができます。

 Windows サイドバーガジェット:
  http://gallery.live.com/liveItemDetail.aspx?li=da4be84d-d600-41ca-82ca-b1638a28e3e9

 

電卓(Silverlight用)

作成したガジェット紹介です。
“電卓(Silverlight用)ガジェット”です。

Silverlight2が動く
Windows サイドバーガジェット、
Mac OS X Dashboard ウィジェットにて
“電卓ガジェット”を
Silverlight2にて作りなおしてみました。

なのでSilverlight2が
インストールされていないと
動きません。

クリップボードへのコピー、
計算式をペーストすることができます。

オプション画面にて背景色の変更、
カンマ表記の有無を設定できます。

Mac OS X Dashboard ウィジェットは
2009年1月に登録申請しましたが
未だに紹介されません。
なにか悪かったのかもわかりません。。

下記のURLよりダウンロードすることができます。

 Windows サイドバーガジェット:
  http://gallery.live.com/liveItemDetail.aspx?li=de1631d1-555f-4fca-a331-f38021025db4

Silverlight2.0でManaged JScriptでのキーイベントについて

今回はManaged JScriptでのキーイベントについてです。
何のキーが押下されたのかの判定がちょっとややこしいです。

基本的なキーを判別するのであれば
イベントオブジェクトのeventArgs.Keyと
キー配列の一覧をもつKeyクラスで用が立つのですが
Keyクラスでは足りないこともよくあります。
やっぱりそこはキーコードを見て判断するしかないようです。

また、シフトが押下されているかの判断は
KeyboardクラスとModifierKeysクラスを使って判断します。
何故かイベントオブジェクトからでは判断できません。
紛らわしいです。

下記のように記述します。
fooのbarオブジェクトに対してキーが押下されたら
doKeyDownメソッドを呼び出しています。
 Import(“System.Windows.Input.Key”)
 Import(“System.Windows.Input.Keyboard”)
 Import(“System.Windows.Input.ModifierKeys”)

 foo.bar.KeyDown += doKeyDown;

 function doKeyDown(sender, eventArgs){
  // Altが押されている
  if((Keyboard.Modifiers & ModifierKeys.Alt) == ModifierKeys.Alt){
   return;
  }

  // コントロールが押されている
  if((Keyboard.Modifiers & ModifierKeys.Control) == ModifierKeys.Control){
   return;
  }

  // シフトが押されている
  if((Keyboard.Modifiers & ModifierKeys.Shift) == ModifierKeys.Shift){
   return;
  }

  if(eventArgs.Key == Key.Enter){
   // エンターが押下
   
  } else {
   // キーコードで判断
   switch(eventArgs.PlatformKeyCode){
    case 191:
     // “/”が押下
     break;

    default:
     break;
   }

  } // if(eventArgs.Key == Key.Enter)
 }

Silverlight2.0でManaged JScriptからの設定ファイルへの読み書込み

Silverlight2.0でManaged JScriptから
設定ファイルへの読み書込みを行う際には
IsolatedStorageSettingsクラスを使って行います。

なお、Windows サイドバーガジェットを作ろうとしたときには
ちょっと注意点があります。
Silverlightでのパラメータでの”source”のxapファイルごとに
設定ファイルが作られます。
なので同じxapファイル名のものがあるときには
せっかく設定した値が他のガジェットでいじられてしまう可能性があります。
やっぱり”x-gadget:///”のせいでしょう。

また、Windows サイドバーガジェットだと大丈夫なのですが
それ以外では設定ファイルへの書込みの
時間が何故かかかってしまいます。
なのでここではタイマー処理をして濁しています。

まずは設定ファイルの読込みです。
“foo”のキーでの値を読込んで”bar”に設定しています。
 Import(“System.IO.IsolatedStorage.IsolatedStorageSettings”)
 var bar = null;

 var appSetting = IsolatedStorageSettings.ApplicationSettings;
 if(appSetting.Contains(“foo”)){
  bar = appSetting[“foo”];
 }

次に設定ファイルへの書込みです。
barの値を”foo”をキーとして設定ファイルへ書込みを行っています。
 Import(“System.IO.IsolatedStorage.IsolatedStorageSettings”)
 Import(“System.TimeSpan”)
 Import(“System.Windows.Threading.DispatcherTimer”)
 var timer = null;
 var bar   = null;

 var appSetting = IsolatedStorageSettings.ApplicationSettings;
 if(appSetting.Contains(“foo”)){
  appSetting[“foo”] = new String(bar).toString();

 } else {
  appSetting.Add(“foo”, new String(bar).toString());
 }

 // 時間がかかるのでタイマー処理を行う
 if(timer == null){
  timer = new DispatcherTimer();
  timer.Interval = TimeSpan.FromMilliseconds(1);
  timer.Tick     += function(){
   var appSetting = IsolatedStorageSettings.ApplicationSettings;
   appSetting.Save();

   timer.Stop();
  }
 }
 timer.Start();

Silverlight2.0でManaged JScriptからのタイマー処理について

JavaScriptではsetTimeout、setIntervalが使えたのですが
Managed JScriptでは使えません。
そこでDispatcherTimerを使って処理を行います。

下記のような形です。
100msecが過ぎたらfooを呼び出しています。
fooでは1回呼ばれれば充分なのでタイマーをストップされています。
 Import(“System.TimeSpan”)
 Import(“System.Windows.Threading.DispatcherTimer”)
 var timer = null;

 if(timer == null){
  timer = new DispatcherTimer();
  timer.Interval = TimeSpan.FromMilliseconds(100);
  timer.Tick     += foo;
 }
 timer.Start();

 function foo(){
  if(timer != null){
   timer.Stop();
  }
 }

Silverlight2.0でManaged JScriptからのAjaxについて

Managed JScriptからのAjaxについてです。
でもレスポンスがテキストまたはJSONなときのみです。

レスポンスがXMLのときには読み込んだ後に
どうやってDocumentオブジェクトに変換すればよいのか
わかりませんでした。
苦肉の策としてJavaScriptにレスポンスのテキストを渡すことで
処理を行い回避はできます。
何か用方法を知っていたら教えてください。。

それでこんな感じで行います。
fooというサイトにアクセスして
レスポンスとしてbarを受け取っています。
 Import(“System.IO.StreamReader”)
 Import(“System.Net.WebClient”)

 // Ajax通信
 var webClient = new WebClient();
 webClient.OpenReadAsync(new Uri(foo));
 webClient.OpenReadCompleted += foo;

 function foo(sender, eventArgs){
  if(eventArgs.Error != null){
   return;
  }

  // レスポンスの読込み
  var bar = null;
  try{
   var reader = new StreamReader(eventArgs.Result);
   bar = reader.ReadToEnd();

  }catch(ex){
   return;
  }
 }

Silverlight2.0でManaged JScriptからJavaScriptの呼出しについて

Silverlight2.0を作るときにManaged JScriptを選択したのですが
そこでのいろいろ苦労しました。
そこでManaged JScriptからJavaScriptへの呼出しについてです。

下記のように記述するとJavaScript”foo”を呼出して
結果をbarとして受け取っています。
 Import(“System.Windows.Browser.HtmlPage”)

 var bar = HtmlPage.Window.Invoke(“foo”);

また、下記のようなこともできます。
これはクリップボードを取得してfooをコピーしています。
 Import(“System.Windows.Browser.HtmlPage”)

 var clipboardData = HtmlPage.Window.GetProperty(“clipboardData”);
 if(clipboardData != null){
  clipboardData.Invoke(“setData”, “text”, foo);
 }

同様にブラウザを開くときには下記のようにします。
 Import(“System.Windows.Browser.HtmlPage”)

 HtmlPage.Window.Navigate(new Uri(url), “_blank”);