過去の桐井戸端BBS (桐ver.8)
13459 Tabキー等でフォーカスを移して実行するといいのだが、マウスでコマンドボタンをクリックするとイベントの動作が変だ natsu 2001/10/12-21:12
コマンドボタンを1回押すと、そのボタンのオブジェクト名と関連した変数に1を足してゆくイベントを貼り付けました
コマンドボタンのオブジェクト名を「ぼたん1」とすると

メソッド呼び出し @フォーム.フォーカスオブジェクト取得( &focus )
&ぼたん1=#cond(&ぼたん1=1,2,&ぼたん1=2,1,1,#U)
(実際は、この行は「コマンド」コマンドを使用しています
 ちなみに、変数の値でボタンの色が変化するように属性式を設定しています
 クリック1回でボタンが赤くなり、2回押すと青くなります)

このようなボタンを20個、ファミリに割り付けてみました

ShiftやTabキーでフォーカスを移してからだとうまく動作するのですが
マウスでクリックすると動作が変です
(フォームを開いてから、始めにあるコマンドボタンをクリックすると
 始めにフォーカスが当たっていたボタンの変数が処理されます
 また、あるボタンを操作してから、次のボタンを押すと前のボタンの処理が
 実行されています)

いったい何が起こっているのか、訳がわからなかったのですが
マニュアルによれば、コマンドボタンを実行してから、
その後に当該ボタンへフォーカスが移るそうです
うーん、知りませんでした

いろいろ試してみましたが、いい知恵も浮かばないのでファミリはあきらめました
こんな風にコマンドボタンを使うのは、どう考えても邪道ですが
何か、よい方法はないものでしょうか?


13463 Re:コマンドボタンとフォーカス 佐田 守弘 2001/10/13-01:57
記事番号13459へのコメント
natsuさん
もし書かれているコマンド通りだとしたら、

>メソッド呼び出し @フォーム.フォーカスオブジェクト取得( &focus )

コマンドでフォーカスオブジェクトを調べた後、それぞれのコマンドボタンが
フォーカスを得ているかどうかの判断を、条件コマンドないしケースコマンドで判定しながら、
フォーカスを得たコマンドに対応する変数に対して、

>&ぼたん1=#cond(&ぼたん1=1,2,&ぼたん1=2,1,1,#U)

を実行させる判断が抜けているように思うのですが。

この様なケースでは、ファミリを使うよりも、1つずつのコマンドボタンにに対して、
一般手続きを定義し、コマンドボタンには手続き実行の機能名を設定する方がよいかと思います。

佐田守弘(KS-00119)
13466 Re:コマンドボタンとフォーカス アックン 2001/10/13-09:16
記事番号13459へのコメント
natsuさん、おはようございます。
フォーカスの問題というよりも、単に属性式のミスだと思うんですが。
下にイベント例をあげます。

次の例をテストしてみてください。
コマンドボタンを20個作成します。
コマンドボタンオブジェクト名を コマンドボタン_01 〜 コマンドボタン_20 とします。
(最後の数字は必ず2文字にします。)
この20個をファミリにして、ファミリでマウス左クリックイベントを設定します。

コマンドボタンの編集属性式をそれぞれに設定します。
コマンドボタン_01の例:
#cond( &color[1]=1 , ”背景モード’指定色’,背景色’青’”, &color[1]=2 , ”背
景モード’指定色’,背景色’黄’”, 1 , ”背景モード’指定色’,背景色’灰’”)


名札 メイン
 var 整数{ &color[20]={0} }

proc ファミリ_1::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長整数 &
フラグ,参照 長整数 &処理中止)
  &時 = #num( #sstr( &this , 2 ) )
  &color[&時] = #cond( &color[&時] = 1 , 2 , &color[&時] = 2 , 0 , 1 , 1 )
end

アックン(=^・^=)
13467 Re:コマンドボタンとフォーカス アックン 2001/10/13-09:23
記事番号13466へのコメント
>フォーカスの問題というよりも、単に属性式のミスだと思うんですが。

属性式のミスではなくて、(↓)この計算式のミスだと思います。
&ぼたん1=#cond(&ぼたん1=1,2,&ぼたん1=2,1,1,#U)

ミスだミスだと言ってるみたいでごめんなさい。
こういうときは自分だとなかなか気づかないもんですから、人に聞くのが早いです。(^^)

アックン(=^・^=)

13469 Re:コマンドボタンとフォーカス アックン 2001/10/13-09:48
記事番号13466へのコメント
また出てきました。(--;

>  &時 = #num( #sstr( &this , 2 ) )

これは他のイベントからコピーしてきた記述なんですが、
#sstrの場合、コマンドボタン名の最後の数字は、1〜20でオーケーです。
ただしそれ以外に数字が入るとアウトになりますから、9文字目以降を取得するのがいいですね。
  &時 = #num( #sstr( &this , 9 ) )

コマンドボタン名の最後の数字を 01〜20 としたときは、
#sstr(#部分列)は #LAST(#右側文字列)でもいいです。
  &時 = #num( #last( &this , 2 ) )

もっとも、別に数字を1から始めなくてもちっともかまわないんですけど。(^^;

アックン(=^・^=)

13470 Re:コマンドボタンとフォーカス 悲しげ 2001/10/13-16:25
記事番号13466へのコメント
アックンwrote

>フォーカスの問題というよりも、単に属性式のミスだと思うんですが。

natsuさんのやろうとしていることの記述が、何のイベン内かも判りませんが、
仮にファミリの「マウス左クリック」イベントだとしても、「フォーカスオブジェクト取得」メソッドで、
当該ボタン名を即取得することができないことは確かです。
ではありますが、この場合はそのようなメソッドを発行する必要もなく、
アックンが書かれたとおり、&this で充分なのがミソです。

その上での話ですが、個々のコマンドボタン毎に背景色を編集属性式で設定するのが面倒だとしたら、
こんな感じで「オブジェクト操作」コマンド一発共用なんてのもどうでしょう?
(ボタン名に末尾以外は数字を使っていないことを前提)
(あ、変数名は少し変えてあります)
----------------------------------------------
名札 メイン
 変数宣言 固有,整数{&釦[20],&n}



手続き定義開始 ファミリ釦::マウス左クリック(長整数 &マウス位置[2],・・・・・・・
 &n=#num(&this),&釦[&n]=#cond(&釦[&n]<1,1,&釦[&n]=1,2,&釦[&n]=2,0)
 オブジェクト操作 &this.背景色=#cond(&釦[&n]=1,"赤",&釦[&n]=2,"青",1,"チャコールグレイ")
手続き定義終了
----------------------------------------------
(注)釦はボタンと読みます。(^^;)
13471 Re:コマンドボタンとフォーカス アックン 2001/10/13-16:43
記事番号13470へのコメント
悲しげちゃま> おいらもobjectオンリーでありんす。

アックン(=^・^=)
13477 Re:コマンドボタンとフォーカス natsu 2001/10/14-12:29
記事番号13459へのコメント
皆さん どうもありがとうございました

始めの投稿時点でファミリはあきらめて佐田先生のご指摘通り個別にイベントをボタンに貼り付けておりました
少し、端折ってしまったのでわかりにくかったと反省しています 
とりあえず、以下の状態で目的通りに作動しています

手続き定義開始 項目018::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長
整数 &フラグ,参照 長整数 &処理中止)
&focus="&項目018"
&focusdata=&項目018
&focusdata=#cond(&focusdata="1","2",&focusdata="2","1",1,#U )
コマンド &focus+"="+"+&focusdata+"
メソッド呼び出し @フォーム.変数変更()
手続き定義終了
(私の場合間違えやすいので"="""としています)

属性式は、これです
#cond(&項目018="1","前景色'赤'",&項目018="1","前景色'黒'" ,&項目018=#u,"前景色'白'")

ボタンの色は画面確認のためだけで、クリックの度に変数の値を変えるのが目的ですというより、
ボタンをクリックした時点でオブジェクト名を取得するテクニックは?
が疑問点でありました また試行錯誤してみます
下のスレッド、小松さんの「100個のファイルを...」と同じなのですが
単純作業を繰り返していると、必ず間違えたり、心配になって始めからやり直したりと
大変なので、なるべくファミリでまとめたいと考えていました

追伸
>(注)釦はボタンと読みます。(^^;)
以前、悲しげさんのボタンは「牡丹」だったような


13483 Re:コマンドボタンとフォーカス アックン 2001/10/15-08:03
記事番号13477へのコメント
natsuさん> おはようございます。

>ボタンの色は画面確認のためだけで、クリックの度に変数の値を変えるのが目的です
>というより、ボタンをクリックした時点でオブジェクト名を取得するテクニックは?
>が疑問点でありました また試行錯誤してみます

悲しげさんと私が書いた &this がオブジェクト名です。
&thisは文字列ですから、&STRにそのまま代入できます。

>大変なので、なるべくファミリでまとめたいと考えていました

できますよ。ファミリのマウス左クリックイベントにしてください。

参考までに、わかりやすいマウスインアウトの例をあげます。

*_________________________________\
* オンマウス 文字色変更
* ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
proc b_pファミリ::マウスインアウト( 長整数 &フラグ,長整数 &明細番号 )
if( &フラグ )
object &this{ 文字色="青" }
else
object &this{ 文字色="黒" }
end
end

13486 Re:コマンドボタンとフォーカス natsu 2001/10/15-11:52
記事番号13483へのコメント
アックンさん

なるほど!! マウスインアウトイベントで先にオブジェクト名を取得ですね
どうもありがとうございました
13490 Re:コマンドボタンとフォーカス アックン 2001/10/15-12:03
記事番号13486へのコメント
natsuさん>

>なるほど!! マウスインアウトイベントで先にオブジェクト名を取得ですね

いえ、そうじゃなくて、
ファミリのマウス左クリックイベント中で&thisを使ってください。
オブジェクト名を取得できます。

マウスインアウトイベントは&thisを使った単なる例です。
私の手許にあるマウス左クリックイベントのプログラムが複雑すぎて、
それを例にあげても判りづらいと思い、
わかりやすいマウスインアウトを例にしました。

アックン(=^・^=)
13491 Re:コマンドボタンとフォーカス natsu 2001/10/15-13:02
記事番号13490へのコメント
了解しました
たびたび どうもありがとうございます

戻る