過去の桐井戸端BBS (桐ver.8)
27715 タブ順が最初のコマンドボタンの色を制御したい 宮城 2004/09/18-11:49
対象表のないフォームで、ボタンインアウト、フォーカス取得、
フォーカス喪失イベントで色等を変えさせているのですが、
コマンドボタンばかりのフォームだと、タブ順 1位のボタンが
フォーカスを取得して色が変わり、他のボタンにマウスインすると、
最初のボタンからのマウスアウトイベントは発生していないため、
二つのボタンの色が変わるという、いじましいことになってしまいます。

苦肉の回避策、マウスイン時タブ順 1位のボタン色をとにかくいったん元に戻せとしていますが、
もう少しエレガントな手はないものでしょうか。

V8 SP7です。V9以降の対策でもよろしければご教示ください。
27716 Re:コマンドボタンの色制御 ONnoji 2004/09/18-12:06
記事番号27715へのコメント
宮城さん、こんにちは

あらかじめ 前回値 と 今回値 を代入するの二つの文字列変数を用意して、
[マウスインアウト]イベントで、

if ( &フラグ )
 **マウスインの場合

 &m前回オブジェクト名 = &m今回オブジェクト名
 &m今回オブジェクト名 = &this

 if ( &m前回オブジェクト名 <> #u )
  オブジェクト操作 …
 end

 if ( &m今回オブジェクト名 <> #u )
  オブジェクト操作 …
 end

else

 **マウスアウトの場合
 **何もしない

end



という方法はいかがでしょうか?

外していたらすいません。
27717 Re:コマンドボタンの色制御 尾形 2004/09/18-12:26
記事番号27715へのコメント
どうも、こんにちは

手続き定義開始 fmボタン::マウスインアウト(長整数 &フラグ,長整数 &明細番号)
ケース開始
  ケース (&フラグ=1)
    オブジェクト操作 &this{背景色 = "灰色"}
    メソッド呼び出し &this.フォーカス設定()
  ケース その他
    オブジェクト操作 &this{背景色 = "RGB(230,230,230)"}
    オブジェクト操作 &this{フォント太さ="標準",前景モード="指定色",前
景色="黒色"}
ケース終了
手続き定義終了


マウスインでフォーカスも一緒に持ってくる
ていのはダメですかね


27718 Re:コマンドボタンの色制御 宮城 2004/09/18-12:28
記事番号27716へのコメント
ONnojiさん、さっそくありがとうございます。

目からうろこが落ちました。これが「お作法」というものなんですね。
私の「苦し紛れ」はお蔵行き、さっそく使わせていただきます。

(質問してよかった。(^o^)v )
 
27719 Re:コマンドボタンの色制御 ONnoji 2004/09/18-12:40
記事番号27718へのコメント
宮城さん、こんにちは。

このような問題を解決するためには、

前回値 と 今回値 の二つの変数があれば解決します。

たまたま[マウスインアウト]イベントを例にしましたが、
他の場合にも応用可能です。

[前回値と今回値]という考え方は、
私は15年くらい前に、OZの魔法使いさんから教えてもらいました。
今でも思い出しますが、私も目からウロコでした。

お作法というよりも、これは定石のようです。


27720 Re:コマンドボタンの色制御 宮城 2004/09/18-12:52
記事番号27717へのコメント
尾形さん、いろいろやりかたがあるものですね。
フォーカスご一緒方式でもばっちりでした。
エンターキー操作のことを考えると尾形さんのやりかたの
ほうがいいのかもしれませんね。

ちょっと思いついて、実験してみました。ボタン二つの色がかわる、
なにもしていないタコなフォーム。フォーカスはタブ順 1位のボタンにあり、
マウスポインタは違うボタン上。はてこの状態でエンター押したら押されるのは
どっちのボタン?

マウスポインタがあるボタンでした。(ほとんどフォーカス移っているも
同然ということですかねぇ?)


27721 Re:コマンドボタンの色制御 ONnoji 2004/09/18-13:22
記事番号27720へのコメント
宮城さん、こんにちは。

■桐のフォームの場合には…
あるコマンドボタンにフォーカスがある場合には、
マウスポインタがどこにあっても、

[Enter]キーを押して実行されるのは、
フォーカスがあるコマンドボタンです。

[Enter]キーの代わりに[スペース]キーを押しても同じです。

■一般的なウィンドウのダイアログでは…
フォーカスがボタンに無くても、[Enter]キーを押すと、大抵の場合、
何かが実行されますが、
これは[デフォルトプッシュ]になっているボタンがある場合だと思います。

[デフォルトプッシュ]のコマンドボタンは、
コマンドボタンの立体表示が、他のコマンドボタンより強調されています。
つまり影の濃いコマンドボタンです。

桐のフォームでは、[デフォルトプッシュ]は設定できなかったと思います。

外していたら、すいません。


27722 Re:コマンドボタンの色制御 宮城 2004/09/18-13:26
記事番号27719へのコメント
>たまたま[マウスインアウト]イベントを例にしましたが、
>他の場合にも応用可能です。

そうでしょうね。φ(.. ) (←この顔文字初めて使う。(^^;; )

&thisだけだとどうも痒いところに手が届かない感じがありました。
大変勉強になりました。m(_ _)m

27723 Re:コマンドボタンの色制御 宮城 2004/09/18-14:01
記事番号27721へのコメント
>■桐のフォームの場合には…
>あるコマンドボタンにフォーカスがある場合には、
>マウスポインタがどこにあっても、
>
>[Enter]キーを押して実行されるのは、
>フォーカスがあるコマンドボタンです。
>
>[Enter]キーの代わりに[スペース]キーを押しても同じです。

私もそう思っていたのでアレレ?という次第。

サンプルをアップしておきました。

何かがおかしい?
27724 Re:コマンドボタンの色制御 ONnoji 2004/09/18-14:52
記事番号27723へのコメント
宮城さん、こんにちは。


ファミリ:ボタン色制御 の[マウスインアウト]イベントで、
&局所STR に &this を代入していますね。


手続き定義開始 ボタン色制御::マウスインアウト(長整数 &フラグ,長整数 &明細番号)
 ケース開始
  ケース(&フラグ=1)
   &局所STR=#部分列(&this,2)
   *   メソッド呼び出し &this.フォーカス設定()
   オブジェクト操作  &this{背景色 = "茜色",フォント太さ = "太字",前景
色 = "黄色"}
  ケース その他
   オブジェクト操作  &this{背景色 = "すみれ色",フォント太さ = "標準",
前景色 = "白色"}
 ケース終了
手続き定義終了


そして、[enter]キーを押すと、確かにコマンドボタンが実行されます。

機能名      機能パラメータリスト
[1]手続き実行  ボタン編集
[2]なし
[3]なし
[4]なし


手続き定義開始 ボタン編集()
 &STR=&局所STR
 メソッド呼び出し @フォーム.変数変更()
手続き定義終了


このとき、マウスインした時に取得した &局所STR を参照しているので、
あたかも現在フォーカスが無い、
別のコマンドボタンが実行されたように見えると思いますけれど…

外していたらすいません。

<追伸>

少し面倒ですが、

機能名      機能パラメータリスト
[1]手続き実行  ボタン編集, "あ"
[2]なし
[3]なし
[4]なし

のようにして、

手続き定義開始 ボタン編集( 文字列 &parameter )
 &STR=&parameter
 メソッド呼び出し @フォーム.変数変更()
手続き定義終了

とすると、紛れがないですよ。

コマンドボタンの機能名:手続き実行 では、
&this が取得できませんから、トホホなんですが…



27725 Re:コマンドボタンの色制御 ONnoji 2004/09/18-15:03
記事番号27724へのコメント
宮城さん、こんにちは。

それから…

コマンドボタンしかないフォームの場合には、

コマンドボタンの[オブジェクトの属性]の、
[表示]タブの、[フォーカス設定可能]を "許可" にするといいですよ。

"自動"のままだと、この場合は使いにくいと思います。

<蛇足>

さらに、少し面倒ですが、

機能名        機能パラメータリスト
[1]フォーカス設定  "bあ"
[2]手続き実行    ボタン編集, "あ"
[3]なし
[4]なし

私は、この種の[アイウエオ系のボタン]の場合には、
面倒なので、一般手続きでコマンドボタンの属性を、
[機能パラメータリスト]の属性を一気に書き換えています。

手前味噌ですが、以下のような具合です。

クリックイベントはコマンドボタンに適していませんね
http://tools.geocities.co.jp/SiliconValley-Bay/7565/@geoboard/1214.html


27726 Re:コマンドボタンの色制御 ONnoji 2004/09/18-15:39
記事番号27725へのコメント
宮城さん、こんにちは。

拙作をアップしておきました。

--------------------------------------
宮城さん江

元々はサブフォームように作ったものですが、
ご参考にしてください。

sampleかな.wfm を開いてください。

※ファイルは桐ver.8バージョンです。

--------------------------------------



27729 Re:コマンドボタンの色制御 アックン 2004/09/18-19:10
記事番号27715へのコメント
宮城さん、こんばんは。
サンプルを改変してアップしました。
が、V9-2004です。
フォームの設定を変更しており、変更箇所をここに書きますが、
書き落としがあるかもしれないので、面倒でしょうが、V9体験版で試してもらえると確かかと。

フォームの変更箇所をメモ書きしときます。
イベントはコピペしておきます。
イベントは宮城さんのオリジナルも一部生かして、
他はぼくのメニューフォームからひっぱってきました。
仕組みについての疑問は、質問してください。

・フォーム変更箇所
現状のファミリを削除
新たに b_mファミリ という名のファミリを作成

フォームのイベントは、フォーム開始とキーダウンの2個
ファミリのイベントは、マウスインアウト、フォーカス取得、フォーカス喪失、
マウス左クリックの4個

コマンドボタンの機能名・同パラメータリストはすべて削除
コマンドボタンのイベント(タブ)→ファミリ名に b_mファミリ を設定。

イベントファイル名は"20040918宮城メニュー_akkun.kev"です。

・イベントの記述

名札 メイン

proc フォーム::フォーム開始(長整数 &表番号)
 &STR = ""
end
*______________________\
* オンマウス 文字色変更
* ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
proc b_mファミリ::マウスインアウト( 長整数 &フラグ,長整数 &明細番号 )
  if( &フラグ )
    method &this.フォーカス設定()
  end
end
proc b_mファミリ::フォーカス取得(文字列 &喪失オブジェクト名)
 オブジェクト操作  &this{背景色 = "茜色",フォント太さ = "太字",前景色
= "黄色"}
end
proc b_mファミリ::フォーカス喪失(文字列 &取得オブジェクト名)
 オブジェクト操作  &this{背景色 = "すみれ色",フォント太さ = "標準",前
景色 = "白色"}
end
*________________________\
* キーダウン
* ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
proc フォーム::キーダウン(長整数 &仮想キーコード,長整数 &スキャンコード,
長整数 &フラグ,参照 長整数 &処理中止)
 if( &仮想キーコード = 13 )
   var 文字列 { &focus }
   method @フォーム.フォーカスオブジェクト取得( &focus )
   if( #文字位置( &focus , "b" )>0 )
     call MenuButton( &focus )
   end
 end
end
*________________________\
* メニューボタンクリック/メニュー登録・メニュー交換・メニュー複写・メ
ニュー移動・メニュー削除・メニュー実行
* ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
proc b_mファミリ::マウス左クリック(長整数 &マウス位置[2],長整数 &明細番号,長
整数 &フラグ,参照 長整数 &処理中止)
  call MenuButton( &this )
end
*___________________________\
* メニューボタン マウス左クリックとキーダウン
* ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
proc MenuButton( 文字列 &thisObject )
 &STR=#sstr( &thisObject ,2 )
 メソッド呼び出し @フォーム.変数変更()
end
***------------------------以上です

アックン(=^・^=)
27733 Re:コマンドボタンの色制御 宮城 2004/09/18-21:52
記事番号27729へのコメント
ONnojiさん、 アックン、なぁんとなくわかってきました。

お手軽一番ということで書いた記述があだでありましたか。
アタマ冷やしてご教示いただいたものを勉強しなおしてみたいと思います。

27734 Re:コマンドボタンの色制御 ONnoji 2004/09/18-22:49
記事番号27726へのコメント
宮城さん、こんにちは。

今更の話ですが…

最初のサンプルのフォームで、
[Enter]キーの替わりに。
[スペース]キーを押してみれば、
もっと早く原因がわかったかもしれませんね。

タラレバの話です。(^^ゞ
27737 Re:コマンドボタンの色制御 アックン 2004/09/19-10:22
記事番号27733へのコメント
宮城さん
質問の主旨である、コマンドボタンの色を変えるのとフォーカスを同調させるイベントは、
マウスインアウト・フォーカス取得・フォーカス喪失の三つです。
このやり方は、佐田さんのメニューを見せてもらって、教わりました。

以下は本件とは無関係なことですが。
いかすおぱげてぃさん、・・・・いかすぱげてぃさんですね。
ほんまにタイプミスしました。別名 rosecさんから教わったのが、
(1)自動変数( &focus,&this )を一般プロシージャ(手続き定義のことです)
の自動変数( &MenuButtonだったかな )に渡す。
(2)イベントプロシージャから一般プロシージャを call するプログラミング
構造。
(3)プロシージャ毎に長い横罫線で区切って、探しやすくする。
です。
ぼくのは罫線だけですけど、いかすぱげてぃさんのは、他の若干の情報も書き込んでいます。
DOS時代から注釈行の横罫線で区切ってきましたが、ぼくにはこの2本線が判別しやすいです。

(1)(2)はほんとに一から教わりました。(悲しげさんと一緒に。)

アックン(=^・^=)
27752 Re:コマンドボタンの色制御 宮城 2004/09/22-12:53
記事番号27737へのコメント
ONnojiさん、アックンさん、ようやくわかってきたかな、というところです。
コマンドボタンの機能を使う、使わないでご見解が分かれておりますが、ケースバイケースで対処かな。

「引数」、食べず嫌いでありましたが、少しわかってきました。

ONnojiさんの「&string」、何がどうなってるのか、(@_@;)でしたが、ははあ、正体は「&caption」?

そして、なにより「統合失調症」的記述をしてはいけませんねぇ。

大変勉強になりました。m(_ _)m

27759 Re:引数 ONnoji 2004/09/23-02:29
記事番号27752へのコメント
宮城さん、こんにちは。

引数の話題はこの掲示板の過去ログにあったと思うのですが、
見つけきれませんでした。

内容は過去ログとほとんど同じですので、
手前味噌ですが、よろしければ以下をご参考に(^^ゞ

2002-10-24
Q.手続き定義開始の中に書いてある引数がよく解りません

http://www.geocities.co.jp/SiliconValley-Bay/7565/Question_and_Answer.htm

Q.手続き定義開始 には &出力 で
  呼び出しには &結果 と名前が違いますが同じ名前にしなくても良いのでしょう
か。

(同じ名前にしないと不安になる人が多いと思いますが、)
ぜんぜん違う名前で構いませんし、むしろそれが一般的だと思います。実は変数名が
違っていても動作するところが便利な点なのですが…

戻る