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

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

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

You are not logged in.

Announcement

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


#1 2020-06-17 16:43:33

Logan
Guest

複数開いたウインドウを同時に「最小化」、「元に戻す」方法

windows10 でFMPA15 MacにFMSを入れ使用しています。
そろそろ 最新のFMPAに切り替えたいと考えています

現在使用しているAppは、複数のウインドウを用途に応じて開け閉めしながら入力、出力するような
運用になっています。常時3~4個のウインドウが開いています。(レイアウトは200以上あります)

FMPA15までは、大きいウインドウの中にレイアウトが複数開いている状態だったので、
エクセルやブラウザーなどを同時に開いて作業をしている場合に、FMPをワンタッチで「最小化」、
「元に戻す」や「全体をずらす」事が出来ていました。

FMPA16以降、ウインドウが独立して開くようになり、一度にウインドウを最小化したり、元に戻す事が
出来なった事が理由で15から進歩できずにいます。
FMPA16は持っているので、慣れるために実際に使っていますが操作性が悪く困っています。

スクリプトを試しているのですが、「元に戻る」時に 非表示の状態で開いてるファイルも開いてしまい
上手く行きません。非表示の状態で開いているファイルは10以上あります。

「最小化」と「元に戻す」ボタンを小さいウインドウで常時配置して、そのボタンで操作出来れば良いので
すが本人が非力なため、たどり着きません。

良い方法があればご教示ください。

宜しくお願い致します。

#2 2020-06-18 05:50:11

mic
Member

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

変数を設定[$list;値:WindowNames]
Loop
	Exit Loop If[Let($i=$i+1;ValueCount($list)<$i)]
	ウインドウを選択[名前:GetValue($list;$i)]
	ウインドウの調整[最小化]
End Loop

これで開いているウインドウが全て最小化されると思います。
操作用のウインドウだけ残したい場合は例外処理を追加してください。

Offline

#3 2020-06-18 07:29:09

Logan
Guest

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

micさん、早速ありがとうございます。

試してみます。

#4 2020-06-19 15:04:59

Logan
Guest

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

micさん
ご提案頂いたスクリプトを試してみましたが上手く行きませんでした。

「非表示の状態で開いているファイル」まで全部開いてしまいました。
「ウインドウを選択」のステップで非表示のウインドウが開き、最小化は行われません
でした。


何かよい回避方法あればお教え下さい
よろしくお願いします

#5 2020-06-19 16:01:13

qb_dp
Member

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

スクリプト:Event を送信 で以下のPowerShellを実行でウインドウが最小化されます。

Event を送信 [「aevt」;「odoc」;

powershell -windowstyle hidden -Command "$dllInfo = '[DllImport(\"user32.dll\")]public static extern bool ShowWindowAsync(IntPtr hWnd, int nCmdShow);
[DllImport(\"user32.dll\")]public static extern bool IsIconic(IntPtr hWnd);';
Add-Type -MemberDefinition $dllInfo -name NativeMethods -namespace Win32;
do{
$FMprocess=get-process FileMaker*;
foreach($proc in $FMprocess){
$hwnd = $proc.MainWindowHandle;
$IsIconic=[Win32.NativeMethods]::IsIconic($hwnd);
[Win32.NativeMethods]::ShowWindowAsync($hwnd, 2) | Out-Null;
Start-Sleep -m 100;
}
}while ($IsIconic -eq $FALSE)"
」]
※テキストへ設定
https://qbxxdp.blogspot.com/2018/09/fil … ndows.html

Offline

#6 2020-06-20 15:10:36

mic
Member

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

ウインドウを閉じるの方は、メニューバーのウインドウを表示から選択できる状態でもリストに含まれないようですが、
ウインドウの調整で隠しただけのウインドウは、WindowNamesでリストに含まれてしまうんですね。

開かれているファイルは必ずしもウインドウを持っているわけではないということですか。
たまにOnFirstWindowOpenが実行されていないファイルがあると思っていましたが、これが理由だったんですね。

qb_dp さんが既にpowershellでの解決法を提示されていますが、色々試していたらなんとなくスクリプトでも出来たような気がするのでこちらも書いておきます。

エラー処理[オン]
//ウインドウの選択時に更新されてしまうようなのであまり意味はない模様
ウインドウの固定

変数を設定[$元に戻す;値:Get(スクリプト引数)]

変数を設定[$操作用ウインドウ;値:"操作用"]
ウインドウを選択[名前:$操作用ウインドウ]
If[Get(最終エラー)=112]
    新規ウインドウ[スタイル:ドキュメント;名前:$操作用ウインドウ;使用するレイアウト:"操作用レイアウト"]
End If
ウインドウの調整[最小化]



変数を設定[$list;値:WindowNames]
Loop
    Exit Loop If[Let($i=$i+1;ValueCount($list)<$i)]
    変数を設定[$v;値:GetValue($list;$i)]
    ウインドウを選択[名前:$v]
    If[$v = $操作用ウインドウ]
        ウインドウの調整[元に戻す]
        Exit Loop If[1]
    End If
    If[$元に戻す]
        ウインドウの調整[元に戻す]
    Else
        ウインドウの調整[最小化]
    End If
End Loop

WindowNames のリストは

  1. 表示しているウインドウ

  2. 最小化しているウインドウ

  3. 非表示のウインドウ

の順で並んでいるということなので、操作用のウインドウを都度最小化することで非表示のウインドウを選択しないようにしています。
最小化した順に上から並ぶようで、操作用を最後に最小化しているため全ての最小化ウインドウを元に戻せるようです。

Offline

#7 2020-06-21 09:00:42

Logan
Guest

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

qb_dpさん micさん
ご助言ありがとうございました。

qb_dpさん 当方初級者なので Event を送信 はハードルが高く手が出ませんでした。
これから勉強します。

micさん
改良有難うございました。試してみました。
後半の 元に戻す は上手く動き助かりました。
前半の 最小化 は "操作用"を作成するスクリプトステップ以降は上手く動いたのですが

変数を設定[$元に戻す;値:Get(スクリプト引数)]

の部分が上手く行かず、ウインドウが最小化されませんでした。私も色々試したのですが
克服できませんでした。手動でウインドウを最小化すれば、「元に戻す」のスクリプトは
動きました。

一から十まで申し訳ありませんが、ご助言宜しくお願い致します。

#8 2020-06-21 16:37:40

mic
Member

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

私の環境ではver16~19の全てで動いているので、ちょっとどういう現象かわかりませんでした。

    変数を設定[$元に戻す;値:Get(スクリプト引数)]

もしかするとこのステップで何をしているかわからないということでしょうか・・・?
これは開いているウインドウを元に戻すか最小化するか切り替えているだけなので、スクリプトを呼び出す時に引数で「1」を渡すと元に戻す、「0」を渡すか何も渡さないと最小化するようになっています。

たとえば #6 のスクリプトが「最小化切り替え」というスクリプト名だった場合、

スクリプト実行[指定:一覧から; 「最小化切り替え」; 引数:]
スクリプト実行[指定:一覧から; 「最小化切り替え」; 引数:0]

のどちらかで実行すると最小化、

スクリプト実行[指定:一覧から; 「最小化切り替え」; 引数:1]

で実行すると元に戻す動作になります。

操作用レイアウトでは「最小化切り替え」を
「最小化」ボタン → オプションのスクリプト引数:0
「元に戻す」ボタン → オプションのスクリプト引数:1
と設定します。


内容を勘違いしていたらすみません。

Offline

#9 2020-06-21 19:28:51

Logan
Guest

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

micさん
#6の内容を理解できていませんでした。
再度チャレンジしてみます。

#10 2020-06-22 15:49:30

Logan
Guest

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

micさん

試してみましたが、最小化は上手く行きませんでした。
データビューアで見ると、WindowNames のところでリストの一番目に
「操作用」が来てしまい、Loopの始めの段階で止まってしまい最小化されませ
んでした。

最小化が上手く行かなかった状態から、手動で閉じた場合にも「元に戻す」の
操作はきちんと動くようです。
しかし、いじっている間に、WindowNames のリストの上の方に「操作用」が上がって
しまうと、動かなくなる事もありました。

よろしくお願い申し上げます。

#11 2020-06-22 16:56:58

mic
Member

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

リストの一番上にあるということは、操作用のウインドウが最小化されていないと思われます。

変数を設定[$操作用ウインドウ;値:"操作用"]
ウインドウを選択[名前:$操作用ウインドウ]
If[Get(最終エラー)=112]
    新規ウインドウ[スタイル:ドキュメント;名前:$操作用ウインドウ;使用するレイアウト:"操作用レイアウト"]
End If
ウインドウの調整[最小化]

この部分の最後にある最小化は実行されていますか?
WindowNames の直前に操作用ウインドウを最小化しないと意図した順のリストが取得出来ないため、この行は必須です。

Offline

#12 2020-06-24 13:44:22

Logan
Guest

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

時間が出来たので続きを試してみました。

micさんのおっしゃる通り"操作用"のウインドウが最小化されていませんでした。

スクリプトの前半の
End If
ウインドウの調整[最小化]
ここまでを一つのスクリプトにして試したところ、"操作用"のウインドウは最小化
されて終了しました。

そのスクリプトに
変数を設定[$list;値:WindowNames]
を付け加えると"操作用"のウインドウは元のサイズに戻ってしまいました。
デバッガで動きを見ていると「ウインドウの調整[最小化]」から変数を設定に移る時に
ウインドウが消えて戻るように見えます。

引き続き試してみますが、気づいた点がありましたらお教え下さい。

よろしくお願いします。

#13 2020-06-28 20:00:52

Logan
Guest

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

頑張ってみましたが、前回投稿の状態と変わらずギブアップ状態です。

教えて頂いたスクリプトを「最小化」「元に戻す」ボタン専用のファイルに置き
テーブルとテーブルオカレンスは1つだけ、レイアウトは「ボタン用のレイアウト」ともう一つ
「操作用」のためのレイアウトの計2つです。

現状スクリプトを動作させると、「操作用」が表示されたままで「ボタン用のレイアウト」
が閉じて終わります。
デバッガで試すと両方とも開いたままで終了します。

気づいた点がありましたらお教え下さい。

よろしくお願いします。

#14 2020-06-28 22:28:00

mic
Member

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

色々試していた時は単一のテストファイルで全て実行していたので気付きませんでしたが、もしかして表示されているウインドウはこのスクリプトがあるファイルとは別のファイルですか?
ウインドウの調整は実行したスクリプトのあるファイルのウインドウにしか効果がないため、別のファイルに属するウインドウはそのファイルのスクリプトで操作する必要があります。

>ボタン専用のファイルに置き
ということなので、最小化・元に戻すためだけのファイルを単独で用意してそこから操作したいということですよね。
最小化や元に戻す処理は各ファイルのスクリプトで行う必要があるので、#6 のスクリプトをウインドウを表示しているファイル全てに作成し、操作用のファイルからそれらを呼び出す形にすれば動作するのではないでしょうか。

私の意図としては「操作用」のウインドウは「最小化」「元に戻す」のボタンを設置したウインドウのつもりだったので最終的に元に戻して表示されるようにしていましたが、別のファイルにボタンを設置するのであれば最後に表示させる必要はないので、その部分は

    //ウインドウリスト処理のループ内
    If[$v = $操作用ウインドウ]
        ウインドウを閉じる[名前:$v; 現在のファイル]
        Exit Loop If[1]
    End If

として閉じてしまった方が良いかもしれません。

Offline

#15 2020-06-29 16:59:46

Logan
Guest

Re: 複数開いたウインドウを同時に「最小化」、「元に戻す」方法

micさん いろいろとありがとうございます。

説明が不十分で申し訳ありませんでした。ファイルの数は13あります。
スクリプト書き換えたのですが、効果ありませんでした。

苦肉の策で、13あるそれぞれのファイルに「最小化」と「元に戻す」スクリプトを付け、
「ボタン用のレイアウト」からそれぞれのスクリプトを実行する方法を試しています。

最小化の時は
-------------------------------------------------------
If[Get(ウインドウ表示)=1]
   ウインドウの調整[最小化]
Else If[Get(ウインドウ表示)=0]
   ウインドウの調整[隠す]
End If
-------------------------------------------------------

元に戻す時は
-------------------------------------------------------
If[Get(ウインドウ表示)=1]
   ウインドウの調整[元に戻す]
Else If[Get(ウインドウ表示)=0]
   ウインドウの調整[隠す]
End If
-------------------------------------------------------
でほぼ動作するのですが、同じファイルから複数のレイアウトを開いて
いる場合思い通りに上手く行きません。
複数のレイアウトを開きそうなファイルに対しては「最小化」のスクリプト
を数回繰り返せば全て最小化できますが、元に戻すはそれが通じません。
複数最小化されているウインドウの内一つだけが元に戻りますが、2つめ以降
のウインドウは最小化されたままです。

最小化されているウインドウに次々移動する方法はないでしょうか。

よろしくお願いいたします。

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 9 queries executed - Memory usage: 569.28 KiB (Peak: 590.19 KiB) ]