過去の桐井戸端BBS (桐ver.9)
26053 一覧表形式フォーム上の任意のセルの項目値を変数に取り込みたい とまと 2004/04/25-00:05
貸室管理のアプリケーションを作成中です。
貸室の予約データ(予約台帳.tbl)の中からある特定の日のデータを絞り込み、
これを予約照会.tblに併合のうえ、フォーム呼び出しで一覧表形式フォームで表示しています。
これは縦に全貸室名、横に午前10から午後10までの時間帯を30分刻みに取っており、
予約の入っている部分には予約番号を表示しています。

このフォーム上で予約番号が表示されている任意のセルの項目値(予約番号)を変数に取り込み、
この変数によって予約台帳.tblを絞り込み、予約情報の詳細をフォーム上で表示し、
入金処理に結び付けたいと考えています。

変数に取り込む方法としては、マウス左クリックイベントが考えられると思いますが、
すべての項目にこのイベントを設定しなければならないのでしょうか?
他によい方法があるのでしょうか?

よろしくお願いします。

26055 Re:一覧表形式フォーム上の任意のセルの項目値を変数に取り込みたい 佐田 守弘 2004/04/25-01:40
記事番号26053へのコメント
とまとさん
この質問は、1つ前のコメントツリーのものと同じと考えて宜しいですね。
こちらの方が少し詳しく書かれている様なので、こちらの方にコメントします。

どうやら、マウスクリックなどのイベントを使う必要がある事は考えておられる様なので、これを前提に話を勧めます。

●テキストオブジェクトにマウスイベントを設定する場合
 >変数に取り込む方法としては、マウス左クリックイベントが考えられると思
 >いますが、すべての項目にこのイベントを設定しなければならないのでしょ
 >うか?
もしそれぞれのテキストオブジェクトにマウスイベントを使うとしたら、その通りです。
対象となるテキストオブジェクト数は、午前10時から午後10時までの30分刻みとの事なので、24個になると思います。
これらの1行分のテキストオブジェクトに設定します。
フォームとイベントの設定が面倒ではありますが、結果としては最も解りやすい方法になるかと思います。
面倒とは言っても、イベントハンドラの中身はほとんどがコピーできますし、
共通する部分は一般手続きに書いて、これを実行してもよいので、
それ程面倒にはならないと思います(私ならこの方法を選びます)。

●フォームのマウスイベントを設定した場合
フォームそのものにもマウスイベントがあります。この場合にはイベントハンドラは1つで済みます。
しかし多分、この方法は好ましくない結果になります。その理由は次の通りです。

@フォーカスがある項目を調べる必要がある。
それぞれのテキストオブジェクトのマウスイベントであれば、どのテキスト
オブジェクトがクリックされたのは、調べる必要がありません。
(発生したイベントに対応しているオブジェクトです)
しかし、フォームのマウスイベントでは、イベントが発生した後で、
どのオブジェクトがクリックされたのかを調べる必要があります。
マウス左ボタンをダウンした時点で、オブジェクトはフォーカスを得ていますから、
フォーカス取得イベントなどで調べられるでしょうが、結局は二重手間になるのではないでしょうか。

Aテキストオブジェクト以外でクリックされた場合
予約番号が書かれているセル(テキストオブジェクト)以外の場所で、
何かの弾みでマウスをクリックした場合でも、フォームに対するマウスクリックイベントが発生します。
その結果、誤操作によるデータ処理が発生するおそれがあります。

それぞれ、対策や回避策はあろうかと思いますが、却って面倒なのではないでしょうか。

佐田守弘(KS-00119)
26057 Re:一覧表形式フォーム上の任意のセルの項目値を変数に取り込みたい アックン 2004/04/25-15:03
記事番号26053へのコメント
とまとさん、こんにちは。
ファミリというのを使うと、マウス左クリックイベントの記述がひとつですみます。
よってメンテナンスも簡単になります。

設定の仕方をここに書くのは大変なので、オンラインヘルプをご覧ください。
画像とイベント記述例があるので、説明はわかりやすいと思います。
ただ実際に自分で設定しようと思ったら、どこでどうやれば画像のような設定画面が出てくるのか、
ちょっと探すのがわかりづらいかもしれません。

桐のヘルプ>トピックの検索>一括処理&イベント処理>
一括処理&イベント処理リファレンス>入門>ファミリを使用する

26058 Re:一覧表形式フォーム上の任意のセルの項目値を変数に取り込みたい 宮城 2004/04/25-17:07
記事番号26057へのコメント
アックンご多忙のようで、サンプルをアップしておきます

ただ、やってて気になるのですが、本当に&予約番号に取り出すだけで
いいのでしょうか。であればかくもシンプルにすむのですが。

といいながらも、このほうがファミリがわかりやすくてよろしいかも。

26065 ご指導ありがとうございます とまと 2004/04/25-21:47
記事番号26053へのコメント
佐田さん、アックンさん、宮城さん 親切なご指導ありがとうございます。

今朝、佐田さんのレスを拝見しました。
そして職場で佐田さんのご指導に従ってイベントを作成しました。
その結果、予約の入っている任意のセルの「予約番号」を変数に取り込むことができ、
それをもとに「フォーム呼び出し」で当該予約番号の詳細データを表示することができました。

ファミリについては今後勉強していきたいと思っております。
宮城さん、貴重なサンプルありがとうございました。

今後ともよろしくお願いします。
とまと

26080 ファミリの機能を使うとしたら 佐田 守弘 2004/04/26-23:49
記事番号26065へのコメント
とまとさん
前回書いた様に、面倒でも1つずつ設定した方が解りやすいのではありますが、
コマンドの行数を少なくする意味で、ファミリ機能を使う方法も考えられますね。
参考までにファミリ機能を使う時のポイントを述べておきます。
ただし、私は質問されている様な使い方はした事がないので、テストはしておりません。
あくまでも考え方だけの提示です。

●ファミリの設定方法
まず最初に、フォーム定義画面で、複数のオブジェクトを選択してファミリを設定する方法をマスタして下さい。
まず[書式]メニューから[ファミリパレット]を選んで、表示します。
次いで同じファミリに設定するオブジェクト(この場合には一覧表形式の
明細部にあるテキストオブジェクト全体です)を選びます。
そして、ファミリパレットで「新規作成」を選びます。この当たりの操作が、
バージョンによって多少違う様ですが、いずれにしても新しいファミリを作成します。
ファミリ名には任意の名前に変更できます。
設定したらファミリ名の前にある表示のチェックボックスのチェックマークを操作して、
表示と非表示が切り替わるかを確認して下さい。
ファミリ名の表示のチェックマークを消したら、表示も消えれば、そのファミリに設定された証拠です。
この確認を怠ると、正しくファミリに設定されてなくて、
思った様に動作しなくなります。

●クリックしたテキストがどこであるかを取得する方法
テキストオブジェクト1つずつにマウスイベントを設定すれば、該当する
テキストオブジェクトがクリックkされた事がだまっていても解るので、
それぞれのイベントハンドラ毎に、そのソース値を変数に代入するコマンドが掛けます。

しかしファミリで設定した場合、どのオブジェクトがクリックされたかを判断する必要があります。
この方法として、フォーカスを取得したオブジェクト名が、
変数&thisに自動的に代入されているので、これを使うのが良いでしょう。

そしてそのソース値は、「メソッド呼び出し ソース値取得」コマンドを使って取得するのが良いかと思います。
つまりファミリのマウスクリックイベントの中で、
 メソッド呼び出し 戻り値=&実行リターン
         ,&this.ソース値取得(&番号,0)
を実行すれば、変数&番号にクリックしたテキストオブジェクトのソース値が取得できるだろうと思います。

佐田守弘(KS-00119)
26081 Re:一覧表形式フォーム上の任意のセルの項目値を変数に取り込みたい とまと 2004/04/26-23:50
記事番号26058へのコメント
最初は24個あるテキストオブジェクトにすべてマウス左クリックイベントを記述しました。
これで予約照会.wfm上で取得した予約番号で当該予約の詳細を表示することができました。

>サンプルを補完BBSにアップしておきます。

宮城さん、ありがとうございました。
サンプルを参考にして、ファミリを設定してみました。

>ただ、やってて気になるのですが、本当に&予約番号に取り出すだけで
>いいのでしょうか。
>
予約照会.wfm(一覧表形式)は縦に貸室名、横に時間区分を設けており、
時間区分に対応する明細部分は予約番号だけです。
そこで、任意の予約番号をクリックしたときに予約者名を表示できればと思い、
ヘッダ部にテキストオブジェクトを設けソースを「&予約者名」として、
マウス左クリックイベントに次のように記述しました。

手続き定義開始 ・・・・
メソッド呼び出し &this.ソース値取得(&受付番号,0)
表 予約台帳
検索 [受付番号]{&受付番号}
ケース開始
ケース(.not #終端行)
&利用者名=[利用者名]
ケース終了
終了 表 編集対象表
手続き定義終了

ところが、マウスクリックに対する表示反応が1テンポずつ遅れます。
最初にマウスクリックしたときは何も表示されず、2回目のマウスクリックをしたときに
最初の予約番号に対する予約者名が表示されます。

マウスクリックしたときに瞬時に予約者名を表示するには、「メソッド呼び出し 描画更新」コマンドを使えばいいのかな?
と思いますが、使い方がわかりません。

また、「ふきだし」や「表示ガイド」でも可能なのでしょうか。

よろしくお願いします。



26085 Re:一覧表形式フォーム上の任意のセルの項目値を変数に取り込みたい アックン(=^・^=) 2004/04/27-08:21
記事番号26081へのコメント
とまとさん>
こうしてみてはどうでしょう。

>終了 表 編集対象表
  method @フォーム.変数変更() ←この行を入れる
>手続き定義終了

これでだめなら、・・・・・・誰か考えて。(^^;

宮城さん、フォローどうもありがとさんです。お礼が遅くなりました。<(__)m
**-------------

>ケース開始
>ケース(.not #終端行)
>&利用者名=[利用者名]
>ケース終了

ここは1行にできますよ。
 cond( .not#eof ) &利用者名=[利用者名]
**-------------
26086 Re:一覧表形式フォーム上の任意のセルの項目値を変数に取り込みたい とまと 2004/04/27-10:57
記事番号26085へのコメント
アックンさん、ご指導ありがとうございます。

>こうしてみてはどうでしょう。
>
>>終了 表 編集対象表
>  method @フォーム.変数変更() ←この行を入れる
>>手続き定義終了
>
おかげさまで、セルのクリックと連動してフォームヘッダ部に設けたテキストオブジェクトに「予約者名」が表示されるようになりました。


戻る