Wie kann ich das X fest machen

  • Hey Leute
    Ja ich weiß, dass die Überschrift nen bisschen blöde ist, aber ich weiß nix besseres :D
    Also ich würde gerne mit GDI+ TicTacToe nachschreiben und jetzt habe ich das Problem, dass ich keine Ahnung hab wie ich es schaffen kann dass die X nicht wieder verschwinden, sobald ich die Maus loslasse...
    Ja das Skript ist noch in seiner Anfangsphase, also den Rest sollte ich selbst hinbekommen..
    DFPWare

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    $hWnd = GUICreate("Tic Tac Toe",315,315)

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

    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(315, 315, $hGraphics)
    Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)

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

    $hBgBrush = _GDIPlus_BrushCreateSolid(0xFF79ABFF)
    Global $hStrichBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hXOPen = _GDIPlus_PenCreate(0xFF112233,10)

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

    GUISetState()

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

    Do
    $msg = GUIGetMsg()

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

    _GDIPlus_GraphicsFillRect($hBuffer,0,0,315,315,$hBgBrush)

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

    Select
    Case _IsPressed(01)
    $Pos = GUIGetCursorInfo()
    Select
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben links
    _GDIPlus_GraphicsDrawLine($hBuffer,10,10,90,90,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,90,10,10,90,$hXOPen)
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte links
    _GDIPlus_GraphicsDrawLine($hBuffer,10,115,90,195,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,90,115,10,195,$hXOPen)
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten links
    _GDIPlus_GraphicsDrawLine($hBuffer,10,220,90,300,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,90,220,10,300,$hXOPen)

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

    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben mitte
    _GDIPlus_GraphicsDrawLine($hBuffer,115,10,195,90,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,195,10,115,90,$hXOPen)
    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte mitte
    _GDIPlus_GraphicsDrawLine($hBuffer,115,115,195,195,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,195,115,115,195,$hXOPen)
    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten mitte
    _GDIPlus_GraphicsDrawLine($hBuffer,115,220,195,300,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,195,220,115,300,$hXOPen)

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

    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben rechts
    _GDIPlus_GraphicsDrawLine($hBuffer,220,10,300,90,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,300,10,220,90,$hXOPen)
    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte rechts
    _GDIPlus_GraphicsDrawLine($hBuffer,220,115,300,195,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,300,115,220,195,$hXOPen)
    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten rechts
    _GDIPlus_GraphicsDrawLine($hBuffer,220,220,300,300,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,300,220,220,300,$hXOPen)
    EndSelect
    EndSelect

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

    _GitterZeichnen()
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, 315, 315)
    Until $msg = -3

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

    Func _GitterZeichnen()
    _GDIPlus_GraphicsFillRect($hBuffer,100,0,5,315,$hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer,205,0,5,315,$hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer,0,100,315,5,$hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer,0,205,315,5,$hStrichBrush)
    EndFunc

    [/autoit]
  • Das Kreuz nicht direkt setzen, sondern nur einen Schalter.

    Spoiler anzeigen

    Gruss Hans-Jürgen ^^

  • du machst in dem moment wo du das Kreuz setzt einen Screenshot und fügst dies als Bild ein.

  • Ich denke Hans Peters Version ist wohl die einfachste ;)
    Danke trotzdem an alle und sorry, wenn das eine zu leichte frage war :rolleyes:
    DFPWare
    €DIT:
    Ich komm irgendwie doch nich ganz klar damit:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    Local $obenlinks = False
    Local $mittelinks = False
    Local $untenlinks = False
    Local $obenmitte = False
    Local $mittemitte = False
    Local $untenmitte = False
    Local $obenrechts = False
    Local $mitterechts = False
    Local $untenrechts = False

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

    $hWnd = GUICreate("Tic Tac Toe",315,315)

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

    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hwnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(315, 315, $hGraphics)
    Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)

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

    $hBgBrush = _GDIPlus_BrushCreateSolid(0xFF79ABFF)
    Global $hStrichBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hXOPen = _GDIPlus_PenCreate(0xFF112233,10)

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

    GUISetState()

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

    Do
    $msg = GUIGetMsg()

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

    Select
    Case _IsPressed(01)
    $Pos = GUIGetCursorInfo()
    Select
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben links
    $obenlinks = True
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte links
    $mittelinks = True
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten links
    $untenlinks = True

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

    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben mitte
    $obenmitte = True
    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte mitte
    $mittemitte = True
    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten mitte
    $untenmitte = True

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

    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben rechts
    $obenrechts = True
    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte rechts
    $mitterechts = True
    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten rechts
    $untenrechts = True
    EndSelect
    EndSelect

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

    _GDIPlus_GraphicsFillRect($hBuffer,0,0,315,315,$hBgBrush)

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

    Select
    Case $obenlinks
    _GDIPlus_GraphicsDrawLine($hBuffer,10,10,90,90,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,90,10,10,90,$hXOPen)
    Case $mittelinks
    _GDIPlus_GraphicsDrawLine($hBuffer,10,115,90,195,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,90,115,10,195,$hXOPen)
    Case $untenlinks
    _GDIPlus_GraphicsDrawLine($hBuffer,10,220,90,300,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,90,220,10,300,$hXOPen)

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

    Case $obenmitte
    _GDIPlus_GraphicsDrawLine($hBuffer,115,10,195,90,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,195,10,115,90,$hXOPen)
    Case $mittemitte
    _GDIPlus_GraphicsDrawLine($hBuffer,115,115,195,195,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,195,115,115,195,$hXOPen)
    Case $untenmitte
    _GDIPlus_GraphicsDrawLine($hBuffer,115,220,195,300,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,195,220,115,300,$hXOPen)

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

    Case $obenrechts
    _GDIPlus_GraphicsDrawLine($hBuffer,220,10,300,90,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,300,10,220,90,$hXOPen)
    Case $mitterechts
    _GDIPlus_GraphicsDrawLine($hBuffer,220,115,300,195,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,300,115,220,195,$hXOPen)
    Case $untenrechts
    _GDIPlus_GraphicsDrawLine($hBuffer,220,220,300,300,$hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer,300,220,220,300,$hXOPen)
    EndSelect

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

    _GitterZeichnen()
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, 315, 315)
    Until $msg = -3

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

    Func _GitterZeichnen()
    _GDIPlus_GraphicsFillRect($hBuffer,100,0,5,315,$hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer,205,0,5,315,$hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer,0,100,315,5,$hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer,0,205,315,5,$hStrichBrush)
    EndFunc

    [/autoit]
  • Dein (mehrfacher) Aufruf von _IsPressed() sollte mit der vorher geladenen DLL gemacht werden
    (siehe Hilfedatei), aber man kanns ja auch mit GUIGetCursorInfo machen...

    Hier ist mal die angepasste Version [bei dir lags offenbar am select]:

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    #include <Misc.au3>

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

    Local $obenlinks = False
    Local $mittelinks = False
    Local $untenlinks = False
    Local $obenmitte = False
    Local $mittemitte = False
    Local $untenmitte = False
    Local $obenrechts = False
    Local $mitterechts = False
    Local $untenrechts = False

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

    $hWnd = GUICreate("Tic Tac Toe", 315, 315)

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

    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hWnd)
    $hBitmap = _GDIPlus_BitmapCreateFromGraphics(315, 315, $hGraphics)
    Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hBuffer, 2)

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

    $hBgBrush = _GDIPlus_BrushCreateSolid(0xFF79ABFF)
    Global $hStrichBrush = _GDIPlus_BrushCreateSolid(0xFF000000)
    $hXOPen = _GDIPlus_PenCreate(0xFF112233, 10)

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

    GUISetState()

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

    Do
    $msg = GUIGetMsg()
    $Pos = GUIGetCursorInfo()

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

    Select
    Case $Pos[2]
    Select
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben links
    $obenlinks = True
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte links
    $mittelinks = True
    Case $Pos[0] <= 100 And $Pos[0] >= 1 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten links
    $untenlinks = True

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

    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben mitte
    $obenmitte = True
    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte mitte
    $mittemitte = True
    Case $Pos[0] <= 205 And $Pos[0] >= 106 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten mitte
    $untenmitte = True

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

    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 100 And $Pos[1] >= 1 ;oben rechts
    $obenrechts = True
    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 205 And $Pos[1] >= 106 ;mitte rechts
    $mitterechts = True
    Case $Pos[0] <= 310 And $Pos[0] >= 211 And $Pos[1] <= 310 And $Pos[1] >= 211 ;unten rechts
    $untenrechts = True
    EndSelect
    EndSelect

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

    _GDIPlus_GraphicsFillRect($hBuffer, 0, 0, 315, 315, $hBgBrush)

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

    If $obenlinks Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 10, 10, 90, 90, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 90, 10, 10, 90, $hXOPen)
    EndIf
    If $mittelinks Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 10, 115, 90, 195, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 90, 115, 10, 195, $hXOPen)
    EndIf
    If $untenlinks Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 10, 220, 90, 300, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 90, 220, 10, 300, $hXOPen)
    EndIf

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

    If $obenmitte Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 115, 10, 195, 90, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 195, 10, 115, 90, $hXOPen)
    EndIf
    If $mittemitte Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 115, 115, 195, 195, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 195, 115, 115, 195, $hXOPen)
    EndIf
    If $untenmitte Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 115, 220, 195, 300, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 195, 220, 115, 300, $hXOPen)
    EndIf

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

    If $obenrechts Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 220, 10, 300, 90, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 300, 10, 220, 90, $hXOPen)
    EndIf
    If $mitterechts Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 220, 115, 300, 195, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 300, 115, 220, 195, $hXOPen)
    EndIf
    If $untenrechts Then
    _GDIPlus_GraphicsDrawLine($hBuffer, 220, 220, 300, 300, $hXOPen)
    _GDIPlus_GraphicsDrawLine($hBuffer, 300, 220, 220, 300, $hXOPen)
    EndIf

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

    _GitterZeichnen()
    _GDIPlus_GraphicsDrawImageRect($hGraphics, $hBitmap, 0, 0, 315, 315)
    Until $msg = -3

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

    Func _GitterZeichnen()
    _GDIPlus_GraphicsFillRect($hBuffer, 100, 0, 5, 315, $hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer, 205, 0, 5, 315, $hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer, 0, 100, 315, 5, $hStrichBrush)
    _GDIPlus_GraphicsFillRect($hBuffer, 0, 205, 315, 5, $hStrichBrush)
    EndFunc ;==>_GitterZeichnen

    [/autoit]

    Wer immer nur das tut, was er bereits kann - wird auch immer nur das bleiben, was er bereits ist!