#Region - TimeStamp ; 2012-09-17 09:58:27 #EndRegion - TimeStamp ;=============================================================================== ; Function Name..: _WinAPI_DllStructRECT_Set() ; Description....: Erstellt und/oder füllt eine RECT-Struktur, optional Leeren eines RECT ; Parameter(s)...: $_tRECT Leere Variable zur Aufnahme der RECT-Strukt oder Variable m. RECT-Strukt oder Pointer auf eine RECT-Strukt ; ...............: $_iLeft RECT left ODER Array mit allen 4 RECT-Werten (top, right, bottom werden dann ignoriert)! ; ...............: $_iTop RECT top ; ...............: $_iRight RECT right ; ...............: $_iBottom RECT bottom ; ...............: Mit "-1" für alle 4 RECT-Werte (Standard) wird die übergebene Struktur geleert ; Return Value(s): Erfolg 1 ; Fehler 0 set @error = Errorwert aus DllCall oder "-1" = Wertearray übergeben mit falscher Dimensionsgröße ; Author(s)......: BugFix (bugfix@autoit.de) ;=============================================================================== Func _WinAPI_DllStructRECT_Set(ByRef $_tRECT, $_iLeft=-1, $_iTop=-1, $_iRight=-1, $_iBottom=-1) Local $fSetEmpty = False, $fNewStruct = False If IsArray($_iLeft) Then If UBound($_iLeft) <> 4 Or UBound($_iLeft,0) > 1 Then Return SetError(-1,0,0) $_iTop = $_iLeft[1] $_iRight = $_iLeft[2] $_iBottom = $_iLeft[3] $_iLeft = $_iLeft[0] EndIf If $_iLeft = -1 And $_iTop = -1 And $_iRight = -1 And $_iBottom = -1 Then $fSetEmpty = True If Not IsPtr($_tRECT) Then If Not IsDllStruct($_tRECT) Then $_tRECT = DllStructCreate("struct; long Left;long Top;long Right;long Bottom; endstruct") $fNewStruct = True EndIf If $fSetEmpty And (Not $fNewStruct) Then Local $ret = DllCall("user32", 'long', 'SetRectEmpty', 'ptr', DllStructGetPtr($_tRECT)) If @error > 0 Then Return SetError(@error,0,0) Else Local $ret = DllCall("user32", 'long', 'SetRect', 'ptr', DllStructGetPtr($_tRECT), 'long', $_iLeft, 'long', $_iTop, 'long', $_iRight, 'long', $_iBottom) If @error > 0 Then Return SetError(@error,0,0) EndIf Else If $fSetEmpty Then Local $ret = DllCall("user32", 'long', 'SetRectEmpty', 'ptr',$_tRECT) If @error > 0 Then Return SetError(@error,0,0) Else Local $ret = DllCall("user32", 'long', 'SetRect', 'ptr', $_tRECT, 'long', $_iLeft, 'long', $_iTop, 'long', $_iRight, 'long', $_iBottom) If @error > 0 Then Return SetError(@error,0,0) EndIf EndIf Return 1 EndFunc ;==>_WinAPI_DllStructRECT_Set ;=============================================================================== ; Function Name: _WinAPI_SetRect(ByRef $tRECT, $X1, $Y1, $X2, $Y2) ; Description: Befüllt eine RECT-Struktur in einem Aufruf mit Werten ; Parameter(s): $tRECT RECT-Struktur ; $X1, $Y1, $X2, $Y2 Werte des Rectangle ; Return Value(s): Erfolg <> 0 ; Fehler 0 set @error 1-keine Struktur übergeben ; Author(s): BugFix (bugfix@autoit.de) ;=============================================================================== Func _WinAPI_SetRect(ByRef $tRECT, $X1, $Y1, $X2, $Y2) If Not IsDllStruct($tRECT) Then Return SetError(1,0,0) Local $ret = DllCall("user32", 'long', 'SetRect', 'ptr', DllStructGetPtr($tRECT), 'long', $X1, 'long', $Y1, 'long', $X2, 'long', $Y2) If @error > 0 Then Return SetError(1,@error,0) Return $ret[0] EndFunc ;==>_WinAPI_SetRect ;=============================================================================== ; Function Name: _WinAPI_SetRectEmpty(ByRef $tRECT) ; Description: Leert alle Werte einer RECT-Struktur in einem Aufruf ; Parameter(s): $tRECT RECT-Struktur ; Return Value(s): Erfolg <> 0 ; Fehler 0 set @error 1-keine Struktur übergeben ; Author(s): BugFix (bugfix@autoit.de) ;=============================================================================== Func _WinAPI_SetRectEmpty(ByRef $tRECT) If Not IsDllStruct($tRECT) Then Return SetError(1,0,0) Local $ret = DllCall("user32", 'long', 'SetRectEmpty', 'ptr', DllStructGetPtr($tRECT)) If @error > 0 Then Return SetError(2,@error,0) Return $ret[0] EndFunc ;==>_WinAPI_SetRectEmpty ;=============================================================================== ; Function Name: _WinAPI_OffsetRect(ByRef $tRECT, $X, $Y) ; Description: Verschiebt eine RECT-Struktur um die $X/$Y-Werte ; Parameter(s): $tRECT RECT-Struktur ; $X Wert horizontale Verschiebung ; $Y Wert vertikale Verschiebung ; Return Value(s): Erfolg <> 0 ; Fehler 0 set @error 1-keine Struktur übergeben ; Author(s): BugFix (bugfix@autoit.de) ;=============================================================================== Func _WinAPI_OffsetRect(ByRef $tRECT, $X, $Y) If Not IsDllStruct($tRECT) Then Return SetError(1,0,0) Local $ret = DllCall("user32", 'long', "OffsetRect", 'ptr', DllStructGetPtr($tRECT), 'long', $X, 'long', $Y) If @error > 0 Then Return SetError(1,@error,0) Return $ret[0] EndFunc ;==>_WinAPI_OffsetRect ;=============================================================================== ; Function Name: _WinAPI_InflateRect(ByRef $tRECT, $dX, $dY) ; Description: Vergrößert/Verkleinert eine RECT-Struktur um die $dX/$dY-Werte ; Parameter(s): $tRECT RECT-Struktur ; $dX Wert horizontale Größenänderung (- verkleinert) ; wird links UND rechts zu/abgerechnet ; $dY Wert vertikale Größenänderung (- verkleinert) ; wird oben UND unten zu/abgerechnet ; Return Value(s): Erfolg <> 0 ; Fehler 0 set @error 1-keine Struktur übergeben ; Author(s): BugFix (bugfix@autoit.de) ;=============================================================================== Func _WinAPI_InflateRect(ByRef $tRECT, $dX, $dY) If Not IsDllStruct($tRECT) Then Return SetError(1,0,0) Local $ret = DllCall("user32", "long", "InflateRect", "ptr", DllStructGetPtr($tRECT), "long", $dX, "long", $dY) If @error > 0 Then Return SetError(1,@error,0) Return $ret[0] EndFunc ;==>_WinAPI_InflateRect ;=============================================================================== ; Function Name: _WinAPI_IntersectRect(ByRef $Src1Rect, ByRef $Src2Rect) ; Description: Ermittelt Schnittmengen zweier RECT-Strukturen ; Parameter(s): $Src1Rect, $Src2Rect RECT-Strukturen aus denen Schnittmengen festgestellt werden sollen ; Return Value(s): Erfolg RECT-Struktur der Schnittmenge ; Fehler 0 set @error 1-keine Struktur(en) übergeben ; 2-Dll-Fehler (s. @extended) ; 3-keine Schnittmenge ; Author(s): BugFix (bugfix@autoit.de) ;=============================================================================== Func _WinAPI_IntersectRect(ByRef $Src1Rect, ByRef $Src2Rect) If (Not IsDllStruct($Src1Rect)) Or (Not IsDllStruct($Src2Rect)) Then Return SetError(1,0,0) Local $DestRect = DllStructCreate("int Left;int Top;int Right;int Bottom") Local $ret = DllCall("user32", "int", "IntersectRect", "ptr", DllStructGetPtr($DestRect), "ptr", DllStructGetPtr($Src1Rect), "ptr", DllStructGetPtr($Src2Rect)) If @error > 0 Then Return SetError(2,@error,0) If $ret[0] > 0 Then Return $DestRect Else Return SetError(3,0,0) EndIf EndFunc ;==>_WinAPI_IntersectRect ;=============================================================================== ; Function Name: _WinAPI_CoordInRect(ByRef $tRECT, $X, $Y) ; Description: Ermittelt ob eine übergebene Koordinate innerhalb einer RECT-Struktur ist ; Analog zu _WinAPI_PtInRect, aber statt $tagPOINT werden Einzelkoordinaten übergeben ; Parameter(s): $tRECT RECT-Struktur ; $X X-Koordinate ; $Y Y-Koordinate ; Return Value(s): Erfolg True/False Punkt in/nicht in RECT ; Fehler 0 set @error 1-keine Struktur übergeben ; 2-Dll-Fehler (s. @extended) ; Author(s): BugFix (bugfix@autoit.de) ;=============================================================================== Func _WinAPI_CoordInRect(ByRef $tRECT, $X, $Y) If Not IsDllStruct($tRECT) Then Return SetError(1,0,0) Local $ret = DllCall("user32", "long", "PtInRect", "ptr", DllStructGetPtr($tRECT), "long", $X, "long", $Y) If @error > 0 Then Return SetError(2,@error,0) If $ret[0] Then Return True Else Return False EndIf EndFunc ;==>_WinAPI_CoordInRect ;=============================================================================== ; Function Name: _WinAPI_GetRectValue(ByRef $tRECT, $bArray=False) ; Description: Gibt die Werte einer RECT-Struktur als String(Standard) od. Array zurück ; Parameter(s): $tRECT RECT-Struktur, die gelesen werden soll ; $bArray Rückgabetyp: False(Standard)=String, True=Array ; Return Value(s): Erfolg Werte der RECT-Struktur ; Fehler 0 set @error 1-keine Struktur übergeben ; Author(s): BugFix (bugfix@autoit.de) ;=============================================================================== Func _WinAPI_GetRectValue(ByRef $tRECT, $bArray=False) If Not IsDllStruct($tRECT) Then Return SetError(1,0,0) Local $sOut = _ DllStructGetData($tRECT, 1) & ',' & _ DllStructGetData($tRECT, 2) & ',' & _ DllStructGetData($tRECT, 3) & ',' & _ DllStructGetData($tRECT, 4) If $bArray Then Return StringSplit($sOut, ',', 2) Return $sOut EndFunc ;==>_WinAPI_GetRectValue