AW: Schwebende Userform
25.01.2023 16:49:30
Nepumuk
Hallo Gert,
teste mal in einem neuen Userform:
Option Explicit
#If Win64 Then
Private Declare PtrSafe Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongPtrA" ( _
ByVal Hwnd As LongPtr, _
ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongPtrA" ( _
ByVal Hwnd As LongPtr, _
ByVal nIndex As Long, _
ByVal dwNewLong As LongPtr) As LongPtr
#Else
Private Declare PtrSafe Function GetWindowLongPtr Lib "user32.dll" Alias "GetWindowLongA" ( _
ByVal Hwnd As LongPtr, _
ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLongPtr Lib "user32.dll" Alias "SetWindowLongA" ( _
ByVal Hwnd As LongPtr, _
ByVal nIndex As Long, _
ByVal dwNewLong As LongPtr) As LongPtr
#End If
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function ShowWindow Lib "user32.dll" ( _
ByVal Hwnd As LongPtr, _
ByVal nCmdShow As Long) As Long
Private Const SW_HIDE As Long = 0
Private Const SW_SHOW As Long = 5
Private Const GWL_EXSTYLE As Long = -20
Private Const GWL_STYLE As Long = -16
Private Const WS_EX_APPWINDOW As LongPtr = &H40000
Private Const WS_MAXIMIZEBOX As LongPtr = &H10000
Private Const WS_MINIMIZEBOX As LongPtr = &H20000
Private Const WS_THICKFRAME As LongPtr = &H40000
Private Const WS_SYSMENU As LongPtr = &H80000
Private Const GC_CLASSNAME_USERFORM As String = "ThunderDFrame"
Private mlngptrHandle As LongPtr
Private Sub UserForm_Activate()
Dim lngptrStyle As LongPtr
Call ShowWindow(Handle, SW_HIDE)
lngptrStyle = GetWindowLongPtr(Handle, GWL_EXSTYLE)
lngptrStyle = lngptrStyle Or WS_EX_APPWINDOW
Call SetWindowLongPtr(Handle, GWL_EXSTYLE, lngptrStyle)
Call ShowWindow(Handle, SW_SHOW)
End Sub
Private Sub UserForm_Initialize()
Dim lngptrStyle As LongPtr
Handle = FindWindowA(GC_CLASSNAME_USERFORM, Caption)
lngptrStyle = GetWindowLongPtr(Handle, GWL_STYLE)
lngptrStyle = lngptrStyle Or WS_SYSMENU Or WS_MINIMIZEBOX
Call SetWindowLongPtr(Handle, GWL_STYLE, lngptrStyle)
End Sub
Private Property Get Handle() As LongPtr
Handle = mlngptrHandle
End Property
Private Property Let Handle(ByVal pvlngptrHandle As LongPtr)
mlngptrHandle = pvlngptrHandle
End Property
Gruß
Nepumuk