View Single Post
  #4   Report Post  
Posted to microsoft.public.excel.programming
Michel Pierron Michel Pierron is offline
external usenet poster
 
Posts: 214
Default Userform with logo and without closebtn

Re Klaus Heinrich,
It is normal; if you want to have an icon, you cannot remove the totality
of the system menu.
MP

"Klaus Heinrich" a écrit dans le message de news:
...
Hi Michel,

thank you very much. It works fine, although I don't know what realy
happens with this code. The X-button does not dissappear but is grey
and not active, which is allright for me.
I use it with Excel 2003.

Thanks again and have a nice weekend

Regards Klaus

Michel Pierron schrieb:

Hi Klaus Heinrich,
You can try:
Private Declare Function FindWindow& Lib "user32" _
Alias "FindWindowA" (ByVal lpClassName$ _
, ByVal lpWindowName$)
Private Declare Function SendMessage& Lib "user32" _
Alias "SendMessageA" (ByVal hWnd&, ByVal wMsg& _
, ByVal wParam&, lParam As Any)
Private Declare Function RemoveMenu& Lib "user32" _
(ByVal hMenu&, ByVal nPosition&, ByVal wFlags&)
Private Declare Function GetSystemMenu& Lib "user32" _
(ByVal hWnd&, ByVal bRevert&)

Private Sub UserForm_Initialize()
Dim hWnd&: hWnd = FindWindow(vbNullString, Me.Caption)
SendMessage hWnd, &H80, 0, ByVal Image3.Picture.Handle
RemoveMenu GetSystemMenu(hWnd, 0), &HF060, 0
End Sub

Regards,
MP

"Klaus Heinrich" a écrit dans le message de news:
...


Hi folks,

I am not an VBA expert and found some code snips in the net.
First one hides the close button in user forms, second one sets
individual logo in the menu bar of the user form. Maybe any
one can help me combine this code snips ot at least help to
understand, what the coding does:

The declaration of lib "user32" is the same in both cases.
Only difference:

Private Const GWL_STYLE As Long = -16
Private Const WS_SYSMENU As Long = &H80000

Private hWndForm As Long
Private bCloseBtn As Boolean

Private Sub UserForm_Initialize()
' Find handle depending on Excel Version

If Val(Application.Version) = 9 Then
hWndForm = FindWindow("ThunderDFrame", Me.Caption)
Else
hWndForm = FindWindow("ThunderXFrame", Me.Caption)
End If

bCloseBtn = False
SetUserFormStyle <-- this is the sub which hides the close button
End Sub

Private Sub SetUserFormStyle()
' Hide close button in userform
Dim frmStyle As Long

If hWndForm = 0 Then Exit Sub

frmStyle = GetWindowLong(hWndForm, GWL_STYLE)

If bCloseBtn Then
frmStyle = frmStyle Or WS_SYSMENU
Else
frmStyle = frmStyle And Not WS_SYSMENU
End If

SetWindowLong hWndForm, GWL_STYLE, frmStyle
DrawMenuBar hWndForm
End Sub

Until here it works fine. Now I want to add some lines as follows:

hIcon = Image3.Picture
SendMessage hWndForm, &H80, True, hIcon
SendMessage hWndForm, &H80, False, hIcon
frm = GetWindowLong(hWndForm, -20)
frm = frm And Not &H1
SetWindowLong hWndForm, -20, frm

DrawMenuBar hWndForm

I do not understand the meaning of the lines, but I am sure
that some commands overwrite the other.
Is there any way to combine this snips ?

Thanks in advandced

Regards

Klaus