Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.programming
|
|||
|
|||
Minimize and maximize buttons userforms
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
|
|||
|
|||
Minimize and maximize buttons userforms
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
|
|||
|
|||
Minimize and maximize buttons userforms
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
|
|||
|
|||
Minimize and maximize buttons userforms
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
|
|||
|
|||
Minimize and maximize buttons userforms
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 |
#6
Posted to microsoft.public.excel.programming
|
|||
|
|||
Minimize and maximize buttons userforms
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 |
#7
Posted to microsoft.public.excel.programming
|
|||
|
|||
Minimize and maximize buttons userforms
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 |
#8
Posted to microsoft.public.excel.programming
|
|||
|
|||
Minimize and maximize buttons userforms
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 |
#9
Posted to microsoft.public.excel.programming
|
|||
|
|||
Minimize and maximize buttons userforms
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
|
|||
|
|||
Minimize and maximize buttons userforms
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
|
|||
|
|||
Minimize and maximize buttons userforms
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
|
|||
|
|||
Minimize and maximize buttons userforms
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
|
|||
|
|||
Minimize and maximize buttons userforms
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 |
#14
Posted to microsoft.public.excel.programming
|
|||
|
|||
Minimize and maximize buttons userforms
KISS - Keep It Simple Stupid :-)
Bob "RB Smissaert" wrote in message ... 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 |
#15
Posted to microsoft.public.excel.programming
|
|||
|
|||
Minimize and maximize buttons userforms
In the US it is a common acronym meaning:
Keep it simple stupid -- Regards, Tom Ogilvy "RB Smissaert" wrote in message ... 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 |
#16
Posted to microsoft.public.excel.programming
|
|||
|
|||
Minimize and maximize buttons userforms
I had heard about "It is the economy stupid", but not this one.
It is is simple enough for me though. The only thing I haven't figured out yet is how to get the focus in a treeview control when I press the restore up button from the minimized position. Tried numerous construction, but no success yet. RBS "Tom Ogilvy" wrote in message ... In the US it is a common acronym meaning: Keep it simple stupid -- Regards, Tom Ogilvy "RB Smissaert" wrote in message ... 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 | |
|
|
Similar Threads | ||||
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 |