以前の投稿でボタンの同時押しイベントに言語レベルで対応していないことを書いたが、KeyUpとKeyDownイベントをハンドルできるのでコンポーネントで実装してしまえば良いだろうということで作り始めた。
これまでKeyUpとKeyDownイベントを使ったことが無かったので、まずは簡単なサンプルから作り始め、最終的にはすぐに使えるコンポーネントとして公開する予定。その頃にはSDK2.0がDoja対応していることに期待。
基本的にはこれまで使ってきたonSelectイベントと使い方は同じで、ボタンを押したとき、離したときにイベントが発生する。
ソースコードをそのまま掲載するが、重要なのは太字部分。どのボタンに対してイベントが発生したのか、関数を使って取得している。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ujml PUBLIC "-//UIEVOLUTION//DTD UJML 1.5//EN" "../ujml.dtd" [
]>
<!-- http://uienginda.blogs.com UJMLサンプル128:KeyUp & KeyDown -->
<ujml>
<application>
<state-variables>
<state-var name="sLabel" type="boolean"/>
</state-variables>
<variables>
<var name="mLabelText" type="string"/>
</variables>
<script>
sLabel = true;
</script>
<states>
<state var="sLabel">
<transition value="true">
<display>
<label>
<text><eval>mLabelText</eval></text>
<fg>&_COLOR_WHITE;</fg>
<bg>&_COLOR_BLACK;</bg>
<size>&_FONT_SIZE_SMALL;</size>
</label>
<box>
<event name="onKeyDown">
<variables>
<var name="key" type="string"/>
</variables>
<script>
key = _getStringEventData(&_EVENT_STRING_ONKEY;);
mLabelText = _strcat("KeyDown:",key);
_clear_state(sLabel);
sLabel = true;
</script>
</event>
</box>
<box>
<event name="onKeyUp">
<variables>
<var name="key" type="string"/>
</variables>
<script>
key = _getStringEventData(&_EVENT_STRING_ONKEY;);
mLabelText = _strcat("KeyUp:",key);
_clear_state(sLabel);
sLabel = true;
</script>
</event>
</box>
</display>
</transition>
</state>
</states>
</application>
</ujml>
UIEngine/UJML 初心者の方にお勧めのページ:
・初心者向けまとめページ
・初心者向けカテゴリ
その他の初心者向けのサンプル:
・UJMLサンプル052:超基礎:HELLO WORLD! その1
・UJMLサンプル053:超基礎:HELLO WORLD! その2 文字の色を指定
・UJMLサンプル056:超基礎:HELLO WORLD! その3 文字の色を指定 ENTITYを使う
・UJMLサンプル057:超基礎:HELLO WORLD! その4 文字の色を指定 変数から文字の色指定をする場合
・UJMLサンプル091:超基礎:HELLO WORLD! その5 ラベルの背景も指定する