Kein Effekt mehr bei Buttons

  • Hallo,

    wenn ich einen Button mit dem Bitmapstyle versehe, und auf diesen ein Bitmap lege, dann kann man keinen Effekt mehr erkennen, wenn man auf diesen Button klickt. Man weiß also nie genau, ob man raufgeklickt hat oder nicht.

    Gibt es eine simple Möglichkeit das zu ändern?

    MfG

    Einmal editiert, zuletzt von NoName (11. Oktober 2009 um 19:16)

  • Hallo NoName,

    poste doch bitte dein Skript, damit man den Fehler nachvollziehen kann. Das Beispiel zu GUICtrlSetImage funktioniert einwandfrei,

    mfg (Auto)Bert


    Hier ein Beispielscript:

    Spoiler anzeigen
    [autoit]

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

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $msg

    GUICreate("My GUI") ; will create a dialog box that when displayed is centered

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

    GUICtrlCreateButton("my picture button", 10, 20, 20, 20, 0x0080) ;bitmap style
    GUICtrlSetImage(-1, "hilfe.bmp")

    GUISetState()

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc ;==>Example

    [/autoit]


    Dazu braucht man das Bild:
    [Blockierte Grafik: http://img5.imagebanana.com/img/ts1lcl0/hilfe.bmp.png]

    Meinst du es so dass der hover effekt fehlt


    Wenn der so heißt^^
    Wenn man beim Beispielsscript halt auf den Button klickt, passiert optisch gesehen nichts, klar werden die Funktionen ausgeführt, aber man soll auch wie sonst den Effekt sehen, oder einen anderen.

  • Muß es Bitmap stiye 0x0080 sein denn mit ( $BS_BITMAP ) würde es gehen!

    Oder ( 0x0080 & $BS_BITMAP )

    [autoit]

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

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $msg

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

    GUICreate("My GUI") ; will create a dialog box that when displayed is centered

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

    GUICtrlCreateButton("my picture button", 10, 20,50, 55, $BS_BITMAP & 0x0080) ;bitmap style
    GUICtrlSetImage(-1, 'hilfe.bmp');<----- das .bmp solte aber im gleichen verzeichnis ligen

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

    GUISetState()

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()

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

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc

    [/autoit]

    LG kleiner

    2 Mal editiert, zuletzt von kleiner27 (11. Oktober 2009 um 18:02)

  • Moin,

    eine Lösung wäre das hier: EzBmpButton

    Ich hatte einmal das gleiche Problem und sämtliche "Hover UDFs" ausprobiert und versucht es selbst irgendwie über MouseGetPos usw. zu lösen, aber irgendwie war das alles nicht so der wahre Jakob sondern Flickschusterei.

    Einziger Nachteil bei EzBmpButton - es ist etwas langsam, aber das liegt nun mal in der Natur von AutoIt.


    Gruß
    Greenhorn


  • Hallo NoName,

    Wenn man beim Beispielsscript halt auf den Button klickt, passiert optisch gesehen nichts, klar werden die Funktionen ausgeführt, aber man soll auch wie sonst den Effekt sehen, oder einen anderen.


    Dein Beispielskript funktioniert bei mir einwandfrei. Da es nicht um den Hoover- sondern um den Click-Effekt handelt kannst du aber auch das Skript
    von BugFix einsetzen, es erlaubt Bitmaps wie Buttons (nur ohne Beschriftung) einzusetzen:

    [autoit]

    #include<WindowsConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<StaticConstants.au3>
    Global $pic = 'hilfe.bmp'

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

    $gui = GUICreate("Test",Default,Default,-1,-1)
    $btnPic = GUICtrlCreatePic($pic, 30, 40, 24, 24)
    $btnPic2 = GUICtrlCreatePic($pic, 30, 40, 24, 24)
    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $btnPic
    If _AnimButton($gui, $btnPic) Then MsgBox(0, '', 'click')
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

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

    ;==================================================================================================
    ; Function Name: _AnimButton($IDgui, $IDbtn [, $delay=150])
    ; Description: animiert ein Pic, wie einen geklickten Button
    ; Parameter(s): $IDgui ID der GUI
    ; $IDbtn ID des Picture als Button
    ; Authot: BugFix
    ;==================================================================================================
    Func _AnimButton($IDgui, $IDbtn)
    Local $pos = ControlGetPos($IDgui, '', $IDbtn)
    Local $pWin = WinGetPos(GUICtrlGetHandle($IDbtn))
    ControlMove($IDgui, '', $IDbtn, $pos[0], $pos[1]+1, $pos[2]-1, $pos[3]-1)
    Local $tmpGui = GUICreate('', $pos[2], $pos[3], $pWin[0], $pWin[1], $WS_POPUP,$WS_EX_TOOLWINDOW)
    WinSetTrans($tmpGui, '', 120)
    GUISetState(@SW_SHOWNOACTIVATE, $tmpGui)
    $return = 1
    Do
    $x = GUIGetCursorInfo($IDgui)
    If $x[4] <> $IDbtn Then $return = 0
    Sleep(10)
    Until $x[2] = 0
    GUIDelete($tmpGui)
    ControlMove($IDgui, '', $IDbtn, $pos[0], $pos[1], $pos[2], $pos[3])
    Return $return
    EndFunc ;==> _AnimButton

    [/autoit]

    mfg (Auto)Bert


  • $BS_Bitmap = 0x0080
    Außerdem soll der Button nicht größer sein als das Bild.


    Ich habe mich schon entschieden, keine EzBmpButtons zu nehmenGrund weiß ich jetzt allerdings nichtmehr.

    autoBert:
    Das ist gut =)
    Muss ich ein bisschen umbauen aber passt schon.

    Danke an alle.

  • Hallo NoName,

    Zitat

    autoBert:
    Das ist gut =)
    Muss ich ein bisschen umbauen aber passt schon.

    bedank dich bei BugFix

    @kleiner27,

    Zitat

    Schöne sache, der code von BugFix ich kenne da die sache mit ( GUIOnEventMode ) aber da wird ja nicht so schön der klick animiert !

    funktioniert im OnEventMode ganz genau so:

    [autoit]

    #include<WindowsConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<StaticConstants.au3>
    Global $pic = 'hilfe.bmp'

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

    Opt('GUIOnEventMode', 1)

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

    $gui = GUICreate("Test", Default, Default, -1, -1)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Terminate')
    $btnPic = GUICtrlCreatePic($pic, 30, 40, 24, 24)
    GUICtrlSetOnEvent(-1, '_ButtonClick')
    GUISetState()

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

    While 1
    Sleep(1000)
    WEnd

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

    Func _ButtonClick()
    If _AnimButton($gui, $btnPic) Then MsgBox(0, '', 'click')
    EndFunc ;==>_ButtonClick

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

    Func _Terminate()
    Exit
    EndFunc ;==>_Terminate

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

    ;==================================================================================================
    ; Function Name: _AnimButton($IDgui, $IDbtn [, $delay=150])
    ; Description: animiert ein Pic, wie einen geklickten Button
    ; Parameter(s): $IDgui ID der GUI
    ; $IDbtn ID des Picture als Button
    ; Authot: BugFix
    ;==================================================================================================
    Func _AnimButton($IDgui, $IDbtn)
    Local $pos = ControlGetPos($IDgui, '', $IDbtn)
    Local $pWin = WinGetPos(GUICtrlGetHandle($IDbtn))
    ControlMove($IDgui, '', $IDbtn, $pos[0], $pos[1] + 1, $pos[2] - 1, $pos[3] - 1)
    Local $tmpGui = GUICreate('', $pos[2], $pos[3], $pWin[0], $pWin[1], $WS_POPUP, $WS_EX_TOOLWINDOW)
    WinSetTrans($tmpGui, '', 120)
    GUISetState(@SW_SHOWNOACTIVATE, $tmpGui)
    $return = 1
    Do
    $x = GUIGetCursorInfo($IDgui)
    If $x[4] <> $IDbtn Then $return = 0
    Sleep(10)
    Until $x[2] = 0
    GUIDelete($tmpGui)
    ControlMove($IDgui, '', $IDbtn, $pos[0], $pos[1], $pos[2], $pos[3])
    Return $return
    EndFunc ;==>_AnimButton

    [/autoit]

    Oder siehst du einen Unterschied bei der Animation :?:

    mfg (Auto)Bert

  • Ich benutze eh GUIGetMsg.
    Für mich ist die Funktion auch so voll ausreichend:

    [autoit]

    Func _AnimateButton($h_GUI, $h_Button)
    Local $ControlPos = ControlGetPos($h_GUI, '', $h_Button)
    ControlMove($h_GUI, '', $h_Button, $ControlPos[0], $ControlPos[1] + 1, $ControlPos[2] - 1, $ControlPos[3] - 1) ;pushdown
    Sleep(50)
    ControlMove($h_GUI, '', $h_Button, $ControlPos[0], $ControlPos[1], $ControlPos[2], $ControlPos[3])
    EndFunc ;==> _AnimButton

    [/autoit]
  • oder aber du verwendest ein Icon.
    Mit dem Stil $BS_ICON kannst Du einem Button
    mit GuiCtrlSetImage eine .ico Grafik zuweisen und der "Button"-Look bleibt erhalten.

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • In dem Programm sind aber auch andere große Buttons die 100x20 groß sind, für die ich Bitmaps mit Beschriftung verwende.

  • Guten Morgen!

    Ich Kannte den code doch erst seit gestern ich habe in Windows-Info ( GUIOnEventMode ) benutzt = Bilder als Button!

    Und als ich die frage von NoName gerade noch mal gelesen habe, ist mir klar geworden das ich sie falsch verstanden hatte!


    LG Kleiner :rolleyes: