- Offizieller Beitrag
Ob man sowas tatsächlich braucht - darüber läßt sich sicher streiten
Im Forum gab es diese Fragestellung und ich habe das nun in eine UDF gepackt: ToolTip per Maus verschieben.
Edit 16.05.2014: Bsp. erweitert
ToolTipMove.au3 (v.01)
#Region - TimeStamp
; 2014-05-15 13:55:54 v 0.1
#EndRegion - TimeStamp
#cs =========================================================== Funktionen =====
[/autoit] [autoit][/autoit] [autoit]_TTMove_StartUp()
Initialisiert die UDF
_TTMove_ShutDown() ( optional )
Freigeben der Ressourcen - automatisch bei Programmende
_TTMove_RegisterTip()
Registrieren eines ToolTips für die UDF
_TTMove_UnRegisterTip()
ToolTip aus der Registrierung entfernen
==================================================================================
[/autoit] [autoit][/autoit] [autoit]#ce
[/autoit] [autoit][/autoit] [autoit]#include-once
#include <WinAPI.au3>
#include <WindowsConstants.au3>
OnAutoItExitRegister('__TTMove_Exit')
Global Const $__HC_ACTION = 0
Global $__oTTTitle
Global $__hStub_MouseProc
Global $__hmod
Global $__hHook
Global $fLeftPressDown, $fMove
Func _TTMove_StartUp()
$__oTTTitle = ObjCreate('Scripting.Dictionary')
$__hStub_MouseProc = DllCallbackRegister("__TTMove_MouseProc", "long", "int;wparam;lparam")
$__hmod = _WinAPI_GetModuleHandle(0)
$__hHook = _WinAPI_SetWindowsHookEx($WH_MOUSE_LL, DllCallbackGetPtr($__hStub_MouseProc), $__hmod)
$fLeftPressDown = False
$fMove = False
EndFunc
Func _TTMove_ShutDown()
$__oTTTitle = 0
$__hmod = 0
__TTMove_Exit()
EndFunc
Func _TTMove_RegisterTip($_sTitle)
If Not $__oTTTitle.Exists($_sTitle) Then
$__oTTTitle.Add($_sTitle, 1)
Return 1
Else
Return 0
EndIf
EndFunc
Func _TTMove_UnRegisterTip($_sTitle)
If $__oTTTitle.Exists($_sTitle) Then
$__oTTTitle.Remove($_sTitle)
Return 1
Else
Return 0
EndIf
EndFunc
; == internal Functions
[/autoit] [autoit][/autoit] [autoit]Func __TTMove_GetHwnd()
For $tip In $__oTTTitle.Keys
If WinExists($tip) Then
Return WinGetHandle($tip)
EndIf
Next
Return 0
EndFunc
Func __TTMove_MouseProc($nCode, $wParam, $lParam)
Local $event, $info, $iX, $iY
$info = DllStructCreate("int X;int Y;dword mouseData;dword flags;dword time;ulong_ptr dwExtraInfo", $lParam)
$iX = DllStructGetData($info, 1)
$iY = DllStructGetData($info, 2)
$mouseData = DllStructGetData($info, 3)
If $nCode < 0 Then Return _WinAPI_CallNextHookEx($__hHook, $nCode, $wParam, $lParam)
If $nCode = $__HC_ACTION Then
Switch $wParam
Case $WM_MOUSEMOVE
__TTMove_MoveWnd(__TTMove_GetHwnd(), $iX, $iY)
Case $WM_LBUTTONDOWN
If __TTMove_MoveWnd(__TTMove_GetHwnd(), $iX, $iY, True) = 1 Then $fLeftPressDown = True
Case $WM_LBUTTONUP
If __TTMove_MoveWnd(__TTMove_GetHwnd(), $iX, $iY) = 1 Then
$fLeftPressDown = False
$fMove = False
EndIf
EndSwitch
EndIf
Return _WinAPI_CallNextHookEx($__hHook, $nCode, $wParam, $lParam)
EndFunc
Func __TTMove_MoveWnd($_hToolTip, $_x, $_y, $_fSet=False)
If $_hToolTip = 0 Then Return 0
Local $aPos = WinGetPos($_hToolTip)
Local Static $xLast, $yLast
If $_fSet Then
If $_x < $aPos[0] Or $aPos[0]+$aPos[2] < $_x Or $_y < $aPos[1] Or $aPos[1]+$aPos[3] < $_y Then Return 0
$xLast = $_x
$yLast = $_y
$fMove = True
Return 1
EndIf
If Not $fMove Then Return 0
Local $xDiff = ($_x) - ($xLast)
Local $yDiff = ($_y) - ($yLast)
$xLast = $_x
$yLast = $_y
WinMove($_hToolTip, '', $aPos[0]+($xDiff), $aPos[1]+($yDiff))
Return 1
EndFunc
Func __TTMove_Exit()
_WinAPI_UnhookWindowsHookEx($__hHook)
DllCallbackFree($__hStub_MouseProc)
EndFunc ;==>OnAutoItExit
Beispiel
#include 'ToolTipMove.au3'
[/autoit] [autoit][/autoit] [autoit]HotKeySet('^!{F9}', '_exit') ; Ctrl+Alt+F9 zum Beenden
HotKeySet('^!{F10}', '_switchTip') ; Ctrl+Alt+F10 -- wechselt zwischen Tip#1 und Tip#2
HotKeySet('^!{F11}', '_unregister') ; Ctrl+Alt+F11 -- UnRegister Tip#1 - nur noch Tip#2 verschiebbar
Global $sToolTip1 = "Das ist ein Test-Tool-Tipp [1]"
Global $sToolTip2 = "Das ist ein Test-Tool-Tipp [2]"
_TTMove_StartUp()
_TTMove_RegisterTip($sToolTip1)
_TTMove_RegisterTip($sToolTip2)
ToolTip($sToolTip1)
[/autoit] [autoit][/autoit] [autoit]While True
Sleep(50)
WEnd
Func _switchTip()
Local Static $aTip[2] = [$sToolTip1,$sToolTip2]
Local Static $iCurr = 0
ToolTip('')
$iCurr = BitXOR($iCurr,1)
ToolTip($aTip[$iCurr])
EndFunc
Func _unregister()
_TTMove_UnRegisterTip($sToolTip1)
EndFunc
Func _exit()
Exit
EndFunc