Button mit bmp hinterlegen Problem

  • Hallo liebe Autoit community!
    Ich habe ein Problem mit folgendem Quellcode.

    Spoiler anzeigen
    [autoit]

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

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

    #Region ### START Koda GUI section ### Form=
    $Form1ButtonBitmapTest = GUICreate("Button Bitmap Test", 262, 242, -1, -1)
    $Button1Beenden = GUICtrlCreateButton("", 8, 0, 249, 233, $BS_BITMAP)
    GUICtrlSetImage(-1, "C:\Program Files\AutoIt3\SciTE\LogoAutoit.bmp")
    GUISetState(@SW_SHOW, $Form1ButtonBitmapTest)
    #EndRegion ### END Koda GUI section ###

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

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

    [/autoit]


    Vielen Dank für Eure Antworten!

  • Sich das dieses Bild bei dir unter diesem Pfad existiert? Bei mir gibt es das nicht und ein anderen BMP funktioniert mit deinem Script.

    Andy hat mir ein Schnitzel gebacken aber da war ein Raupi drauf und bevor Oscar das Bugfixen konnte kam Alina und gab mir ein AspirinJunkie.

  • Wenn du einen Bild-Button erstellen willst dann kannst du entweder wie einem Button das ganze mit in die Abfrageschleife packen oder die Bild UDF nutzen.


    Einfacher Bild Button
    [autoit]

    GUICreate("", 633, 454, 192, 114)
    $Pic1 = GUICtrlCreatePic(@ProgramFilesDir & "\AutoIt3\Examples\GUI\logo4.gif", 176, 120, 225, 145)
    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case -3
    Exit
    Case $Pic1
    MsgBox(0,"Bild-Button","Auf Bild Button geklickt")
    EndSwitch
    WEnd

    [/autoit]


    Bild UDF
    [autoit]

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

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

    Local $buttons[1][6];image,posx,posy,$width,$height,state
    Local $othimg[1][2];imagefocus,imagebuttondown
    Local $firstused=0
    Local $hwnd=0
    Local $gra,$buffer,$backgra,$winx,$winy
    Local $lastclickedbutton=-1

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

    Local $testmode=True
    If $testmode=True Then
    $gui=GUICreate("")
    GUISetState()
    _ButtonStartup($gui)
    $p1="";Pfad 1 - Normalbild
    $p2="";Pfad 2 - Bild wenn Button Focus hat
    $p3="";Pfad 3 - Bild wenn Button geklickt wurde
    $button=_ButtonCreate($p1,$p2,$p3,100,100,100,100,0)
    _ButtonSetState($button,1)
    while GUIGetMsg()<>-3
    Sleep(10)
    If _GetLastButton()=$button Then
    MsgBox(0,"","")
    EndIf
    WEnd
    _ButtonShutdown()
    EndIf

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

    Func _ButtonStartup($gui)
    _GDIPlus_Startup()
    $hwnd=$gui
    $gra=_GDIPlus_GraphicsCreateFromHWND($hwnd)
    Local $w,$h
    $winx=_WinAPI_GetClientWidth($hwnd)
    $winy=_WinAPI_GetClientHeight($hwnd)
    $buffer=_GDIPlus_BitmapCreateFromGraphics($winx,$winy,$gra)
    $backgra=_GDIPlus_ImageGetGraphicsContext($buffer)
    AdlibRegister("__ButtonsRedraw",10)
    EndFunc

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

    Func _ButtonCreate($bild,$bildfocus,$bildbd,$px,$py,$width=100,$height=20,$state=1) ;1=show,0=hide
    If $state=1 Then
    $state="show"
    Else
    $state="hide"
    EndIf
    If $firstused=0 Then
    $firstused=1
    Local $bound=0
    Else
    Local $bound=UBound($buttons,1)
    ReDim $buttons[$bound+1][6]
    ReDim $othimg[$bound+1][2]
    EndIf
    $buttons[$bound][0]=_GDIPlus_ImageLoadFromFile($bild)
    $othimg[$bound][0]=_GDIPlus_ImageLoadFromFile($bildfocus)
    $othimg[$bound][1]=_GDIPlus_ImageLoadFromFile($bildbd)
    $buttons[$bound][1]=$px
    $buttons[$bound][2]=$py
    $buttons[$bound][3]=$width
    $buttons[$bound][4]=$height
    $buttons[$bound][5]=$state
    Return $bound ;Button-ID für _ButtonSetState, kleinstes: 0
    EndFunc

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

    Func _GetLastButton()
    Local $tmp=$lastclickedbutton
    $lastclickedbutton=-1
    Return $tmp
    EndFunc

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

    Func _ButtonSetState($buttonid,$state=1)
    If $state=1 Then
    $state="show"
    Else
    $state="hide"
    EndIf
    $buttons[$buttonid][5]=$state
    EndFunc

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

    Func _ButtonShutdown()
    AdlibUnRegister("__ButtonsRedraw")
    For $x=0 To UBound($buttons,1)-1
    _GDIPlus_ImageDispose($buttons[$x][0])
    _GDIPlus_ImageDispose($othimg[$x][0])
    _GDIPlus_ImageDispose($othimg[$x][1])
    Next
    _GDIPlus_GraphicsDispose($backgra)
    _GDIPlus_BitmapDispose($buffer)
    _GDIPlus_GraphicsDispose($gra)
    _GDIPlus_Shutdown()
    EndFunc

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

    Func __ButtonsRedraw()
    Local $nowimage
    Local $pos=_WinAPI_GetMousePos(True,$hwnd)
    Local $erg
    For $x=0 To UBound($buttons,1)-1
    If $buttons[$x][5]="show" Then
    $rect=__NewRect($buttons[$x][1],$buttons[$x][2],$buttons[$x][3],$buttons[$x][4])
    If _WinAPI_PtInRect($rect,$pos) Then
    $nowimage=$othimg[$x][0]
    If _IsPressed("1") Then
    $nowimage=$othimg[$x][1]
    $lastclickedbutton=$x
    EndIf
    Else
    $nowimage=$buttons[$x][0]
    EndIf
    _GDIPlus_GraphicsDrawImageRect($backgra,$nowimage,$buttons[$x][1],$buttons[$x][2],$buttons[$x][3],$buttons[$x][4])
    EndIf
    Next
    _GDIPlus_GraphicsDrawImageRect($gra,$Buffer,0,0,$winx,$winy)
    EndFunc

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

    Func __NewRect($x=0,$y=0,$w=0,$h=0)
    Local $struct=DllStructCreate("uint Left;uint Top;uint Right;uint Bottom");$tagRECT
    DllStructSetData($struct,"Left",$x)
    DllStructSetData($struct,"Top",$y)
    DllStructSetData($struct,"Right",$x+$w)
    DllStructSetData($struct,"Bottom",$y+$h)
    Return $struct
    EndFunc

    [/autoit]