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

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

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

You are not logged in.

Announcement

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


#1 2019-10-28 11:16:42

っでふぉえ
Guest

スクリプトボタンが複数回きかないようにするには

Win7 FMP15使用です(もうすぐWin10 FM18に切り替えます)

現在、事業関係のDBを作成中なのですが、事業概要等を入力するウインドウAと事業参加メンバーの情報を入力するウインドウBと二つに分けて、どちらもが入力時にリファレンスできるようなスタイルにしているのですが、そこで質問です。
ウインドウを開く場合のスクリプトは現在、
  新規ウインドウ
  レイアウト切替
  サイズの変更

だけという簡単なものをボタンで実行させています。当然ですが、押した回数分だけ新規ウインドウが開かれてしまいます。
ウインドウAならAで、1回新規ウインドウから状態にある場合にボタンを押しても新規にウインドウAが作られないようにしたいのですが、うまくできません。
よいお知恵がありましたらお願いいたします

#2 2019-10-28 11:18:40

っでふぉえ
Guest

Re: スクリプトボタンが複数回きかないようにするには

1回新規ウインドウから状態にある場合 → 1回新規ウインドウですでにウインドウAが開いている状態にある場合

#3 2019-10-28 11:32:11

qb_dp
Member

Re: スクリプトボタンが複数回きかないようにするには

「事業概要等を入力するウインドウA」の、ウインドウ名を"ウインドウA"とした場合、以下で ウインドウ "ウインドウA" が有るかどうか確認出来ます。

変数を設定 [$Result; 値: FilterValues ( WindowNames ; "ウインドウA" )]

Offline

#4 2019-10-28 11:56:40

チポ
Member

Re: スクリプトボタンが複数回きかないようにするには

ウインドウAが開いている場合はスクリプトを実行しない。

なら、
スクリプトの最初でこれを判定すればいいのでは。

変数は特に必要としないでしょう。

Offline

#5 2019-10-28 13:07:27

koeda
Member

Re: スクリプトボタンが複数回きかないようにするには

スクリプトの先頭で

If [ IsEmpty ( FilterValue ( WindowNames ; "ウインドウA” ) ) ]
    新規ウインドウ [ スタイル: ドキュメント : 「ウインドウA」(ウインドウA) ]
Else
    ウインドウを選択 [ 名前: "ウインドウA" ; 現在のファイル ]
End If

みたいな感じですかね?
レイアウト切り替え時にウインドウ名を設定するのを忘れないように、例えばOnLayoutEnterから必ずレイアウト初期化スクリプトを実行し、
ウインドウタイトルの設定を実行、のようにルール(開発ポリシー)を決めておくと良いと思います。
(ボタンスクリプトの中でも設定できますが、漏れやすい)

Last edited by koeda (2019-10-28 13:12:16)

Offline

#6 2019-10-28 14:06:58

mic
Member

Re: スクリプトボタンが複数回きかないようにするには

下のような汎用スクリプトを作って、ユーザーに表示するレイアウトはほぼ全てこのスクリプトで切り替えるようにしています。
実際には前回表示していた位置サイズを読み込んだりする機能も付けていますが、ここでは割愛。

全ての変数は省略可能です。
「ウインドウを選択」も、空指定するとエラーにならないんですよね。

エラー処理 [オン]
ウインドウの固定

変数を設定 [$window ; 値: "ウインドウ名"]
変数を設定 [$layout ; 値: "レイアウト名"]
変数を設定 [$style ; 値: ""]
変数を設定 [$top ; 値: ""]
変数を設定 [$left ; 値: ""]
変数を設定 [$width ; 値: ""]
変数を設定 [$height ; 値: ""]

ウインドウを選択[名前: $window ; 現在のファイル]
# エラー112 ウインドウが見つかりません
If[Get(最終エラー) = 112]
	If[$style = "float"]
		新規ウインドウ[スタイル:フローティングドキュメント; 名前:$window; 高さ:$height; 横幅:$width; 上:$top; 左:$left ]
	Else If[$style = "dialog"]
		新規ウインドウ[スタイル:ダイアログ; 名前:$window; 高さ:$height; 横幅:$width; 上:$top; 左:$left ]
	Else
		新規ウインドウ[スタイル:ドキュメント; 名前:$window; 高さ:$height; 横幅:$width; 上:$top; 左:$left ]
	End If
End If

If[not IsEmpty($layout)]
	レイアウト切り替え[$layout]
End If

Offline

#7 2019-10-28 15:46:45

っでふぉえ
Guest

Re: スクリプトボタンが複数回きかないようにするには

みなさま
みなさま、ご意見等いろいろありがとうございます

とりあえず、先のスクリプト実行の前に、
エラー処理オン
ウインドウを閉じる[ウインドウA]

と追加して、ウインドウAが開かれていようがいまいが一回ウインドウを閉じてもう一度新規に立ち上げるという乱暴なやり方を編み出してみました。
なんとなくこれでいけそうではあるのですが、みなさまのご意見のようなスマートな方法のがよさそうですね。
検討させていただきます

#8 2019-10-28 16:48:52

Shin
Member

Re: スクリプトボタンが複数回きかないようにするには

ウィンドウが⑴個だけの時に、意図しない動きになるかも。

Offline

#9 2019-11-06 10:00:15

っでふぉえ
Guest

Re: スクリプトボタンが複数回きかないようにするには

みなさま

自分で編み出しました乱暴極まりないやりかたをしばらくためしておりましたが、今までのところ不具合なく動いているようですので、当面はこのままで行きたいと思います。
いろいろありがとうございました

#10 2019-11-06 10:20:33

Shin
Member

Re: スクリプトボタンが複数回きかないようにするには

ユーザーに、新規ウィンドウが開いた事を明確に意識させるべきでは。新規ウィンドウの位置をずらしておくといいでしょう。
または、タブコントロールを使って、表示を変更してみる、という方法も合理的かも。

Offline

#11 2019-11-07 13:22:44

っでふぉえ
Guest

Re: スクリプトボタンが複数回きかないようにするには

ありがとうございます
ご指摘のとおりですね。
サイズを変えていますのでわかるといえばわかるのですが、表示位置をずらしてみます。
基本、どちらのレイアウトないの情報も同時にリファレンスできるようにということが目的でございますのでそのほうが便利でもありますね。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.004 seconds, 7 queries executed - Memory usage: 521.08 KiB (Peak: 525.62 KiB) ]