初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2017-11-07 09:38:19

You0830
Member

オブジェクトの点滅方法について

Windows 7 Pro(64bit)
FMPro ADV 15
-------------------------

リスト形式(ポータル)表示しているレイアウトで、
レコード新規作成後の10分間、新規レコードのみ背景色(背景オブジェクト)を点滅させたいのですが、
OnTimerスクリプトをインストールとLoopを使ってできると思いますが、
オブジェクトを表示/非表示させるスクリプトはありますでしょうか?
背景色を塗り替える方法でも良いのですが、
グラデーションのためオブジェクトで何とかしたいと考えています。
ご教示お願いします。

Offline

#2 2017-11-07 11:27:42

チポ
Member

Re: オブジェクトの点滅方法について

フラグフィールドをグローバルで作り、
そのフラグ値と、作成時刻が現在の時刻の10分前以降(日をまたぐのでしたらタイムスタンプですね)
を条件として表示・非表示の指定ができます。

フラグフィールドの値を変更するスクリプトを、
OnTimerスクリプトをインストール
で一定間隔で実行させれば、
背景の点滅ができますね。

それを止める必要があればその方法も考えなければなりません。

Offline

#3 2017-11-07 13:20:16

Hiro
Member

Re: オブジェクトの点滅方法について

リスト形式表示された複数レコードに対し、
各レコードオブジェクト独自に同時平行処理させるのは、
FMタイマースクリプトでは難しいのでは?

Offline

#4 2017-11-07 13:28:43

チポ
Member

Re: オブジェクトの点滅方法について

計算フィールド・オブジェクトタイプ
で検証しましたが、複数レコードで実行できます。

オブジェクトの表示・非表示
今検証できる環境にありません。

Offline

#5 2017-11-07 17:28:57

You0830
Member

Re: オブジェクトの点滅方法について

お二人ともコメントありがとうございます。

アドバイスいただいた通り、フラグフィールドを作って
レコード新規作成時に表示の[1]を自動入力、
あとは新規作成時のスクリプトにフラグフィールドの内容を
2秒間隔で書き換える様にOnTimerとLoopを追加したのですが、
なぜかOnTimer自体が動作しません…

OnTimerが動けば、Loopを抜け出す条件にタイムススタンプ+300秒とかで
止めることはできると思うのですが。
表示・非表示は難しそうなので、
フラグの内容を見て条件付き書式で
フラグフィールド自体の塗り色を変える方法を試しています。

OnTimerって、
呼び出したいスクリプトとそれを発動させるタイミングを何秒後にするか
指定するだけですよね?
何秒後っていうのはスクリプト行の一つ上の命令から数えてって意味で間違いないでしょうか?

Offline

#6 2017-11-07 17:47:39

チポ
Member

Re: オブジェクトの点滅方法について

OnTimerスクリプト・・・(以下OnTumerと省略しますね)
の時間指定はその間隔の指定です。

例えば、
2秒で指定すれば、それで指定されたスクリプトが2秒ごとに実行されます。
ですから、
指定されたスクリプトはLoopの必要はないでしょう。

フラグフィールドをグローバルにしないと、
複数の新規レコードに通用しませんよ。

Offline

#7 2017-11-07 17:58:07

mic
Member

Re: オブジェクトの点滅方法について

フラグフィールドの値を変更した後、
ウインドウ内容の再表示[]

のステップを実行しないと、表示非表示が切り替わりませんね。

「OnTimer スクリプトをインストール」がループ構造のようなものなので、Loopステップを使う場所はないはずです。
指定するスクリプトがループ内の処理で、間隔はループの周期ですね。
ループ終了が
OnTimer スクリプトをインストール []
に相当します。

Offline

#8 2017-11-07 18:30:24

You0830
Member

Re: オブジェクトの点滅方法について

チポさん micさん

解説ありがとうございます。
OnTimerが良く理解できれおらず、先程テストしてみました。
確かにLoopは不要ですね。

例えば複数行の命令があるスクリプトの途中にOnTimerを挿入した場合は
どうなるのでしょうか?
スクリプトを指定したOnTimerの次の行にOnTimerをいれると
Timerを止める事ができますが、一度全ての行が実行されて
指定秒数後にOnTimerで呼び出したスクリプトだけが繰り返されるイメージでしょうか?

例えば5行のスクリプトでOnTimerが3行目にある場合、
①1⇒2⇒3⇒4⇒5⇒3⇒3⇒3…もしくは
②1⇒2⇒3⇒1⇒2⇒3⇒…でしょうか?
デバッガの動きは
③1⇒2⇒4⇒5⇒3⇒3⇒3…っぽかったのですが。
③だと1つのスクリプトに複数のOnTimerは動作しない事になりますかね?

OnTimer単品だと使いやすいのですが、
動作イメージがつかめません…

Offline

#9 2017-11-07 19:12:13

mic
Member

Re: オブジェクトの点滅方法について

ちょっと試してみましたが、OnTimerを設定した時点でタイマーは起動しているようですね。
ただ、複数のスクリプトが同時に実行されることはないようなので、起動時間になったときに他のスクリプトが走っていた場合は起動待ちになり、実行中のスクリプトが終わった瞬間にタイマーで指定したスクリプトが起動します。

起動待ちは1回分だけで、起動待ちのスクリプトが実行された瞬間にその次のタイマーが減り始めるようです。

Offline

#10 2017-11-08 08:31:58

チポ
Member

Re: オブジェクトの点滅方法について

OnTimerは一つのウインドウに一つのみです。

OnTimerが動いているところにOnTimerがインストールされると、
前のOnTimerは停止します。

Offline

#11 2017-11-08 14:45:06

You0830
Member

Re: オブジェクトの点滅方法について

お二人のお蔭で少しコツがつかめました。
タイマーを一つしか設定できないのであれば、
OnTimerでフラグを一定間隔で切り替えるのは難しいですかね。

スクリプトの一時停止/続行をループさせた方が簡単に実現できました。
やっていくうちに気が付いたのですが、
1秒間隔で特定のレコードのフィールド値を更新させると
他の操作がしにくくなっちゃいますね。
もっと早く気が付くべきでした…

他のレコードを選ぶとそっちのフラグが変わっちゃうので
毎回、特定のレコードに移動する処理を入れないといけないですよね。
タイミングによっては違うレコードが更新されてしまします。

点滅が必要なレイアウトは操作は発生しない
別テーブルの別レイアウトで作った方がよさそうですね。

Offline

#12 2017-11-08 14:55:15

チポ
Member

Re: オブジェクトの点滅方法について

> タイマーを一つしか設定できないのであれば、
> OnTimerでフラグを一定間隔で切り替えるのは難しいですかね

んん、ご理解できませんかね。。

> 秒間隔で特定のレコードのフィールド値を更新させると
> 他の操作がしにくくなっちゃいますね

Loopでの方法は、その間の操作に支障が出ます。
そのためにOnTimerをお勧めしたんです。

フラグ値を変更するスクリプトを、
OnTimerで一定間隔で実行させるだけですが。。

Offline

#13 2017-11-08 15:44:27

You0830
Member

Re: オブジェクトの点滅方法について

あまりプログラムを組むという機会が無いので、
理解が不十分ですみません…

OnTimerで普通に出来ました。
条件分岐のスクリプトを呼び出せばよいだけでしたね。
確かにこちらの方がいいですね!
ありがとうございます!

Offline

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.009 seconds, 9 queries executed - Memory usage: 596.05 KiB (Peak: 612.59 KiB) ]