2011年12月05日

Silverlightアプリをブログ上で動かす

   このエントリーをはてなブックマークに追加 Clip to Evernote
このエントリは、Silverlight Advent Calendar 2011への参加記事です。

ウェブサイトでは、比較的簡単にSilverlightアプリをホストすることが可能ですが、
ブログだと、画像以外をアップロードできなかったりして、Silverlightアプリをホストすることができない場合が
多いと思います。

しかし、せっかくだから、ブログでSilverlightアプリをホストしたいわけです。
僕はブログとウェブサイトの両方を運営していますが、圧倒的にブログの方が訪れる人の数が
多いですから余計にそう思います。
せっかく作ったSilverlightアプリを、以下のようにブログのページ上でも動かすことができれば、
それだけ、多くの人に見てもらえるというわけです。

Startボタンを押せば、プログラムが動き出します。



このプログラムは、以前「凸多角形の完全グラフ(一筆書き) 」で紹介したものです。
以前にも、このブログで載せています。


僕がやっている方法は、Webサイトにアップしたxapファイルを
ブログサイトから参照することで、ブログのページ上でSilverlightアプリを動かすというものです。

他の人に役に立つ情報かどうかはわかりませんが、 その方法を簡単にに示します。


まず、ウェブサイトにSilverlightアプリを配置します。
実際に配置するのは、
htmlファイル、silverlight.jsファイル、そして、ClientBinフォルダの下にあるxapファイルの3つです。
htmlファイルは、Visual StudioがSilverlightのプロジェクトを作成する時に、自動的に生成するホスト用のhtml ファイルです。

なお、このhtmlファイルの先頭近くにある body { } のスタイル指定は、以下のように、overflow指定を
追加しておきます。こうすることで、Silverlightをホストした部分でスクロールバーが出なくなります。



xapファイルは、デフォルトのまま、ClientBinフォルダの配下に配置します。
こんな感じです。


ちなみに、僕は、忍者ホームページというサービスを利用しています。
無料プランと有料プランがありますが、無料プランでも500MBのディスク容量がありますから、通常の利用なら
ばまったく問題ないと思います。

次にやることは、このSampleApp.html をウェブサイトの別のページからリンクを貼り辿れるようにすることです。
これは省略します。

最後に、ブログページに上記のSampleApp.html を埋め込みます。
記述するhtmlは、以下のような感じです。


もちろん、Webサイトの方でも、Topページから、リンクをたどっていくことで、
そのSilverlightアプリのページにたどり着けるようにしています。
大抵のWebサイトのサービスでは、そういった約束事があるので、どこからもリンクされていない
ファイルを、他のドメインのページからリンクさせることはやらないほうが良いと思われます。
ただ、結構面倒なので、最近はこの手法は使わないで、単にブログからウェブページへのリンクを
貼るだけのこともあります。

  

Posted by gushwell at 22:30Comments(0)TrackBack(0)

2011年03月27日

Silverlight:画面に表示されたRichTextBox を印刷する

   このエントリーをはてなブックマークに追加 Clip to Evernote
画面表示用のページに配置されたRichTextBox の変数名がrtb だとすると、
rtbをPageVisual に 直接セットすると、印刷はできるけど、
幅を印刷用紙に合わせることができません。

RichTextBoxの複製を作って、それをPageVisualに設定して、印刷すればいいはずと思って、
調べたんだけど、どうやって複製を作るのかが、なかなか分かりませんでした。

やっとたどり着いた答えは、xaml プロパティを使えばいいということ。
これがわかるまで、結構時間がかかってしまいました。
別の方法もあるかも知れないけど、これ以外の方法がわかりません。
1ページ限定だけど、以下のようにすれば印刷できます。

  
Posted by gushwell at 22:06Comments(0)TrackBack(0)

2011年02月20日

Silverlight4でドラッグ&ドロップ

   このエントリーをはてなブックマークに追加 Clip to Evernote
Silverlight4では、ドラッグ&ドロップができるようになったので、
ここ「Drag and Drop Files in Silverlight 4」を参考に、テストプログラムを作成し、
デバッグ実行したのですが、エクスプローラからのファイルのドラッグ&ドロップができません。
ファイルをドロップしようとしても、マウスカーソルの形状が禁止マークになっています。

いくらプログラムを見直してみても、おかしそうな箇所はありません。
IEの設定も、ちゃんとドラッグ&ドロップを有効にしてあるし...

ためしに、IE以外のブラウザ(Chrome, firefoxなど)を起動し、アドレスをコピーして、
作成したプログラムを動かしてみると、今度はドラッグ&ドロップができます。

理由がわからず、かなり悩みました。
原因は、Visual Studio 2010を管理者権限で起動していたためでした。

そういえば、以前も同じ問題で悩んだことがあったっけ。
成長してませんね。

ところで、Visual Studio を 管理者権限にしなければいけない理由ってなんだったんだっけ?
思い出せないので、管理者権限で起動するのをやめてみることにしました。

ちなみに、Silverlight4でエクスプローラからのDrag&Dropを可能にするには、
コントロールの AllowDrop を "True" にし、
Dropイベントハンドラで、次のようなコードを書くだけです。


  
Posted by gushwell at 21:30Comments(0)TrackBack(0)

2010年12月05日

Silverlightでプロジェクトに追加したファイルの一覧を得る

   このエントリーをはてなブックマークに追加 Clip to Evernote
Silverlightでプロジェクトに追加したファイルの一覧を得る方法を調べてみました。

例えば、複数のイメージファイルをプロジェクトに追加し、 ListBoxのその画像を表示する C# プログラムを考えます。

まず、Silverlightプロジェクトに追加したイメージファイルは、
プロパティのビルドアクションで、「埋め込まれたリソース」に設定します。
こうすると、プログラムコードでは、
でその名前の一覧を得ることができます。
ここで得られたリソースの名前は、
で、Streamオブジェクトとして取り出すことができます。
このstreamをBitmapImageに変換するには、
とします。
ここまでくれば、Imageコントロールに、このbitmapを割り当てればOKです。
具体的には、
というImageを格納するListを用意し、
とすれば、リソースにあるイメージを LIstBix に表示することができます。

最初は、どうやったら、stream から Imageオブジェクトを作成できるのかがわからず、
このコードにたどり着くまでに思いのほか時間をかけてしまいました。
下の画像がその実行結果です。
imagelist
  
Posted by gushwell at 22:22Comments(0)TrackBack(0)

2010年07月25日

ナイト(騎士)の最適配置問題

   このエントリーをはてなブックマークに追加 Clip to Evernote
チェスのナイト(騎士)を以下の規則に従って配置するパズルです。

1.すべての空きがどれかのナイトの効き筋になっていること。
  複数のナイトから効いていてもかまわない。
2. ナイト同士は互いに効き筋にはない。
3. なるべく少ない数のナイトで配置する。


「プログラミング小品集」に掲載する中では、久しぶりに長めのプログラムでした。
そして実行時間も...
この手のパズルは解を求めるのに時間がかかるのは仕方がないとは思うけど、もう少し速くしたかったなー。


求まった解を見てみると、対称性をもったきれいな配置だなーって思います。

ところで、デバッグ中に、chromeで動かしてみたら、ブラウザがエラーを表示してしまいました。
どうも、長時間 Silverlightからの応答がないのが理由のようでした。
そのため、Backgroundworkerを使い、応答なしを回避しました。IEだと大丈夫なのにね。

ソースコードはこちらに掲載しています。   
Posted by gushwell at 22:39Comments(0)TrackBack(0)

2010年06月21日

ラングトンのアリ

   このエントリーをはてなブックマークに追加 Clip to Evernote

「ラングトンのアリ」のプログラムは、多くのサイトで動くものが公開されていますが、
Silverlightで公開している方は、いないようなので、昔作ったものを Silverlightに移植してみました。

Silverlightで別スレッドから、BeginInvokeを呼び出し、UIスレッドで描画するサンプルとしてどうぞ。

ソースコードはこちらに掲載しています。

ランダムに動いているアリが、突然規則的に直線の道を作り出すのって不思議ですね。



  
Posted by gushwell at 23:12Comments(0)TrackBack(0)

2010年05月27日

Silverlight:RGBを指定してColorオブジェクトを生成する

   このエントリーをはてなブックマークに追加 Clip to Evernote

RGBを指定してColorオブジェクトを生成する方法です。


指定の 8 ビット カラー値 (赤、緑、青) から Color オブジェクトを作成します

ARGB値 を指定することもできます。

第1引数がアルファ値となります。アルファ値は、透明度を意味し、 0 が完全透明、255が完全不透明です。

  
Posted by gushwell at 23:10Comments(0)TrackBack(0)

2010年05月17日

Silverlight : クリックしたマウスの位置を得る

   このエントリーをはてなブックマークに追加 Clip to Evernote

MouseLeftButtonDownイベントで、マウスポインタの位置を求めるコードです。


これで、GetPositionメソッドの引数で与えた UIElement(ここでは、canvas1)を基準にした相対位置を得ることができます。
  
Posted by gushwell at 22:59Comments(0)TrackBack(0)