3 返信 最新の回答 日時: Sep 11, 2010 9:50 PM ユーザー:J

    スクリプトトリガを利用してキーボードからスクリプトを始動したい

    J

      タイトル

      スクリプトトリガを利用してキーボードからスクリプトを始動したい

      フォーラムに投稿

      みなさんこんにちは

      タイトルにあるように、スクリプトトリガを利用してキーボードからスクリプトを始動したいのですがうまくいかずに困っています。

      レイアウト上にいくつかのボタンが配置されていて、マウスでクリックするとスクリプトが始動するようになっています。

      ボタンの選択をマウスだけでなくキーボードでも出来るようにしたいと思っています。

      とりあえず試してみたのですがうまくいきませんでした。どこが間違っているでしょうか?

      レイアウト設定ダイアログを開きスクリプトトリガの「On Layout keystroke」イベントを有効にしてスクリプトを割り当てました。

      レイアウト上でキーボードのキーを押すとアラートが出て「入力を行う前にTabキーを押すか、フィールドをクリックするか、モードメニューから[新規レコード]を選択してください」と表示されます。

      ※モードメニューってのは間違いな気がします...

      というわけでうまくいきません。

      どなたか解決方法をご教授いただけると助かります。

      環境は

      OS MacOS X 10.6

      Filemaker Pro Advanced 11

      以上です

        • 1. Re: スクリプトトリガを利用してキーボードからスクリプトを始動したい
          sago350@未来Switch

          「On Layout keystroke」イベントに設定したスクリプトの中身はどういったものですか?

          • 2. Re: スクリプトトリガを利用してキーボードからスクリプトを始動したい
            p_boss2007

            レイアウトのスクリプトトリガーにアクションを入れるときはとても要注意です ファイルメーカーのキーストロークとは、たぶん フィールド内にカーソルがあるときのことで フィールド内にカーソルがないからだとおもいます

            Jさんのやりたいことをしてキーを監視するのなら

            OnTimer スクリプトをインストールをそのレイアウトに移動(表示)したときに実行し

            別に「キー監視」などの名称で

            IF

            ENDIF

            を設定し IFの条件に キーを入れるのですが、私の知る範囲では、ここでも取得関数にはGet(トリガキー入力)はあるものの Jさんがつまづいたことと同じく「フィールド入力時」のように思われます

            あくまでの私のやり方ですが キー監視による実行は 修飾キーとの組み合わせでならうまくいきます

            先ほどの続きのように(もう一度1から説明)

            ①まず 適当なフィールドを作り(見えなくしたければ小さくする・背景と同じ色にする)そこにトリガを設定しますそのフィールドは日本語入力はOFFにする条件です

            ②そのキートリガ用のスクリプトに

            変数を設定  $$KEY=Get ( トリガキー入力 )    //グローバルな変数に何が入力されたかを指定

            フィールド設定 適当なフィールド=””           //いっぱいになってきたらだめなので消しておく

              フィード移動   $$元のフィールド             //元のフィールドに

            ③次にこのレイアウトにきたら

            OnTimer スクリプトをインストール キー監視スクリプト,1      //1秒ごとにキー監視

            ④キー監視スクリプトには

            IFの条件式に Get ( アクティブ修飾キー )=4         //conttolキーの場合

            OnTimer スクリプトをインストール[]            //処理中は 1秒ごとの監視を中断

            変数を設定 $$KEY=””

            変数を設定  $$元のフィールド=Get ( アクティブフィールド名 )    //こうしておかないと元に戻れない

            フィールド移動 適当なフィールド  //ここでキーの監視が始まり 何かのキーが押されたら $$KEYに入るのを待つ

            変数を設定 $T=Get ( 時刻 )       //ここで今の時刻を取るのは何秒待っても入力が無いときの考慮

            LOOP

            EXIT LOOP if    Get ( 時刻 )-$T>2 or $$KEY  ≠ ””   キーが入るか3秒以上に経過したら

            END LOOP

            IF $$KEY=""

            OnTimer スクリプトをインストール キー監視スクリプト,1      //1秒ごとにキー監視

            現在のスクリプト終了

            ENDIF

            ここから以下は $$KEYの内容に分岐し

            どこでまた OnTimer スクリプトをインストール キー監視スクリプト,1      //1秒ごとにキー監視

            にするのかは Jさんの処理しだいです

            細かく検証したわけではありませんが このような手続きを 通らないと いわゆるKEYアクションはできないのかな?と

            controlキーを使うのはいいにしても

            1秒に1度という制約でいいのか? フィールドの末尾でないとき ちゃんと戻すのか?

            例ではcontrolとしましたが 他の組み合わせと 問題ないか?などです

            それと 冒頭に申し上げたように レイアウトにスクリプトトリガを施すのはとても慎重にしてくださいね

            特に2つのアクションをつけるとき お互いが呼び合って 無限ループみたいになって困るときもあります

            そんな時は 僕の使ってる11ADVANCEDにはデバッガがあるので それを起動して 無理やりスクリプトを書き換えたりして

            脱出して難を逃れることがありますが 標準FMにはデバッガはあったんでしたか・・・解からないですが 冷や汗もののときがあります

            少しは参考になりましたか? もっと便利な方法が あれば 僕も教えてください

             

             

             

            • 3. Re: スクリプトトリガを利用してキーボードからスクリプトを始動したい
              J

              sago35さん、経緯集 中窪さん レスありがとうございました

              やはりフィールドにカーソルが入っていないとダメなようです。

              「OnLayoutKeystroke」の説明には「レイアウトまたは、レイアウト上のオブジェクトでキー入力が..」とあるので、ただ単にレイアウトが表示されている時にも有効だとおもってしまいました。というか..文章を読むとそのように解釈出来ると思うのですが..。

              まーとりあえず今回は別の方法を考えてみます。

              ありがとうございました。