Code im Userform:
Code: Alles auswählen
Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SetWindowLong Lib "user32.dll" Alias "SetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As LongPtr, ByVal dwNewLong As LongPtr) As LongPtr
Private Declare PtrSafe Function GetWindowLong Lib "user32" Alias "GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As LongPtr) As LongPtr
Private Declare PtrSafe Function ShowWindow Lib "user32.dll" (ByVal hwnd As LongPtr, ByVal nCmdShow As Long) As Long
Private Const GWL_STYLE = -16 ' Ermittelt die StandardFensterstyles
Private Const GWL_EXSTYLE = -20 'Ermittelt die erweiterten Fensterstyles
' einige Standard-Fensterstile
Private Const WS_POPUP = &H80000000 'Fenster ist ein Popupfenster (Standard bei Userform)
Private Const WS_CLIPSIBLINGS = &H4000000 'schneidet beim zeichnen untergordnete Fenster ab. (Standard bei Userform)
Private Const WS_OVERLAPPED = &H0
Private Const WS_SYSMENU = &H80000 'hat Menü auf Titelleiste (Standard bei Userform)
Private Const WS_THICKFRAME = &H40000
Private Const WS_CAPTION = &HC00000 'hat Titelleiste (Standard bei Userform)
Private Const WS_MAXIMIZE = &H1000000 'Fenster wird maximiert
Private Const WS_MAXIMIZEBOX = &H10000 ' Maximierenbutten des Fensters
Private Const WS_MINIMIZEBOX = &H20000 ' Minimierenbutton des Fensters
'einige erweiterte Fensterstile
Private Const WS_EX_DLGMODALFRAME = &H1 'es handelt sich um ein Dialogfenster
Private Const WS_EX_WINDOWEDGE = &H100 'Das Fenster hat eine erhöhte Kante
Private Const WS_EX_APPWINDOW = &H40000 'setzt einen Fenstereintrag auf der Taskleiste (Attribut ist bei Start gesetzt aber klappt nicht)
'einige ShowWindow-Befehle
Private Const SW_HIDE = 0 'Blendet das Fenster aus und aktiviert ein anderes Fenster.
Private Const SW_SHOWNORMAL = 1 'Aktiviert und zeigt ein Fenster an. Wenn das Fenster minimiert, maximiert oder angeordnet ist, wird es vom System auf seine
'ursprüngliche Größe und Position wiederhergestellt. Eine Anwendung sollte dieses Flag angeben, wenn das Fenster zum ersten Mal angezeigt wird.
Private Const SW_SHOWMINIMIZED = 2 'Aktiviert das Fenster und zeigt es als minimiertes Fenster an.
Private Const SW_SHOWMAXIMIZED = 3 'Aktiviert das Fenster und zeigt es als maximiertes Fenster an.
Private Const SW_SHOWNOACTIVATE = 4 'Zeigt ein Fenster in seiner neuesten Größe und Position an. Dieser Wert ähnelt SW_SHOWNORMAL, mit der Ausnahme, dass das Fenster nicht aktiviert ist.
Private Const SW_SHOW = 5 'Aktiviert das Fenster und zeigt es in seiner aktuellen Größe und Position an.
Private Const SW_MINIMIZE = 6 'Minimiert das angegebene Fenster und aktiviert das nächste Fenster der obersten Ebene in der Reihenfolge Z.
Private Const SW_SHOWMINNOACTIVE = 7 'Zeigt das Fenster als minimiertes Fenster an. Dieser Wert ähnelt SW_SHOWMINIMIZED, außer dass das Fenster nicht aktiviert ist.
Private Const SW_SHOWNA = 8 'Zeigt das Fenster in seiner aktuellen Größe und Position an. Dieser Wert ähnelt SW_SHOW, mit der Ausnahme, dass das Fenster nicht aktiviert ist.
Private Const SW_RESTORE = 9 'Aktiviert das Fenster und zeigt es an. Wenn das Fenster minimiert, maximiert oder angeordnet ist, wird es vom System auf seine ursprüngliche Größe und Position wiederhergestellt. Eine Anwendung sollte dieses Flag beim Wiederherstellen eines minimierten Fensters angeben.
Private Sub UserForm_Activate()
Dim TmpStyles As LongPtr, TmpStyles2 As LongPtr
Dim hwnd As LongPtr
hwnd = FindWindow("ThunderDFrame", Me.Caption)
Call ShowWindow(hwnd, SW_HIDE)
'Aktuelle Fensterstile bekommen
TmpStyles = GetWindowLong(hwnd, GWL_STYLE)
TmpStyles2 = GetWindowLong(hwnd, GWL_EXSTYLE)
'Neue Fensterstile setzen
TmpStyles = TmpStyles Or WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX 'Or WS_MAXIMIZE
TmpStyles2 = TmpStyles2 Or WS_EX_DLGMODALFRAME Or WS_EX_WINDOWEDGE Or WS_EX_APPWINDOW
Call SetWindowLong(hwnd, GWL_EXSTYLE, TmpStyles2)
Call SetWindowLong(hwnd, GWL_STYLE, TmpStyles)
Call ShowWindow(hwnd, SW_SHOW)
End Sub
Ich gebe zu, der Code ist nicht komplett von mir. Teile davon hab ich mir aus dem Netz zusammengeklaubt. Aber ich verstehe ihn und kann ihn erklären, da ich SetWindowLong schon seit längerem benutze.
Gruß Mr. K.