過去の桐井戸端BBS (桐ver.8)
13526 ウィンドウを作成している表を破棄終了するには? アックン 2001/10/16-16:58
こんにちは。
Ver.8sp6のイベントで教えてください。
ウィンドウを作成している表を破棄終了できますか?

1)フォームの編集対象表の場合
   フォームのウィンドウを閉じるとき、編集対象表を破棄終了したい。
2)フォームなしの表の場合
   表を表示しているウィンドウを閉じるとき、その表を破棄終了したい。

現在、過去ログにアクセスできない状態なので、調べられませんでした。

CD-ROMがあるのを今思い出した。(^^;う....

アックン(=^・^=)

13527 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/16-17:11
記事番号13526へのコメント
閉じるときに保存するかどうか聞いてくるダイアログ(↓)を出さないで、必ず破棄終了したいのですが。

  ・・・・.tbl
  は更新されています。保存しますか?
  はい(Y) いいえ(N) キャンセル


アックン(=^・^=)

13532 Re:ウィンドウを作成している表を破棄終了するには? pokopon 2001/10/16-19:07
記事番号13527へのコメント
アックンさん こんにちは


1)フォームの編集対象表の場合
ダミーでとりあえずコマンドボタン作ります。
これはワーク領域におきます。
機能名で ファイル 終了 を選択し、機能名に「破棄する」を選択する
----- HELPから
【機能パラメータ】
<終了モード>
【説明】
式として評価した結果が{"保存する"|"破棄する"|"確認する"}のいずれかである
こと
省略値は"確認する"
【起動条件など】
次の機能は実行できない

2)フォームなしの表の場合 (&WinNoにウインドウ番号が入っているとして)
ウィンドウ終了 &WinNo
中止 表 編集対象表
で、破棄終了

ウィンドウ終了 &WinNo
終了 表 編集対象表

で良いかと思います。
このとき、更新ファイルの場合、確認しにきましたっけ?

私の駄作、「リモコン君」ではそうしてうまくいっていますけど。


13534 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/16-21:04
記事番号13532へのコメント
pokoponさん,こんばんは。
さっそくていねいな説明を書いてくださって、ありがとうございました。
今自宅のパソコンからで、これには桐をインストールしてないため、返事にあいまいな点がふくまれること、ごかんべんください。

さて、1のケースは、そのコマンドボタンをメソッド呼び出し(実行)すればいいようですね。
ぼくはいつも「閉じる」しか使ってなかったせいか、そのような機能名があることに気づきませんでした。

2のケースですが、ウィンドウ終了コマンドは当初多用したものの、動作が不定なことがあっておかしいなと思っていたら、
どうやらこのコマンドは自身のウィンドウに対して発行してはいけないとマニュアルに記述があったようで、
それ以来使わなくなって、以後はもっぱら機能名「閉じる」を利用しております。
(マニュアルを今確認できないため、記憶が不確かです。)

また明日(水曜)、試してご報告いたします。おつかれのところをありがとうございました。

ところで、リモコン君というのはどのようなものでしょうか。
検索や絞込やらをダイアログフォームで便利に行うとか?

13535 Re:ウィンドウを作成している表を破棄終了するには? pokopon 2001/10/16-22:09
記事番号13534へのコメント
アックンさん こんばんは

>さて、1のケースは、そのコマンドボタンをメソッド呼び出し(実行)すればいいようですね。
>ぼくはいつも「閉じる」しか使ってなかったせいか、そのような機能名があることに気づきませんでした。
なんかどうしたいのかが分からないのですが、単に「破棄終了」をコマンドボタンをクリックして実行したいのなら、
そのままコマンドボタンに破棄終了を設定すればよいと思うのですけど。
「イベントで」と思っていたので、前回のような記述となりました。コマンドボタンをクリックして実行できるのなら、
イベント不要の上記方法をお試し下さい。
単に終了するなら、

>どうやらこのコマンドは自身のウィンドウに対して発行してはいけないとマニュアルに記述があったようで、
確かに「自分自身に対してはできない」です。そういうことではなくて、私は、ヌル表のフォームから、別に開いている表ウインドウを
閉じる(この場合には、この手続きを実行しているのはヌル表のフォームです)ことかと思っておりました。
実行している自分自身のフォームのことですか、終わりたいのは?

>ところで、リモコン君というのはどのようなものでしょうか。
【多遊】さんのところのHP、ダウンロードコーナーにあります。
http://isweb8.infoseek.co.jp/animal/mokuchan/download/dl-list.htm


13540 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/17-11:53
記事番号13535へのコメント
pokoponさん、こんにちは。
続けてどうもありがとうございます。
結果、おかげさまでうまくいきましたので、報告を。

私、前回ちょっとケースを混同して書いていたようです。
先ず1のケースを考えてみました。(2のケースは後ほど検証してみます。)

今回の主目的は、保存するか破棄するかを聞いてくるダイアログを表示しないで、破棄終了したいというものです。
(破棄終了できるなら保存終了も可能ですから、それはそれで応用しますが、話がややこしくなるので、今回は破棄終了だけ扱うことにします。)

たとえば一覧表フォーム(kevあり)を単独で、もしくはメニューフォーム(ダイアログ)から開くとします。
一般にウィンドウを終了するときは、次のいずれかで可能ですね。
a)メニューバー
b)タイトルバー上のXアイコン
c)/メニュー
d)コマンドボタン
e)イベント

(a)(b)(c)のどれを操作しても、ダイアログを表示しないで破棄終了するようにしたいのですが、
この一覧表フォームには(d)のユーザインターフェースを採用できません。
そこで、こうしてみました。

隠しコマンドボタン(オブジェクト名:b_1)
機能名    機能パラメータリスト
-----------------------------------
表示     確定する
手続き実行  ナントカ ←これはちょっとやりたいことがあって、ここに入れているだけです。
閉じる    破棄する

コマンドボタンを実行する方法は次のいずれかとしました。

・フォームの実行コマンドの「終了時」に b_1 と設定する。

・イベントのフォーム終了イベントから実行する。

   method 戻り値 = &秒 , @b_1.実行()

こうすることで、(a)(b)(c)(d)(e)のどれからでも、当該ダイアログを表示しないで破棄終了できました。

どうもありがとうございました。

アックン(=^・^=)
13543 Re:ウィンドウを作成している表を破棄終了するには? pokopon 2001/10/17-13:45
記事番号13540へのコメント
アックンさん こんにちは

>一般にウィンドウを終了するときは、次のいずれかで可能ですね。
>a)メニューバー
>b)タイトルバー上のXアイコン
>c)/メニュー
>d)コマンドボタン
>e)イベント
>(a)(b)(c)のどれを操作しても、ダイアログを表示しないで破棄終了するようにしたいのですが、
>この一覧表フォームには(d)のユーザインターフェースを採用できません。

なぜ採用できないのか?は分かりませんが、私のところでは、フォームでは上記a)〜c)を全て消しています。
(自分が使うのなら別ですが、他の方が汎用的に使う場合に限り)

出来るだけ「×」ボタンを使った終了方法(桐に限らず)をしないように、現場の職員に指導、徹底しております。
正しい終了手続きを実行させたいからです。

ですので、必ず自滅用の実行ボタン(終了ボタン)をつけ、「必ずここをクリックして」としています。

「×」なら、何が起きるか???ですので。

それでは。

13544 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/17-15:40
記事番号13543へのコメント
pokoponさん、どうも。

えっと、私は/メニューもよく使います。
(d)コマンドボタンを隠しにしないで、表に配置してもいいですね。
そうすれば一応すべてに対応できますから、汎用性という点からはいいかも。
ユーザは、1.私自身、2.全国の知らない人 です。

ケース2は質問を改めてこのアーティクルにアップしました。

アックン(=^・^=)
13545 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/17-15:41
記事番号13527へのコメント
続けて2のケースですが、どなたかご存じの方、回答をお願いします。

一括処理でなくてイベントです。
メニューフォームから、フォームがない表を開いてウィンドウ作成します。
表 "ナントカ"
並べ替え ・・
ジャンプ ・・
  :
mkwin 表 , 位置=( &count*25-25 , &count*25-25 ) , サイズ=( 900 , 525
) , h=&win[&count] ・・
として直ちに会話に降ります。

この表を
a)メニューバー
b)タイトルバー上のXアイコン
c)/メニュー
d)コマンドボタン
e)イベント
のうちの(a)(b)(c)のうちいずれかの操作で閉じるときに、
表が更新されていると当該ダイアログが出現してわずらわしいので、
表示しないようにできるでしょうか?

最初に質問したときは破棄終了と書きましたが、
更新があれば保存終了、なければ破棄終了とします。
(もっとも、更新がなければ当該ダイアログは出ませんが。)

これは今思いついたのですが、
メニューフォーム自体を最小化しています(タイマー1使用)から、
タイマー2を使って・・・うーむむ、表のウィンドウを閉じる操作を取得できそうにないか.....。

アックン(=^・^=)
13547 Re:ウィンドウを作成している表を破棄終了するには? pokopon 2001/10/17-16:38
記事番号13545へのコメント
アックンさん たびたびですが

>一括処理でなくてイベントです。
>メニューフォームから、フォームがない表を開いてウィンドウ作成します。

ということは、単に桐から「開く」→「表ファイル」と同等のことですよね。
この表を、
>a)メニューバー
>b)タイトルバー上のXアイコン
>c)/メニュー
で終わるのですから、単独で開いた表ファイルを閉じる操作と同等です。

これを、別のフォームから操作してa)〜c)を無効というかコントロールするのはちょっと無理なのではないでしょうか?まして、イベントでは。

なぜなら、イベントを記述できるのは「フォーム」だからです。このフォームに対して何かしらのアクションをすれば、可能でしょうが、
これとは独立した単なる表ファイルでは、表ファイルのあるウインドウにはイベントを置けない訳ですので、制御そのものが難しいのではないかと思います。
これって、超ウルトラ技ではないかと。
桐自体のシステムをいじると何とかなるのか??? 私には思い浮かびません。

>これは今思いついたのですが、
>メニューフォーム自体を最小化しています(タイマー1使用)から、
>タイマー2を使って・・・うーむむ、表のウィンドウを閉じる操作を取得でき
>そうにないか.....。

ですので、このフォームに対してのアクションを拾っての「終了」はできます。
が、それとは完全に独立した別のウインドウに対してのアクションを、このフォームのイベントで拾えなければなりませんね。
これも、難しいと思います。だって、アクションそのものが「終了」のアクションでしょ。
アクションが生じた時点で「確認ダイアログ」が出てきますから。

まてよ??? このダイアログ自体に対して、キーを送信できれば(例えばYとかNとか)可能かも?(ちょこっとダイアログは表示されますけど)。
このダイアログそのものは、Windowsのメッセージボックスの部品を使っています(と思います)。タイトルが「桐」のダイアログですよね。
裏でWSHなどのスクリプトを走らせ(サーチさせながら)、
「桐」のタイトルのあるウィンドウを見つけたら、すぐに「Y or N」をそのボックスに対して送信する
(すなわち、Y、Nキーを押したのと同等の操作)ことで可能かも?
これこそ「超〜〜〜ウルトラ技」かもしれません。

ということで、ここまでして「確認ボタンがわずらわしい」ということでの「無効化」をする意味があるのでしょうか?
私は、「確認」してくれた方が、ユーザーとしてもありがたいのではと思っています。

もう少し方法を考えてみます。

13549 Re:ウィンドウを作成している表を破棄終了するには? hidetake 2001/10/17-16:53
記事番号13547へのコメント
>当該ダイアログが出現してわずらわしい

「共有更新」で開くなんて言うのは無しでしょうね! (^_^ゞ


13550 Re:ウィンドウを作成している表を破棄終了するには? pokopon 2001/10/17-17:08
記事番号13549へのコメント
hidetakeさん こんにちは

>「共有更新」で開くなんて言うのは無しでしょうね! (^_^ゞ

はい、とりあえず。
期待度100%です。

13551 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/17-17:19
記事番号13547へのコメント
どうもお付き合いありがとうございます。
まず最初にご指摘の「これとは独立した単なる表ファイルでは、表ファイルのあるウインドウにはイベントを置けない訳ですので、
制御そのものが難しいのではないか」という点は理解しておりますので、
それで次ぎにご指摘された点のメニューフォームから制御できるだろうかということを探ってみたいんですね。

表のウィンドウを閉じるタイミングをメニューフォームのkevから検知できればいいのですが。
さらに欲を言えば、表を更新したかどうかも検知できればいいですね。

ちなみに現在、メニューフォームからフォームや表のウィンドウを作成後に、
メニューフォームを自動的に最小化しておいて、
タイマー1イベントで #ウィンドウハンドル(n) を用いて
それらのウィンドウをすべて閉じたときに、メニューフォームのサイズを復元しています。
(これはかなり以前、いかすぱげてぃさんから教わったテクニックです。
 彼は今おそらく忙しくヒマだと思うのですが(^^;?、読んでるかなあ...なんちゃって。)

さて、こういった感じでできればいいのですが、それらしき関数は見つからないし、後でメソッドにもあたってみます。

>ということで、ここまでして「確認ボタンがわずらわしい」ということでの「無効化」をする意

同時に5個前後の表をウィンドウ作成しておりまして、それがまた異なる表で何度もあって、毎日煩わしいんです。これ、性格かも。(^^;
おっしゃるように、確認するのが正統だと思います。
保存終了すべきところを破棄終了したとか、その逆にしたとか、そのような操作ミスを減少させるメリットはあるんじゃないかなとは思っております。

桐の外から制御するのは避けたいと思います。
私、そういうテクニックにからきし弱いもんで、自分でメンテナンスできないもんですから。

アックン(=^・^=)
13553 Re:ウィンドウを作成している表を破棄終了するには? pokopon 2001/10/17-17:38
記事番号13551へのコメント
アックンさん こんにちは

>同時に5個前後の表をウィンドウ作成しておりまして、それがまた異なる表で何度もあって、毎日
>煩わしいんです。これ、性格かも。(^^;
>おっしゃるように、確認するのが正統だと思います。

表ファイルが「常に固定」でなくても「一斉表ファイル終了」、もちろん、「保存/破棄」を指定しながらは可能です。
いちいち5回も「×」をクリックするよりも、「一斉表ファイル終了」用のコマンドボタンをはっつけた、
ちっこいフォームを常時表示させておき、終わるときはそこをクリック・・・・、こっちの方が簡単かと。
その場合に、任意の表ファイルにしたければ、表ファイル番号をサーチして、逐次終了処理をすればよいかと思います。
その場合には、表ファイル名、終了方法をテーブル化したもを用意し、それを読みこんで、
この一斉終了処理を行なえば、お好みのスタイルで終了処理が可能となります。
(任意の表ファイルの遠隔操作の手法は、「リモコン君」にあります)

どう〜〜〜しても、絶対に5回「×」を儀式としてクリックしたいのであれば・・・・、これって、好みの問題?? 性格の問題??

13554 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/17-17:52
記事番号13549へのコメント
hidetakeさん、こんばんは。

さっそくやってみました。
今までは「専有」オンリーだったので、「共有更新」にすればダイアログが出ないんですね。
更新があれば保存終了、更新がなければ破棄終了してくれます。
わお。これは知りませんでした。

専有モードと異なる点として、
行追加してデータ入力中という編集状態で閉じたとき、
表示に戻してレコードを確定しますね。
そのあたりのプログラムを手直しする必要がありそうです。

他にも影響するようなことがありますか?

私は一人でしか桐を使わないから、どんなモードでもいいんですけど。(^^;
世間ではいろんなモードをケースバイケースで使い分けるのが普通なんだろう
なあ。

アックン(=^・^=)


13555 Re:ウィンドウを作成している表を破棄終了するには? pokopon 2001/10/17-17:56
記事番号13553へのコメント
あっつ、個別に、とあえず2つは終わって3つは残し・・・・なんてことはあるのかな?
であれば、「カーソルの当たっている表」ファイルだけをターゲットとして、破棄/保存の選択ボタンをつけた知古−フォームで対応可能ですね。

フォームのイメージ
-----------------------------------
|保存| |破棄| |全保存| |全破棄|
-----------------------------------
これだけがある、簡単なフォームです。一番手前のウィンドウの表ファイルに対して(任意の表ファイル)イベントを発生させます。

こっちの方が、簡単ですよ。マニアックじゃないし。
できれば、桐のタスクバーに張り込めればさらに良いんですけど。(これこそ、カスタマイズ??)。


13556 Re:ウィンドウを作成している表を破棄終了するには? hidetake 2001/10/17-18:03
記事番号13554へのコメント
>今までは「専有」オンリーだったので、「共有更新」にすればダイアログが出
>ないんですね。

「バックアップ指定なし」でもダイアログは出ません (^^;


13557 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/17-18:28
記事番号13556へのコメント
>「バックアップ指定なし」でもダイアログは出ません (^^;
え”。。。。そうでした。<(^^;
13558 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/17-18:36
記事番号13555へのコメント
提案ありがとうございます。
せっかくですが、他フォームを表示するのは画面上でじゃまなのと(それでメニューフォームを最小化しているほどです)、
操作がわずらわしいから採用したくないんです。
動機はいつもこれですが、実はユーザインタフェースの観点から先に述べたメリットを重視してます。

リモコン君はま後日時間つくってダウンロードさせていただきます。
13559 Re:ウィンドウを作成している表を破棄終了するには? アックン 2001/10/17-18:40
記事番号13557へのコメント
>え”。。。。そうでした。<(^^;
って、それはかなり恐いっすねってことで、DOS時代からしてません。(^^;

うーむむ・・・やっぱり困っちゃう〜。

戻る