Eigener GDIPlus Button Style

  • Hallo leute, habe einen GDIPlusButton geschrieben mit GDIPlus. so wie er jetzt ist, sieht er noch recht langweilig aus, wie kann ich dem Button am besten nen schöneren Style geben z.B. 3D Style so ähnlich wie in der GDIpProgress.au3 ?

    Hier der Code mit dem Button, hoffe ihr könnt mir Tipps geben, verlange ja nicht, dass ihr die ganze Arbeit für mich übernehmt :D
    Nur ein Paar Tipps mit welchen Befehlen/Codes ich das bewerkstelligen könnte :thumbup:

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    _GDIPlus_Startup()

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

    $Form1 = GUICreate("", 175, 175, -1, -1)
    $Button1 = _GDIPlus_CtrlCreateButton($Form1, 5, 5, 100, 50)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    ;hier sollten die grafiken usw noch geschlossen werden
    _GDIPlus_Shutdown()
    Exit
    Case $Button1
    MsgBox(0, '', '$Button1 wurde geklickt')
    EndSwitch
    WEnd

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

    Func _GDIPlus_CtrlCreateButton($HWND, $iLeft, $iTop, $iWidth, $iHeight, $iColor=0xFF0000FF, $iClickColor=0xFF505050, $BorderColor=0xFFFF0000)
    If $iColor = "" Then $iColor = 0xFF0000FF
    If $iClickColor = "" Then $iClickColor = 0xFF505050
    If $BorderColor = "" Then $BorderColor = 0xFFFF0000
    If WinGetState($HWND) = 5 Then GUISetState()
    Global $ButtonCreate[11]
    $ButtonCreate[3] = $iLeft
    $ButtonCreate[4] = $iTop
    $ButtonCreate[5] = $iWidth
    $ButtonCreate[6] = $iHeight
    $ButtonCreate[7] = $iColor
    $ButtonCreate[8] = $iClickColor
    $ButtonCreate[9] = _GDIPlus_PenCreate($BorderColor, 3)
    $ButtonCreate[0] = _GDIPlus_GraphicsCreateFromHWND($HWND)
    $ButtonCreate[1] = _GDIPlus_BitmapCreateFromGraphics($iWidth, $iHeight, $ButtonCreate[0])
    $ButtonCreate[2] = _GDIPlus_ImageGetGraphicsContext($ButtonCreate[1])
    _GDIPlus_GraphicsFillRect($ButtonCreate[2], 0, 0, $iWidth, $iHeight, _GDIPlus_BrushCreateSolid($ButtonCreate[7]))
    _GDIPlus_GraphicsDrawRect($ButtonCreate[2], 1, 1, $iWidth-3, $iHeight-3, $ButtonCreate[9])
    $Button = GUICtrlCreateGraphic($ButtonCreate[3], $ButtonCreate[4], $ButtonCreate[5], $ButtonCreate[6])
    _GDIPlus_GraphicsDrawImageRect($ButtonCreate[0], $ButtonCreate[1], $ButtonCreate[3], $ButtonCreate[4], $ButtonCreate[5], $ButtonCreate[6])
    If GUIGetMsg() = $Button Then
    $iColor = 0xFF505050
    EndIf
    Return $Button
    EndFunc

    [/autoit]

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Es gibt immer die Möglichkeit den Button in einem Bildbearbeitungsprogramm wie z.B. Photoshop oder GIMP zu erstellen und das Bild mit GDI+ auf die GUI zu zeichnen. Damit lassen sich wesentlich komplexere Designs erstellen.
    Wenn du bei deinem jetzigen Ansatz bleiben möchtest, dann solltest du dir definitiv die GDIP.au3 ansehen. Dort sind einige Funktionen erhalten mit denen sich diverse Effekte, wie etwa Farbverläufe (_GDIPlus_LineBrushCreate), auf eine Grafik zaubern lassen.

  • Wo bekomm ich die GDIP.au3 her?

    Mit BildbearbeitungsProgrammen Blder zu zeichnen, diese Als Button nutzen ist nicht wirklich das was ich will

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • ich habe die GDIP.au3 gefunden, aber ganz ehrlich, ich kann damit gerade gar nichts anfangen, im gegenteil jetzt bin ich noch ratloser als vorher :D

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Ich habe die Examples mit den Buttons schon gefunden, doch die sind auch nicht das was ich mir vorstelle. ausserdem wackelt es bei mir mit der Funktion der Buttons mal sieht man da nen Effekt und mal gar nicht hmmm nicht gerade das was ich mir vorstelle. In erster Linie möchte ich ja den Button nen 3D Style zu geben.

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Was meinst du damit, dass du nichts mit der GDIP.au3 anfangen kannst? Die UDF ist im Grunde nur eine Erweiterung der Funktionsbibliothek die von der GDIPlus.au3 zur Verfügung gestellt wird.
    Zu einigen Funktionen findest du auch Beispiele, falls du unsicher bist wie man sie anwendet. Wenn du nicht weißt, was genau du an Effekten haben willst, dann musst du erstmal erklären was du unter einem 3D Button verstehst... :rolleyes:

  • In der GDIpProgress.au3 wird eine Progressbar erstellt, die hat finde ich einen leichten 3D Effekt so ungefähr Stelle ich mir das vor

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Vielleicht gefällt dir ja sowas: autoit.de/wcf/attachment/23783/

    Hier der Code (benötigt die aktuelle Beta)

    Spoiler anzeigen
    [autoit]


    #include <GDIPlus.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>

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

    Opt("MustDeclareVars", 1)
    Opt("GUIOnEventMode", 1)

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

    Global $iWidth = 610
    Global $iHeight = 200
    Global $hGui = GUICreate("GDI+ Path Tutorial", $iWidth, $iHeight)
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    _GDIPlus_Startup()
    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)
    Global $hBitmap = _GDIPlus_BitmapCreateFromScan0($iWidth, $iHeight)
    Global $hContext = _GDIPlus_ImageGetGraphicsContext($hBitmap)
    _GDIPlus_GraphicsSetSmoothingMode($hContext, 2)
    _GDIPlus_GraphicsClear($hContext, 0xFFFFFFFF)
    GUIRegisterMsg($WM_PAINT, "WM_PAINT")
    GUIRegisterMsg($WM_ERASEBKGND, "WM_PAINT")

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

    GUISetState()

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

    _DrawButton("Button", 10, 30, 160, 100, 0xFFDD3030)
    _DrawButton("Text", 210, 30, 160, 100, 0xFF30AA30)
    _DrawButton("Abcdefg", 410, 30, 190, 100, 0xFF3040DD)

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

    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)

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

    While Sleep(10)
    WEnd

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

    Func _DrawButton($sText, $fX, $fY, $fW, $fH, $iColor, $fRadius = 40)
    Local $hPath = _GDIPlus_PathCreate()

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

    _GDIPlus_PathAddArc($hPath, $fX, $fY, $fRadius, $fRadius, 180, 90)
    _GDIPlus_PathAddArc($hPath, $fX + $fW - $fRadius, $fY, $fRadius, $fRadius, 270, 90)
    _GDIPlus_PathAddArc($hPath, $fX + $fW - $fRadius, $fY + $fH - $fRadius, $fRadius, $fRadius, 0, 90)
    _GDIPlus_PathAddArc($hPath, $fX, $fY + $fH - $fRadius, $fRadius, $fRadius, 90, 90)

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

    Local $hMatrix = _GDIPlus_MatrixCreate()
    _GDIPlus_MatrixTranslate($hMatrix, 0, $fH * 0.1)
    _GDIPlus_PathTransform($hPath, $hMatrix)

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

    Local $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
    _GDIPlus_PathBrushSetCenterPoint($hBrush, $fX + $fW * 0.5, $fY)
    _GDIPlus_PathBrushSetCenterColor($hBrush, 0xFF000000)
    _GDIPlus_PathBrushSetSurroundColor($hBrush, 0x00000000)
    _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1, 1)
    _GDIPlus_PathBrushSetFocusScales($hBrush, 0.85, 0.85)

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

    _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)
    _GDIPlus_BrushDispose($hBrush)

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

    _GDIPlus_MatrixTranslate($hMatrix, 0, -$fH * 0.2)
    _GDIPlus_PathTransform($hPath, $hMatrix)

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

    $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
    _GDIPlus_PathBrushSetCenterPoint($hBrush, $fX + $fW * 0.5, $fY)
    _GDIPlus_PathBrushSetCenterColor($hBrush, $iColor)
    Local $iR = Int(BitAND(BitShift($iColor, 16), 0xFF) * 0.3)
    Local $iG = Int(BitAND(BitShift($iColor, 8), 0xFF) * 0.3)
    Local $iB = Int(BitAND($iColor, 0xFF) * 0.3)
    Local $iColor2 = BitOR(BitShift($iR, -16), BitShift($iG, -8), $iB)
    _GDIPlus_PathBrushSetSurroundColor($hBrush, BitOR(0xFF000000, $iColor2))

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

    _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1, 1)
    _GDIPlus_PathBrushSetFocusScales($hBrush, 0.97, 0.3)

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

    _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)
    _GDIPlus_BrushDispose($hBrush)

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

    $fRadius *= 0.6
    _GDIPlus_PathReset($hPath)
    _GDIPlus_PathAddArc($hPath, $fX + $fRadius * 0.2, $fY, $fRadius, $fRadius, 90, 180)
    _GDIPlus_PathAddArc($hPath, $fX + $fW - $fRadius * 1.2, $fY, $fRadius, $fRadius, 270, 180)

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

    $hBrush = _GDIPlus_PathBrushCreateFromPath($hPath)
    _GDIPlus_PathBrushSetCenterPoint($hBrush, $fX + $fW * 0.5, $fY + $fRadius * 0.2)
    _GDIPlus_PathBrushSetCenterColor($hBrush, 0xDDFFFFFF)
    _GDIPlus_PathBrushSetSurroundColor($hBrush, 0x00000000)

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

    _GDIPlus_PathBrushSetFocusScales($hBrush, 0.8, 0.2)
    _GDIPlus_PathBrushSetSigmaBlend($hBrush, 1, 0.9)

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

    _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)
    _GDIPlus_BrushDispose($hBrush)

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

    _GDIPlus_PathReset($hPath)
    Local $hFamily = _GDIPlus_FontFamilyCreate("Arial")
    Local $hFormat = _GDIPlus_StringFormatCreate()
    _GDIPlus_StringFormatSetAlign($hFormat, 1)
    DllCall($ghGDIPDll, "int", "GdipSetStringFormatLineAlign", "handle", $hFormat, "int", 1)

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

    Local $tLayout = _GDIPlus_RectFCreate($fX, $fY, $fW, $fH)
    _GDIPlus_PathAddString($hPath, $sText, $tLayout, $hFamily, 0, 32, $hFormat)
    _GDIPlus_FontFamilyDispose($hFamily)
    _GDIPlus_StringFormatDispose($hFormat)

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

    Local $aBounds = _GDIPlus_PathGetWorldBounds($hPath)
    _GDIPlus_MatrixSetElements($hMatrix)
    _GDIPlus_MatrixTranslate($hMatrix, -($aBounds[0] + $aBounds[2] / 2) + $fX + $fW / 2, -($aBounds[1] + $aBounds[3] / 2) + $fY + $fH * 0.48)
    ;_GDIPlus_PathTransform($hPath, $hMatrix)
    _GDIPlus_MatrixDispose($hMatrix)

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

    $aBounds = _GDIPlus_PathGetWorldBounds($hPath)
    $hBrush = _GDIPlus_LineBrushCreate(0, $aBounds[1] - 4, 0, $aBounds[1] + $aBounds[3] + 4, BitOR(0x40000000, $iColor2), 0x40FFFFFF)
    Local $hPen = _GDIPlus_PenCreate2($hBrush, 4)
    _GDIPlus_BrushDispose($hBrush)
    _GDIPlus_GraphicsDrawPath($hContext, $hPath, $hPen)
    _GDIPlus_PenDispose($hPen)

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

    $hPen = _GDIPlus_PenCreate(BitOR(0x70000000, $iColor2), 2)
    _GDIPlus_GraphicsDrawPath($hContext, $hPath, $hPen)
    _GDIPlus_PenDispose($hPen)

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

    $hBrush = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
    _GDIPlus_GraphicsFillPath($hContext, $hPath, $hBrush)
    _GDIPlus_BrushDispose($hBrush)

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

    _GDIPlus_PathDispose($hPath)
    EndFunc ;==>_DrawButton

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

    Func WM_PAINT($hWnd, $uMsgm, $wParam, $lParam)
    _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_PAINT

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

    Func _Exit()
    _GDIPlus_GraphicsDispose($hContext)
    _GDIPlus_BitmapDispose($hBitmap)
    _GDIPlus_GraphicsDispose($hGraphics)
    _GDIPlus_Shutdown()
    Exit
    EndFunc ;==>_Exit

    [/autoit]
  • Das sind lineare Gradiente. Die lassen sich mit der Funktion erstellen die ich bereits genannt habe. Die Fortschrittsbalken aus der GDIpProgress.au3 die so aussehen wie die entsprechenden Controls aus Vista sind tatsächlich aus Bildern konstruiert.

  • in welcher UDF sind denn die Ganzen Funktionen enthalten, die du in dem Script benutzt? ohne diese Funktionniert es bei mir nicht

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • ich habs mir im Script in Scite bei mir genauer angeschaut, das lustige ist, anscheinend habe ich die nötie UDF schon drin in denen die Funktionen beschrieben werden sehe auch davonn die Calltips und trotzdem sagt es mir Undefinied function hmm jemand ne Idee?

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • mit Alt + F5 tut sich bei mir gar nichts.

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Ich hab jetzt einfach mal die GDIP.au3 included jetzt sind folgende Fehler:

    : ERROR: _GDIPlus_MatrixSetElements() called with wrong number of args.
    : REF: definition of _GDIPlus_MatrixSetElements().
    : ERROR: _GDIPlus_PathBrushSetSurroundColor(): undefined function.

    Die 3 Fehler müssen noch korrigiert werden damit es auch bei mir laufen kann

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin

  • Ich verwende keine Beta!

    MfG, Facemix

    meine Spezialität: Windowstools für eine leichtere Arbeit am PC

    Nicht veröffentlicht


    nicht veröffentlichte Programme von mir

    - FTP Filereader
    - Youtube Kanal Player
    -GDI+ Countdown (bis zu einem Wunderbaren ereignis :) )

    MyPastebin