UJMLサンプル055:ミラクルな_link()を使いこなそう(2006/02/21)
タイトルは「使いこなそう」と書いてあるが、まだ使いこなせてはいない。
ところで、先日「無理矢理ウェブサーバーとの通信を実現するには?」で紹介したが、今回紹介する_link()を使うことでクライアントとサーバーとの通信を実現させることも可能だ。
この_link()という関数は、簡単に説明すると「_link()で指定した先にあるファイルをメモリ上に読み込んで動作させることができる。」というものだ。
例:
_link("PublicString","http://www.uiengineda.com/samples_055_PublicString.ujbc");
といった具合にWEB上のどこかに配置されているujbcファイル(コンパイル済みのUJML)をメモリ上に読み込むことができる。
紹介するサンプルでは、「どこかに配置されているujbcファイル」の中にある文字列を、クライアント側で表示するサンプルだ。
ポイントは、2箇所、これを間違わなければ_link()の使い方も特に問題は無いだろう。
ポイント1.変数のaccess指定を正しくすること。
<state-var name="sLabel" type="boolean" access="export"/>
<var name="mSharedMessage" type="string" access="export" />
ポイント2._link()を使うこと。
_link("PublicString","http://www.uiengineda.com/samples_055_PublicString.ujbc");
※実は、基本的に非同期で通信するために、より複雑な処理を行わせるときにはロードされたタイミングをきっちり把握したコードを書かなければならないが、その辺のこつは追って紹介できたらと考えている。
★---コード(クライアント側)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.5//EN"
"http://www.uievolution.com/dtd/ujml-1.5.dtd" [
<!ENTITY SPACING "4">
]>
<!-- http://uienginda.blogs.com -->
<ujml>
<application>
<state-variables>
<state-var name="sLabel" type="boolean" access="export"/>
</state-variables>
<variables>
<var name="mScrWidth" type="int"/>
<var name="mScrHeight" type="int"/>
<var name="mWidth" type="int"/>
<var name="mHeight" type="int"/>
<var name="mPosX" type="int"/>
<var name="mPosY" type="int"/>
<var name="mLabelHeight" type="int"/>
<var name="mSharedMessage" type="string" access="export" />
</variables>
<script>
<!-- 画面の幅と高さ -->
mScrWidth = _getIntProperty(&_PROPERTY_INT_SCREEN_WIDTH;);
mScrHeight = _getIntProperty(&_PROPERTY_INT_SCREEN_HEIGHT;);
<!-- 文字の高さを取得する。とりあえず2行表示分確保 -->
mLabelHeight = (&SPACING; * 2) +
_text_height(&_FONT_SIZE_MEDIUM;, &_FONT_STYLE_PLAIN;,
&_FONT_FACE_SYSTEM;) * 2;
<!-- 画像の表示位置を指定 -->
mPosX = 0;
mPosY = mLabelHeight;
<!-- _link("PublicString","build/samples_055_PublicString.ujbc"); -->
_link("PublicString","http://www.uiengineda.com/samples_055_PublicString.ujbc");
</script>
<states>
<state var="sLabel">
<transition value="true">
<display>
<multi-label>
<text><eval>mSharedMessage</eval></text>
<x>0</x>
<y>0</y>
<width><eval>mScrWidth</eval></width>
<height><eval>mLabelHeight</eval></height>
<fg>&_COLOR_WHITE;</fg>
<bg>&_COLOR_BLACK;</bg>
</multi-label>
</display>
</transition>
</state>
</states>
</application>
</ujml>
★---コード(samples_055_PublicString.ujbcのもとになるUJML)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.5//EN"
"http://www.uievolution.com/dtd/ujml-1.5.dtd" [
<!ENTITY ORENO "俺の名はルパン三世">
]>
<!-- http://uiengineda.blogs.com -->
<ujml>
<partition>
<state-variables>
<state-var name="sLabel" type="boolean" access="import" />
</state-variables>
<variables>
<var name="mSharedMessage" type="string" access="import" />
</variables>
<script>
_trace("public strings");
mSharedMessage = "&ORENO;";
sLabel = true;
</script>
</partition>
</ujml>
コメント