Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
How do I add minimize and maximize buttons to a VBA userform?
I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Sorry, the FindWindow API declaration should be:
Private Declare Function FindWindow _ Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) As Long RBS "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
If you change the name of the form, you cannot use the old name in the
initialize code. Why not use? Private Sub UserForm_Initialize() Dim hWnd As Long hWnd = FindWindow(vbNullString, Me.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I am not changing the name of the form, just the caption.
Doing Me.Caption won't make a difference. RBS "Bob Phillips" wrote in message ... If you change the name of the form, you cannot use the old name in the initialize code. Why not use? Private Sub UserForm_Initialize() Dim hWnd As Long hWnd = FindWindow(vbNullString, Me.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Forgot to say that if you try to set the min/max buttons again after
changing the form's caption you get some really strange effects. Definitely not healthy to do that with the code as it is. RBS "Bob Phillips" wrote in message ... If you change the name of the form, you cannot use the old name in the initialize code. Why not use? Private Sub UserForm_Initialize() Dim hWnd As Long hWnd = FindWindow(vbNullString, Me.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Maybe I am on the right path now with this. If I do this:
Unload UserForm1 UserForm1.Caption = "Testing" AddMaxMin UserForm1.Show 0 Sub AddMaxMin() Dim hWnd As Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub It seems to work. Will see if this is all really workable. RBS "Bob Phillips" wrote in message ... If you change the name of the form, you cannot use the old name in the initialize code. Why not use? Private Sub UserForm_Initialize() Dim hWnd As Long hWnd = FindWindow(vbNullString, Me.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi
Go here and get FlexmenuE and flexgrabberE. They are free controls that you can drop on your vba form and make it resizeable and add min and max buttons with no code. The newest version also lets you minimize and maximize your form with code if you wish to. http://www.vbusers.com/downloads/download.asp#item3\ HTH Ken "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#8
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Thanks, but I had a look at these controls a long time ago and decided they
weren't worth the extra overhead. I have downloaded and installed again and had a look if they suffer from the same problem, that is that changing the form caption makes the minimize and maximize buttons stop working. Unfortunately it shows exactly the same problem. RBS "Ken Macksey" wrote in message ... Hi Go here and get FlexmenuE and flexgrabberE. They are free controls that you can drop on your vba form and make it resizeable and add min and max buttons with no code. The newest version also lets you minimize and maximize your form with code if you wish to. http://www.vbusers.com/downloads/download.asp#item3\ HTH Ken "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#9
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I think I have this now all worked out.
This is the code that does it: Private Declare Function GetWindowLong _ Lib "user32" Alias _ "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function SetWindowLong _ Lib "user32" Alias _ "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const GWL_STYLE = (-16) Sub AddMinMax() Dim hWnd As Long Dim lngStyle As Long hWnd = FindWindow(vbNullString, MainForm.Caption) lngStyle = GetWindowLong(hWnd, GWL_STYLE) lngStyle = lngStyle Or WS_MAXIMIZEBOX lngStyle = lngStyle Or WS_MINIMIZEBOX SetWindowLong hWnd, GWL_STYLE, lngStyle DrawMenuBar hWnd End Sub Just have to run AddMinMax from the Userform Activate event and after any code that alters the caption of the userform via Userform.Caption = It works very nice indeed. Just have to make my keyboard shortcuts now to run these menubar buttons. RBS "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#10
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Two questions.
Why do you need to change the caption? Where is DrawMenuBar defined? -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... I think I have this now all worked out. This is the code that does it: Private Declare Function GetWindowLong _ Lib "user32" Alias _ "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function SetWindowLong _ Lib "user32" Alias _ "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const GWL_STYLE = (-16) Sub AddMinMax() Dim hWnd As Long Dim lngStyle As Long hWnd = FindWindow(vbNullString, MainForm.Caption) lngStyle = GetWindowLong(hWnd, GWL_STYLE) lngStyle = lngStyle Or WS_MAXIMIZEBOX lngStyle = lngStyle Or WS_MINIMIZEBOX SetWindowLong hWnd, GWL_STYLE, lngStyle DrawMenuBar hWnd End Sub Just have to run AddMinMax from the Userform Activate event and after any code that alters the caption of the userform via Userform.Caption = It works very nice indeed. Just have to make my keyboard shortcuts now to run these menubar buttons. RBS "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#11
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]() Two answers. I use the userform title bar (caption) to display all kind of messages for the users. Public Declare Function DrawMenuBar Lib "user32" _ (ByVal hwnd As Long) As Long RBS "Bob Phillips" wrote in message ... Two questions. Why do you need to change the caption? Where is DrawMenuBar defined? -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... I think I have this now all worked out. This is the code that does it: Private Declare Function GetWindowLong _ Lib "user32" Alias _ "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function SetWindowLong _ Lib "user32" Alias _ "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const GWL_STYLE = (-16) Sub AddMinMax() Dim hWnd As Long Dim lngStyle As Long hWnd = FindWindow(vbNullString, MainForm.Caption) lngStyle = GetWindowLong(hWnd, GWL_STYLE) lngStyle = lngStyle Or WS_MAXIMIZEBOX lngStyle = lngStyle Or WS_MINIMIZEBOX SetWindowLong hWnd, GWL_STYLE, lngStyle DrawMenuBar hWnd End Sub Just have to run AddMinMax from the Userform Activate event and after any code that alters the caption of the userform via Userform.Caption = It works very nice indeed. Just have to make my keyboard shortcuts now to run these menubar buttons. RBS "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#12
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I appreciate that it doesn't solve the problem, but would it not have been
better (easier?) to have a status area and display your messages there rather than change the caption. I tend to subscribe to KISS personally. -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... Two answers. I use the userform title bar (caption) to display all kind of messages for the users. Public Declare Function DrawMenuBar Lib "user32" _ (ByVal hwnd As Long) As Long RBS "Bob Phillips" wrote in message ... Two questions. Why do you need to change the caption? Where is DrawMenuBar defined? -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... I think I have this now all worked out. This is the code that does it: Private Declare Function GetWindowLong _ Lib "user32" Alias _ "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function SetWindowLong _ Lib "user32" Alias _ "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const GWL_STYLE = (-16) Sub AddMinMax() Dim hWnd As Long Dim lngStyle As Long hWnd = FindWindow(vbNullString, MainForm.Caption) lngStyle = GetWindowLong(hWnd, GWL_STYLE) lngStyle = lngStyle Or WS_MAXIMIZEBOX lngStyle = lngStyle Or WS_MINIMIZEBOX SetWindowLong hWnd, GWL_STYLE, lngStyle DrawMenuBar hWnd End Sub Just have to run AddMinMax from the Userform Activate event and after any code that alters the caption of the userform via Userform.Caption = It works very nice indeed. Just have to make my keyboard shortcuts now to run these menubar buttons. RBS "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
#13
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
This is a very busy userform and I don't want to add another label or
textbox. Also the titlebar is just nice for this purpose as it stands out and is clear. It is no trouble as all I have to do is add the line AddMinMax after any code that alters the caption. I tend to subscribe to KISS personally What is that? RBS "Bob Phillips" wrote in message ... I appreciate that it doesn't solve the problem, but would it not have been better (easier?) to have a status area and display your messages there rather than change the caption. I tend to subscribe to KISS personally. -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... Two answers. I use the userform title bar (caption) to display all kind of messages for the users. Public Declare Function DrawMenuBar Lib "user32" _ (ByVal hwnd As Long) As Long RBS "Bob Phillips" wrote in message ... Two questions. Why do you need to change the caption? Where is DrawMenuBar defined? -- HTH RP (remove nothere from the email address if mailing direct) "RB Smissaert" wrote in message ... I think I have this now all worked out. This is the code that does it: Private Declare Function GetWindowLong _ Lib "user32" Alias _ "GetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function SetWindowLong _ Lib "user32" Alias _ "SetWindowLongA" (ByVal hWnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const GWL_STYLE = (-16) Sub AddMinMax() Dim hWnd As Long Dim lngStyle As Long hWnd = FindWindow(vbNullString, MainForm.Caption) lngStyle = GetWindowLong(hWnd, GWL_STYLE) lngStyle = lngStyle Or WS_MAXIMIZEBOX lngStyle = lngStyle Or WS_MINIMIZEBOX SetWindowLong hWnd, GWL_STYLE, lngStyle DrawMenuBar hWnd End Sub Just have to run AddMinMax from the Userform Activate event and after any code that alters the caption of the userform via Userform.Caption = It works very nice indeed. Just have to make my keyboard shortcuts now to run these menubar buttons. RBS "RB Smissaert" wrote in message ... How do I add minimize and maximize buttons to a VBA userform? I have this code that does it, but when I change the caption of the userform the buttons don't work anymore. I am slowly coming to the conclusion that it probably is not worth the trouble and that it is better to make your own buttons. Public Declare Function FindWindow _ Lib "user32" Alias _ "FindWindowA" (ByVal lpClassName As Long, _ ByVal lpWindowName As Long) Private Declare Function SetWindowLong _ Lib "user32" _ Alias "SetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long, _ ByVal dwNewLong As Long) As Long Private Sub UserForm_Initialize() Dim hWnd as Long hWnd = FindWindow(vbNullString, UserForm1.Caption) SetWindowLong hWnd, -16, &H20000 Or &H10000 Or &H84C80080 End Sub RBS |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
minimize and maximize buttons missing | Excel Discussion (Misc queries) | |||
how do i minimize/maximize a workbook from vba? I want to minimize it durring processing to speed things up a bit | Excel Worksheet Functions | |||
Maximize & Minimize where are you ? | Excel Programming | |||
Maximize & Minimize buttons where are they? | Excel Programming | |||
How to get Maximize and Minimize buttons on Userform | Excel Programming |