Grafische Buttons (hover?)

  • Hallo,

    ich möchte gerne grafische Buttons in einem Script einbauen.
    Im Forum habe ich zwar etwas gefunden, aber
    es ist nicht das was ich suche.

    Das möchte ich gerne tun

    Das Form hat einen Button ohne Beschriftung!
    autoit.de/wcf/attachment/11204/
    Auf diesen Button (button1.jpg) kommt ein Label. (Transparent weiss)
    Diese Beschriftung sollte man später ändern können!
    autoit.de/wcf/attachment/11207/
    Mit einer Hoverfunktion sollte sich der Button Hintergrund ändern!
    Egal wo man innerhalb des Buttons klickt!
    autoit.de/wcf/attachment/11208/

    Hier habe ich Probleme:
    Wie mache ich aus der Grafik einen Button mit Ereignis?
    Wie kann ich den Klick des Buttons auslösen (auch wenn ein Text drüber ist)?
    Wie kann ich den Text transparent auf den Button legen?

    Mein Rohbau

    Spoiler anzeigen


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 625, 156, 420, 140)
    GUISetBkColor(0xFFFBF0)
    $Pic1 = GUICtrlCreatePic(@Scriptdir & "\Button1.jpg", 416, 56, 169, 49, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Label1 = GUICtrlCreateLabel("Start", 464, 64, 90, 36)
    GUICtrlSetFont(-1, 20, 400, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xE3E3E3)
    GUICtrlSetBkColor(-1, 0x808000)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###


    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

    EndSwitch
    WEnd

    Das habe ich im Forum gefunden

    Spoiler anzeigen


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    global $hoverbild = "Kodabuttons"
    global $normalbild = "Kodabuttons2"
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    $Pic1 = GUICtrlCreatePic($normalbild, 104, 56, 217, 169, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    $Hover_Old = ""

    While 1
    $Cursor = GUIGetCursorInfo($Form1) ;Einfache Hover Funktion
    If $Cursor[4] <> $Hover_Old Then
    Normal($Hover_Old)
    Hover($Cursor[4])
    $Hover_Old = $Cursor[4]
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    Func Hover($ID)
    Switch $ID
    Case $Pic1
    GUICtrlSetImage($Pic1, $hoverbild)
    EndSwitch
    EndFunc

    Func Normal($ID)
    Switch $ID
    Case $Pic1
    GUICtrlSetImage($Pic1, $normalbild)
    EndSwitch
    EndFunc

    Geht das auf mit *.png oder *.gif Bildern?

    Grüße
    Ilse :(

  • Bei

    [autoit]

    GUIGetCursorInfo[4]

    [/autoit]

    wird nur abgefangen über welchem Control sich der Cursor gerade befindet.
    Sprich du erstellst einfach mit Seubos Funktion

    Spoiler anzeigen
    [autoit]

    #include <GDIPlus.au3>
    InetGet("http://upload.wikimedia.org/wikipedia/commons/7/7a/Basketball.png",@ScriptDir & "\Ball.png")

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

    $hGUI = GUICreate("")
    $cBasketball = GUICtrLCreatePng($hGUI,@ScriptDir & "\Ball.png",20,20)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $cBasketball
    MsgBox(0,"","Du hast den Ball angeklickt!")
    EndSwitch
    WEnd

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

    Func GUICtrlCreatePng($hWnd, $sPath, $iX, $iY) ; SEuBo
    _GDIPlus_Startup()
    Local $hScrDC, $hMemDC, $hBitmap, $hOld, $pSize, $tSize, $pSource, $tSource, $pBlend, $tBlend, $hGUI
    Local $hImage = _GDIPlus_ImageLoadFromFile($sPath), $iWidth = _GDIPlus_ImageGetWidth($hImage), $iHeight = _GDIPlus_ImageGetHeight($hImage)
    $hGUI = GUICreate("", $iWidth, $iHeight, $iX, $iY, 0x80000000, BitOR(0x40, 0x80000), $hWnd)
    $cLabel = GUICtrlCreateLabel("", 0, 0, $iWidth, $iHeight)
    GUICtrlSetBkColor(-1, -2)
    GUISetState(@SW_SHOWNOACTIVATE, $hGUI)
    $hScrDC = _WinAPI_GetDC(0)
    $hMemDC = _WinAPI_CreateCompatibleDC($hScrDC)
    $hBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($hImage)
    $hOld = _WinAPI_SelectObject($hMemDC, $hBitmap)
    $tSize = DllStructCreate("int X;int Y")
    $pSize = DllStructGetPtr($tSize)
    DllStructSetData($tSize, "X", $iWidth)
    DllStructSetData($tSize, "Y", $iHeight)
    $tSource = DllStructCreate("int X;int Y")
    $pSource = DllStructGetPtr($tSource)
    $tBlend = DllStructCreate("byte Op;byte Flags;byte Alpha;byte Format")
    $pBlend = DllStructGetPtr($tBlend)
    DllStructSetData($tBlend, "Alpha", 255)
    DllStructSetData($tBlend, "Format", 1)
    _WinAPI_UpdateLayeredWindow($hGUI, $hScrDC, 0, $pSize, $hMemDC, $pSource, 0, $pBlend, $ULW_ALPHA)
    _WinAPI_ReleaseDC(0, $hScrDC)
    _WinAPI_SelectObject($hMemDC, $hOld)
    _WinAPI_DeleteObject($hBitmap)
    _WinAPI_DeleteDC($hMemDC)
    GUISwitch($hWnd)
    _GDIPlus_ImageDispose($hImage)
    _GDIPlus_Shutdown()
    Return SetError(0,$hGUI,$cLabel)
    EndFunc ;==>GUICtrlCreatePng

    [/autoit]


    ein png und benutzt dann

    [autoit]

    GUIGetCursorInfo[4]

    [/autoit]

    .

    MfG hellboy

    [autoit]

    Do
    _help($user)
    Until $questions = 0

    [/autoit]

    Meine Werke:
    Ste`s Web-Radio

  • Hallo Hellboy3,

    merci für die Hilfe.
    Das mit dem Button und dem Ereignis konnte ich lösen.

    NUR:
    Wie kann ich auf dem Button einen Text transparent machen!

    Hier mal mein Script

    Spoiler anzeigen


    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    global $hoverbild = (@Scriptdir & "\Button2.jpg")
    global $normalbild = (@Scriptdir & "\Button1.jpg")
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    ;$Pic1 = GUICtrlCreatePic($normalbild, 104, 56, 217, 169, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic1 = GUICtrlCreatePic(@Scriptdir & "\Button1.jpg", 416, 56, 169, 49, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

    $Hover_Old = ""

    While 1
    $Cursor = GUIGetCursorInfo($Form1) ;Einfache Hover Funktion
    If $Cursor[4] <> $Hover_Old Then
    Normal($Hover_Old)
    Hover($Cursor[4])
    $Hover_Old = $Cursor[4]
    EndIf
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $Pic1
    MsgBox(0,"test","Test")
    Case $GUI_EVENT_CLOSE

    Exit
    EndSwitch
    WEnd

    Func Hover($ID)
    Switch $ID
    Case $Pic1
    GUICtrlSetImage($Pic1, $hoverbild)

    EndSwitch
    EndFunc

    Func Normal($ID)
    Switch $ID
    Case $Pic1
    GUICtrlSetImage($Pic1, $normalbild)

    EndSwitch
    EndFunc

    Grüße Ilse

  • Um Bilder in Buttons zu verwandeln hab ich mal eine UDF geschrieben.

    Den Text auf dem Bild kann man nicht verändern.
    Der Text muss schon auf dem Bild sein.

    probiers mal aus.

    Sobalt man den Button klickt wird eine Funktion ausgeführt. damit kannst du dann machen was du willst.

    mfg
    Mars(i)