過去の桐井戸端BBS (桐ver.8)
12275 直前に操作した表の表番号を取り出す方法は? pokopon 2001/07/13-16:58
みなさん こんにちは
以前、「カーソルのあたっている項目名を取得する」と関連してはいるのですが、
今度は表の表番号(あるいは編集表のファイル名でも)を取得する方法です。

やりたいことは、
表A、表B、表C・・・・・と複数開いています。
そこに、それらに対して表を定義していないフォーム(メニュー用です)があります。
そのフォームから、それぞれの表に対して操作を試みています。
最後に操作した表(訂正やら並び替えやらしたもの)の表番号を取り出せないものかお尋ねします。

前回の項目名を得るには #項目番号(#U)
なんて技がありましたが、
#表番号取得( n | str | str , n )
を使っていろいろ試しましたが、駄目でした。マニュアルにもそれらしい記述がないので、
どなたかお分かりになる方、お知恵を貸してください。


12276 Re:直前に操作した表の表番号を取り出す方法は? 尾形 2001/07/13-19:33
記事番号12275へのコメント
こんばんは、挙動未確認ですが

#IS表 ではいかがでしょうか?

12277 Re:直前に操作した表の表番号を取り出す方法は? 悲しげ 2001/07/13-19:33
記事番号12275へのコメント
どもっ、pokoponさん

これは会話処理でのことなのか、一括処理(またはイベント)のことなのか判りませんが、取り敢えず後者として考えます。
また「直前に」あるいは「最後に」操作した表と云うのが、任意に複数の表に会話的に往来するような場合の直前(最後)ではなく、
一定の順序で表を切り替えて行った場合の最後の表として考えます。

変数宣言 長整数{&表No[20]}

表 表a
&表No[1]=#IS表
・・・・・・
・・・・・・
表 表b
&表No[2]=#IS表
・・・・・・
・・・・・・
表 表c
&表No[3]=#IS表
・・・・・・
・・・・・・

このようにして、それぞれの表番号を変数に蓄えておけば、
最後の(直前の)表の表番号は、その間にどのような処理を
挟んだとしても、&表No[3]に格納されていることになります。

ただ、趣旨がよく判らないのは、「訂正やら並び替えやらしたもの)の表番号」と云う表現です。
訂正や並び替えをしても表番号は変わらないので、この修辞はどのような意図がこめられているのでしょうか?
12278 Re:直前に操作した表の表番号を取り出す方法は? 尾形 2001/07/13-19:42
記事番号12277へのコメント
悲しげさん、こんばんは

全く同じ時刻に書きこみしましたねぇ〜
そんだけです (^^;;

12279 Re:説明不足でした pokopon 2001/07/13-21:16
記事番号12275へのコメント
悲しげさん 尾形さん
スイマせん、またまた説明不足でしたね。

開いている表A〜表D・・・・は、全て「会話処理」でです。
フォームには、それらの表を「個別に記述したイベント」は何もありません。
単なるNULL表のフォームです。

会話処理にて任意に開いた「表」に対して、それぞれ何かしらの処理をした場合、
最後に処理をした(直接的に言えば、表の表示ウインドを最後に触った)表の番号を知りたいのです。
ですので #IS表 では、フォームのイベントで操作していない表なので、結果は得られませんでした。

今、計画しているのは、「補助ツール」としてのフォームです。かつて話題となった「電卓フォーム」見たいなもので、
項目の集計やら度数分布やら、それぞれの項目において行われる「一連の操作」をコマンドボタンに集約して配置しておきたいのです。
「最後に触った項目名」を取り出す方法はできました、が、今度は操作している「表」の番号が取り出せれば、
それぞれの表に対していちいちフォームを作成しなくても、「共通して使えるフォーム」が完成します。
ですので、「このフォームで操作している複数の表」ではなく「任意に開いた会話処理の複数の表」に対するものです。

誤解をまねいて、すいませんでした。


12280 Re:説明不足でした ONnoji 2001/07/13-22:24
記事番号12279へのコメント
pokoponさん、こんばんは。

「ウィンドウリスト取得」コマンドはいかがでしょうか。

これ以外に「ウィンドウ情報取得」コマンドも便利かもしれません。

外していたらごめんなさい。



12283 Re:一応解決しました pokopon 2001/07/14-10:23
記事番号12275へのコメント
一応、解決できましたので、ご報告いたします。
ONnojiさんのご意見がヒントとなりました。ありがとうございました。

フォームの定義において(Null表です)

変数をメインで事前に宣言しておきます
 変数宣言 局所,整数{&FileNo,&WindowNo[40]}
 変数宣言 局所,文字列{&File,&FileName,&Pass,&項目名}
   ・
   ・
   ・
イベント内で、
 ウィンドウリスト取得 &WindowNo
 &FileNo = &WindowNo[2]
&File = #表ファイル名(&FileNo)
&Pass = #ファイル名(&File,5)
&FileName = #ファイル名(&File,3)
編集表 &FileNo
&項目名 = "[" +#項目属性(#項目番号(#U),1) + "]"
メソッド呼び出し @フォーム.再描画()

ウィンドウリスト取得 によって、 現在開いているファイルのハンドルが、配列変数&WindowNoに代入されています。
ここがみそでした [1]には自分フォームのハンドル [2]には直前にいじったWindow のハンドルが入りました。

ということは、2つ前にいじった表ファイルは? [3]でしょうか?
順番というよりは、「Windowの重ね順」ですけど。 

ついでに、「最後に触った項目名」も取り出しました。

ここまでくれば、後は「最後に触った表ファイル」に対して、いろいろと操作が可能です。
全ての表ファイル(会話型で)に対して利用可能ですので、事前にイベントに表ファイルを定義しておかなくても良いです。

ただ、・・・・まだ解決できないのが「このフォームよりも後に開いた表ファイル」については、うまくいきません。
ハンドルエラーとなります。
最初に必要な「表ファイル」を開いておいて、このフォームを最後に起動すれば、表を切り替えても大丈夫ですが、
フォームを起動してから、表ファイルを開けば・・・・エラーとなります。
フォームが開いてからの「ハンドルの取得」はできないのでしょうか?
ちなみにこのフォームは「ポップアップ」としています。


12284 Re:訂正です pokopon 2001/07/14-10:43
記事番号12283へのコメント
すいません、訂正です。

>ただ、・・・・まだ解決できないのが「このフォームよりも後に開いた表ファイル」について
>は、うまくいきません。ハンドルエラーとなります。

「フォームを最後に」とありましたが、
エラーの場所は、 編集表 &FileNo の個所でした。
ハンドルと表番号が一致していると思っていましたが、異なることもあるようです。
せっかくファイル名を取得できていますので、

編集表 &File

で大丈夫ですね。

これで、開く順序に依存しなくなりました。


12286 Re:訂正です 悲しげ 2001/07/14-12:34
記事番号12284へのコメント
どもっ、pokoponさん

>ハンドルと表番号が一致していると思っていましたが、異なることもあるようです。

と云うか、ウィンドウハンドルと表番号は全く無関係だと思います。
例えば、ひとつの表に対して、表ウィンドウとフォームウィンドウのふたつを使ったら、
それだけでウィンドウハンドルはふたつ使いますし、
またひとつの表でも多重化オープンされたら、表番号はもうひとつ使われます。
あまり正確な記憶ではありませんが、表番号は1→20、ウィンドウハンドルは
40→1の順番で割り当てられるのではなかったかしら?(ちと自信なし)

>せっかくファイル名を取得できていますので、
>
>編集表 &File
>
>で大丈夫ですね。

そうですそうです、不定な表番号よりもファイル名で指定する方が、遥かに確実です、読んでいて私もそう思っていました。(^^;)
私は、特にイベントを使うようになってから、編集表を切り替えるに、
表番号を使う機会がぐっと減りました。しばしば表番号が不定だからです。
で、多くの場合、表ファイル名を使って指定しています。
12288 Re:どうもありがとう pokopon 2001/07/14-14:21
記事番号12286へのコメント
悲しげさん こんにちは

>>ハンドルと表番号が一致していると思っていましたが、異なることもあるようです。
>と云うか、ウィンドウハンドルと表番号は全く無関係だと思います。
そうでしたか。わたしはてっきり・・・・と思っていました。確信犯?

>あまり正確な記憶ではありませんが、表番号は1→20、ウィンドウハンドル
>は40→1の順番で割り当てられるのではなかったかしら?(ちと自信なし)

トレースして見ましたが、そのとおりでした。

ウインドハンドルは逆から割り当てられるようです。

ご指摘、ありがとうございました。


12289 Re:蛇足 bonito 2001/07/14-15:56
記事番号12288へのコメント
どうでもいい事だとは思いつつ...(^^;

>>あまり正確な記憶ではありませんが、表番号は1→20、ウィンドウハンドル
>>は40→1の順番で割り当てられるのではなかったかしら?(ちと自信なし)
>
>トレースして見ましたが、そのとおりでした。
>
>ウインドハンドルは逆から割り当てられるようです。

編集表を設定していない.wfmについては、40(いつから20が40なったかは失念)から
(->39と)割り当てられますが、通常の(編集表付き).wfmのハンドルはやっぱり普通に1から
(->2と)順番に番号がふられていくと思いますが...。


12293 Re:一応解決しました 森藤 2001/07/14-23:58
記事番号12283へのコメント

>一応、解決できましたので、ご報告いたします。
>ONnojiさんのご意見がヒントとなりました。ありがとうございました。
>
> ウィンドウリスト取得 &WindowNo
> &FileNo = &WindowNo[2]
> &File = #表ファイル名(&FileNo)

ちょっと気になったもので一言
ウィンドウリスト取得コマンドはウィンドウハンドルを得るものですよね
#表ファイル名関数は表番号から表名を返してくるものだから
ウィンドウハンドルを与えても表ファイル名は得られないと思いますが。

ちなみにウィンドウ情報取得コマンド使ってみましたが
フォームより後に開いたウィンドウにはハンドルエラーがでました(^^;
12303 Re:これでは? pokopon 2001/07/15-08:40
記事番号12293へのコメント
森藤さん こんにちは
ご指摘ありがとうございました。

>> ウィンドウリスト取得 &WindowNo
>> &FileNo = &WindowNo[2]
>> &File = #表ファイル名(&FileNo)
>ちょっと気になったもので一言
>ウィンドウリスト取得コマンドはウィンドウハンドルを得るものですよね
>#表ファイル名関数は表番号から表名を返してくるものだから
>ウィンドウハンドルを与えても表ファイル名は得られないと思いますが。
>ちなみにウィンドウ情報取得コマンド使ってみましたが
>フォームより後に開いたウィンドウにはハンドルエラーがでました(^^;

確かに、フォームを開いた後のウィンドウには「ハンドルエラー」がでます。
こちらも確認しました。

では、
 &FileNo = &WindowNo[2]
改め
&FileNo = #表番号取得(&WindowNo[2])
ではどうでしょうか?




戻る