みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
「原稿」という1つのフィールドに対して、
「投稿」と「校正」という2つの編集ボックスを作ります。
「投稿」から入力されたテキストは書式なしでも構わないのですが、
これに「校正」から追記したとき、追記部分がわかるようその部分だけ
文字色を赤くすることは可能でしょうか。
手動で「校正」の追記部分を選択して書式変更することが可能ですが、
変更忘れがないように、文字色を半強制的に変更したいと思います。
スクリプトトリガと書式設定関数を組み合わせてできないかと色々試したのですが、
うまくいきません。
環境はFM Pro 15です。
Last edited by koeda (2017-12-01 07:02:33)
Offline
編集開始位置をグローバル変数に入力
これは、
編集位置クリックでOnObjectEnterでスクリプト実行
または、
編集位置までカーソルを動かすのなら、その位置でボタンクリックでスクリプト実行
でできますね。
編集後、OnObjectExit のスクリプト
その時点のカーソル位置を求めて、
上記の編集開始位置とで編集箇所が選択できますから、
このテキストを変数にして、
Replace関数で、変数を赤にして置き換え。
エスケープを考えないと思わぬ事態になるかもですね。。
Offline
FileMakerだけでやるには、テキスト編集時のイベントが少なすぎて辛いです。
チポさんの案のようにボタンを絡めないと編集しにくいでしょうし。
diffやfcの様な外部のテキスト差分比較用のコマンドを使うのはどうでしょうか。
ただコマンドの出力をFileMakerで加工したり、OSに依存するのも嫌なので、
私なら https://github.com/sergi/go-diff とかで差分を取って、
FileMaker用に加工して返すプログラムをGoで書いてしまいます。
Offline
>「投稿」から入力されたテキストは書式なしでも構わないのですが、
> これに「校正」から追記 したとき、追記部分がわかるよう その部分だけ
> 文字色を赤くすることは可能でしょうか。
この通りなら、単に「校正」部分を「校正」に書き換えれば良いわけで、
いたって簡単では!
・ フィールド設定[「投稿」:値:※下式]
・ Substitute(「投稿」; [「校正」; TextColor(「校正」; RGB(255;0;0))])
Offline
「校正」フィールドをちゃんと見ていなかった ;;;;
カーソルの位置に校正フィールドの値を書式設定して、
計算結果を挿入
でいいんですね。
Substitute
だと、「校正」フィールドと同じ値が元にあるとまずいですね。
と書いて構造が分からなくなりました。
> 「原稿」という1つのフィールドに対して、
> 「投稿」と「校正」という2つの編集ボックスを作ります。
これはどういうことですか?
Offline
フィールドは「原稿」ひとつ。
そのフィールドを参照するテキストフィールドレイアウトオブジェクトとして、
最初に入力を行う「投稿」レイアウトオブジェクトと、
その後その校正作業を行う「校正」レイアウトオブジェクトがある。
「校正」レイアウトオブジェクトから行った変更が、自動的に書式設定された状態にしたい、
ということでは?
Offline
hondaさん
私も最初そう考えて、最初のレスになりました。
そこへ
Hiroさんのレスで??となった次第です。
そもそも
一つのフィールドをどう表示しようと、その値に変わりがありませんよね。
Offline
Hiroさんの勘違いだと思います。
ひとつのフィールドにふたつのレイアウトオブジェクトを置いているのは、
一方はそのまま入力、一方はトリガを使って…という仕組みを作りかけだからでしょうか。
Offline
皆さん、本当にありがとうございます。
まず、やりたかったことは#6でhondaさんが説明し直してくださった通りです
(質問がわかりづらくて済みません!)。
同じテキストを複数の人が編集した時に、入力する文字色をユーザー毎に自動的に
変えることができれば、自分以外の人が編集したことが一目でわかるので便利!
という要望があり、このような質問になった次第です。
そして、#2のチポさんのアドバイスに沿ってスクリプトを作成し、やりたいことが実現できました。
なお、onObjectEnterとonObjectExitトリガを使うと、同じフィールド内で複数個所を連続して
編集した時に編集開始位置が取れないので、onObjectKeystrokeとonObjectModifyを使うようにしました。
具体的には、onObjectKeystrokeで編集開始位置を、onObjectModifyで編集終了位置をそれぞれ取得し、
それを元にTextColor関数で文字色を設定するようにしました。
deleteキーで文字を削除するなど、編集の開始位置と終了位置が前後する場合があるので
その点で苦労しましたが…
ありがとうございました。
Last edited by koeda (2017-12-01 16:24:58)
Offline
Pages: 1
[ Generated in 0.008 seconds, 9 queries executed - Memory usage: 522.3 KiB (Peak: 527.21 KiB) ]