Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Userform with logo and without closebtn

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
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 214
Default Userform with logo and without closebtn

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



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Userform with logo and without closebtn

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






  #4   Report Post  
Posted to microsoft.public.excel.programming
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








  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Userform with logo and without closebtn

Hi Michel,

optimizing my code I declared APIs in general module now and reduced
form initalization to the following lines:

Private Sub UserForm_Initialize()
Dim hWnd&: hWnd = FindWindow(vbNullString, Me.Caption)
Image3.Visible = False ' hide image3 on form
SendMessage hWnd, &H80, 0, ByVal Image3.Picture.Handle
RemoveMenu GetSystemMenu(hWnd, 0), &HF060, 0
End Sub

If I want to use a sub like this and call it during initialization of
several forms
I can not use "Me" but I have to transmitt it to the sub. How can
I do this ?

Sub ChangeMenuBar()
Dim hWnd&: hWnd = FindWindow(vbNullString, Me.Caption) <----
Image3.Visible = False ' hide image3 on form
SendMessage hWnd, &H80, 0, ByVal Image3.Picture.Handle
RemoveMenu GetSystemMenu(hWnd, 0), &HF060, 0
End Sub



Thanks

Klaus
Michel Pierron schrieb:

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




  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 214
Default Userform with logo and without closebtn

Hi Klaus,
To make simple, in a standard module:
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 ChangeMenuBar(frm As Object)
Dim hWnd&, hIcon&
With frm
..Image3.Visible = False
hWnd = FindWindow(vbNullString, .Caption)
hIcon = .Image3.Picture.Handle
SendMessage hWnd, &H80, 0, ByVal hIcon
RemoveMenu GetSystemMenu(hWnd, 0), &HF060, 0
..Show
End With
End Sub

Sub UserForm1Show()
On Error Resume Next
Call ChangeMenuBar(UserForm1)
End Sub

Sub UserForm2Show()
On Error Resume Next
Call ChangeMenuBar(UserForm2)
End Sub

Regards,
MP


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

optimizing my code I declared APIs in general module now and reduced
form initalization to the following lines:

Private Sub UserForm_Initialize()
Dim hWnd&: hWnd = FindWindow(vbNullString, Me.Caption)
Image3.Visible = False ' hide image3 on form
SendMessage hWnd, &H80, 0, ByVal Image3.Picture.Handle
RemoveMenu GetSystemMenu(hWnd, 0), &HF060, 0
End Sub

If I want to use a sub like this and call it during initialization of
several forms
I can not use "Me" but I have to transmitt it to the sub. How can
I do this ?

Sub ChangeMenuBar()
Dim hWnd&: hWnd = FindWindow(vbNullString, Me.Caption) <----
Image3.Visible = False ' hide image3 on form
SendMessage hWnd, &H80, 0, ByVal Image3.Picture.Handle
RemoveMenu GetSystemMenu(hWnd, 0), &HF060, 0
End Sub



Thanks

Klaus
Michel Pierron schrieb:

Re Klaus Heinrich,
It is normal; if you want to have an icon, you cannot remove the

totality
of the system menu.
MP




  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 7
Default Userform with logo and without closebtn

Hi Michel,

it works very fine in deed. Thank you very much !
I've learned lots from this.

Best regards Klaus

Michel Pierron schrieb:

Hi Klaus,
To make simple, in a standard module:
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 ChangeMenuBar(frm As Object)
Dim hWnd&, hIcon&
With frm
.Image3.Visible = False
hWnd = FindWindow(vbNullString, .Caption)
hIcon = .Image3.Picture.Handle
SendMessage hWnd, &H80, 0, ByVal hIcon
RemoveMenu GetSystemMenu(hWnd, 0), &HF060, 0
.Show
End With
End Sub

Sub UserForm1Show()
On Error Resume Next
Call ChangeMenuBar(UserForm1)
End Sub

Sub UserForm2Show()
On Error Resume Next
Call ChangeMenuBar(UserForm2)
End Sub

Regards,
MP



Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
HOW TO KEEP A LOGO ON ALL THE PAGES Parameswaran Excel Discussion (Misc queries) 1 June 23rd 09 02:42 PM
Signature or Logo Vercingetorix.XIII[_2_] Excel Worksheet Functions 3 September 23rd 08 10:01 PM
Logo missing SallyNBS Excel Discussion (Misc queries) 3 June 6th 06 05:36 PM
Logo within a cell maryj Excel Discussion (Misc queries) 1 July 19th 05 04:04 PM
Excel Logo RTP Excel Discussion (Misc queries) 1 February 7th 05 03:37 PM


All times are GMT +1. The time now is 12:43 AM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"