GDI Plus Input & Button

  • hey leute
    ich bin neu im GDI Plus bereich und wollte euch fragen wie man in GDI Plus ein Input erstellt. ?(
    noch eine frage die ich mir stelle ist, wie man selbsterstellte buttons (mit _GDIPlus_GraphicsDrawImage eingefügt) ansteuern kann => wenn man auf den butten klickt dann kommt z.B. ne msgbox ?(
    ich freu mich auf eure antworten :thumbup:
    DFPWare

  • 1) Mit GDI+ kannst du nicht mit einem Befehl ein Input erstellen, du musst dir da schon selbst was zusammenbasteln. Am besten mit _isPressed oder HotKeySet die Taste abfragen und dann mit _GDIPlus_GraphicsDrawString die Zeichen zeichen.
    2) Erstelle ein Label an der Stelle und frage einen Klick darauf ab, oder frage die Mausposition ab und ob die Maus gedrückt wurde.

  • Hier mal BSP für das anklicken (mit Koordinaten, ohne Label dahinter!)
    Ich hab das Script bei mir rumfliegen gehabt, kann sein das es von jemand anderem ist, also sag ich jetzt nicht es ist von mir:

    [autoit]

    #include <GuiConstants.au3>
    #include <GdiPlus.au3>;das include
    #include <Misc.au3>
    #include <WindowsConstants.au3>
    $GUI_Width = 200
    $GUI_Height = 200

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

    $Gui = GUICreate ("Dies ist ein Test GUI", 200, 200, 500, 200, $WS_POPUP)

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

    GUISetBkColor (0x149999, $Gui)
    _GDIPlus_Startup()

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

    GUISetState(@SW_SHOW)
    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($Gui)
    $btn_exit = _GDIPlus_GraphicsFillEllipse($hGraphic,180,0,20,20) ;kreis
    ;~ _GDIPlus_ArrowCapCreate(20, 20) ;Pfeil
    _GDIPlus_GraphicsDrawString ($hGraphic, "Test zu Gdi+ koordinaten + klick", 20, 40, "Times", 8)

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

    While 1

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

    $mouse = GUIGetCursorInfo()
    If IsArray ($mouse) then
    If $mouse[2] = 1 Then
    If $mouse[0] > 180 And $mouse[1] < 20 Then
    Exit
    EndIf
    EndIf
    EndIf

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

    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

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

    WEnd

    [/autoit]
  • Hi,
    ich hab dir mal schnell ein Beispiel für einen GDI+ Button gemacht.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>
    #include <GDIPlus.au3>
    #include <Misc.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    ;By Sprenger120
    HotKeySet("{Esc}", "_Exit")

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

    $hGUI = GUICreate("", 500, 500, -1, -1, $WS_POPUP)
    $hGUI_DC = _WinAPI_GetDC($hGUI)
    $hBitmap = _WinAPI_CreateCompatibleBitmap($hGUI_DC, 500, 500)
    $hBitmapDC = _WinAPI_CreateCompatibleDC($hGUI_DC)
    _WinAPI_SelectObject($hBitmapDC, $hBitmap)

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

    GUISetState()

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

    _GDIPlus_Startup()
    $hGraphics = _GDIPlus_GraphicsCreateFromHDC($hBitmapDC)
    $hBrush_Weiss = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    Dim $aButtonArray[1][6]
    $hUser32 = DllOpen("user32.dll")

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

    AddButton(5, 5, 100, 50, "Test", "ButtonFunc1")
    AddButton(200, 50, 100, 50, "Test Button 2", "ButtonFunc2")

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

    While Sleep(10)
    _GDIPlus_GraphicsFillRect($hGraphics, 0, 0, 500, 500, $hBrush_Weiss)

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

    ;Buttons Zeichnen Zeichnen
    For $x = 0 To UBound($aButtonArray) - 1
    _GDIPlus_GraphicsDrawRect($hGraphics, $aButtonArray[$x][0], $aButtonArray[$x][1], $aButtonArray[$x][2], $aButtonArray[$x][3])
    _GDIPlus_GraphicsDrawString($hGraphics, $aButtonArray[$x][4], _
    $aButtonArray[$x][0] + 5, _
    $aButtonArray[$x][1] + 5)

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

    Next
    _WinAPI_BitBlt($hGUI_DC, 0, 0, 500, 500, $hBitmapDC, 0, 0, $SRCCOPY)

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

    If Not _IsPressed("01", $hUser32) Then ContinueLoop
    $aCoords = GUIGetCursorInfo()
    If @error Then ContinueLoop

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

    For $x = 0 To UBound($aButtonArray) - 1
    If _RectCollision($aCoords[0], $aCoords[1], 0, 0, $aButtonArray[$x][0], $aButtonArray[$x][1], $aButtonArray[$x][2], $aButtonArray[$x][3]) Then Call($aButtonArray[$x][5])
    Next

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

    WEnd

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

    Func ButtonFunc1()
    MsgBox(0, "", "Test Button1")
    EndFunc ;==>ButtonFunc1

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

    Func ButtonFunc2()
    MsgBox(0, "", "Test Button2")
    EndFunc ;==>ButtonFunc2

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

    Func AddButton($x, $Y, $Breite, $Hoehe, $Name, $sFunc)
    Local $iDim = 0
    If $aButtonArray[0][0] <> "" Then
    $iDim = UBound($aButtonArray) - 1
    EndIf

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

    $aButtonArray[$iDim][0] = $x
    $aButtonArray[$iDim][1] = $Y
    $aButtonArray[$iDim][2] = $Breite
    $aButtonArray[$iDim][3] = $Hoehe
    $aButtonArray[$iDim][4] = $Name
    $aButtonArray[$iDim][5] = $sFunc
    ReDim $aButtonArray[$iDim + 2][6]
    EndFunc ;==>AddButton

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

    Func _Exit()
    ;~ _GDIPlus_PenDispose($hPen_Schwarz)
    ;~ _GDIPlus_BrushDispose($hBrush_Schwarz)
    _GDIPlus_BrushDispose($hBrush_Weiss)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    _WinAPI_ReleaseDC($hGUI, $hGUI_DC)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hBitmapDC)
    DllClose($hUser32)
    Exit
    EndFunc ;==>_Exit

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

    Func _RectCollision($iX1, $iY1, $iWidth1, $iHeight1, $iX2, $iY2, $iWidth2, $iHeight2)
    ;Author: Faweyr
    Return $iX1 + $iWidth1 > $iX2 And $iX1 < $iX2 + $iWidth2 And $iY1 + $iHeight1 > $iY2 And $iY1 < $iY2 + $iHeight2
    EndFunc ;==>_RectCollision

    [/autoit]