Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1811 / 9994 ←次へ | 前へ→

【11466】Re:閉じるボタンと BeforeUpdateイベント
回答  YU-TANG  - 10/2/18(木) 23:45 -

引用なし
パスワード
   わさびさん、こんばんは。

> アプリケーションの「閉じるボタン」は考えてませんでした。
> が、私の力では対応できないため、今回は無視いたします。

そうですか。
では自フォームのみ対象ということで。

API 必須になりますが、たぶんアプローチとしては大きく

1) フォームをサブクラス化してメッセージをフック(たぶん WM_NCLBUTTONDOWN あたり)
or
2) それ以外

になるのではないかと思います。
確実なのは 1 なのですが、VBA 単独でのサブクラス化は
危険すぎて勧められないので、必然的に 2 になります。

考え方としては、ベタですがおそらくこんな感じ。

If A) 仮想マウス左ボタンが押されていたら
  If B) マウスカーソルが自フォームの閉じるボタンの真上にあれば
    ' C) 閉じるボタンがクリックされた!(たぶん…)

1 よりも精度は落ちますが(理論上、誤判定の余地が残る)、
実用には耐えるはず。

必要と思われる API を列挙しておきます。

A)
GetAsyncKeyState
GetSystemMetrics(SM_SWAPBUTTON)

B)
GetCursorPos
SendMessage(WM_NCHITTEST)

組んでいくと他にも必要になるかもしれませんが。

一般的にはもっと、ウィンドウの検査とか、ウィンドウが重なっている
場合の考慮とかが必要ですが、BeforeUpdate イベントが走る状況なら
自フォームが可視・アクティブと考えてほぼ間違いないと思われるので、
かなり簡略化できるでしょう。

なお同件のトピック準備中ですが、今週中はまず間に合わないので、
たぶん待つよりご自分で書いたほうが早いです。
あるいは、もっと良い案があるかもしれないので、他の方のレスを
お待ちになってみてもよいかと思います。

それでは。

1,029 hits

【11456】閉じるボタンと BeforeUpdateイベント わさび 10/2/16(火) 13:24 質問[未読]
【11462】Re:閉じるボタンと BeforeUpdateイベント YU-TANG 10/2/18(木) 1:56 質問[未読]
【11463】Re:閉じるボタンと BeforeUpdateイベント わさび 10/2/18(木) 8:41 発言[未読]
【11466】Re:閉じるボタンと BeforeUpdateイベント YU-TANG 10/2/18(木) 23:45 回答[未読]
【11468】Re:閉じるボタンと BeforeUpdateイベント YU-TANG 10/2/19(金) 10:28 回答[未読]
【11472】Re:閉じるボタンと BeforeUpdateイベント わさび 10/2/19(金) 16:57 お礼[未読]
【11523】Re:閉じるボタンと BeforeUpdateイベント YU-TANG 10/3/12(金) 3:57 回答[未読]

1811 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078193
(SS)C-BOARD v3.8 is Free