Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Mike Lewis on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

Can u move the msgbox position? 1

Status
Not open for further replies.

iMacDan

IS-IT--Management
May 16, 2002
13
0
0
GB
Hi All

I wondered whether it is possible to moce the msgbox to a particular position on the screen?

I need to place it somewhere that it doesn't cover different parts of my form?

Does that make sense?
 
iMacDan,

Not to my knowledge. But you can make your own custom form that looks like a message box and set it's startup position in the properties box. That should do what you want.

Hope this helps!

Jerome W. Norgren
Using VB6, Pro, SP5

 
You can move a messagebox, but it involves some slightly complex API tricks. You are probably better off going with JWNogren's suggestion of creating your own custom form.
 
Another way would be to use the API Message box.
You have to declare about 9 API functions, about a dozen contants, and a create a function with about 10 lines of code.

Then you use the API Message box, which is basically the same, except you can position it. With a few fore APIs and about 3 times as much code you can even change the fonts, and add animated icon.

If you want the basic code let me know and I will post it for you. (this will do about everything a normal message box can do except you can also position it.
Once you put this into a module, you can call it almost like a normal message box (will need 3 extra lines: 2 for the x,y position and one for the Title.
 
If you could post the code that would be really helpful?

Thanks

Tahnks for everyones input
 
dear iMacDan
here is the code for positioning msgbox ,actually you have to HOOK the msgbox to get the desired result,i hope it will help u
Regards
Nouman

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 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

Function WinProc1(ByVal lMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

If lMsg = HCBT_ACTIVATE Then
'Show the MsgBox at a fixed location (0,0)
SetWindowPos wParam, 0, 0, 0, 0, 0, _
SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE
'Release the CBT hook
UnhookWindowsHookEx hHook
End If
WinProc1 = False

End Function

Function WinProc2(ByVal lMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long

Dim rectForm As RECT, rectMsg As RECT
Dim x As Long, y As Long

'On HCBT_ACTIVATE, show the MsgBox centered over Form1
If lMsg = HCBT_ACTIVATE Then
'Get the coordinates of the form and the message box so that
'you can determine where the center of the form is located
GetWindowRect Form1.hwnd, rectForm
GetWindowRect wParam, rectMsg
x = (rectForm.Left + (rectForm.Right - rectForm.Left) / 2) - _
((rectMsg.Right - rectMsg.Left) / 2)
y = (rectForm.Top + (rectForm.Bottom - rectForm.Top) / 2) - _
((rectMsg.Bottom - rectMsg.Top) / 2)
'Position the msgbox
SetWindowPos wParam, 0, x, y, 0, 0, _
SWP_NOSIZE Or SWP_NOZORDER Or SWP_NOACTIVATE
'Release the CBT hook
UnhookWindowsHookEx hHook
End If
WinProc2 = False

End Function




Add two CommandButtons to Form1.


Add the following code to Form1:

Private Sub Command1_Click()
Dim hInst As Long
Dim Thread As Long

'Set up the CBT hook
hInst = GetWindowLong(Me.hwnd, GWL_HINSTANCE)
Thread = GetCurrentThreadId()
hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc1, hInst, _
Thread)

'Display the message box
MsgBox "This message box has been positioned at (0,0)."

End Sub

Private Sub Command2_Click()
Dim hInst As Long
Dim Thread As Long

'Set up the CBT hook
hInst = GetWindowLong(Me.hwnd, GWL_HINSTANCE)
Thread = GetCurrentThreadId()
hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc2, hInst, _
Thread)

'Display the message box
MsgBox "This message box is centered over Form1."
End Sub

 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top