Ruby Freaks Lounge
第18回 Ruby on Railsで開発するSilverlightアプリケーション
前回のおさらい
前回記事はSilverlight,IronRubyの基本的な概念の説明と開発環境の紹介,動作確認までを行いました。今回は前回記事の最後で作成したHello Silverlightアプリケーションに簡単な修正を行い,基本的な機能を紹介していきます。
箇条書きで簡単にセットアップの手順をおさらいします。
- Ruby/Rails環境を準備(要rubyzipモジュール)
- SilverStarプラグインをインストール
- ./script/generate silverlight [name]を実行
- viewにインターフェイス要素を記述(拡張子xaml)
- controllerでrender_silverlightを行う
- app/silverlight/xxxx.rbにrubyでマネージコード(制御コード)を記述
- http://[host]/[path].xapにアクセスしてみる
準備
前回示したサンプルではrubyのマネージコードにバグがあっても真っ白になるだけです。この後の内容を読者の方に試していただくにあたって,デバッグの必要があります。Silverlightの呼び出し元になるHTMLを以下のように変更してください。
<div id='errorLocation'></div>
<object data="data:application/x-silverlight," type="application/x-silverlight-2" width="600px" height="400px">
<param name="initParams" value="debug=true, reportErrors=errorLocation" />
<param name="source" value="/silverlight/test/1.xap"/>
</object>
これで,もしrubyのマネージコードやXAMLの文法エラーがあった場合,errorLocationで示されたHTML要素にエラーメッセージが表示されます。
Silverlightアプリを作ってみる
この節ではSilverlightアプリの開発における基本的な要素について解説を行い,より詳しく知りたい方のためにリファレンスへのリンクを紹介します。
インターフェイス要素へのアクセス
Silverlightのインターフェイス要素には領域(Canvas),矩形(Rectangle),楕円(Elipse),画像(Image)などさまざまな要素があります。
まずは最も基本的な以下の処理を行います。
- UI要素に名前をつける
- 1.でつけた名前を使ってUI要素を呼び出す
- UI要素の属性を変更する
UI要素に名前をつけるには,x:Nameという属性を設定する必要があります。
<Canvas
x:Class="System.Windows.Controls.Canvas"
xmlns="http://schemas.microsoft.com/client/2007"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="600" Height="460"
Background="White"
x:Name="root">
<TextBlock x:Name="hello" Text="Hello! Silverlight!!" FontSize="64" />
</Canvas>
そして,マネージコードを以下のように変更します。
require "lib/silverlight"
require "mscorlib"
class App < SilverlightApplication
use_xaml(:type => Canvas, :name => "app")
def initialize
hello.text = "Hello! IronRuby!!"
end
end
$app = App.new
これで最初に表示される文字が「Hello! IronRuby!!」に変わります。
要素名をそのままメソッドにしてアクセスすることが可能です(これはプラグインの動作です)。hello.text="..."はhelloという名前が設定された要素のtext属性を置き換えています。Silverlight+IronRubyの環境ではhello.textはhello.Textとしても同じです。また,属性の指定ではobject.method_nameとobject.MethodNameは等価です。この記事ではobject.method_nameの形式を使います(※1)。
- ※1
- XAMLでは「Text」及び「PropertyName」の記述しか許されません。
require "lib/silverlight"
require "mscorlib"
class App < SilverlightApplication
use_xaml(:type => Canvas, :name => "app")
def initialize
name = "he" + "llo"
_(name).text = "Hello! IronRuby!!"
end
end
$app = App.new
上記は変数名を名前としてアクセスしています。これは最初の例と同じ挙動になります。
Silverlightで頻繁に使われる要素とリファレンスへのリンクをここで紹介します。リファレンスにあるサンプルコードはVB及びC#のものしかありません。しかし,ライブラリは共通ですので,クラス名,プロパティ名,メソッド名は同じものが使えます。適宜読み替えて活用してください。
- System.Windows.Shapes名前空間
- System.Windows.Controls名前空間
- System.Windows.Media名前空間
- System.Windows.Media.Animation名前空間
イベントハンドラ
クリック,ドラッグ&ドロップ,キーボードなどのユーザ入力を処理するためには イベントハンドラを利用します。イベントハンドラはマネージコードのどこでも設定することができます。
require "lib/silverlight"
require "mscorlib"
class App < SilverlightApplication
use_xaml(:type => Canvas, :name => "app")
def initialize
hello.mouse_left_button_down do |s, e|
s.text = "Click! Silverlight!"
end
root.key_down do |s, e|
hello.text = "Key pushed!" if e.Key = Input::Key.enter
end
end
end
$app = App.new
上記の太字部分がハンドラの記述です。これを実行すると,クリックと[enter]キーの入力で文字が変化します。
イベントハンドラに渡される2つの引数s, eのsはイベントを発生させたオブジェクト,eはイベントの引数(クリックした座標やキーの種類)です。eの内容はイベントの種類によって変わります。
入力に関するクラス(KeyEventArgsクラス,Key列挙体など)は,System.Windows.Input名前空間に含まれています。
Ruby Freaks Lounge
- 第35回 実用的なダミーサーバ ww(double-web)(1)
- 第34回 Redmineプラグイン開発(1)
- 第33回 RubyistのためのMongoDB入門(2)
- 第32回 Reactorで非同期処理をやってみよう(2)
- 第31回 RubyistのためのMongoDB入門(1)
- 第30回 RubyとHadoopで分散処理 Hadoop Streamingで外部データを読み込む
- 第29回 Reactorで非同期処理をやってみよう(1)
- 第28回 RubyとHadoopで分散処理 Hadoop Streamingの仕組み
- 第27回 RMagickを用いた画像処理:アニメGIF
- 第26回 RMagickを用いた画像処理(1)リサイズ


