GDI+ Kreis anklicken

  • Guten Abend zusammen

    Ich habe mal wieder ein Problem :rolleyes:
    Ich würde gerne wissen wie man es schafft, herrauszufinden, wann ein Kreis, der mit GDI+ gezeichnet wurde angeklickt wurde.
    Hintergrund der Sache is das der Kreis dannach verschwinden soll :D
    Hoffe mal die Mathe & GDI+ - Junkies wissen um Rat (und vllt nem Beispiel :whistling: )

    Mfg

    Keyle

  • Hallöchen.
    Das geht mit GUI_EVENT_PRIMARYDOWN.
    Hier so wäre ungefähr ein Beispiel:

    [autoit]


    While 1
    $nMsg = GUIGetMsg(1)
    Switch $nMsg[0]
    Case $GUI_EVENT_PRIMARYDOWN
    Switch $nMsg[3]
    Case 100 to 200
    Switch $nMsg[4]
    Case 100 to 200
    MsgBox(0, "Hallo", "Hallo")
    EndSwitch
    EndSwitch
    EndSwitch
    WEnd

    [/autoit]

    Edit: Hab vergessen etwas zu erwähnen:
    Das hier ist nur die der Teil der GUI_EVENT_PRIMARY - Funktion. Der Rest muss selbstverständlich dazu.
    Und in diesem Fall wären die Koordinaten des Kreises X: 100 - 200 ($nMsg[3])
    Y: 100 - 200 ($nMsg[4])

  • Ich habe für Kreise mal ein paar Funktionen geschrieben 8) .

    Spoiler anzeigen
    [autoit]

    ;Parameter:
    ;1. X Koordinate des Punkts
    ;2. Y Koordinate des Punkts
    ;3. X Koordinate des Kreises (Mittelpunkt)
    ;4. Y Koordinate des Kreises (Mittelpunkt)
    ;5. Radius des Kreises (Nicht Durchmesser :!: )
    ;Gibt den Abstand des Punktes zum Mittelpunkt des Kreises zurück.
    Func _PointIsInCircle($iX_Point, $iY_Point, $iX_Circle, $iY_Circle, $iRadius_Circle)
    $iDistPoints = _GetPointsDistance($iX_Point, $iY_Point, $iX_Circle, $iY_Circle)
    If ($iRadius_Circle > 0 And $iDistPoints < $iRadius_Circle) Or ($iRadius_Circle < 0 And $iDistPoints > $iRadius_Circle) Or $iDistPoints = 0 Then Return $iDistPoints
    Return -1
    EndFunc ;==>_PointIsInCircle

    [/autoit] [autoit][/autoit] [autoit]

    ;Parameter:
    ;1. X Koordinate des 1. Kreises (Mittelpunkt)
    ;2. Y Koordinate des 1. Kreises (Mittelpunkt)
    ;3. X Koordinate des 2. Kreises (Mittelpunkt)
    ;4. Y Koordinate des 2. Kreises (Mittelpunkt)
    ;5. Radius des 1. Kreises (Nicht Durchmesser :!: )
    ;6. Radius des 2. Kreises (Nicht Durchmesser :!: )
    ;Gibt True zurück, wenn sich die 2 Kreise berühren
    Func _CircleIsTouchingCircle($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2, $iRadius_Circle1, $iRadius_Circle2)
    $iDistCircles = _GetPointsDistance($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2)
    If $iDistCircles < $iRadius_Circle1 + $iRadius_Circle2 Then Return True
    Return False
    EndFunc ;==>_CircleIsTouchingCircle

    [/autoit] [autoit][/autoit] [autoit]

    ;Parameter:
    ;1. X Koordinate des 1. Kreises (Mittelpunkt)
    ;2. Y Koordinate des 1. Kreises (Mittelpunkt)
    ;3. X Koordinate des 2. Kreises (Mittelpunkt)
    ;4. Y Koordinate des 2. Kreises (Mittelpunkt)
    ;5. Radius des 1. Kreises (Nicht Durchmesser :!: )
    ;6. Radius des 2. Kreises (Nicht Durchmesser :!: )
    ;Gibt True zurück, wenn einer der Kreise vollständig:!: im anderen ist
    Func _CircleIsInCircle($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2, $iRadius_Circle1, $iRadius_Circle2)
    $iDistCircles = _GetPointsDistance($iX_Circle1, $iY_Circle1, $iX_Circle2, $iY_Circle2)
    If $iRadius_Circle1 > $iRadius_Circle2 And $iDistCircles <= $iRadius_Circle1 - $iRadius_Circle2 Then Return True
    If $iRadius_Circle1 < $iRadius_Circle2 And $iDistCircles <= $iRadius_Circle2 - $iRadius_Circle1 Then Return True
    Return False
    EndFunc ;==>_CircleIsInCircle

    [/autoit] [autoit][/autoit] [autoit]

    ;Parameter:
    ;1. X Koordinate des 1. Punkts
    ;2. Y Koordinate des 1. Punkts
    ;3. X Koordinate des 1. Punkts
    ;4. Y Koordinate des 1. Punkts
    ;Gibt die Distanz der Punkte zurück
    Func _GetPointsDistance($iPointX1, $iPointY1, $iPointX2, $iPointY2)
    Return Sqrt(($iPointX1 - $iPointX2) ^ 2 + ($iPointY1 - $iPointY2) ^ 2)
    EndFunc ;==>_GetPointsDistance

    [/autoit]