Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1868to1872
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Userform ohne X mit Taskleiste

Userform ohne X mit Taskleiste
07.02.2022 14:50:16
Manuel
Hallo zusammen,
jetzt wende ich mal mal das erste mal an dieses Forum. Vielen Dank erstmal an alle vorherigen Schreiberlinge. Dank euch konnte ich in unserer Firma schon vielen das Staunen ins Gesicht zaubern. Nun zu meinem Thema:
Ich habe folgenden Wunsch... In meiner Userform soll das Kreuz in der Ecke deaktiviert und ausgeblendet werden sowie in der Taskleiste als Fenster (Task) angezeigt werden. Nun folgende Problematik:
Ändere ich folgendes, zeigt er zwar das Kreuz nicht mehr an, dafür aber auch nicht mehr in der Taskleiste:
Private Const GWL_EXSTYLE As Long = -16
Private Const WS_EX_APPWINDOW As LongPtr = &H80000
hMenu = hMenu And Not WS_EX_APPWINDOW
So wie u.a. ist die Userform in der Taskleiste zwar ersichtlich, das Kreuz ist aber sichtbar (aber deaktiviert).
Kann mir jemand helfen?
Der Code ist eingefügt im Formular.
Beste Grüße
Manuel

Option Explicit
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function GetWindowLongA Lib "user32.dll" ( _
ByVal hWnd As LongPtr, _
ByVal nIndex As Long) As LongPtr
Private Declare PtrSafe Function SetWindowLongA Lib "user32.dll" ( _
ByVal hWnd As LongPtr, _
ByVal nIndex As Long, _
ByVal dwNewLong As LongPtr) As LongPtr
Private Declare PtrSafe Function ShowWindow Lib "user32.dll" ( _
ByVal hWnd As LongPtr, _
ByVal nCmdShow As Long) As Long
Private Declare PtrSafe Function DrawMenuBar Lib "user32.dll" ( _
ByVal hWnd As LongPtr) As Long
Private Declare PtrSafe Function GetSystemMenu Lib "user32.dll" ( _
ByVal hWnd As LongPtr, _
ByVal bRevert As LongPtr) As Long
Private Declare PtrSafe Function RemoveMenu Lib "user32.dll" ( _
ByVal hMenu As LongPtr, _
ByVal nPosition As LongPtr, _
ByVal wFlags As LongPtr) As Long
Private Declare PtrSafe Function GetMenuItemCount Lib "user32.dll" ( _
ByVal hMenu As LongPtr) As Long
Private hWnd As Long
Private Const GC_CLASSNAMEUSERFORM As String = "ThunderDFrame"
Private Const GWL_EXSTYLE As Long = -20
Private Const WS_EX_APPWINDOW As LongPtr = &H40000
Private Const WS_SYSTEMMENU As LongPtr = &H80000
Private Const SW_HIDE As Long = 0
Private Const SW_SHOW As Long = 5
Private Const MF_BYPOSITION As Long = &H400
Private Const MF_REMOVE As Long = &H1000
Private Sub Userform_Activate()
Dim hWnd As LongPtr
Dim hMenu As LongPtr
Dim menuItemCount As LongPtr
hWnd = FindWindowA(GC_CLASSNAMEUSERFORM, Caption)
hMenu = GetSystemMenu(hWnd, 0)
If CBool(hMenu  0) Then
menuItemCount = GetMenuItemCount(hMenu)
RemoveMenu hMenu, menuItemCount - 1, MF_REMOVE Or MF_BYPOSITION
RemoveMenu hMenu, menuItemCount - 2, MF_REMOVE Or MF_BYPOSITION
DrawMenuBar hWnd
Call ShowWindow(hWnd, SW_HIDE)
hMenu = GetWindowLongA(hWnd, GWL_EXSTYLE)
hMenu = hMenu Or WS_EX_APPWINDOW
Call SetWindowLongA(hWnd, GWL_EXSTYLE, hMenu)
Call ShowWindow(hWnd, SW_SHOW)

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform ohne X mit Taskleiste
07.02.2022 16:09:35
volti
Hallo Manuel,
reicht nicht der u.a. Code, um das Systemkreuz wegzubekommen?
PS: hMenu = hMenu And Not WS_EX_APPWINDOW Das geht gar nicht. Du kannst kein Handle verändern....
Code:

[Cc]

Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _ ByVal lpClassName As String, _ ByVal lpWindowName As String) As LongPtr Private Declare PtrSafe Function GetWindowLongA Lib "user32" ( _ ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr Private Declare PtrSafe Function SetWindowLongA Lib "user32" ( _ ByVal hwnd As LongPtr, ByVal nIndex As Long, _ ByVal dwNewLong As LongPtr) As LongPtr Private Declare PtrSafe Function DrawMenuBar Lib "user32.dll" ( _ ByVal hwnd As LongPtr) As Long Private Const GWL_STYLE = -16& Private Const WS_SYSMENU = &H80000 Private Sub UserForm_Activate() Dim hwnd As LongPtr hwnd = FindWindowA("ThunderDFrame", Caption) SetWindowLongA hwnd, GWL_STYLE, GetWindowLongA(hwnd, GWL_STYLE) And Not WS_SYSMENU DrawMenuBar hwnd End Sub

_________________________
viele Grüße aus Freigericht 😊
Karl-Heinz

Anzeige
AW: Userform ohne X mit Taskleiste
07.02.2022 16:40:44
volti
Hallo,
kleine Korrektur:
hMenu = hMenu And Not WS_EX_APPWINDOW ist doch richtig.
Die Bezeichnung hMenu lässt das hier als Handle erscheinen, was es aber m.E. nicht ist.
Gruß
Karl-Heinz
AW: Userform ohne X mit Taskleiste
07.02.2022 16:42:05
Manuel
Hallo Karl-Heinz,
das ist richtig. Danke, das passt. Das X ist weg aber leider ist die Userform nun nicht mehr in der Taskleiste als Tab ersichtlich.
By the way: Die dahinter geschaltete Excel Datei wird über den Befehl "Application.Visible = False" ausgeblendet, damit ausschließlich die UserForm angezeigt wird.
Beste Grüße
Manuel
Anzeige
AW: Userform ohne X mit Taskleiste
07.02.2022 17:23:24
volti
Hm, ok,
bei mir erscheint meine Test-Userform aber weder mit noch ohne Systemkreuz in der Taskleiste.
Gruß
Karl-Heinz

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige