Edittext UI コントロール

edittext コントロール は、テキストの入力や編集が可能なテキスト フィールドとして使用します。

構文は次のようになります。

edittext <name> [<caption>] [text:<string>] [fieldWidth:<integer>] [height:<integer>] [bold:<boolean>] [labelOnTop:<boolean>] [readOnly:<boolean>] [toolTip:<string>] [multiLine:<boolean>]

edittext 項目の位置合わせの既定値は、#left です。

パラメータ

text:   

編集ボックスのテキスト文字列です。パラメータに複数のテキスト行を指定するには、改行復帰(\r )と改行(\n)の両方のシーケンスを指定してください。たとえば、「最初の行 \r\n次の行」とします。

fieldWidth:

編集ボックスのピクセル幅です。既定では、幅は、キャプション テキストの直後からロールアウトの右マージンまでに設定されます。

height:

テキストの 1 行を超えるピクセル単位の高さを指定する editText 項目定義に対して、明示的な height: パラメータが指定されている場合、その editText 項目は複数行の編集ボックスになり(17 ピクセル)、複数行のテキストを入力できるようになります。

この動作をオーバーライドするには、multiLine を false に設定します。下記を参照してください。

警告:

editText の高さを 17 ピクセル以上に指定するか、.height の値に関係なく .multiLine を true として指定した場合は、editText が複数行モードになるため、on entered イベント ハンドラは呼び出されなくなります。

bold:

true に設定した場合、編集ボックス内のテキスト文字列は太字で表示されます。false に設定した場合、テキストは太字でない、標準の形式で表示されます。既定値は false です。

labelOnTop:

true に設定すると、キャプションが編集テキスト ボックスの上に配置されます。false に設定されている場合、または省略されている場合、キャプションは編集テキスト ボックスの左に配置されます。

readOnly:

true に設定されている場合、editText コントロールにテキストをコピー、貼り付け、あるいは入力ができません。false に設定されている場合、または省略されている場合は、editText コントロールにテキストを入力、コピーおよび貼り付けることができます。

toolTip:

EditText のツールチップに使用するテキストを提供します。指定しない場合、ツールチップは表示されません。3ds Max 2017 以降で使用可能です。

multiLine:

editText コントロールが複数行コントロールであるかどうかを指定します。この引数は、高さを 17 より大きい値にするとコントロールが自動的に複数行コントロールになるという動作を上書きします。そのため、たとえば、単一行が表示されている editText を複数行にしたり、逆に、高さが 34 より大きい editText を強制的に単一行コントロールにしたりできます。 3ds Max 2020.1 Update 以降で使用可能です。

プロパティ:

<edittext>.text String

編集ボックスのテキストです。パラメータに複数のテキスト行を指定するには、改行復帰(\r )と改行(\n)の両方のシーケンスを指定してください。たとえば、「最初の行 \r\n次の行」とします。

<edittext>.caption String

編集ボックスの横にあるオプションのキャプションのテキストです。

<edittext>.bold Boolean

true に設定した場合、テキストは太字で表示されます。false に設定した場合、テキストは太字でない、標準の形式で表示されます。

<edittext>.width Integer

edittext ウィンドウの幅をピクセル単位で取得/設定します。

<edittext>.height Integer

edittext ウィンドウの高さをピクセル単位で取得/設定します。

<edittext>.readOnly

true に設定されている場合、editText コントロールにテキストをコピー、貼り付け、あるいは入力ができません。false に設定されている場合、または省略されている場合は、editText コントロールにテキストを入力、コピーおよび貼り付けることができます。

イベント

on <edittext> changed <arg> do <expr>

編集ボックスのテキストをユーザが変更するたびに呼び出されます。<arg> には、編集ボックスの新しいテキストが入ります。

on <edittext> entered <arg> do <expr>

ユーザが編集ボックスにテキストを入力し、[Enter]または[Tab]を押してフィールドの外へカーソルを移動したときに呼び出されます。引数 <arg> には、編集ボックスの新しいテキストが入ります。

警告(前出の警告の繰り返し): editText の .height を 17 ピクセル以上に指定するか、.height の値に関係なく .multiLine を true として指定した場合は、editText が複数行モードになるため、on entered イベント ハンドラは呼び出されなくなります。

単一行モード(既定の高さ、または 17 ピクセル未満)では、編集ボックスに文字列を入力して[Enter]キーを押した場合、1 文字ごとに、または[Enter]キーを押すたびに 1 回、on changed ハンドラが呼び出されます。on enteredon entered は、[Enter] に対して 1 回だけ呼び出されます。

複数行モードの場合、[Enter]キーストロークによって 'on entered' ハンドラが呼び出されなくなりますが、編集ボックスに新しい行が挿入されます。

もちろん 'on changed' ハンドラは呼び出されます。これらのハンドラは、キーストロークのたびに呼び出されます。

複数行の editText 項目の場合は、[Tab]キーを押したり、編集ボックスの外をクリックして、編集ボックスがキーボード フォーカスを失ったときに、'on entered' ハンドラが呼び出されます。

例:

    rollout boxCreator "Box Creator"
    (
        --define an edittextwith width 100 and the label on top:
        edittext prefix_txt "Name prefix:" fieldWidth:200 labelOnTop:true
        --If the user entered a new name...
        on prefix_txt entered txt do
        (
        --And the name is not the empty string,
        if txt != "" do
            (
            --Create a new box at a random position
            --somewhere between the given coordinates:
            new_obj = box pos:(random [-100,-100,-100] [100,100,100])
            --Set the name of the new object to the prefix entered,
            --but add unique suffix to avoid duplicate names:
            new_obj.name = (uniquename txt)
            --And finally clear the edittext for a new entry
            --by assigning an empty string to the text property:
            prefix_txt.text = ""
            )
        )
    )

    createDialog boxCreator 300 60 --create a Dialog from the rollout

3ds Max 2015 以降、[Esc]キーを押すと、フォーカスが editText コントロールからその親ウィンドウに移動するようになりました。