特定のコントロールにパークしている時にのみ実行されるイベントロジックユニットを定義するには
タイトルのヘルプが存在すると思いますが、
概要は、イベントロジックユニットのコントロール特性を指定すれば
そのコントロールにパークしているときにのみロジックユニットが実行される
というものです。
しかし、このヘルプではキーボードのボタン(例えばF5キーなど)をイベントトリガーとして説明されていますが、
フォームに配置したボタンコントロール(マウスでボタンをクリック)をトリガとした場合、ロジックユニットが実行されませんでした。
これはボタンをクリックした瞬間に入力中のエディットからボタンにパークされるということでしょうか?
ボタンクリックをトリガとしたイベントロジックユニットで
コントロールによって実行されるイベントロジックを切り替える方法はありませんか?
※やりたいことは、あるエディットコントロールにパーク中、ズーム(ダブルクリック、F5キー押下)で選択プログラム呼び出し&フォーム上のボタンクリックで同様の選択プログラム呼び出し
上記ボタンはほかのエディットコントロールにパーク中は他のイベントを発行
つたない説明で申し訳ありませんが、コメントお待ちしております。
-
KTさん、
> これはボタンをクリックした瞬間に入力中のエディットからボタンにパークされるということでしょうか?
はい、その通りです。ボタンをクリックした瞬間にフォーカスがそのボタンに移動します。
「コントロール」欄の設定が有効となるのは、フォーカスが移動せずにそのイベントが発動された時のみになります。例えば、フォーカスがその項目にあって、「Ctrl+A」が押された時とか、F5キーが押された時とかですね。
-
ボタンに変数を割り当てなければ、ボタンにパークしないと思いますのでそれをお試しになられてはいかがでしょうか?
-
こんにちはPuです。
私もnkmtさんのレスに1票
でわ~でわ~ -
皆様 コメントありがとうございます。
コメントを参考にテストプログラム作成しましたが、
変数を割り当てない とは、データ項目及び式を指定しない
ということで良いのでしょうか?
試してみたところ、ボタンにパークするようです。
HandledCtrl()関数を使用して、
イベントが発行されたコントロールを表示してみました。
ボタンを押すと、コントロール名が表示されないので、
ボタンにパークしていると思われます。



-
ちなみに、
既存のプログラムでM=RM互換ロジックユニットで定義されているイベントがあるのですが、
そちらはボタンでイベント発行できているようです。
MagicV9Plusから移行したと思われるのですが、V9Plusの知識がありません。
V9Plusだと再現可能ということはありますか?
-
ボタンのプロパティに変数が設定されていないですね。
私が書いたのはそのことで合ってます。
変数1と
変数2を定義して
その2つを画面に配置し
ロジック
→ イベント ズーム の右隣でダブルクリックして、変数1のコントロール名
エラー へんすう1→ イベント ズーム の右隣でダブルクリックして、変数2のコントロール名
エラー へんすう2をお試しください。
-
こんにちはPuです。
あんちょくな解決方法
ボタンに変数を割り当た状態でタブで移動=false
でわ~でわ~ -
ボタンに変数を割り当てていなくても、ボタンがコントロールとして存在している以上、ボタンを押した瞬間にフォーカスがそのコントロールに移動します。
-
nkmt様
試してみましたが、うまくいきません。
なぜか次項目に移動しますね。
ちなみに、内部のズームイベントって次項目イベントが標準でついてくるんでしょうか?
伝播特性Yesにするとズームイベントの後に次項目に移動しますね。
-
Pu様
コメントありがとうございます
Tabで移動をFalseにしても、クリックしたときの動作なので違いますね。
と思ったらクリックでパークという項目を見つけましたがそちらでしたでしょうか?
しかし、これをFalseにしてもダメでした。
-
あきらめて別の方法で実装できましたので、コメントします。
コントロール名特性での指定はできないと判断し、
変数を1つ定義(参照flg:数値:1)
該当のコントロールのコントロール前ロジックユニットで先ほどの変数を項目更新(1)
コントロール後ロジックユニットで先ほどの変数を項目更新(0)
イベントロジックユニット(ズーム)でコントロール名特性を指定しないで、
条件を設定(参照flg=1)
これで、ズーム操作(F5キー、ダブルクリック)とボタンコントロールでイベント実行できました。
※1つのボタンには1つのイベントしか割り当てられないので、同じ場所にボタンを置き、別のイベントを割り当て、可視特性で表示させたり消したりすることもできると思いますが、TabオーダーやZオーダーなど管理が煩雑になりそうなのでやめました。
コメントいただきありがとうございました。
-
KTさん、
> ※1つのボタンには1つのイベントしか割り当てられないので、
状況が異なるかもしれませんが、ひとつのイベントに対して複数のイベントハンドラを定義したい場合は、伝播特性と条件分岐を用いてできると思いますよ。
-
失礼、訂正です。
「伝搬特性」→「伝播特性」
-
kt様 返答ありがとうございます。
たしかに私が9:18に投稿した方法ではボタンをクリックすると「次項目」へ移動となりました。
なんか変だと私も思いました。実は投稿した通りの方法は普段使っておりませんでした。
まさかそのような動きになるとは、私もまだまだです。
ステータスバーにいつでもズーム可能という表示になってしまうデメリットもあるのですが
以下のようにしている分もあります。
-
tandaさんが11:19に投稿された「フォーカスが移動」というのは、そういう事なんでしょうね。
変数を割り当てないボタンには、カーソルパーキングはしないけど、フォーカスが移動とはそういう意味なのでしょうね。 -
kt様、以下で成功しました。

-
ボタンクリック → F5キーを押した動きにする。
(F5キーを押した イコール → ズームイベント)
ズームイベント & その項目の編集は強制終了します! となり
パーキングしている項目毎の gZoomイベントが実行可能。 -
nkmtさん、
一回、ボールを戻すわけですね。サッカーと同じ発想ですね。日本も勝ちました!😀
-
KT様 私の最初のアドバイスは不正解でした。失礼しました。
-
tandaさん サッカー強くなりましたね。
今回の私の2つ目の投稿の分は、エコーさんの真似だったと思います。 -
nkmtさん、
ボタンを押してF5でキックした後、一旦ボールを元のコントロールに戻して、内部的にズームを発動させるわけですね。よく考えられたアイデアだと思いますよ。まさにサッカーのテクノロジーだと思います。
-
nkmtさん
コメントありがとうございます。
ボタンクリックでF5キーを押した動きにするということですね。できました。
ちなみに、スクショに無かったのですが、
GU_F5のイベントロジックユニットを
E=イベント GU_F5
アクション E=式 KbPut('F5' KBD)
という感じで定義すれば良いですよね。
※上記でできました。
ちなみにちなみにですが、GU_F5のイベントトリガをシステム F5 にしておくと、
ズームイベントを定義していない項目でF5キーを押すと無限ループになります!
なので、ここではイベントトリガはN=なし で良いのかなと思います。
ありがとうございました。
-
一つ伝え漏れがありました。
メインPGに イベント GU_F5 S=システム トリガ=F5 E=強制終了 も定義していますが
メインPGのロジックに
E=イベント GU_F5 スコープ:S=サブツリー
イベント実行 ズーム(Z) を定義しておりました。
失礼しました。
私は無限ループは起きていないです。 -
自分で言うのもなんですが
GU_F5
gZoom
なんか名前が統一されていなくて好きではないです。 -
nkmtさん
ありがとうございます。
ユーザーイベントで内部のズームイベントを実行しているのですね!
それだとループしませんね。
そのようにしたいと思います。
イベント名などの命名は私もまだ迷走中です。。
社内でルールなど無ければ分かれば良いですかね(笑)
サインインしてコメントを残してください。
コメント
25件のコメント