過去の桐井戸端BBS (桐ver.8)
14912 フォーム閉じる(X)キーの処理をコマンドボタンと同じにするか無効にしたい taka 2002/01/29-17:10
フォームの最大化・最小化・閉じる(X)キーを備えたチャイルドで開くフォームを作成しています。
その時、終了時実行コマンド((X)キー)として下記の様な手続きを作成して呼び出すようにしています。

手続き定義開始 終了()
確認 "最終検査管理システムを終了します",&確認閉
if (&確認閉=0)
手続き終了
else
メソッド呼出し @閉じる.実行()  /* これは桐終了のダミーボタン */
end
手続き定義終了

ところが、メッセージは表示しますが、確認キーを押した瞬間フォームは消え、親フォームだけになります。
また、同じ手続きをコマンドボタンで呼び出せば、希望通りの動作で"はい"で終了し"キャンセル"で何もしません。

(X)キーでもコマンドボタンと同じ動作にするか無効にしたいのですが...

何方か教えてください。宜しくお願いします。
14914 Re:フォーム閉じる(X)キーの処理 悲しげ 2002/01/29-21:15
記事番号14912へのコメント
どもっ、takaさん、

方法のひとつは、タイトルバーに[×]牡丹を設定しないこと。
これは、フォームのオブジェクト属性/フォームタブで「コントロールメニュー」のチェックを外せば、そうなります。
そして、フォームを閉じるのは唯一、閉じる機能のコマンド牡丹オンリーとする。

方法のふたつめ。
[×]牡丹に手続きを実行させることは不可能ですから、閉じる機能のコマンド牡丹の方でも手続きを実行させないようにする
必要があります。
そうでなければ、閉じ方によって挙動が異なることになってしまいますから。
ではどうするかと云えば、「フォーム終了」イベントをチェックし、その手続き定義の中で必要な処理をさせます。
「フォーム終了」イベントはいかなる形でフォームを閉じた時にでも共通して実行されます
([Home]キーで表形式編集に降りた時すら実行されてしまってトホホだったこともありますが)。

「フォーム終了」時には実行不能な処理も中にはあるようですから
(これは仕様なのか不具合なのか不明)、その辺をテストの上で、上記どちらの方式にするか決めるとよいでしょう。
14915 Re:フォーム閉じる(X)キーの処理 悲しげ 2002/01/30-00:05
記事番号14914へのコメント
ついでに云えば、

>方法のひとつは、・・・(中略)・・・
>フォームを閉じるのは唯一、閉じる機能のコマンド牡丹オンリーとする。

とは云っても、[/]+[Q]とか[Alt]+[f・4]で閉じられたらお手上げです。(^^;)
でも、この機能までは殺さない方がいいと思います。
何かちょっと困った時の最後の手段に残しておいた方が安心なので。

14917 Re:フォーム閉じる(X)キーの処理 taka 2002/01/30-10:08
記事番号14915へのコメント
悲しげさん、早速有難う御座います。

>方法のひとつは、タイトルバーに[×]牡丹を設定しないこと。

確かに...この方法が一番スッキリしますが、最大化キーを活かしたかった為の[×]牡丹の処理でした。

>方法のふたつめ。...
>ではどうするかと云えば、「フォーム終了」イベントをチェックし、
>その手続き定義の中で必要な処理をさせます。「フォーム終了」
>イベントはいかなる形でフォームを閉じた時にでも共通して実行されます

そうですよね、昨日から色々やってみたんですが、「フォーム終了」の手続きだけはいかなる処理を設定しても,最終的に"終了"するみたいです、
だから「フォーム終了」なんでしょうね...

  フォーム終了イベント  ⇒ 終了処理
      ↓      ↑
  意図した手続きを実行 ↑ | 
      ↓      ↑ |手続き処理が記載してある時のみ
  意図した手続きの終了 ↑ |
      |→→→→→→↑
   

普段は、VBやDELPHIで作業をしているので、どうしても[×]牡丹で[キャンセル]を押したらキャンセルなんだから、
閉じる作業をキャンセルすると思っていましたが
出来ないんですね....
 悲しげさん色々有難う御座いました。諦めずもう少し挑戦してみます。

14925 Re:フォーム閉じる(X)キーの処理 悲しげ 2002/01/30-12:35
記事番号14917へのコメント
takaさんwrote
>そうですよね、昨日から色々やってみたんですが、「フォーム終了」の
>手続きだけはいかなる処理を設定しても,最終的に"終了"するみたいです、
>だから「フォーム終了」なんでしょうね...

この記述とその下の図の意味が、実はよく判らないのですが、(^^;)

>どうしても[×]牡丹で[キャンセル]を押したらキャンセルなんだから、
>閉じる作業をキャンセルすると思っていましたが

と云うことは、要するに[×]牡丹ではキャンセル終了、コマンド牡丹「閉じる」
では、何と云うか「OK」的に確定終了させたいと云うことでしょうか?
とすれば、話は全く逆になりまして、むしろ「フォーム終了」イベントには何も設定せず、
「OK」的牡丹の機能の記述において手続き実行をさせると云うのはどうでしょう?

と書いていて、何となく意図が判ってきました。
つまり「キャンセル」の意味が違う(^^;)。
いわゆる「OK」vs「キャンセル」の趣旨に非ずして、[×]牡丹を押した時でさえも閉じる挙動自体を「キャンセル」
させてみたい(つまり閉じない)ってことですね。
う〜ん、これは桐では無理なんじゃないでしょうか? 仮称「フォーム終了前」
イベントでも出来ない限り。(^^;)

14934 Re:フォーム閉じる(X)キーの処理 bonito 2002/01/30-15:05
記事番号14925へのコメント
フレッツ-ISDN-悲しげ さん、こんにちは

>つまり「キャンセル」の意味が違う(^^;)。いわゆる「OK」vs「キャンセル」の
>趣旨に非ずして、[×]牡丹を押した時でさえも閉じる挙動自体を「キャンセル」
>させてみたい(つまり閉じない)ってことですね。
>う〜ん、これは桐では無理なんじゃないでしょうか? 仮称「フォーム終了前」
>イベントでも出来ない限り。(^^;)

遊びで試してみました。
先ず、当該フォーム(仮称XX.wfm)の表の多重化をONにし、ワークスペースに「再開」
という名前のコマンドボタン{開く:XX.wfm}を置いた後、フォーム終了イベントで

手続き定義開始 フォーム::フォーム終了()
  メッセージボックス "終了確認","ほんとにやめるの?",アイコン=?,ボタン指定=2,&秒
  条件 (&秒=2) メソッド呼び出し @再開.実行()
手続き定義終了

一応動きます...駄目かなぁ...(^^;


14936 Re:フォーム閉じる(X)キーの処理(お礼) taka 2002/01/30-16:03
記事番号14934へのコメント
悲しげさん bonitoさん 有難う御座います。

始めに
>この記述とその下の図の意味が、実はよく判らないのですが、(^^;)
 手続きを実行した後の戻り先として、

>[×]牡丹を押した時でさえも閉じる挙動自体を「キャンセル」
>させてみたい(つまり閉じない)ってことですね。
>う〜ん、これは桐では無理なんじゃないでしょうか? 仮称「フォーム終了前」
>イベントでも出来ない限り。(^^;)

 言葉が足らなく大変失礼しました、その通りです。

またbonitoさんの
>遊びで試してみました。
>先ず、当該フォーム(仮称XX.wfm)の表の多重化をONにし、ワークスペースに「再開」
>という名前のコマンドボタン{開く:XX.wfm}を置いた後、フォーム終了イベントで
>
>手続き定義開始 フォーム::フォーム終了()
>  メッセージボックス "終了確認","ほんとにやめるの?",アイコン=?,ボタン指定=2,&秒
>  条件 (&秒=2) メソッド呼び出し @再開.実行()
>手続き定義終了
>
>一応動きます...駄目かなぁ...(^^;

いいえ駄目では有りません、遊びで試して....で出来る事を私は丸二日間悩んでいました。
今回は、同じtblを使いフォーム(10個位)を切り替えて処理するので、少し表番号を考えつつ
再度挑戦し様と思います。

悲しげさん bonitoさん
貴重なアドバイス有難う御座いました。今後とも宜しくお願いします。
14937 Re:フォーム閉じる(X)キーの処理(自己レス) taka 2002/01/30-16:19
記事番号14936へのコメント

>今回は、同じtblを使いフォーム(10個位)を切り替えて処理するので、少し表番号を考えつつ
>再度挑戦し様と思います。

 と書いたものの、実際組み込み挙動を見たらフォームを切り替える毎に確認文が出てしまう問題が新たに発生...頭がイタイ。
ヤッバリ無理なのかなー.....

何か打開策有りましたら教えてください。まだ諦めません。
色々有難う御座いました。
14941 Re:フォーム閉じる(X)キーの処理(自己レス) bonito 2002/01/30-19:23
記事番号14937へのコメント
takaさん、こんばんは
今モバイル状態で書いているので文章が少し変になるかも知れませんが、

>実際組み込み挙動を見たらフォームを切り替える毎に確認文が出てしまう
これは「...は更新されています保存しますか」って奴ですね。
度々同じ手法で芸がないんですが、一般的にはワークエリア(でなくても可...)
に名称「保存終了」なるボタンをつくり{機能=閉じる;パラメータ=保存する}
とした後、フォームのオプション終了時にこのボタン名を指定すれば終了確認の
メッセージは出ない筈です。

あとサブフォームの切り替え等でこの手(閉じる、保存、オプ終了時)が使えない
場合なんかに、それこそワークエリアに「上書保存」{機能=上書き保存}ボタン
を置いてこれをメソッド呼び出しするとか...。


>今回は、同じtblを使いフォーム(10個位)を切り替えて処理するので、
>少し表番号を考えつつ
について余計な事かもしれませんが、表番号は0にして(割り振りは桐に任せて)、
必要に応じて変数に表番号を取得する方法をとるのが、最近の桐ではスマートだし
汎用性や応用性を考えてもよりよい選択のような気がします。
この辺のいろいろについては私自身、悲しげさんのサジェスチョンに負うところ
大です。 もちろんそれ以外についても...。
14942 Re:フォーム閉じる(X)キーの処理(自己レス) 悲しげ 2002/01/30-20:43
記事番号14941へのコメント
bonitoさんwrote

>>実際組み込み挙動を見たらフォームを切り替える毎に確認文が出てしまう
>これは「...は更新されています保存しますか」って奴ですね。

う〜ん、これはバックアップ有りを指定した表を閉じる時のメッセージではなく
て、「フォーム終了」で設定した確認メッセージのことではないでしょうか?
「フォームを切り替える」と云うことは、そのフォームを「閉じて」、別なフォ
ームを「開く」ことになるとすれば、その都度「フォーム終了」イベント(及び
「フォーム開始」イベント)が発生してしまう、とか?

14947 Re:フォーム閉じる(X)キーの処理(一旦閉めましょう) taka 2002/01/31-08:48
記事番号14942へのコメント
bonitoさん、悲しげさん有難う御座います。

bonitoさん
>について余計な事かもしれませんが、表番号は0にして(割り振りは桐に任せて)、
>必要に応じて変数に表番号を取得する方法をとるのが、最近の桐ではスマートだし
>汎用性や応用性を考えてもよりよい選択のような気がします。

今回始めて桐に挑戦で、表番号など何も考えず作成してしまったので...
最終的にはご指摘の通り「表番号0」とすべきなんでしょうね。
[×]牡丹以外のデバックはほぼ終了したのでこれから取り掛かります。

悲しげさん
>う〜ん、これはバックアップ有りを指定した表を閉じる時のメッセージではなく
>て、「フォーム終了」で設定した確認メッセージのことではないでしょうか?
>「フォームを切り替える」と云うことは、そのフォームを「閉じて」、別なフォ
>ームを「開く」ことになるとすれば、その都度「フォーム終了」イベント(及び
>「フォーム開始」イベント)が発生してしまう、とか?

 ご観察の通りです。

皆さん有難う御座いました。せっかく頂いたアドバイスですが、今回は期日も
余り無いので、[×]牡丹は有無も言わさず閉じる事としようかなと思っておりますが、
この件は引き続き検討して行こうと思います。
いい結果が出たら、書かせてもらいます....
(出来ない可能性の方が高い?・無意味なのかな?)

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

戻る