平成16年10月28日(木):初稿 平成17年 1月 8日(土):更新 |
文字数リアルタイム表示とは 私は、ミニコミ雑誌に原稿を依頼されることがあります。この場合、雑誌によって字数が制限されます。字数制限がある原稿の場合、現在書いている文字数をリアルタイムで知りたいと思うことがあります。 残念ながら、ワープロには、このリアルタイム字数表示機能がついたものを知りません。 そこで桐のフォームに文字数のリアルタイム表示機能をつけられないものか考えました。 桐には#文字数と言う関数があり、これによって項目内文字数を読み取り、表示することが出来ます。しかし、これは確定表示モードにして初めて機能します。 欲しいのは書いている途中で、いちいち表示モードにしないで訂正モード中にリアルタイムで文字数を表示出来る機能です。 自分なりに考えてみましたが、結局、歯が立たず、【多遊】さんの掲示板に質問投稿しました。 そこで悲しげさんにご教示頂いたのが、以下のイベントです。 手続き定義開始 t本文::編集文字列変更() 変数 自動,文字列{&編集字} メソッド呼び出し @t本文.編集文字列取得(&編集字) &文字数=#文字数(&編集字) if(&文字数>1500) /*&文字数が1500字を越えた場合*/ 確認 "文字数が1500を超えました!これ以上入力できません" &編集字=#部分列(&編集字,1,1500),&文字数=#文字数(&編集字) メソッド呼び出し @t本文.編集文字列設定(&編集字) end メソッド呼び出し @t文字数.再描画(0) メソッド呼び出し @フォーム.変数変更() 手続き定義終了 先ず文字数をリアル表示する項目のテキストオブジェクト名t本文の編集文字列変更イベントをチェックします。 ヘルプによると、[編集文字列変更]イベントは、[テキストボックス]または[グループ項目]オブジェクト内の編集文字列が変更されたときに発生するイベントで、 編集文字列が変更されるたびに、繰り返し発生します。 編集文字列が変更されるということは、おそらく編集文字列が、追加或いは削除されて文字数が変更された場合も含むものとおもわれます。 次に文字列型変数の&編集字を作成し、編集文字列が変更されたかどうかを調べるには、このハンドラ内で[編集文字列取得]メソッドを実行します。 変数 自動,文字列{&編集字} メソッド呼び出し @t本文.編集文字列取得(&編集字) この記述で、t本文即ち[本文]内の編集文字列を&編集字に代入できます。 そして編集文字列が代入された&編集字の文字数をカウントするのが &文字数=#文字数(&編集字) で、&文字数という変数に&編集字の文字数が代入されます。 尚、&文字数は、メイン部分で宣言して作成済みです。 &文字数の表示は、t文字数というテキストボックスを配置しておき、このソースとして&文字数を入れておきます。ここに入力毎にリアルタイムに変化する文字数が表示されます。 制限文字数を1500字とした場合、それを超えて場合は、超えた部分が表示されないようにする記述が以下の部分です。 if(&文字数>1500) 確認 "文字数が1500を超えました!これ以上入力できません" &編集字=#部分列(&編集字,1,1500),&文字数=#文字数(&編集字) メソッド呼び出し @t本文.編集文字列設定(&編集字) end この記述の内 if(&文字数>1500) 確認 "文字数が1500を超えました!これ以上入力できません" によって、1500字を超えたことが警告されます。 又、 &編集字=#部分列(&編集字,1,1500),&文字数=#文字数(&編集字) メソッド呼び出し @t本文.編集文字列設定(&編集字) によって、&編集字に1文字から1500文字目までを代入し、&文字数に1500文字を代入し、[本文]オブジェクトの編集文字列を1500字を超える部分を削除された&編集字のデータに置き換えます。 これにより1501文字目以降を削除したことになります。 そして メソッド呼び出し @t文字数.再描画(0) によって、リアルタイム文字数を表示するテキストボックスのt文字数が再描画され、 メソッド呼び出し @フォーム.変数変更() によって、変数を使用しているフォーム上のオブジェクトを、すべて再描画するよう予約し、予約した再描画は、イベントハンドラがすべて終了したときに実行されます。 以上:1,826文字
|