Monday, June 09, 2008

いろいろな形を描画する(Silverlight 入門) の続きです。

今回はPolylineとPolygonについて説明します。

Polyline

点と点とを直線でつないで描く図形をPolylineと呼びます。

PolylineのXAMLは下記のようになります。

<Polyline Points="100,100 100,250 250,250 250,100"
    Stroke="Black" StrokeThickness="10"/>

このXAMLを使用した実行結果はこちらです。

Pointsのところで各点の座標を指定します。

各点の指定方法は X1,Y1 X2,Y2 X3,Y3 Xn,Yn のように指定します。 各座標間はスペースで区切ります。

上記XAMLはX1,Y1は100,100、X2,Y2は100,250となります。

要素 Strokeは線の色を表し、StrokeThicknessは線の太さを表します。

Polylineは始点と終点を結んでも塗りつぶすことができないので注意してください。

Polygon

Polygonは、円でも矩形でもない多角形を記述する場合に使用します。(矩形を描くこともできますが、Rectangleを使用するのが一般的です)

PolygonのXAMLは下記のようになります。

<Polygon Points="100,100 100,250 250,250 250,100"
    Stroke="Black" StrokeThickness="10" Fill="LightBlue"/>

このXAMLを使用した実行結果はこちらです。

各点の指定方法はPolylineと同様に、X1,Y1 X2,Y2 X3,Y3 Xn,Yn のように指定します。 各座標間はスペースで区切ります。

上記XAMLはX1,Y1は100,100、X2,Y2は100,250となります。

要素 Strokeは線の色を表し、StrokeThicknessは線の太さを表します。またFillで作成した多角形の内部を塗りつぶします。

実は上記に示した、PolylineとPolygonの座標が全く同じであることに気づいたでしょうか?

PolylineとPolygonの違いは、始点と終点をつなぐかどうかという点にあります。

Polygonは自動で始点と終点を結ぶ線が作成され色を塗ることが可能という特徴があります。

Monday, June 09, 2008 10:36:00 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Sunday, June 08, 2008

Silverlightで描画可能な図形には、Ellipse, Line, Path, Polygon, Polyline, Rectangleがあります。

今回はEllipse, Line, Rectangleそれぞれについて説明したいと思います。

Ellipse

これは、このBlogでも何度も取り上げているのですが、改めて説明したいと思います。

EllipseのXAMLは下記のようになります。

<Ellipse Canvas.Left="30" Canvas.Top="30"
    Height="200" Width="200"
    Stroke="Black" StrokeThickness="10" Fill="Blue"/>

このXAMLを使用した実行結果はこちらです。

Ellipse は Width と Heightで指定した矩形に内接する円を描画します。このときWidthとHeightの比率が1:1の時に円、それ以外の比率で楕円となります。

Strokeは、円を縁取る線の色を表し、StrokeThicknessは線の太さ、Fillは円を塗りつぶす色となります。

Line

Lineは文字通り線を描画します。

LineのXAMLは下記のようになります。

<Line Canvas.Left="30" Canvas.Top="30"
  X1="50" Y1="50" X2="150" Y2="150"
  Stroke="Blue" StrokeThickness="5"/>

このXAMLを使用した実行結果はこちらです。

Lineは線ですので、始点(X1,Y1)から終点(X2,Y2)を指定することで描画することができます。

Strokeは線の色を表し、StrokeThiknessが線の太さを表します。

Rectangle

Retangleは矩形を描画します。

RectangleのXAMLは下記のようになります。

<Rectangle Canvas.Top="20" Canvas.Left="20"
    Width="100" Height="100" 
    Fill="Blue" Stroke="Red" StrokeThickness="3" />

このXAMLを使用した実行結果はこちらです。

Widthと(幅)とHeight(高さ)を指定して描画します。WidthとHeightの比率を1:1にすることで正方形を、それ以外の比率で長方形を描画することができます。

Fillで塗りつぶしの色、Strokeで線の色、StrokeThicknessで線の太さを表します。

Sunday, June 08, 2008 10:34:54 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Saturday, June 07, 2008

通常Silverlight表示エリアには、キャンバスを1つ用意します。

実は、このキャンバスオブジェクトは入れ子にして使用することが可能です。

下記は Canvasオブジェクトを入れ子にした例です。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="300" Height="300" Background="Gray">
    
    <Canvas
        Canvas.Left="50" Canvas.Top="50"
        Width="50" Height="50" Background="Red" />

    <Canvas
        Canvas.Left="150" Canvas.Top="50"
        Width="50" Height="50" Background="Red" />
</Canvas>

上記の場合は300x300のキャンバスオブジェクトの中に、50x50のキャンバスオブジェクトが2個配置してあります。実行結果はこちら

子のキャンバスオブジェクトの中でCanvas.LeftやCanvas.Topを使用していますが、これは親のキャンバスオブジェクトからの位置を表しています。

次に、この2つのキャンバスオブジェクトサイズを少し大きくして円を追加してみたいと思います。左側のキャンバスには青い円、右側には緑の円を追加しました。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="300" Height="300" Background="Gray">
    
    <Canvas
        Canvas.Left="20" Canvas.Top="50"
        Width="100" Height="100" Background="Red">
        
        <Ellipse
        Height="50" Width="50" Canvas.Left="0" Canvas.Top="0"
        Stroke="Black" StrokeThickness="3" Fill="Blue" />
        
    </Canvas>

    <Canvas
        Canvas.Left="140" Canvas.Top="50"
        Width="100" Height="100" Background="Red">
        
        <Ellipse
        Height="50" Width="50" Canvas.Left="0" Canvas.Top="0"
        Stroke="Black" StrokeThickness="3" Fill="Green" />
        
    </Canvas>
</Canvas>

上記を実行すると、各円は子のキャンバスのエリアの左上に表示されていることがわかります。実行結果はこちら

これは、Ellipseの要素Canvas.TopとCanvas.Leftが子のキャンバスを意味しているからです。

このように、各オブジェクトには親子関係があることを覚えておいてください。

一番外側のCanvasがおじいちゃん(おばあちゃん)、その中のCanvasがお父さん(お母さん)、一番内側のEllipseが子供といったところです。 

次に、子供のCanvasオブジェクトに追加した円(Ellipse)の移動についてみてみましょう。

左側に配置したCanvasにある円をキャンバスオブジェクト超えるあたりに配置したXAMLを準備してみました。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Width="300" Height="300" Background="Gray">
    
    <Canvas
        Canvas.Left="20" Canvas.Top="50"
        Width="100" Height="100" Background="Red">
        
        <Ellipse
        Height="50" Width="50" Canvas.Left="80" Canvas.Top="80"
        Stroke="Black" StrokeThickness="3" Fill="Blue" />
        
    </Canvas>

    <Canvas
        Canvas.Left="140" Canvas.Top="50"
        Width="100" Height="100" Background="Red">
        
        <Ellipse
        Height="50" Width="50" Canvas.Left="0" Canvas.Top="0"
        Stroke="Black" StrokeThickness="3" Fill="Green" />
        
    </Canvas>
</Canvas>

実行結果はこちらです。

これはEllipseの親であるCanvas(お父さん)の左上を起点として、X方向に80, Y方向に80動いており、クリッピングはされていません。

このように、各オブジェクトの移動範囲は、そのオブジェクトが属する親からの絶対移動となることも覚えておくと良いでしょう。

今回のサンプルはこちらからダウンロードできます。

Saturday, June 07, 2008 11:11:58 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Thursday, June 05, 2008

以前、HTMLにSilverlightを表示するには、下記のようなJScriptを準備し、幅と高さを設定することを説明しました。

function createSilverlightPlugin()
{  
    Silverlight.createObject(
        "sample4_1.xaml",               // xamlファイルの参照先
        parentElement,                  // 親要素の定義
        "sample4_1",                    // SilverlightプロジェクトのユニークID
        {                               
            width:'300',                // Silverlightオブジェクトの幅
            height:'300',               // Silverlightオブジェクトの高さ
            inplaceInstallPrompt:false, // インストールプロンプトを適所に表示するかどうか決定
            background:'#FF0000',       // 背景色
            isWindowless:'false',       // Windowlessモードによるプラグインを表示するかどうか決定
            framerate:'24',             // フレームレート最大値
            version:'1.0'               // Silverlightのバージョン番号
        },
        {
            onError:null,               // OnErrorのときのfunction名
            onLoad:null                 // OnLoadのときのfunction名
        },
        null);                          // イベントハンドラ名
}

上記の場合はHTMLに300x300のSilverlightオブジェクト表示エリアが作成されます。

Canvasオブジェクトもまた、サイズを設定することが可能です。

以下はCanvasのサイズを200x200(要素HeightとWidthを指定)にします。またCanvasエリアがわかるようにBackground要素を使用して背景色をGrayにしておきます。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="200" Width="200">

</Canvas>

そしてこのCanvasに、Canvasのサイズを超える円(300x300)を表示したらどうなるか実験してみたいと思います。

XAMLファイルは以下の通りです。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="200" Width="200">
    
    <Ellipse
    Height="300" Width="300"
    Stroke="Black" StrokeThickness="3" Fill="Blue" />
    
</Canvas>

実行結果はこちらを参照してください。

青がSilverlight表示エリア、灰色がCanvasです。

円のサイズはCanvasより大きいのですが、クリッピングされることなく表示されることがわかります。

では、次に円のサイズをSilverlight表示エリアよりも大きくしたらどうなるか実験してみたいと思います。

円のサイズを400x400にします。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="200" Width="200">
    
    <Ellipse
    Height="400" Width="400"
    Stroke="Black" StrokeThickness="3" Fill="Blue" />
    
</Canvas>

実行結果はこちらを参照してください。

ごらんの通り、Silverlight表示領域を超えた部分はクリッピングされます。

上記のことから

Cavasオブジェクトに追加したオブジェクトは、Canvasサイズより大きなものを表示することができるが、Silverlight表示領域を超えたものはクリッピングされる、ということがわかります。

サンプルは、こちらからダウンロードできます。

Thursday, June 05, 2008 10:49:26 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Wednesday, June 04, 2008

前回までの説明で、オブジェクトの配置方法についてはご理解いただけたかと思います。

今回はオブジェクトのZ-Order(前後関係)について説明したいと思います。

円や矩形、テキストなのオブジェクトは<Canvas>~</Canvas>に追加するのですが、複数のオブジェクトを追加する際は、一番最初に追加したオブジェクトが一番下に表示されます。

下記XAMLは2つの円(赤と青)が表示されるようになっていますが、最初追加した赤い円のオブジェクトが一番下に表示されます。

実行結果はこちらをご覧ください。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
    <Ellipse
    Height="100" Width="100" Canvas.Left="50" Canvas.Top="50"
    Stroke="Black" StrokeThickness="3" Fill="Red" />

    <Ellipse
    Height="100" Width="100" Canvas.Left="80" Canvas.Top="80"
    Stroke="Black" StrokeThickness="3" Fill="Blue" />
</Canvas>

このように通常は、追加した順にZ-Orderが設定されるのですが、ZIndex要素を使用することで、オブジェクトの追加順に関係なくZ-Orderを変更することができます。

下記はZIndex要素を指定して、先ほどのXAMLの赤と青の円のZ-Orderを変更しています。ZIndexは値が大きいほど上に表示されます。

実行結果はこちらをご覧ください。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
    <Ellipse
    Height="100" Width="100" Canvas.Left="50" Canvas.Top="50" Canvas.ZIndex="2"
    Stroke="Black" StrokeThickness="3" Fill="Red" />

    <Ellipse
    Height="100" Width="100" Canvas.Left="80" Canvas.Top="80" Canvas.ZIndex="1"
    Stroke="Black" StrokeThickness="3" Fill="Blue" />
</Canvas>

サンプルは、こちらからダウンロードできます。

Wednesday, June 04, 2008 10:12:59 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Tuesday, June 03, 2008

今回は、キャンバスへ追加したオブジェクトの配置について説明したいと思います。

キャンバスへ追加可能なオブジェクトは、Canvas.LeftおよびCanvas.Topで、配置位置を指定することが可能です。

Silverlightの座標系は、左上隅を起点(0,0)としており、左から右へ向かってXの値が増加、上から下へ向かってYの値が増加します。

では、実際にCanvas.LeftとCanvas.Topを使用して、円を配置してみましょう。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
    <Ellipse
    Height="100" Width="100" Canvas.Left="50" Canvas.Top="50"
    Stroke="Black" StrokeThickness="3" Fill="Blue" />
    
</Canvas>

上記は幅と高さがともに100の円を、キャンバスの左から50、上から50の位置に配置します。

このように、オブジェクトの配置位置はCanvas.LeftおよびCanvas.Topで指定します。

実行結果はこちら

サンプルは、こちらからダウンロードできます。

Tuesday, June 03, 2008 11:23:46 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Monday, June 02, 2008

Silverlightのオブジェクトを表示するには、XAMLファイルに表示内容を記述する必要があります。

そして、そのXAMLファイルには、少なくとも1つはキャンバスオブジェクトが必要です。

キャンバスオブジェクトは

<Canvas 
   xmlns="http://schemas.microsoft.com/client/2007"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

</Canvas>

のように記述し、<Canvas>~</Canvas>の間に描画する要素(円、矩形、テキストなどのオブジェクト)を追加していきます。

上記の<Canvas>~</Canvas>はお決まりですので、コピーして使うとよいでしょう。

今回はsample2というフォルダを作成して、前回使用したファイル群をコピーしXAMLファイルだけ入れ替えて使用したいと思います。

オブジェクトの追加方法を練習するために、キャンバスに円を描いてみたいと思います。

まずは円を描くために<Ellipse>を追加します。

XAMLファイルを下記のようにしてください。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    
    <Ellipse
    Height="100" Width="100"
    Stroke="Black" StrokeThickness="3" Fill="Blue" />
    
</Canvas>

<Ellipse>タグの要素について説明します。

Heightは円の高さ、Widthは円の幅を表しており、現在は1:1で指定しているので円になります。比率を変えることで楕円を描くこともできます。

Strokeは線の色を表します。

StrokeThicknessは線の太さを表します。

Fillは塗りつぶしの色を表します。

このように、表示するオブジェクトは<Canvas>~</Canvas>に追加するということを覚えておいてください。

今回のサンプルの実行結果はこちらで確認することができます。

今回のサンプルファイルのダウンロードはこちらからどうぞ。

Monday, June 02, 2008 10:10:08 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback
Friday, May 30, 2008

今回はSilverlightアプリケーションの開発手法について説明したいと思います。

前回の説明で、開発に必要なランタイムとSDKのインストールについて説明しました。

このほかにSilverlightの開発はテキストエディタが必要ですので、各自使い慣れているものをご使用ください。

1)開発単位ごとにフォルダを作成する

 Silverlightアプリケーションを開発する際には、アプリケーション単位ごとにフォルダを分けることをおすすめします。

 今回はSampleというフォルダを準備し、そこへファイルを作成していきます。

2)Silverlight.jsファイルを準備する

 Silverlightアプリケーションには、Silverlight.jsファイルが必要です。

 このファイルは、C:\Program Files\Microsoft Silverlight 1.0 SDK\Tools\Silverlight.js\localized の中にある Silverlight.ja-jp.js をコピーし、ファイル名をSilverlight.jsに変更します。

3)基本となるHTMLファイルを作成する

 次にHTMLファイルを作成します。下記は基本となるHTMLファイルです。

 <Title>~</Title>タグは、ご存じの通りWebブラウザに表示されるタイトルですので、任意に変更してください。

 4行目は 2)でコピーしてきたJScriptファイルです。

 5行目のcreateSilverlight.jsというファイルは、実際に表示されるSilverlightアプリケーション本体ファイルです。このファイルは自分で作る必要があります。ファイル名は任意で指定してかまわないのですが、これはMicrosoftの例に倣ってcreateSilverlight.js としています。

 2)でコピーしたファイル(Silverlight.js)は文字コードがutf-8となっています。このJScriptを正しく使用するために6行目が必要となります。

 下記を Sample.htm として Sampleフォルダに文字コードutf-8で保存してください。

<html>
  <head>
    <title>はじめての Silverlight</title>
    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript" src="createSilverlight.js"></script>
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
  </head>
  <body>
  </body>
</html>

4)基本HTML内にSilverlightが組み込まれるエリアを作成する

 先ほどの基本HTMLをWebブラウザで表示するだけでは、Silverlightアプリケーションとして成り立ちません。

 Silverlightが組み込まれるエリアとSilverlightオブジェクトを生成するためのスクリプトを追加する必要があります。

 4-1)Silverlightを組み込むエリアの作成

 Silverlightを組み込むエリアを作成するには<div>タグを使用して下記のように記述します。

  タグ内の「sampleHost」は、任意に名前を付けてかまいません。

<div id="sampleHost"></div>

 4-2)Silverlightオブジェクトを生成する関数を呼び出すスクリプトを追加する

 次にSileverlightオブジェクトを生成するために次のようなスクリプトを追加します。

 getElementByIdで指定している「sampleHost」という名前は4-1)で指定したものと同じである必要があります。

 また、3行目でcreateSilverlightPluginという関数を呼び出していますが、この関数で実際にSilverlightプロジェクトを生成します。この関数は createSilverlight.js に記述します。

<script type="text/javascript">
    var parentElement = document.getElementById("sampleHost");
    createSilverlightPlugin();    
</script>

ここまでをまとめるとSample.htmは下記のようになります。

<html>
  <head>
    <title>はじめての Silverlight</title>
    <script type="text/javascript" src="Silverlight.js"></script>
    <script type="text/javascript" src="createSilverlight.js"></script>
    <meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
  </head>
  <body>
    <div id="sampleHost"></div>

    <script type="text/javascript">
      var parentElement = document.getElementById("sampleHost");
      createSilverlightPlugin();    
    </script>
  </body>
</html>

5)Silverlightオブジェクト本体を生成するJScriptファイルの作成

 次にSilverlightオブジェクト本体を作成するJScriptファイルですが下記のようにします。詳細については機会を改めて説明したいと思います。

 4行目はxamlファイルの参照先を示します。xamlファイルへは画像やアニメーションの設定などを記述します。

 6行目はSilverlightのプロジェクトのIDで任意に名前を付けることができますがユニークな値にする必要があります。また、ここで設定したユニークIDは3)で作成したHTMLファイルのDIVタグと連動させる必要があります。 今回ユニークIDを"sample"としているので、Sample.htmのDIVタグのIDを"sampleHost"としています。このように ユニークID + Host とする必要があることを覚えておいてください。

 8行目と9行目は、Silverlightオブジェクトの表示エリアとなります。

 14行目はSilverlightのバージョン番号を表しており、1.0を指定します。 

function createSilverlightPlugin()
{  
    Silverlight.createObject(
        "sample.xaml",                  // xamlファイルの参照先
        parentElement,                  // 親要素の定義
        "sample",                       // SilverlightプロジェクトのユニークID
        {                               
            width:'300',                // Silverlightオブジェクトの幅
            height:'300',               // Silverlightオブジェクトの高さ
            inplaceInstallPrompt:false, // インストールプロンプトを適所に表示するかどうか決定
            background:'#FF0000',       // 背景色
            isWindowless:'false',       // Windowlessモードによるプラグインを表示するかどうか決定
            framerate:'24',             // フレームレート最大値
            version:'1.0'               // Silverlightのバージョン番号
        },
        {
            onError:null,               // OnErrorのときのfunction名
            onLoad:null                 // OnLoadのときのfunction名
        },
        null);                          // イベントハンドラ名
}

6)XAMLファイル

今回は、簡単なXAMLファイルを準備しました。Hello, Silverlight World! と表示するだけのもです。

XAMLの要素についても機会を改めて説明したいと思います。

<Canvas
    xmlns="http://schemas.microsoft.com/client/2007"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <TextBlock >Hello, Silverlight World!</TextBlock>
</Canvas>

7)実行

 上記のファイルをすべてSampleフォルダへ保存したら Sample.htm をダブルクリックして実行してみましょう。

 実行結果は、こちらとなります。

 今回紹介したファイルは、こちらからダウンロード可能です。

 もしもこのサンプルをローカルではなくWebサーバー上に配置して実行したときに Hello, Silverlight World! という文字が表示されない場合はMimeタイプの設定が必要です。その際、拡張子を.xaml、Mimeタイプはapplication/xaml+xml とする必要があります。

 

Friday, May 30, 2008 9:47:52 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback

少しずつですがSilverlightについても取り上げていきたいと思います。

まずは、開発環境の構築について説明したいと思います。

1)ランタイムのインストール

 Silverlight アプリケーションを動作させるにはランタイムが必要です。 Microsoftのページからインストールを行ってください。

2)SDKのダウンロードとインストール

 次にSDK(Software Development Kit)をダウンロードしてインストールを行います。

 ダウンロードはこちらからどうぞ。

 次にインストールですが、ダウンロードしてきた Silverlightv1.0SDK.msiをダブルクリックし、メニューに従ってインストールしてください。

1)[Next]ボタンをクリック

2)[I Agree]を選択して[Next]をクリック

3)インストール先を選択して[Next]をクリック

4)[Install]をクリック

5)Visual Studio 2005で開発を行いたい場合は[Install]をクリック。必要ない場合は[skip]ボタンをクリックして8)へ

6)[Next]ボタンをクリック

7)[Finish]ボタンをクリック

8)[Finish]ボタンをクリック

Friday, May 30, 2008 3:50:43 PM (Tokyo Standard Time, UTC+09:00)  #    Comments [0]  |  Trackback

Theme design by Jelle Druyts

Pick a theme: