« UJMLサンプル042:メッセージバー | メイン | UIEngine注目指数:2006年2月13日分[uiengine:9][ujml:5] »

UJMLサンプル043:メッセージバーティッカー(ステートマシン)(2006/02/15)

Samples_043_messagebarticker前回の「UJMLサンプル042:メッセージバー」は表示文字列が長すぎると全て表示されなかったが、文字がスクロールするようにしたものを紹介する。基本的には「UJMLサンプル038:ティッカー(横バー式)その2」をステートマシン化しただけのものだ。

もし、ステートマシン化について詳しく知りたい場合には、以下の投稿を参考にして欲しい。

ステートマシン化の例は

UJMLサンプル031:ステートマシン化の練習

で紹介した。また、使い方の例はサンプルの014-020で紹介したのでもしわからなかったら見て欲しい。

サンプル一覧

使う側:main.ujml
ステートマシン:bottommessagebarticker.ujms

としている。

★---コード(main.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" [
]>
<!-- http://uiengineda.blogs.com -->
<ujml>
    <application>
        <state-machines>
            <include file="components/bottommessagebarticker.ujms" state-machine="MessageBar" />
        </state-machines>
        <script>
            MessageBar.show("MessageBarを表示しています。");
            MessageBar.tick();
        </script>
    </application>
</ujml>

★---コード(bottommessagebarticker.ujms)
<?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">
    <!ENTITY MSEC_DELAY "200">
]>
<!-- http://uiengineda.blogs.com 画面の一番下にメッセージバーを表示する -->
<ujml>
    <partition>
        <state-machines>
            <state-machine name="MessageBar">
                <state-variables>
                    <state-var name="sMessage" type="boolean"/>
                    <state-var name="sTick" type="boolean"/>
                </state-variables>
                <variables>
                    <var name="mLabelHeight" type="int"/>
                    <var name="mMessage" type="string"/><!-- もともと表示すべきメッセージ -->
                    <var name="mMessageTemp" type="string"/><!-- バーに表示するメッセージ -->
                    <var name="mCt" type="int"/>
                </variables>

                <functions>
                    <function name="show" type="void" visibility="public">
                        <parameters>
                            <var name="message" type="string"/>
                        </parameters>
                        <script>
                            mLabelHeight = (&SPACING; * 2) + _text_height(&_FONT_SIZE_MEDIUM;, &_FONT_STYLE_PLAIN;, &_FONT_FACE_SYSTEM;);
                            mMessage = _strcat("          ",message);
                            sMessage = false;
                            sMessage = true;
                        </script>
                    </function>
                    <function name="tick" type="void" visibility="public">
                        <script>
                            mCt = 0;
                            sTick = false;
                            sTick = true;
                        </script>
                    </function>
                    <function name="hide" type="void" visibility="public">
                        <script>
                            sMessage = false;
                        </script>
                    </function>
                </functions>
                <states>
                    <state var="sTick">
                        <transition value="true">
                            <delay>&MSEC_DELAY;</delay>
                            <script>
                                sMessage = false;
                                if(mCt &_LT; _strlen(mMessage)-1){
                                    mCt++;
                                }else{
                                    mCt = 0;
                                }
                                mMessageTemp = _substring(mMessage,mCt,_strlen(mMessage)-1);

                                <!-- 何度も繰り返し出てくるようにした -->
                                if((_strlen(mMessage) - mCt) &_LT; 10){
                                    mMessageTemp = _strcat(mMessageTemp,mMessage);
                                }

                                sMessage = true;

                                sTick=false;
                                sTick=true;
                            </script>
                        </transition>
                    </state>
                    <state var="sMessage">
                        <transition value="true">
                            <display>
                                <box>
                                    <x>0</x>
                                    <y><eval>_getIntProperty(&_PROPERTY_INT_SCREEN_HEIGHT;) - mLabelHeight</eval></y>
                                    <width><eval>_getIntProperty(&_PROPERTY_INT_SCREEN_WIDTH;)</eval></width>
                                    <height><eval>mLabelHeight</eval></height>
                                    <fg>&_COLOR_BLACK;</fg>
                                    <bg>&_COLOR_BLACK;</bg>
                                    <label>
                                        <text><eval>mMessageTemp</eval></text>
                                        <x>&SPACING;</x>
                                        <y>&SPACING;</y>
                                        <fg>&_COLOR_WHITE;</fg>
                                        <bg>&_COLOR_BLACK;</bg>
                                    </label>
                                </box>
                            </display>
                        </transition>
                    </state>
                </states>
            </state-machine>
        </state-machines>
    </partition>
</ujml>

トラックバック

この記事のトラックバックURL:
https://www.typepad.com/services/trackback/6a00d8341c2e2e53ef00e550a1fe448834

UJMLサンプル043:メッセージバーティッカー(ステートマシン)を参照しているブログ:

コメント

この記事へのコメントは終了しました。