OpenLaszloアドバンスド・テクニック(3) Page 4/4
リアルタイム株価チャートの基盤フレームを作る
ネットエイト
小野 圭二
2006/6/7
■最後の仕上げとWebブラウザでの動作確認
ここまでできたなら、全体の動きを確認してみます。「チャート表示ビュー」にある3つのビューをチェックボックスと連動させます。<chartview>の各タグに該当するチェックボックスとの状態により、表示/非表示を切り替えるようにvisible属性を設定します(リスト9)。
さらにもう1つ、現状では<chartview>タグの各ビューはcanvas内を自由にドラッグ移動できます。ここで移動範囲を制限してみましょう。まずは上下(y軸)方向に制限を付けます。chartviewクラスにリスト10のコードを追加します。
<chartview name="candlechart" ……略……
visible="${canvas.cont.chartselect.cs1.value}"/>
<chartview name="realtimechart" ……略……
visible="${canvas.cont.chartselect.cs2.value}"/>
<chartview name="datalist" ……略……
visible="${canvas.cont.chartselect.cs3.value}"/> |
リスト9 チャート表示ビューとチェックボックスの連動 |
<method event="ony">
<![CDATA[
var upper_y = 0;
var lower_y = canvas.height;
var now_y = this.y;
var height = this.height;
if( now_y < upper_y )
this.setAttribute( 'y', upper_y );
if( lower_y < (now_y+height) )
this.setAttribute( 'y', lower_y-height );
]]>
</method> |
リスト10 上下(y軸)方向の移動範囲を制限 |
コンポーネントのyポジションが変化すると「ony」というイベントが発生します。同じく横(x軸)方向の制限は「onx」を使ってリスト11のようにできます。
<method event="onx">
<![CDATA[
var left_x = 0;
var right_x = canvas.width;
var now_x = this.x;
var width = this.width;
if( now_x < left_x )
this.setAttribute( 'x', left_x );
if( right_x < (now_x+width) )
this.setAttribute( 'x', right_x-width );
]]>
</method> |
リスト11 横(x軸)方向の移動範囲を制限 |
ここまでのコードはリスト12のようになっているはずです。これを実行したものが、図5〜7になります。チェックボックスのチェック状態によって各チャートビューの表示/非表示が切り替わること、表示されているチャートビューがドラッグ移動できることを確認してください。
|
図5 初期の実行画面
(画像をクリックすると拡大します)
|
|
図6 「銘柄選択」を実行したときの画面
(画像をクリックすると拡大します) |
|
図7 すべてのチェックボックスを選択したときの画面
(画像をクリックすると拡大します) |
<?xml version="1.0" encoding="UTF-8" ?>
<canvas>
<dataset name="meigara">
<company id="1">(株)ABC社</company>
<company id="2">(株)XYZ社</company>
</dataset>
<class name="chartview"
onmousedown="bringToFront();drg.apply()"
onmouseup="drg.remove()">
<dragstate name="drg"/>
<method event="ony">
<![CDATA[
var upper_y = 0;
var lower_y = canvas.height;
var now_y = this.y;
var height = this.height;
if( now_y < upper_y )
this.setAttribute( 'y', upper_y );
if( lower_y < (now_y+height) )
this.setAttribute( 'y', lower_y-height );
]]>
</method>
<method event="onx">
<![CDATA[
var left_x = 0;
var right_x = canvas.width;
var now_x = this.x;
var width = this.width;
if( now_x < left_x )
this.setAttribute( 'x', left_x );
if( right_x < (now_x+width) )
this.setAttribute( 'x', right_x-width );
]]>
</method>
</class>
<class name="chkb" extends="checkbox"
fontsize="14" visible="false">
<method event="onclick">
Debug.write( this.text + ":" + this.value );
</method>
</class>
<!--
銘柄、表示チャート選択ビュー
-->
<view name="cont" width="${canvas.width}"
height="${canvas.height*0.2}">
<simplelayout axis="x"/>
<!-- 銘柄選択 -->
<view name="stocklist" width="${parent.width*0.4}"
height="${parent.height}" bgcolor="red">
<text x="50" y="20" fontsize="14">銘柄:</text>
<combobox name="cbox" x="90" y="20"
defaulttext="銘柄選択" editable="false">
<textlistitem datapath="meigara:/company"
text="$path{'text()'}" value="$path{'@id'}"/>
<method event="onselect">
var obj = this.getSelection();
var id = obj.getValue();
Debug.write( "id: " + id );
with( canvas.cont.chartselect ){
if( !cs1.visible ){
for( var i=0; i<subviews.length; i++ ){
subviews[i].setVisible( true );
}
cs1.setValue( true );
}
}
</method>
</combobox>
</view>
<!-- 表示チャート選択 -->
<view name="chartselect" width="${parent.width*0.6}"
height="${parent.height}" bgcolor="green">
<chkb name="cs1" x="10" y="10"
text="ローソク足・出来高チャート"/>
<chkb name="cs2" x="10" y="30"
text="当日株価チャート"/>
<chkb name="cs3" x="10" y="50"
text="過去株価一覧"/>
</view>
</view>
<!--
チャート表示ビュー
-->
<view name="chartarea" y="${parent.cont.height+1}"
width="${canvas.width}" height="${canvas.height*0.8}">
<!-- ローソク足・出来高チャートビュー -->
<chartview name="candlechart" x="0" y="0"
width="${parent.width/2}"
height="${parent.height/2}"
bgcolor="blue"
visible="${canvas.cont.chartselect.cs1.value}"/>
<!-- リアルタイム株価チャートビュー -->
<chartview name="realtimechart"
x="${parent.width/2}" y="0"
width="${parent.width/2}"
height="${parent.height/2}"
bgcolor="silver"
visible="${canvas.cont.chartselect.cs2.value}"/>
<!-- 株価一覧ビュー -->
<chartview name="datalist" x="0" y="${parent.height/2}"
width="${parent.width}"
height="${parent.height/2}"
bgcolor="yellow"
visible="${canvas.cont.chartselect.cs3.value}"/>
</view>
</canvas> |
リスト12 完成したコード |
◇
今回はリアルタイム株価チャートの基盤部分を作成しました。次回は「チャート表示ビュー」に各コンポーネントを配置します。お楽しみに。(次回へ続く)
|
4/4 |
|
INDEX |
OpenLaszloアドバンスド・テクニック(3)
リアルタイム株価チャートの基盤フレームを作る |
|
Page1
はじめに
アプリケーションの設計条件
株価チャートのおさらい
アプリケーションの画面設計 |
|
Page2
画面モデルビューの作成 |
|
Page3
ビューへのコンポーネント配置 |
|
Page4
最後の仕上げとWebブラウザでの動作確認 |