Access VBA質問箱 IV

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

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


9 / 2251 ツリー ←次へ | 前へ→

【13229】画面リサイズを不可にするとタイトル上のボタンがクラッシックスタイル表示... バンブー 18/2/9(金) 18:18 質問[未読]
【13230】Re:画面リサイズを不可にするとタイトル上... hatena 18/2/10(土) 17:54 回答[未読]
【13231】Re:画面リサイズを不可にするとタイトル上... バンブー 18/2/10(土) 20:29 回答[未読]
【13232】Re:画面リサイズを不可にするとタイトル上... hatena 18/2/12(月) 12:32 回答[未読]
【13233】Re:画面リサイズを不可にするとタイトル上... バンブー 18/2/13(火) 11:47 お礼[未読]

【13229】画面リサイズを不可にするとタイトル上の...
質問  バンブー  - 18/2/9(金) 18:18 -

引用なし
パスワード
   顧客の要望でAccess2010,2013,2016のいずれかが入っている
パソコンで動作できるようにするために、
Access2010でアプリケーションを作成しているのですが、
以下のコードで画面のリサイズを不可にすると、
Access2013、Access2016で実行した時に画面のタイトル上に
ある最小化/最大化/閉じるボタンが、マウスカーソルを
画面の縁に移動した時にクラッシックスタイルのボタン表示に
変わってしまいます。

--------------------------------
Dim hWnd As Long

hWnd = Application.hWndAccessApp
SetWindowPos hWnd, HWND_TOP, 0, 0, 960, 720, SWP_NOMOVE
hWnd = GetSystemMenu(hWnd, 0)
RemoveMenu hWnd, SC_SIZE, MF_BYCOMMAND
--------------------------------

原因と対処方法判りますでしょうか?
ご教授をお願いいたします。

【13230】Re:画面リサイズを不可にするとタイトル...
回答  hatena  - 18/2/10(土) 17:54 -

引用なし
パスワード
   動作検証できるように宣言部も含めて、実際に動作するコードを提示してもらえませんか。
あと、OSのバージョンも提示してください。

下記の2つの方法で実験してみましたが、どちらも症状は再現できませんでした。
(Windows10, Access2016)

Excel VBA を学ぶなら moug モーグ | 即効テクニック | Access本体のボタンやシステムメニューを無効化する
www.moug.net/tech/acvba/0010003.html

Accessウィンドウを表示しない方法 Access2007以降版 - hatena chips
hatenachips.blog.fc2.com/blog-entry-389.html


なお、RemoveMenu や DeleteMenu でリサイズを無効にした場合、マウスをフォームの境界に持っていくと、リサイズ可能カーソルに変化するのに、リサイズできないという矛盾した状態になりますので、SetWindowLon で、WS_THICKFRAME属性を除去する方法の方が私は好みです。

【13231】Re:画面リサイズを不可にするとタイトル...
回答  バンブー  - 18/2/10(土) 20:29 -

引用なし
パスワード
   ▼hatena さん:
>動作検証できるように宣言部も含めて、実際に動作するコードを提示してもらえませんか。

Public Declare Function SetWindowPos Lib "USER32" _
  (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, _
   ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, _
   ByVal fuFlags As Long) As Long
Public Declare Function GetSystemMenu Lib "USER32" _
  (ByVal hWnd As Long, ByVal fRever As Long) As Long
Public Declare Function RemoveMenu Lib "USER32" _
  (ByVal hMenu As Long, ByVal uItem As Long, ByVal fuFlags As Long) As Long
  

Public Const SWP_NOMOVE = &H2
Public Const HWND_TOP = &H0
Public Const SC_SIZE = &HF000
Public Const MF_BYCOMMAND = &H0&

Dim hWnd As Long

hWnd = Application.hWndAccessApp
SetWindowPos hWnd, HWND_TOP, 0, 0, 960, 720, SWP_NOMOVE
hWnd = GetSystemMenu(hWnd, 0)
RemoveMenu hWnd, SC_SIZE, MF_BYCOMMAND


>あと、OSのバージョンも提示してください。
Windows7
Access2010,Access2016Runtime
です。
Access2010で作成し、Access2010で実行すると問題ないですが、
Access2016Runtimeで実行すると症状が出ます。
※Access2016で作成したものは多分ならないと思います。

>Accessウィンドウを表示しない方法 Access2007以降版 - hatena chips
>hatenachips.blog.fc2.com/blog-entry-389.html
>
>
>なお、RemoveMenu や DeleteMenu でリサイズを無効にした場合、マウスをフォームの境界に持っていくと、リサイズ可能カーソルに変化するのに、リサイズできないという矛盾した状態になりますので、SetWindowLon で、WS_THICKFRAME属性を除去する方法の方が私は好みです。

ご教授ありがとうございます。
上記のURLを参考に、SetWindowLon で、WS_THICKFRAME属性を除去したらマウスをフォームの境界に持っていっても、最小化/最大化/閉じるボタンがクラッシックスタイル表示に変わらなくなりました。

変更した点は以下です。

Public Declare Function GetWindowLong Lib "user32" _
  Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
  
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" _
  (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long

Public Const SWP_DRAWFRAME = &H20
Public Const GWL_STYLE = (-16)
Public Const WS_THICKFRAME = &H40000

Wstyle = GetWindowLong(hWnd, GWL_STYLE)
Wstyle = Wstyle And Not WS_THICKFRAME
SetWindowLong hWnd, GWL_STYLE, Wstyle

を追加し、SetWindowPosを

SetWindowPos hWnd, HWND_TOP, 0, 0, 960, 720, SWP_NOMOVE Or SWP_DRAWFRAME

に変更。

ただ、タイトル部分にマウスを移動してタイトルをクリックするとまだ最小化/最大化/閉じるボタンがクラッシックスタイル表示に変わります。
ダブルクリックしたり、クリックしたままドラッグ移動すると消えるのですが、何故そうなるのか不明です。

何か原因が判りましたらご教授お願いいたします。

【13232】Re:画面リサイズを不可にするとタイトル...
回答  hatena  - 18/2/12(月) 12:32 -

引用なし
パスワード
   >>あと、OSのバージョンも提示してください。
>Windows7
>Access2010,Access2016Runtime
>です。

動作検証してみました。
ただし、Windows7の環境はないのて、Windows10 で。
また、Runtimeもインストールしてないので、
Access2010 で作成して、Access2016のランタイムモードで検証しました。
症状は再現しませんでした。

>Access2010で作成し、Access2010で実行すると問題ないですが、
>Access2016Runtimeで実行すると症状が出ます。
>※Access2016で作成したものは多分ならないと思います。

特定の環境における現象だとすると原因究明や対策は難しいですね。

>ただ、タイトル部分にマウスを移動してタイトルをクリックするとまだ最小化/最大化/閉じるボタンがクラッシックスタイル表示に変わります。
>ダブルクリックしたり、クリックしたままドラッグ移動すると消えるのですが、何故そうなるのか不明です。

そうですか。残念ですね。

どうしても気になるようなら、最小化/最大化/閉じるボタンを表示にして、フォーム上に代替のボタンを配置するぐらいしかなさそうです。

【13233】Re:画面リサイズを不可にするとタイトル...
お礼  バンブー  - 18/2/13(火) 11:47 -

引用なし
パスワード
   ▼hatena さん:
ご確認頂きありがとうございました。
先方に確認して頂き一旦はOKになりましたので、
ここまでの対応で完了にしておきます。

また、何かありましたらご教授宜しくお願い申し上げます。

9 / 2251 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1009982
(SS)C-BOARD v3.8 is Free