- Offizieller Beitrag
Hier mal noch ein paar zusätzliche API-Funktionen für die RECT-Struktur:
Spoiler anzeigen
Local $tRECT = DllStructCreate('int Left;int Top;int Right;int Bottom')
[/autoit] [autoit][/autoit] [autoit]; === Befüllen
ConsoleWrite('=== Befüllen' & @CRLF)
ConsoleWrite( _WinAPI_SetRect($tRECT, 20, 30, 200, 300) & @CRLF)
_ConsoleWriteRECT($tRECT)
; === Verschieben
ConsoleWrite('=== Verschieben' & @CRLF)
ConsoleWrite( _WinAPI_OffsetRect($tRECT, 5, 5) & @CRLF)
_ConsoleWriteRECT($tRECT)
; === Punkt innerhalb RECT?
ConsoleWrite('=== Punkt innerhalb RECT?' & @CRLF)
ConsoleWrite(_WinAPI_PointInRect($tRECT, 150, 35) & @CRLF)
ConsoleWrite(_WinAPI_PointInRect($tRECT, 150, 25) & @CRLF)
; === Leeren
ConsoleWrite('=== Leeren' & @CRLF)
ConsoleWrite( _WinAPI_SetRectEmpty($tRECT) & @CRLF)
_ConsoleWriteRECT($tRECT)
Func _ConsoleWriteRECT(ByRef $tRECT)
For $i = 1 To 4
ConsoleWrite(DllStructGetData($tRECT, $i) & @CRLF)
Next
EndFunc
;===============================================================================
; 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
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _WinAPI_SetRect(ByRef $tRECT, $X1, $Y1, $X2, $Y2)
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
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _WinAPI_SetRectEmpty(ByRef $tRECT)
Local $ret = DllCall("user32", 'long', 'SetRectEmpty', 'ptr', DllStructGetPtr($tRECT))
If @error > 0 Then Return SetError(1,@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
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _WinAPI_OffsetRect(ByRef $tRECT, $X, $Y)
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_PointInRect(ByRef $tRECT, $X, $Y)
; Description: Prüft ob ein Punkt innerhalb einer RECT-Struktur ist
; Parameter(s): $tRECT RECT-Struktur
; $X, $Y Koordinaten des Punktes
; Return Value(s): Erfolg Punkt innerhalb=True / außerhalb=False
; Fehler -1 set @error
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;===============================================================================
Func _WinAPI_PointInRect(ByRef $tRECT, $X, $Y)
Local $ret = DllCall("user32", 'long', 'PtInRect', 'ptr', DllStructGetPtr($tRECT), 'long', $X, 'long', $Y)
If @error > 0 Then Return SetError(1,@error,-1)
If $ret[0] > 0 Then
Return True
Else
Return False
EndIf
EndFunc ;==>_WinAPI_PointInRect
Edit: Noch eine Funktion ergänzt.
Edit2: Und genau die gibt es doch schon in der WinAPI.au3 (_WinAPI_PointInRect - dort: _WinAPI_PtInRect)
Edit 17.09.2012
Neue Funktion hinzugefügt, s. Post #2
DL bisher: 52