みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
テキスト文字入力後、収まりきらない文字を"..."としたいと考えております。
ご教示の程どうぞ宜しくお願い致します。
Offline
そういう機能は組み込まれてません。
...を表示することでデータが変わってもいい、とは思えませんが、そうだとするとフィールド末端に...を表示するために別のオブジェクトを置くなど結構面倒な作業になりそうです。
少し実験してみたところ、フィールドからあふれてるときはフィールド枠が拡張されているのを検知する数式が、一時使えなくなってたと思ってたんですが19v4では使えるようです。
こんな感じで、レイアウト定義上のフィールド高さと、編集中の実際に表示されてるフィールド高さを比較して、onObjectExitのトリガスクリプトなどで文字列が隠れることを検知します。
Let ( [
b = FieldBounds ( "" ; Get(レイアウト名) ; "showDotsAfterOverflowedText::t" ) ;
h = MiddleWords ( b ; 4 ; 1 ) - MiddleWords ( b ; 2 ; 1 )
] ;
GetLayoutObjectAttribute ( "f1" ; "height" ) <> h
)
問題の1つは、「デザイン関数」はフィールド名で指定するので、同じフィールドを複数配置すると動作が不安定になります(取得する値がフィールドの配置順に依存)
もう1つは、1つのフィールドが複数回表示されるリスト形式では、...の表示を行ごとにオンオフするので設定が複雑になるでしょう。
そこまで手間をかける価値があるかどうか...
フィールド高さを2行目の上部が少し見えるようにしておくと、簡単にテキストがはみ出してることがわかりますが、ゆとりのあるレイアウトでしか使えない方法ですね。
表示用に計算フィールドを作り、
元のフィールドの前面にぴったり重ねて配置すればいいのでは。
そのフィールドは入力禁止にして、塗りつぶしを適当な色に設定します。
その計算式ですが、
元のテキストが全角のみか半角のみなら、文字数で指定できますが、
混在しているとバイト数で指定しなければなりませんね。
バイト数の場合、
最初から一文字ずつバイト数を加えて行き、
指定バイト数になったらそこまでのテキストを返す。
Whileで関数で出来そうですが、今の私の使用環境が古いのでその関数で検証できません。
LetとEvaluateの再起式ではできまししたので一応提示しておきます。
Let ( [ $cnt = 0 ;
$ln = Length ( テキスト ) ;
$txt = "" ;
$bt = 0 ;
$les = " Case ( $cnt > $ln ; テキスト ; $bt > 指定バイト数 ; $txt & ""..."" ;
Let ( [ $cnt = $cnt + 1 ;
$txt = Left ( テキスト ; $cnt ) ;
$bt = Length ( Filter ( $txt ; RomanZenkaku ( KanaZenkaku ( $txt ) ) ) & $txt ) ] ;
Evaluate ( $les ) ) ) " ] ;
Evaluate ( $les ) )
Offline
文字数・バイト数で判別するには、等幅フォントを使用する必要がありますよね。
もちろんそうなんですが、
それほど厳密に考えるような問題ではないかと。
バイト数の場合、指定より -1 バイトで返す場合もありますし。。
Offline
Pages: 1
[ Generated in 0.007 seconds, 7 queries executed - Memory usage: 508.8 KiB (Peak: 515.69 KiB) ]