Ok da ich immer noch keine Antwort erhalten habe, hab ich mich drangesetzt und versucht ne Funktion/Funktionen zu schreiben, welche man nur einmal Registriert und es dann immer Prüft ob die Maus drüber ist. Außerdem sollte man die Position neu setzten können(wir beim scollen benötigt).
EDIT: Vorschläge zur Verbesserung oder auch ganz anderee Ansätze sind natürlich erwünscht
Die Funktion
Func GUI_Register_Set_Pos($index, $iX, $iY, $Widh = -1, $Height = -1)
Local $aold_Hover_pos_Infos = StringSplit($aGUI_Register_Hover_Info[$index], "|")
If $Widh = -1 and $Height <> -1 Then $aGUI_Register_Hover_Info[$index] = $aold_Hover_pos_Infos[1] & "|" & $aold_Hover_pos_Infos[2] & "|" & $iX & "|" & $iY & "|" & $aold_Hover_pos_Infos[5] & "|" & $Height & "|" & $aold_Hover_pos_Infos[7] & "|" & $aold_Hover_pos_Infos[8]
If $Widh <> -1 and $Height = -1 Then $aGUI_Register_Hover_Info[$index] = $aold_Hover_pos_Infos[1] & "|" & $aold_Hover_pos_Infos[2] & "|" & $iX & "|" & $iY & "|" & $Widh & "|" & $aold_Hover_pos_Infos[6] & "|" & $aold_Hover_pos_Infos[7] & "|" & $aold_Hover_pos_Infos[8]
If $Widh = -1 and $Height = -1 Then $aGUI_Register_Hover_Info[$index] = $aold_Hover_pos_Infos[1] & "|" & $aold_Hover_pos_Infos[2] & "|" & $iX & "|" & $iY & "|" & $aold_Hover_pos_Infos[5] & "|" & $aold_Hover_pos_Infos[6] & "|" & $aold_Hover_pos_Infos[7] & "|" & $aold_Hover_pos_Infos[8]
EndFunc
Func GUI_Register_Hover($hWin,$iX,$iY,$Widh,$Height,$HoverFunc, $LeaveFunc = -1)
If Not IsDeclared("anz") Then
Global $aGUI_Register_Hover_Info[1]
Global $anz = 1
Global $Hover_one = 0
$aGUI_Register_Hover_Info[0] = 0 & "|" & 0 & "|" & 0 & "|" & 0 & "|" & 0 & "|" & 0 & "|" & 0 & "|" & 0
EndIf
If $anz <> 1 Then $anz += 1
;$aGUI_Register_Hover_Info[0] = UBound($aGUI_Register_Hover_Info)
_ArrayAdd($aGUI_Register_Hover_Info,$hWin & "|" & $anz & "|" & $iX & "|" & $iY & "|" & $Widh & "|" & $Height & "|" & $HoverFunc & "|" & $LeaveFunc)
;_ArrayDisplay($aGUI_Register_Hover_Info)
If $anz = 1 Then
AdlibRegister("GUI_Register_Hover_check",10)
EndIf
Return $anz
EndFunc
Func GUI_Register_Hover_check()
Local $aGUI_Register_Hover_Infos = StringSplit($aGUI_Register_Hover_Info[1],"|")
;_ArrayDisplay($aGUI_Register_Hover_Infos)
Local $aWinInfo = WinGetPos(HWnd($aGUI_Register_Hover_Infos[1]))
Local $aMouseinfo = MouseGetPos()
If $aMouseinfo[0] > $aWinInfo[0] And $aMouseinfo[0] < $aWinInfo[0]+$aWinInfo[2] And $aMouseinfo[1] > $aWinInfo[1] And $aMouseinfo[1] < $aWinInfo[1]+$aWinInfo[3] Then
For $i = 1 To UBound($aGUI_Register_Hover_Info)-1
$aGUI_Register_Hover_Infos = StringSplit($aGUI_Register_Hover_Info[$i],"|")
;_ArrayDisplay($aGUI_Register_Hover_Infos)
$aMouseinfo2 = GUIGetCursorInfo (HWnd($aGUI_Register_Hover_Infos[1]))
;ConsoleWrite($aMouseinfo2[0] & "x" & $aMouseinfo2[1] & "|" & $aGUI_Register_Hover_Infos[3] & "x" & $aGUI_Register_Hover_Infos[4] & " " & $aGUI_Register_Hover_Infos[5] & "x" & $aGUI_Register_Hover_Infos[6] & @CRLF)
If $aMouseinfo2[0] > $aGUI_Register_Hover_Infos[3] And $aMouseinfo2[0] < $aGUI_Register_Hover_Infos[3]+$aGUI_Register_Hover_Infos[5] And $aMouseinfo2[1] > $aGUI_Register_Hover_Infos[4] And $aMouseinfo2[1] < $aGUI_Register_Hover_Infos[4]+$aGUI_Register_Hover_Infos[6] Then
If $Hover_one <> $aGUI_Register_Hover_Infos[2] Then
Call($aGUI_Register_Hover_Infos[7],$aGUI_Register_Hover_Infos[2])
;MsgBox(0,"","")
$Hover_one = $aGUI_Register_Hover_Infos[2]
ConsoleWrite("hover " & $aGUI_Register_Hover_Infos[2] & @CRLF)
EndIf
Else
$aGUI_Register_Hover_Infoss = StringSplit($aGUI_Register_Hover_Info[$Hover_one],"|")
;_ArrayDisplay($aGUI_Register_Hover_Infoss)
If $Hover_one = $aGUI_Register_Hover_Infoss[2] Then
;ConsoleWrite($aMouseinfo2[0] & "x" & $aMouseinfo2[1] & "|" & $aGUI_Register_Hover_Infoss[3] & "x" & $aGUI_Register_Hover_Infoss[4] & " " & $aGUI_Register_Hover_Infoss[5] & "x" & $aGUI_Register_Hover_Infoss[6] & @CRLF)
If $aMouseinfo2[0] > $aGUI_Register_Hover_Infoss[3] And $aMouseinfo2[0] < $aGUI_Register_Hover_Infoss[3]+$aGUI_Register_Hover_Infoss[5] And $aMouseinfo2[1] > $aGUI_Register_Hover_Infoss[4] And $aMouseinfo2[1] < $aGUI_Register_Hover_Infoss[4]+$aGUI_Register_Hover_Infoss[6] Then
Else
$Hover_one = 0
Call($aGUI_Register_Hover_Infoss[8])
EndIf
EndIf
EndIf
Next
EndIf
EndFunc
Beispiel
#Include <GDIPlus.au3>
#include <GUIScrollBars.au3>
#include <ScrollBarConstants.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <GUIConstantsEx.au3>
#include <StructureConstants.au3>
#include <MyHover.au3>
#include <Array.au3>
HotKeySet("{UP}","up")
HotKeySet("{DOWN}","down")
Global $GUI_Widh = 500
Global $GUI_Height = 500
Global $iYpos = 0
Global $GUI, $hGUI, $Lab ;=>GUI Var
Global $hGraphics, $hBitmap, $hBuffer, $hBack_Pic, $FR_Brush, $FR_Brush_H ;=>GDI+ Var
Global $u = 1
Opt("GUIOnEventMode",1)
$GUI = GUICreate("Formel 1", $GUI_Widh, $GUI_Height)
$hGUI = WinGetHandle($GUI)
Global $aLab[2] =[200,200]
;$Lab = GUICtrlCreateLabel("",$aLab[0],$aLab[1],100,100)
;_GUICtrl_OnHoverRegister($Lab, "hover","leave")
GUISetOnEvent(-3,"_exit")
GUISetState()
Draw()
GUI_Register_Hover($hGUI,200,200,100,100,"hover", "leave")
GUI_Register_Hover($hGUI,400,400,100,100,"hover2", -1)
While 1
Sleep(100)
WEnd
Func Draw()
_GDIPlus_Startup()
#Region Create Graphic Obj
$hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGUI)
#EndRegion
#Region Buffer
$hBitmap = _GDIPlus_BitmapCreateFromGraphics($GUI_Widh, $GUI_Height, $hGraphics)
$hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
#EndRegion
#Region load bg picture
$hBack_Pic = _GDIPlus_BitmapCreateFromFile(@ScriptDir & "/Bilder/hintergrund2.bmp")
#EndRegion
#Region Create Pen/brush
$FR_Brush = _GDIPlus_BrushCreateSolid("0x" & Hex(10170230230))
$FR_Brush_H = _GDIPlus_BrushCreateSolid("0x" & Hex(25170240130))
#EndRegion
#Region Draw in Kontext
_GDIPlus_GraphicsDrawImage($hBuffer, $hBack_Pic, 0, $iYpos)
_GDIPlus_GraphicsFillRect($hBuffer,200,200+$iYpos,100,100,$FR_Brush)
#EndRegion
#Region Draw Kontext on Graphic
_GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
#EndRegion
EndFunc
Func up()
$iYpos +=5
redraw()
EndFunc
Func down()
$iYpos -=5
redraw()
EndFunc
Func redraw()
#Region Draw in Kontext
_GDIPlus_GraphicsDrawImage($hBuffer, $hBack_Pic, 0, 0)
_GDIPlus_GraphicsFillRect($hBuffer,200,200+$iYpos,100,100,$FR_Brush)
#EndRegion
#Region ctrl Set
;__GUICtrl_SOH_ReleaseResources()
;GUICtrlDelete($Lab)
;GUICtrlSetPos($Lab,$aLab[0],$aLab[1]+$iYpos)
;GUICtrlSetState($Lab,$GUI_DISABLE)
;_GUICtrl_OnHoverRegister($Lab, "hover","leave")
GUI_Register_Set_Pos(1, $aLab[0], $aLab[1]+$iYpos)
#EndRegion
#Region Draw Kontext on Graphic
_GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
#EndRegion
EndFunc
Func hover($nix)
;$u +=1
;ConsoleWrite("hover " & $u & @crlf)
_GDIPlus_GraphicsFillRect($hGraphics,$aLab[0],$aLab[1]+$iYpos,100,100,$FR_Brush_H)
EndFunc
Func leave()
_GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
EndFunc
Func _exit()
_GDIPlus_BitmapDispose($hBack_Pic)
_GDIPlus_BitmapDispose($hBitmap)
_GDIPlus_GraphicsDispose($hBuffer)
_GDIPlus_Shutdown()
Exit
EndFunc