ホーム   フォーラム   FAQ
 
メインメニュー
ログイン
ユーザー名:

パスワード:


パスワード紛失

現在カーソルがパーキングしているコントロール名の取得

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 .3 .4 .5 .6 .7 | 投稿日時 2009-9-28 14:30
renoa  新米   投稿数: 6
LastPark関数を使用すると、ひとつ前にパーキングしていたコントロール名を取得できますが、現在パーキングしているコントロール名を取得することは可能でしょうか?
マウス操作の場合のコントロールヒットと同様の戻り値がキーボード操作時に取得したいのです。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-28 15:49
hiro  長老 居住地: 三重  投稿数: 188
こんにちは renoaさん

キーボードの操作がどのような操作になるか分かりませんが
HandledCtrl()関数では無理でしょうか?
キーボード操作のイベントを捕まえて、この関数でコントロール名を取得するなど・・

すでに試されているとは思いますが・・

投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 .2 | 投稿日時 2009-9-28 16:07
renoa  新米   投稿数: 6
ありがとうございます。
たとえば『ここと、ここと、ここの項目にパーキングしてるときに、ズームボタンを有効にする』等、コントロール毎に記載すれば可能ですが関数等で出来ないかと思って投稿させていただきました。
文章が下手ですみません。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-28 17:07
hiro  長老 居住地: 三重  投稿数: 188
こんにちは renoaさん

>文章が下手ですみません。
いえいえ、アドバイスできればと思いましたので

そういうことだと、有効にしたいイベントロジックを
コントロールの指定をせずに設定して、
HandledCtrl()のコントロール名で実行判断するなどで
出来そうな気がしますが、画面上コントロールがたくさんあると
ちょっと無理ですね。
何か方法がありそうですが思いつきません。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-9-28 19:41 | 最終変更
muka  常連 居住地: 東京都練馬区  投稿数: 69
コントロール名の取得ではありませんが、カーソルがあるかどうかは

 式:「VarInp (0)='X'VAR」(Xは項目)

で判定できると思います。

もしくは、コントロールに関するイベント(前処理、後処理)で処理を組み込んでも可能かと・・・。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-29 10:39 | 最終変更
null  長老   投稿数: 191
>たとえば『ここと、ここと、ここの項目にパーキングしてるときに、ズームボタンを有効にする』
この件は簡単に行う方法が無いので便乗で質問させて下さい。

ボタンの有効特性をパークしている項目に応じて切り替えるような使い方をする場合、
LastPark(0) も VarInp(0) も内部的にはリアルタイムに変わるらしいのですが、
画面の表示にはリアルタイムに反映されないと言う仕様らしいのです。

唯一、V10 のリッチクライアント版では、例えば、ボタンの有効特性に
LastPark(0)='項目1' or LastPark(0)='項目3' とか書いておけば
画面の表示もリアルタイムに変わっていたのですが(項目1と3パーク時はボタン有効、以外は無効)、
このような動作は不具合だったようで uniPaaS ではオンライン版と同様、
リアルタイムに反映されないと言う仕様になっています(泣

画面の表示を反映させるには次項目へ移動するなどの画面再描画を誘発させる
何らかのアクションかイベント実行「画面再表示」を行う必要があるそうです。

項目にパークした時に発生するイベントがあれば、hiro さんが書かれているように
コントロール名未入力のハンドラを作成し、HandledCtrl() の値でフラグ制御出来るんでしょうが、
コントロール前と同等のイベントが無いのでこれも使えず・・・
(コントロール前のハンドラでコントロール名を未入力出来ないとか・・・)

結局、このような使い方は控えるか、全ての項目コントロール前でフラグを制御して、
そのフラグをボタンの有効特性にセットするような感じにしているのですが、
項目が多いとそれだけハンドラを書くことになり、かなり面倒です。

項目数分ハンドラを用意せずに済む良い方法は無いでしょうか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-29 11:48
tiyn  常連   投稿数: 70
全部同じコントロール名にしても
Varimp(0)の戻り値は違うので、それで判断できるかもしれませんね。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-9-29 11:57
renoa  新米   投稿数: 6
みなさまありがとうございます。
ちなみに、VarInp (0)='X'VARを使用して現在パーキングしている項目で戻り値が'TRUE'Lになれば良かったのですが、残念ながら期待した結果は得られませんでした。
コントロールの前後処理でフラグ操作してボタンの有効、無効を切り替えるのは出来るのですが、項目が多いとロジックがやたらと長くなってしまうんですよね…
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-9-30 10:13
null  長老   投稿数: 191
何処にぶら下げるか悩みましたが、とりあえずココで。

パークしている項目によって、ボタンの有効・無効を切り替える方法ですが、
各項目の「コントロール前」でフラグを制御する以外の方法がありましたので
メモ程度にここに書いておきます。この方法もボタン制御用の変数が必要ですが・・・

ボタン制御 L=論理 を定義
タスク前辺りで一応初期化。 'FALSE'LOG をセット

ボタンの有効特性にボタン制御を定義

イベントタイプ E=式 のハンドラを作成
式の内容は LastPark(0)='項目1' OR LastPark(0)='項目3'
項目更新 ボタン制御 ← 'TRUE'LOG

もう一つ、イベントタイプ E=式 のハンドラを作成
式の内容は NOT(LastPark(0)='項目1' OR LastPark(0)='項目3')
項目更新 ボタン制御 ← 'FALSE'LOG

これで項目1・3パーク時にボタンが有効、以外の項目パーク時に無効となります。
項目が多くなると式が長くなるのが難ですが、ハンドラが増えるよりは管理は楽かと。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-9-30 12:22
tiyn  常連   投稿数: 70
横槍ですが・・
イベント 式 便利ですね。
前3文字が〜〜〜のものをとかにしたら管理も楽ですし

ただ、イベントがずっとぐるぐる動いてるのが困り物なので、
イベントの条件に 制御フラグ<>更新する論理値 をいれとかないと
いけないですね。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-30 14:04
null  長老   投稿数: 191
> イベントがずっとぐるぐる動いてるのが困り物なので
うわっ、本当だ・・・
「イベント 式」は結構使えるかも知れないと思ったけど、
これは注意しないといけないですね。

ひとまず、訂正。多分、こんな感じで良いはず・・・
(LastPark(0)='項目1' OR LastPark(0)='項目3') AND NOT(ボタン制御)
NOT(LastPark(0)='項目1' OR LastPark(0)='項目3') AND ボタン制御
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-9-30 14:46
renoa  新米   投稿数: 6
みなさまありがとうございます。
さっそく試してみました!
PCスペック等によるのかもしれませんが、このPCではワンテンポ間をおいてから表示が切り替わるんですけど、反応をよくする方法ってありますか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-9-30 16:19
renoa  新米   投稿数: 6
すこし考え方をかえて…

----------
E=イベント コントロールヒット
 項目更新 ボタン制御 ← LastClicked()='項目X'

E=イベント 次項目
 項目更新 ボタン制御 ← VarInp(0)='X'VAR -1

E=イベント 前項目
 項目更新 ボタン制御 ← VarInp(0)='X'VAR +1
----------

こんな考え方でロジックを組んでみました。
もっと簡素化できますが、分かりやすくするためイベントを3つに分けました。
動作はOKですが、コントロール名かVARをどちらかに統一できたら管理が楽だと思うんですよね…
VARとコントロール名の変換関数なんてありませんか?
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-10-1 15:22
null  長老   投稿数: 191
> VARとコントロール名の変換関数なんてありませんか?
無いと思います。
変数の項目名とコントロール名は別物ですから、変換は厳しいと思います。
項目名 = コントロール名 と言うルールで作成するのなら以下でも良いんでしょうが・・・
シンボル ← VarIndex(コントロール名)
コントロール名 ← VarName(シンボル)
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2009-10-1 15:42
renoa  新米   投稿数: 6
ありがとうございました。
いろいろ試した結果、イベントの強制終了を E=編集 にすることだけで、LastPark で思いどおりのコントロール名を取得することができましたので、ご報告します。
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2009-10-1 17:21
hiro  長老 居住地: 三重  投稿数: 188
みなさん こんにちは

なるほど!!
編集を完了させるとLastParkは現在のコントロール名が
返るということですね。
憶えておくと使えるかも知れません。
忘れそうですが・・

投票数:0 平均点:0.00

  条件検索へ


Copyright (C) Magic Software Japan K.K. All Rights Reserved.
個人情報保護方針 会員規約