2010年02月28日

Silverlight : Despatcher.BeginInvokeメソッド

   このエントリーをはてなブックマークに追加 Clip to Evernote
SilverlightにはControl.Invokeがありません。
代わりにDependencyObject.Dispatcher プロパティを経由して、BeginInvokeメソッドを呼び出します。
BeginInvokeは、2つのoverloadメソッドがありますが、 通常は、Actionデリゲートを受け取るメソッドを使えばよいと思います。


もうひとつの BeginInvokeの書き方


  

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

2010年02月24日

Clipboard.GetData(DataFormats.Html)で文字化け

   このエントリーをはてなブックマークに追加 Clip to Evernote
クリップボードからHTMLを取得しようと、以下のようなコードを書いたら、 日本語部分が文字化けしてしまいました。


文字化けを防ぐには、次のように、MemoryStream経由して Encodingの指定をしてHTML を取得する必要があります。


でも、


とか


だとダメです。MemoryStreamに変換できません。
これってバグですか?   
Posted by gushwell at 23:28Comments(0)TrackBack(0)

2010年02月21日

番兵というテクニック

   このエントリーをはてなブックマークに追加 Clip to Evernote
昨日、プログラム小品集に「最大面積の領域を求める」プログラムを載せましたが、 そこで、プログラミングテクニックの一つである番兵を使っています。
というか、以前このブログでも書いた、共通クラスであるBoardクラスで、 実際のボードの周りに番兵用のデータを置いています。
これのおかげで、


と書かなくてはいけないところで、


と書くことができます。
ちょっと違いが分かりにくいですが、Rangeメソッドの第2引数が違っています。
番兵が無いと、配列の範囲を超えないようにインデックスをインクリメント していく必要があります。
しかし、番兵があるおかげで、インデックスの範囲オーバーを気にせずに、 「黒石が続くあいだだけ繰り返す」という処理を書くことができます。

最近「番兵」という言葉を聞くこ/見ることがほとんどないので、ここにアップします。  
Posted by gushwell at 23:53Comments(0)TrackBack(1)

2010年02月18日

Sleipnirで「MSDN検索」エクステンション

   このエントリーをはてなブックマークに追加 Clip to Evernote
エバンジェリストのこだかさんのページで、MSDN検索(アクセラレーター)の紹介がありましたが、僕は、普段、Sleipnir使っているので、Sleipnirでも同様のものを作成してみました。
といっても、Webにあるコードをコピってきて一部を書き換えただけですが。

大まかな手順は、
1.UserAction Extension をインストール
2.検索スクリプトの記述
3.スクリプトをSleipnirに組み込む

です。
以下が、具体的な手順です。

■ 1.UserAction Extension をインストール
http://www.fenrir.co.jp/sleipnir/plugins/extension.html から、UserAction Extension をインストール


■2.検索スクリプトの記述
以下のスクリプトを "D:\Program Files\Fenrir & Co\Sleipnir\plugins\scripts\SearchMsdn.js" に保存。ファイル名が、アクション名になる。



■ 3.スクリプトをSleipnirに組み込む
(1)Sleipnir を起動し、 [ツール]、[Sleipnir オプション] でオプションダイアログを開く
(2)[クライアント] [全般] で、 "スクリプトによるクライアントの操作を許可する" をチェックする。
(3)[ユーザインターフェース] [メニューエディタ] を選択
(4)メニュー一覧から、SmartSearch を選択
(5)追加ボタンを押し、メニュー項目の追加を選択
(6)メニューエディタで、
  名前:MSDNから検索
  アクション:SearchMsdn
 とし、ボタンを押し、登録する。
(7)メニューの表示位置は、右側の項目一覧で、D&Dで変更する。

■使い方

Sleipnirのブラウザ画面で、検索したい単語を選択する。
SmartMenuアイコンが表示されるので、それをクリックする。
ポップアップメニューに 「MSDNから検索」メニューが表示される。
メニュー項目を選択すると、MSDNからの検索結果が表示される。

■補足
オプションダイアログのメニューエディタで、「ブラウザ テキスト選択」に、 SearchMsdn を追加すれば、右クリックでも MSDNの検索ができます。
でも、メニュー表示名は、日本語にはならず、「SearchMsdn」となります。
"C:\Users\\AppData\Roaming\Fenrir & Co\Sleipnir\setting\Override\BrwsCtxtMenuTxtAddPopup.xml"
を書き換えれば、日本語表示になります。
  
Posted by gushwell at 23:07Comments(0)TrackBack(0)

2010年02月16日

RealProxyでthis経由のメソッド呼び出しはフックできない

   このエントリーをはてなブックマークに追加 Clip to Evernote
System.Runtime.Remoting.Proxies.RealProxyを使うと、メソッドの呼び出しをフックできるんですが、 あくまでも透過プロキシ経由で呼び出した場合に限られます。
なので、Privateメソッドは、フックできないんですね。
当然、publicメソッドであっても、自分自身のクラスから呼ばれた場合は、 フックできません。
冷静になって考えれば当たり前なのですが、以前、これで嵌まりました。
思いだしたので書いておきます。

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

2010年02月14日

ナノピコ教室のプログラムをSilverlightアプリへ (3)

   このエントリーをはてなブックマークに追加 Clip to Evernote
ナノピコ教室のプログラムをSilverlightアプリへ (2)」で示した Boardクラスと、BoardCanvasクラスを使ったSilverlightプログラムの第一弾ができました。
梅花碁というゲーム(連珠の一種)の勝ち判定をするプログラムです。


ボード上をクリックすると、黒石→白石→消去を繰り返します。
ソースコードはこちらに掲載しています。

ナノピコ教室では、さらに、「黒-白-黒と打って勝ちになる手を出力するプログラムを書いてください」という問題が掲載されています。こちらも手が空いたときにSilverlightでプログラムを書いてみようと思います。
また、「8クイーンゲーム」「オセロ最短詰め」「面積最大の領域」「拾い碁」「数独」なども、順次Silverlightにしてゆくつもりです。
  
Posted by gushwell at 22:53Comments(0)TrackBack(0)

2010年02月13日

メルマガ:どう書く?org編

   このエントリーをはてなブックマークに追加 Clip to Evernote
現在、メールマガジン「C#プログラミングレッスン」では、「どう書く?org編」というものをやっています。
「どう書く?org編」の最初の号で、
ーーーーーーーーーーーーーーーーーーーー
[どう書く?org編]では、取上げるお題を一つ前の号で予告し、次の号でそのコー
ドを掲載するという形式を採ります。なので、皆さんも次号が出るまでにコードを
書いていただき、私が書いたコードと比較していただけると、学習効果が高まるの
ではと考えています。
ーーーーーーーーーーーーーーーーーーーー

と書いたら、これを実践してくれた方がいました。
http://ameblo.jp/dandyshogo/entry-10454867755.html
で、僕のメルマガでピックアップしたお題を、実際に解いてブログに公開されています。

なにはともあれ、僕のメールマガジンがC#学習の一助になっているようで嬉しい限りです。
  
Posted by gushwell at 22:54Comments(2)TrackBack(0)

2010年02月07日

ナノピコ教室のプログラムをSilverlightアプリへ (2)

   このエントリーをはてなブックマークに追加 Clip to Evernote
1月10日に、「ナノピコ教室のプログラムをSilverlightアプリへ」というエントリで、以前書いた「オセロ最短詰め」「数独を解く」「梅花碁」「8クイーンゲーム」「面積最大の領域」などのプログラムを Silverlightアプリに移植するのに、盤データを扱う共通のクラスを作成するつもり、と書きましたが、昨日、今日はまとまった時間が取れたので、なんとか形になりました。

Boardクラスと、BoardCanvasという2つのクラスが中心となるクラスです。
Boardクラスは、盤データを扱うモデルクラス。
BoardCanvasクラスは、描画を担当するビュークラス。

このクラスの動作を確認するのに簡単なプログラムを書いたのがこれ。
ボード上をクリックすると、黒石→白石→消去を繰り返します。


Boardクラスと、BoardCanvasのソースコードはこちらに掲載しています。
デモプログラムのソースコードは、こちらです。

描画は、カスタムコントロールで、Boardオブジェクトとバインドできれば良かったのですが、まだSilverlightの知識が足りないので、通常のクラスとして、BoardCanvasクラスを作成しています。

ここまで出来れば、各プログラムのSilverlightへの移植は、それほど難しくないかなーと思ってます。
  
Posted by gushwell at 18:33Comments(0)TrackBack(0)