メインコンテンツへスキップ

特定のコントロールにパークしている時にのみ実行されるイベントロジックユニットを定義するには

コメント

25件のコメント

  • Tanda

    KTさん、

    > これはボタンをクリックした瞬間に入力中のエディットからボタンにパークされるということでしょうか?

    はい、その通りです。ボタンをクリックした瞬間にフォーカスがそのボタンに移動します。

    「コントロール」欄の設定が有効となるのは、フォーカスが移動せずにそのイベントが発動された時のみになります。例えば、フォーカスがその項目にあって、「Ctrl+A」が押された時とか、F5キーが押された時とかですね。

  • nkmt

    ボタンに変数を割り当てなければ、ボタンにパークしないと思いますのでそれをお試しになられてはいかがでしょうか?

  • Pu

    こんにちはPuです。
    私もnkmtさんのレスに1票
    でわ~でわ~

  • KT

    皆様 コメントありがとうございます。

     

    コメントを参考にテストプログラム作成しましたが、

    変数を割り当てない とは、データ項目及び式を指定しない

    ということで良いのでしょうか?

    試してみたところ、ボタンにパークするようです。

     

    HandledCtrl()関数を使用して、

    イベントが発行されたコントロールを表示してみました。

     

    ボタンを押すと、コントロール名が表示されないので、

    ボタンにパークしていると思われます。

  • KT

    ちなみに、

    既存のプログラムでM=RM互換ロジックユニットで定義されているイベントがあるのですが、

    そちらはボタンでイベント発行できているようです。

     

    MagicV9Plusから移行したと思われるのですが、V9Plusの知識がありません。

    V9Plusだと再現可能ということはありますか?

  • nkmt

    ボタンのプロパティに変数が設定されていないですね。

    私が書いたのはそのことで合ってます。


    変数1と
    変数2を定義して
    その2つを画面に配置し


    ロジック
     → イベント ズーム の右隣でダブルクリックして、変数1のコントロール名
       エラー へんすう1

     → イベント ズーム の右隣でダブルクリックして、変数2のコントロール名
       エラー へんすう2

    をお試しください。

  • Pu

    こんにちはPuです。
    あんちょくな解決方法
    ボタンに変数を割り当た状態でタブで移動=false
    でわ~でわ~

  • Tanda

    ボタンに変数を割り当てていなくても、ボタンがコントロールとして存在している以上、ボタンを押した瞬間にフォーカスがそのコントロールに移動します。

     

  • KT

    nkmt様

     

    試してみましたが、うまくいきません。

     

    なぜか次項目に移動しますね。

     

    ちなみに、内部のズームイベントって次項目イベントが標準でついてくるんでしょうか?

    伝播特性Yesにするとズームイベントの後に次項目に移動しますね。

     

     

  • KT

    Pu様

    コメントありがとうございます

    Tabで移動をFalseにしても、クリックしたときの動作なので違いますね。

    と思ったらクリックでパークという項目を見つけましたがそちらでしたでしょうか?

     

    しかし、これをFalseにしてもダメでした。

  • KT

    あきらめて別の方法で実装できましたので、コメントします。

     

    コントロール名特性での指定はできないと判断し、

    変数を1つ定義(参照flg:数値:1)

    該当のコントロールのコントロール前ロジックユニットで先ほどの変数を項目更新(1)

    コントロール後ロジックユニットで先ほどの変数を項目更新(0)

     

    イベントロジックユニット(ズーム)でコントロール名特性を指定しないで、

    条件を設定(参照flg=1)

     

    これで、ズーム操作(F5キー、ダブルクリック)とボタンコントロールでイベント実行できました。

     

    ※1つのボタンには1つのイベントしか割り当てられないので、同じ場所にボタンを置き、別のイベントを割り当て、可視特性で表示させたり消したりすることもできると思いますが、TabオーダーやZオーダーなど管理が煩雑になりそうなのでやめました。

     

    コメントいただきありがとうございました。

     

  • Tanda

    KTさん、

    > ※1つのボタンには1つのイベントしか割り当てられないので、

    状況が異なるかもしれませんが、ひとつのイベントに対して複数のイベントハンドラを定義したい場合は、伝播特性と条件分岐を用いてできると思いますよ。

  • Tanda

    失礼、訂正です。

    「伝搬特性」→「伝播特性」

     

  • nkmt

    kt様 返答ありがとうございます。
    たしかに私が9:18に投稿した方法ではボタンをクリックすると「次項目」へ移動となりました。
    なんか変だと私も思いました。実は投稿した通りの方法は普段使っておりませんでした。
    まさかそのような動きになるとは、私もまだまだです。
    ステータスバーにいつでもズーム可能という表示になってしまうデメリットもあるのですが
    以下のようにしている分もあります。

  • nkmt

    tandaさんが11:19に投稿された「フォーカスが移動」というのは、そういう事なんでしょうね。
    変数を割り当てないボタンには、カーソルパーキングはしないけど、フォーカスが移動とはそういう意味なのでしょうね。

  • nkmt

    kt様、以下で成功しました。

  • nkmt

    ボタンクリック → F5キーを押した動きにする。
    (F5キーを押した イコール → ズームイベント)
    ズームイベント & その項目の編集は強制終了します! となり
    パーキングしている項目毎の gZoomイベントが実行可能。

  • Tanda

    nkmtさん、

    一回、ボールを戻すわけですね。サッカーと同じ発想ですね。日本も勝ちました!😀

  • nkmt

    KT様 私の最初のアドバイスは不正解でした。失礼しました。

  • nkmt

    tandaさん サッカー強くなりましたね。
    今回の私の2つ目の投稿の分は、エコーさんの真似だったと思います。

  • Tanda

    nkmtさん、

    ボタンを押してF5でキックした後、一旦ボールを元のコントロールに戻して、内部的にズームを発動させるわけですね。よく考えられたアイデアだと思いますよ。まさにサッカーのテクノロジーだと思います。

     

  • KT

    nkmtさん

    コメントありがとうございます。

    ボタンクリックでF5キーを押した動きにするということですね。できました。

     

    ちなみに、スクショに無かったのですが、

    GU_F5のイベントロジックユニットを

    E=イベント GU_F5

     アクション E=式  KbPut('F5' KBD)

    という感じで定義すれば良いですよね。

    ※上記でできました。

     

    ちなみにちなみにですが、GU_F5のイベントトリガをシステム F5 にしておくと、

    ズームイベントを定義していない項目でF5キーを押すと無限ループになります!

    なので、ここではイベントトリガはN=なし で良いのかなと思います。

     

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

  • nkmt

    一つ伝え漏れがありました。
    メインPGに イベント GU_F5  S=システム  トリガ=F5   E=強制終了 も定義していますが
    メインPGのロジックに
      E=イベント   GU_F5    スコープ:S=サブツリー
         イベント実行    ズーム(Z) を定義しておりました。
    失礼しました。
    私は無限ループは起きていないです。

  • nkmt

    自分で言うのもなんですが
    GU_F5
    gZoom
    なんか名前が統一されていなくて好きではないです。

  • KT

    nkmtさん

    ありがとうございます。

    ユーザーイベントで内部のズームイベントを実行しているのですね!

    それだとループしませんね。

    そのようにしたいと思います。

     

    イベント名などの命名は私もまだ迷走中です。。

    社内でルールなど無ければ分かれば良いですかね(笑)

サインインしてコメントを残してください。