Edit Box Object がいろいろokasii件



同期処理だと Beep とか Sleep みたいに処理が終了するまでアプリケーションの動作を停止させてしまうのでゲーム中に同期処理をこなすような場合、普通に考えたら不都合が多い。

HTTP GET を作っていて、スレッドを新しく作って処理するかなにかしないと同期処理になってしまう。

この時ふと別のことに気がついたのだが Edit Box はなんか変な仕様がある。たとえばスクロールバーを出してそれを操作してる間はエディットはスクロール処理されるけど、それ以外のオブジェクトは動きを完全に止めてしまう。つまりエディットボックスの処理が終わるまで CF25 アプリ本体に処理が回らないのだ。

エディットボックスから扱っている文字列の扱いも一部おかしいというか、取得し表示してる文字列についてデバッガで見てると明らかに途中で値が取れなくなってる。暗黙の文字数制限があるようで、少なくとも表示できているけどデバッガからは完全な文字列を取得できない。

あと、長い文字列の場合勝手に Line Break が指定される場合もあって、変な所で改行されたりする。自動文字寄せ処理なのかなとも思ったがなんか違う。そもそもそんな設定は無い。

他にもいろいろある文字列に関する制限

String の各パラグラフに登録できる文字数制限は事実上無いみたいなのだけど、その制限が無いのはアプリケーションをフレームエディタから編集してるときに各パラグラフに直接文字を代入した時だけ有効。

アプリとして起動直後からイベントを駆使して文字数制限以上の文字列を送信しようと思ったらそれはできない。どうもこれは仕様らしい。

エクスプレッションエディタで 257 文字以上の文字列を登録しようとしてもできないのは仕様だが、エディットボックスが 257 文字以上の文字列を保持している場合、エクスプレッションエディタからエディットボックスの文字列を取得することはできる。別オブジェクトが保持している変数の文字数を事前に文字数カウントできないので、通してしまうようだ。この方法を使うとエラーも無くエクスプレッションエディタ上の仕様よりも多い文字数の文字列を送信する指定もできるが、実際に文字列がどうなるかは送ってみないとわからない。オブジェクトによっては表示できたり、あるいは表示出来なかったりするかもしれない。

他にも Get object から POST できる文字数にも制限があるけど、HTML5 などエクスポータでは文字数制限が無いので送信できる場合がある。文字数とか文字列とか文字表示に関するオブジェクトは仕様がいろいろ辻褄があってないことが多い気がする。

その他、文字数に関する謎の変態仕様

エクスプレッションエディタで文字列変数等にアクションから登録できる文字数制限は 257 文字までと言ったが、「+」演算子を使って文字列を連結する式を使うと 257 文字 + 224 文字の合計 481 文字がひとつのアクションで実行できる最大の文字数となる。

この方法を駆使して文字列変数+文字列変数を使えば次の 1 アクションで簡単に10 倍以上に文字数を増やせるので、複数アクションを駆使して文字列を連結すれば扱える文字数は非常に大きなものでも大丈夫ということになる。

つまり文字は一応動的に領域確保されるため連結を駆使すれば文字数には実質的な制限が無くなる。ただしこの膨大な文字列を一括して表示するためにはエディットなど別オブジェクトを使う以外に手段が無い。

すべてのオブジェクトが文字数制限無いわけではなく、オブジェクトごとに仕様が異なると思って良い。エクスポータを利用した場合にも同じことが言える。そして致命的なのは基本的にエラーを吐かない CF25 の仕様があるため、扱いきれない文字数を渡されても平気な顔で動いてるオブジェクトがあるけど、実は平気なわけではなく勝手にそれぞれのオブジェクトの仕様に沿った形で多すぎる情報を切り捨てている場合がある。扱いきれないデータを渡されてアクセス違反で落ちる方がまだわかりやすいという場合がある。

そして肝心のデバッガが文字数については勝手に切り捨てして表示している代表格なので信用できない。

Leave a comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です