Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
My Msgbox always pops up in the middle of the screen. I would like to know
if there is a way to position it so that it pops up either to the left or right of center. |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
The message box function is one of the VBA features that does not allow
positioning as a built in property. However, you can use the UserForm with a label and command buttons to do the same thing and it can be positioned anywhere on the screen, resized and the text font can be changed by the designer without affecting any other project or application. See this site for a discussion on the subject: http://gregmaxey.mvps.org/Custom_MsgBox.htm "caldog" wrote in message ... My Msgbox always pops up in the middle of the screen. I would like to know if there is a way to position it so that it pops up either to the left or right of center. |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
this old code for move msgbox seem to work good but it complicated. i forget
where i see it Type RECT Left As Long Top As Long Right As Long Bottom As Long End Type Public Declare Function UnhookWindowsHookEx Lib "user32" ( _ ByVal hHook As Long) As Long Public Declare Function GetWindowLong Lib "user32" Alias _ "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) _ As Long Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long Public Declare Function SetWindowsHookEx Lib "user32" Alias _ "SetWindowsHookExA" (ByVal idHook As Long, ByVal lpfn As Long, _ ByVal hmod As Long, ByVal dwThreadId As Long) As Long Public Declare Function SetWindowPos Lib "user32" ( _ ByVal hwnd As Long, ByVal hWndInsertAfter As Long, _ ByVal x As Long, ByVal y As Long, ByVal cx As Long, _ ByVal cy As Long, ByVal wFlags As Long) As Long Public Declare Function GetWindowRect Lib "user32" (ByVal hwnd _ As Long, lpRect As RECT) As Long Public Declare Function GetActiveWindow Lib "user32" () As Long Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" _ (ByVal lpClassName As String, ByVal lpWindowName As String) As Long Public Const GWL_HINSTANCE = (-6) Public Const SWP_NOSIZE = &H1 Public Const SWP_NOZORDER = &H4 Public Const SWP_NOACTIVATE = &H10 Public Const HCBT_ACTIVATE = 5 Public Const WH_CBT = 5 Public hHook As Long Public hXL As Long Sub ShowMsgBox() Dim hInst As Long Dim Thread As Long hXL = FindWindow("XLMAIN", Application.Caption) hInst = GetWindowLong(hXL, GWL_HINSTANCE) Thread = GetCurrentThreadId() hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc, hInst, Thread) MsgBox "This message box has been positioned to the top right of Excel's window." End Sub Function WinProc(ByVal lMsg As Long, ByVal wParam As Long, _ ByVal lParam As Long) As Long Dim rectXL As RECT, rectMsg As RECT Dim x As Long, y As Long Dim hMsgbox As Long If lMsg = HCBT_ACTIVATE Then hMsgbox = GetActiveWindow GetWindowRect hXL, rectXL GetWindowRect wParam, rectMsg x = (rectXL.Left + (rectXL.Right - rectXL.Left) * 0.75) - _ ((rectMsg.Right - rectMsg.Left) / 2) y = (rectXL.Top + (rectXL.Bottom - rectXL.Top) * 0.3) - _ ((rectMsg.Bottom - rectMsg.Top) / 2) SetWindowPos wParam, 0, x, y, 0, 0, _ SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE UnhookWindowsHookEx hHook End If WinProc = False End Function "caldog" wrote in message ... | My Msgbox always pops up in the middle of the screen. I would like to know | if there is a way to position it so that it pops up either to the left or | right of center. |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Positioning MsgBox | Excel Programming | |||
Positioning | Excel Programming | |||
= positioning | Excel Programming | |||
positioning msgbox and userforms | Excel Programming | |||
msgbox positioning | Excel Programming |