Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Cool!
Thanks a lot. "RB Smissaert" wrote: Yes, put this code in your UserForm module: Private Sub UserForm_QueryClose(Cancel As Integer, _ CloseMode As Integer) If CloseMode = vbFormControlMenu Or _ CloseMode = vbAppTaskManager Then If MsgBox("Are you sure you want to close this window?", _ vbQuestion + vbYesNo + vbDefaultButton1, _ "") = vbNo Then Cancel = 1 End If End If End Sub RBS "Scott" wrote in message ... When I click the close button, the program is gone. Is there a way to give a warning, like "Do you want to save before exit? Yes/No" "RB Smissaert" wrote: Actually it can be done a bit simpler still as it looks we don't need any code in the UserForm Resize event. In UserForm: Option Explicit Private lFormHwnd As Long Private Declare Function FindWindow _ Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) _ As Long Public Property Let propFormHwnd(lHwnd As Long) lFormHwnd = lHwnd End Property Public Property Get propFormHwnd() As Long propFormHwnd = lFormHwnd End Property Private Sub UserForm_Initialize() Dim hwnd As Long If Val(Application.Version) = 9 Then hwnd = FindWindow("ThunderDFrame", Caption) Else hwnd = FindWindow("ThunderXFrame", Caption) End If Me.propFormHwnd = hwnd End Sub ========================================= In normal Module: Option Explicit 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 Declare Function DrawMenuBar Lib "user32" _ (ByVal hwnd As Long) As Long Private Declare Function ShowWindow _ Lib "user32" (ByVal hwnd As Long, _ ByVal nCmdShow As Long) _ As Long Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) _ As Long Private Const WS_MAXIMIZEBOX As Long = &H10000 Private Const WS_MINIMIZEBOX As Long = &H20000 Private Const GWL_STYLE As Long = -16 Sub LoadForm() Dim hwnd As Long Dim bTaskBarMinimize As Boolean Load UserForm1 UserForm1.Show 0 AddMinMax hwnd = UserForm1.propFormHwnd 'set to False for floating minimize '---------------------------------- bTaskBarMinimize = True If bTaskBarMinimize Then ShowWindow hwnd, 0 SetWindowLong hwnd, -20, &H40101 ShowWindow hwnd, 1 End If End Sub Sub AddMinMax() Dim hwnd As Long Dim lngStyle As Long hwnd = UserForm1.propFormHwnd lngStyle = GetWindowLong(hwnd, GWL_STYLE) lngStyle = lngStyle Or WS_MAXIMIZEBOX lngStyle = lngStyle Or WS_MINIMIZEBOX SetWindowLong hwnd, GWL_STYLE, lngStyle DrawMenuBar hwnd End Sub RBS "Scott" wrote in message ... RBS, Great! It works perfect. Thanks a lot. "RB Smissaert" wrote: Figured out now how to let it minimize to the taskbar and this is all the code in my test Wb: In the UserForm1 code: Option Explicit Private lFormHwnd As Long Private Declare Function FindWindow _ Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) _ As Long Public Property Let propFormHwnd(lHwnd As Long) lFormHwnd = lHwnd End Property Public Property Get propFormHwnd() As Long propFormHwnd = lFormHwnd End Property Private Sub UserForm_Initialize() Dim hwnd As Long If Val(Application.Version) = 9 Then hwnd = FindWindow("ThunderDFrame", Caption) Else hwnd = FindWindow("ThunderXFrame", Caption) End If Me.propFormHwnd = hwnd End Sub Private Sub UserForm_Resize() SetMinimize 'leave out for floating minimize End Sub '===================================== In the normal module: Option Explicit Public 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 Declare Function DrawMenuBar Lib "user32" _ (ByVal hwnd As Long) As Long Private Declare Function ShowWindow _ Lib "user32" (ByVal hwnd As Long, _ ByVal nCmdShow As Long) _ As Long Private Declare Function IsIconic Lib "user32" (ByVal hwnd As Long) _ As Long Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) Private Const WS_MAXIMIZEBOX As Long = &H10000 Private Const WS_MINIMIZEBOX As Long = &H20000 Private Const GWL_STYLE As Long = -16 Sub LoadForm() Load UserForm1 UserForm1.Show 0 AddMinMax SetMinimize True 'leave out for floating minimize End Sub Sub AddMinMax() Dim hwnd As Long Dim lngStyle As Long hwnd = UserForm1.propFormHwnd lngStyle = GetWindowLong(hwnd, GWL_STYLE) lngStyle = lngStyle Or WS_MAXIMIZEBOX lngStyle = lngStyle Or WS_MINIMIZEBOX SetWindowLong hwnd, GWL_STYLE, lngStyle DrawMenuBar hwnd End Sub Sub SetMinimize(Optional bNormal As Boolean) Dim hwnd As Long hwnd = UserForm1.propFormHwnd If IsIconic(hwnd) Then ShowWindow hwnd, 0 SetWindowLong hwnd, -20, &H40101 ShowWindow hwnd, 6 Else If bNormal Then ShowWindow hwnd, 0 SetWindowLong hwnd, -20, &H40101 ShowWindow hwnd, 1 End If End If End Sub So, you now have the options to minimize to a small floating window or to the taskbar and this depends on running SetMinimize in the 2 places as mentioned. I think it now all should work. RBS "Scott" wrote in message ... RBS, I have a form called "UserForm1" under folder "Forms". I copied your codes to "Module2" in folder Modules. And I tried to run your codes, which brought up UserForm1, but there were no Min/Max buttons. Here are the codes: Option Explicit Public Declare Function GetWindowLong _ Lib "user32" Alias _ "GetWindowLongA" (ByVal hwnd As Long, _ ByVal nIndex As Long) As Long Private Declare Function FindWindow _ Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, _ ByVal lpWindowName As String) 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 Declare Function DrawMenuBar Lib "user32" _ |
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 | |||
Minimize and maximize buttons userforms | Excel Programming | |||
Maximize & Minimize buttons where are they? | Excel Programming | |||
How to get Maximize and Minimize buttons on Userform | Excel Programming |