【お知らせ】プログラミング記事の投稿はQiitaに移行しました。

C#

Super Maryo World for Windows Mobile

牧本さんのスーパーマリョーワールド(仮)の.NET Framework版をCompact Framework用に手直ししました。id:n7shi:20090106の方法により無料のVC# Expressで開発しています。PCとWindows Mobileの両方で動きます。ダウンロードは以下です。 SuperMaryoWorld.CAB…

アニメーションGIFの変換

C#

SilverlightではGIFが使えません。PNGに変換しようとしたのですが、数が多くてアニメーションGIFが混ざっていたため、GDI+(System.Drawing)で情報を取得して変換しました。変換部分のコードは以下の通りです。

WebRequestの同期呼び出し

SilverlightのWebRequestには非同期のBeginWebResponseしかありませんが、以下のような拡張メソッドでGetResponse相当の同期呼び出しができます。メインスレッドからは呼べないので注意が必要です(詳細は後述)。

h01/y01 for Silverlight

id:m107さんのh01とy01をSilverlightに移植しました。ゲームとしては遊べませんが、実験の一環です。動作確認とソースのダウンロードは以下です。 キャラクタが一人 キャラクタが四人 拡大・縮小・スクロール キャラクタの移動 効果音 フリック動作 BGM アイ…

UIElementをXAMLで出力

UIElementをラスターデータで出力するのにはWriteableBitmapが使えますが、ベクターデータで出力するのにXAMLを使ってみました。サンプルではVisual TreeをTreeViewで表示しているため、コントロールの内部構造と比較できます。 ⇒ 動作確認とソースSilverlig…

WriteableBitmapをBMPで保存

WriteableBitmapのイメージは簡単にBMPファイルとして保存できます。 var bmp = new WriteableBitmap(LayoutRoot, null); var sfd = new SaveFileDialog { Filter = "32 ビット ビットマップ (*.bmp)|*.bmp|すべてのファイル (*.*)|*.*", DefaultExt = ".bmp…

Andromeda for Silverlight

自作言語AndromedaをSilverlightに移植しました。Win32バイナリを出力するネイティブコンパイラです。動作確認とソースのダウンロードは以下です。 Andromeda for Silverlight Andromeda クラスマップ ツリーのSamplesからビルドしたいサンプルを選んで[Buil…

Cyan/Yellow for Silverlight 3

id:takuto_hさんのCyanとYellowの移植をSilverlight 3に対応しました。動作確認とソースのダウンロードは以下です。 Cyan for Silverlight Cyan クラスマップ Yellow for Silverlight Yellow クラスマップ 変更点は以下の通りです。 ドキュメントリストをLis…

TreeViewのダブルクリック

Silverlight 3でTreeViewがサポートされました。デフォルトでは参照されないため、System.Windows.Controls.dllを参照に追加する必要があります。ItemsにはTreeViewItem以外も入れられますが、子ノードをぶら下げられるのはTreeViewItemだけです。以下は親ノ…

ListBoxのホイール対応

Silverlight 3でMouseWheelがサポートされたためListBoxをスクロールさせようとしましたが、Silverlight 2とは仕様が変わっていることに気付きました。Silverlight 2のListBoxのScrollViewerはVerticalOffsetがドット単位でしたが、Silverlight 3では行単位…

C#プログラマのためのF#入門

C# F#

C#経験者が手っ取り早くF#を使おうとすると、クラス定義の文法がかなり違うことに戸惑うと思います。そこでクラス定義を中心にC#からF#への変換方法をまとめました。 F# - 七誌の開発Wiki すべてのサンプルでC#とF#を併記しています。C#の知識を基にF#を使い…

Silverlight 3の追加点

Silverlight 3がリリースされました。標準的に使う以下のライブラリを調査しました。 mscorlib.dll System.dll System.Core.dll System.Net.dll System.Windows.dll System.Windows.Browser.dll System.Xml.dll Silverlight 2と比較して、100個のpublicなク…

Yellow for Silverlight

Cyanに引き続き、id:takuto_hさんの試作言語YellowをSilverlightに移植しました。Yellowのクラス構成もマップ化して分析しました。動作確認とソースのダウンロードは以下です。 Yellow for Silverlight Yellow クラスマップ YellowもCyanと同様に少しの修正…

Cyan for Silverlight

id:takuto_hさんのプログラミング言語CyanをSilverlightに移植しました。Cyanのクラス構成もマップ化して分析しました。動作確認とソースのダウンロードは以下です。 Cyan for Silverlight Cyan クラスマップ Cyanの外部でコンソールのエミュレーションを行…

XAPコンテンツの読み込み

ファイルのプロパティでビルドアクションをコンテンツにするとXAPファイルの中に埋め込まれます。XAPファイルをZIPとして展開するとファイルがそのまま出てきます。プログラムから読み込む方法は以下の通りです。 var uri = new Uri("foo.txt", UriKind.Rela…

コンソールのエミュレーション

Console.WriteLine()やConsole.ReadLine()で入出力を行うコンソールアプリケーションをSilverlightに移植するため、コンソールをエミュレートしてみました。サンプルの電卓プログラムです。 ⇒ 動作確認とソース※Silverlightにデフォルトでフォーカスを与える…

UML クラスマップ(参照関係)

クラスマップのUMLから参照関係をたどれるようにしました。具体的には、あるクラスがどのクラスのメンバとして含まれているかを調べることができます。 ⇒ 動作確認とソースSilverlight 2で開発していますが、先日リリースされたSilverlight 3でも動作を確認…

イベントキューの処理

ListBoxに大量のデータを挿入すると時間が掛かります。挿入過程を表示させて進捗確認できるようにしたかったのですが、イベントキューを処理するまでは表示に反映されません。Windows FormsではApplication.DoEvents()でイベントキューを処理することができ…

UML クラスマップ

クラスのメンバをUMLのクラス図で表示できるようになりました。メソッドやプロパティがどの階層で実装されているのか一目で分かります。クラスやメンバをダブルクリックすると別ウィンドウでMSDNのリファレンスが開きます(ジェネリック型を除く)。 ⇒ 動作…

クラスマップ

Silverlightでクラスマップを作成しました。ライブラリの全体像を俯瞰できるかもしれません。 クラス名(名前空間なし)のリスト 継承関係のマップ 名前空間のマップ メンバのリスト マップの操作方法は以下の通りです。 ドラッグ(左ボタン):スクロール …

クラスツリー(平面化)

クラスツリーを横方向にも展開しました。 ⇒ 動作確認とソース今までの縦長のものに比べて見やすくなっていると思います。

クラスツリー(線種選択)

昨日のクラスツリーは放射状に線が引かれていましたが、直線状が選択できるようにしました。 ⇒ 動作確認とソース縦に長すぎるためレイアウトを工夫してみます。

クラスツリー

Silverlightのクラス継承関係をツリー表示しました。 ⇒ 動作確認とソース ドラッグ(左ボタン):スクロール ダブルクリック(左ボタン):全体表示 ホイール回転:拡大・縮小 あまり継承関係が深くないのは意外でした。

値型と副作用

C# F#

F#で値型の操作に失敗してハマりました。 ※以下のプロンプトはid:n7shi:20090612のセミコロン省略版fsiを使用しています。 > let r=Rect() val r : Rect > r.Union(Rect(1.0,1.0,2.0,2.0)) val it : unit = () > r.ToString() val it : string = "0,0,0,0" U…

選択・移動・ズーム

Silverlightは左クリックしかサポートしていません。ホイールはHTMLからイベントを取れば扱えます。右クリックはWindowlessモードにすればHTMLからイベントが取れるようになります。ですがWindowlessモードはIMEがサポートされないなど制限があるため、なる…

イベントがすり抜ける

XAMLなしの以下のようなコードで、Pageにイベントが来なくてハマりました。 public class Page : UserControl { public Page() { MouseLeftButtonDown += (sender, e) => Debug.WriteLine("Page"); } } 何か置かないといけないのかと思ってCanvasを置いてみ…

ListBoxのダブルクリック

ListBoxのアイテム上でクリックしてもMouseLeftButtonDownイベントが起きません。これはListBoxItemの中でイベントが片付けられてしまうためです。WPFの場合はPreviewMouseLeftButtonDownで回避できますが、Silverlightにはありません。そのためListBoxItem…

四角と文字

昨日までWPFでやっていたことをSilverlightに移植しました。⇒ 動作確認とソースWPF版との違いは以下の通りです。 対話環境 ⇒ プログラム Window ⇒ Page MouseDown/MouseUp ⇒ MouseLeftButtonDown/MouseLeftButtonUp プロジェクトの作成方法は以下の通りです。

ファイルの遅延レンダリング

C#

ネットワークファイルシステムのクライアント(FTPソフトなど)からExplorerにドラッグ&ドロップでファイルをコピーするため、ドロップ後にダウンロードしながらコピーさせたいことがあります。これを遅延レンダリングと呼びます。C#で遅延レンダリングをな…

二重起動禁止と通知

C#

アプリケーションを起動させたときに、既に同一のアプリケーションが起動していればそちらに引数を通知してすぐに終了することで、常に1つのプロセスがすべての処理を行うタイプのアプリケーションがあります。VB.NETではVBアプリケーションモデルとしてこの…