ユーザーフォームを不透明にする【ExcelVBA × WindowsAPI】
前回のExcelを半透明にしたのと違う点は
GetActiveWindow アクティブ ウィンドウのウィンドウ ハンドルを取得
こちらの機能を追加して使用
宣言コードはこちら Declare PtrSafe Function GetActiveWindow Lib "user32" Alias "GetActiveWindow" () As LongPtr
要はこれで、アクティブなウインドウのハンドルを取得し、ウィンドウを半透明にしていくだけ
実際に使用したコード-------------------------------------------------
■スクロールバー側
Private Sub ScrollBar1_Change()
'ハンドルという変数を整数型で用意
Dim ハンドル As LongPtr
'アクティブなハンドルの値を返す
ハンドル = GetActiveWindow
'取得したウインドウのスタイルに新しい拡張ウインドウスタイルを設定
SetWindowLongPtr ハンドル, -20, 524288
'透明度を設定
SetLayeredWindowAttributes ハンドル, 0, 255 * ScrollBar1.Value / 100, 2
End Sub
■標準モジュール側
Option Explicit
Declare PtrSafe Function SetWindowLongPtr Lib "user32" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long, ByVal dwNewLong As LongPtr) As LongPtr
Declare PtrSafe Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As LongPtr, ByVal crKey As Long, ByVal bAlpha As Long, ByVal dwFlags As Long) As Long
Declare PtrSafe Function GetActiveWindow Lib "user32" () As LongPtr
Public Sub Sample()
'ユーザーフォームを表示
UserForm1.Show
End Sub