AW: Position einer MsgBox ändern
12.07.2003 23:45:15
NE
Hallo,
versuch' mal folgendes, allerdings weiss ich nicht ob's unter vba läuft,
Code von Detlev Schubert, gefunden unter: www.vb-fun.de
hope it helps
Gruss Nancy
--
'-------------------------- module1.bas -------------------------
Option Explicit
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 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 UnhookWindowsHookEx Lib "user32" _
(ByVal hHook As Long) As Long
Public Declare Function GetCurrentThreadId Lib "kernel32" () As Long
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 posX As Long
Public posY As Long
Public Function WinProc(ByVal lMsg As Long, ByVal wParam As Long, _
ByVal lParam As Long) As Long
If lMsg = HCBT_ACTIVATE Then
SetWindowPos wParam, 0, posX, posY, 0, 0, SWP_NOSIZE Or _
SWP_NOZORDER Or SWP_NOACTIVATE
UnhookWindowsHookEx hHook
End If
WinProc = False
End Function
'------------------------- form1.frm ---------------------------
Option Explicit
Private Sub Form_Load()
txtPosX = 0
txtPosY = 0
End Sub
Private Sub Command1_Click()
Dim hInst As Long, Thread As Long
Dim msg As String
If Check1.Value = 1 Then
msg$ = "Die MessageBox ist jetzt zentriert."
Else
hInst = App.hInstance
Thread = GetCurrentThreadId()
hHook = SetWindowsHookEx(WH_CBT, AddressOf WinProc, _
hInst, Thread)
posX = CLng(txtPosX)
posY = CLng(txtPosY)
msg$ = "Die Position der MessageBox ist an:" & _
vbCrLf & vbCrLf & "X-Position: " & posX & vbCrLf & _
"Y-Position: " & posY
End If
MsgBox msg$, vbOKOnly + vbInformation, _
"Position der MessageBox", 0, 0
End Sub