LoginSignup
1
0

More than 5 years have passed since last update.

VBA GetSystemMatrix WinApi 64/32 共用Class

Posted at

WinAPI はClassモジュールにするのが有効かもしれない

今の共用関数は長いので、単純に値を返すものは有効みたいです
ここでも取り上げましたが、画面のサイズというか解像度、それを返すGetSystemMatirxです

注意点

Classモジュールの名前は指定した名前にしてください。
それがオブジェクト名になります。
厳密に言うとオブジェクト名ではありませんが、インテリセンスが発動するのです。

コード

標準モジュール

Sub DisplaySizeClassUsingStandardModle()
'https://www.moug.net/tech/acvba/0020033.html
'ここのサンプルからClassモジュールを作成し書き換えました
'この Sub Procedure(サブプロシージャ)は標準モジュール用のコードです
'Display 画面の縦と横のサイズ(解像度)を長整数型(long)で取得します。単位はPixcelです
'このSub Procedure(サブプロシージャ)はDisplaySizeClassが必要です。
'Class 用の変数とNew命令
Dim c As DisplaySizeClass : Set c = New DisplaySizeClass
Debug.Print c.GetDisplaySizeXPixels, c.GetDisplaySizeYPixels
End Sub

Classモジュール

Option Explicit
'----------------------------
' Display Class Module
'----------------------------
'このScriptはVBAのクラスモジュール用です
' 標準モジュールでは動きません
' Classモジュールの名前をVBEにおいてF4を押しプロパティウィンドウを出し、(オブジェクト名)に半角で
' DisplaySizeClass
' と入力してください
' GetsystemMetrixとは...
'"たとえば、GetSystemMetrics 関数は、オペレーティング システムの異なる機能を指定する 75 個の定数のいずれかを取得します。
'関数により返される情報は、渡した定数により異なります。GetSystemMetrics を呼び出すには、75 個のすべての定数ではなく、使用する定数のみを含めます。
'メモ   定数を表す値を渡すよりも、定数を定義する方法をお勧めします。定数は Microsoft 製品がバージョンアップしても変わりませんが、定数値は変更する可能性があります。
'DLL 関数に必要な定数は一般的に予測不可能なものが多いので、特定の値を返すためには、目的の関数のドキュメントを参照して、渡す定数を確認する必要があります。


#If VBA7 Then
Private Declare PtrSafe Function GetSystemMetrics _
Lib "USER32" _
(ByVal nIndex As Long) As Long
#Else
Private Declare Function GetSystemMetrics Lib "USER32" (ByVal nIndex As Long) As Long
#End If
Private Const SM_CXSCREEN As Long = 0
Private Const SM_CYSCREEN As Long = 1

'取得 Property Get
'設定 オブジェクト Property Set
'設定 それ以外 Property Let

'アクセサ
Property Get GetDisplaySizeXPixels() As Long
GetDisplaySizeXPixels = GetSystemMetrics(SM_CXSCREEN)
End Property
Property Get GetDisplaySizeYPixels() As Long
GetDisplaySizeYPixels = GetSystemMetrics(SM_CYSCREEN)
End Property

'Sub DisplaySizeClassUsingStandardModle()
''https://www.moug.net/tech/acvba/0020033.html
''ここのサンプルからClassモジュールを作成し書き換えました
''この Sub Procedure(サブプロシージャ)は標準モジュール用のコードです
'Dim c As DisplaySizeClass
'Set c = New DisplaySizeClass
'Debug.Print c.GetDisplaySizeXPixels, c.GetDisplaySizeYPixels
'End Sub

長所

標準モジュールが軽くて見やすくなる

Mougのページのコードを共用のClassに変えました
こうすると標準モジュールではDim と Set NewでClassが使えます。
しかし、
標準モジュールの上部にはDeclare、宣言がなくなります。Class用の1行だけ増えただけです。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0