Wenn aufs Bildgeklickt wird Funktion aufrufen

  • Hi,
    wie geht das?
    Ich habe ein Bild mit GUICtrlCreatePic eingefügt.
    Wenn man nun auf das Bild klickt soll irgendene Funktion aufgerufen werden. Es müsste also eine Art unsichtbarer Button drüber.

    Wie mach ich sowas?

    2 Mal editiert, zuletzt von Name (10. März 2009 um 17:40)

  • Oder abfragen wie einen ganz normalen Button, also z.B. Case $Pic1 ...

    Padmak

    Wie gehe ich dann weiter vor?


    Du kannst den Klick auf ein Bild mit dem Style SS_NOTIFY abfangen.

    [autoit]

    $Pic1 = GUICtrlCreatePic("", 112, 72, 265, 169, $SS_NOTIFY)

    [/autoit]

    Geht das auch irgendwie mit GUICtrlSetOnEvent?

  • Hab im Helpfile "GUICtrlCreateButton" mal den Befehl guictrlcreatebutton durch giuctrlcreatepic ersetzt.

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)

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

    Example()

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

    Func Example()
    Local $Button_1, $Button_2, $msg
    GUICreate("My GUI Button") ; will create a dialog box that when displayed is centered

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

    Opt("GUICoordMode", 2)
    $Button_1 = GUICtrlCreateButton("Run Notepad", 10, 30, 100)
    $Button_2 = GUICtrlCreatepic(@WindowsDir&"/feder.bmp", 0, -1)

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

    GUISetState() ; will display an dialog box with 2 button

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

    ; Run the GUI until the dialog is closed
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Button_1
    Run('Notepad.exe') ; Will Run/Open Notepad
    Case $msg = $Button_2
    MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
    EndSelect
    WEnd
    EndFunc ;==>Example

    [/autoit]

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • Super, das funktioniert! Wie mach ich das selbe nun in der on event Art?


    Einfach wie Buttons behandeln.
    GuiCtrlSetOnEvent($Pic1, "Funktion")

    Padmak

    Ich krieg das irgendwie nicht auf die Reihe, das Bild erscheint zwar aber es ist nicht anklickbar:

    #include <Guiconstants.au3>


    GUICreate("")

    $pic = GUICtrlCreatepic("pic1.jpg", 0, 0)
    GUICtrlSetOnEvent($pic, "msg")

    Func msg()
    MsgBox(1,"","")
    EndFunc

    Do
    GUISetState(@SW_SHOW)
    $msgbx = GUIGetMsg()
    Until $msgbx = $GUI_EVENT_CLOSE

  • Ach ja, hab dazu nochmal 2 Fragen:
    1. Wie macht man es, dass die Funktion erst aufgerufen wird sobald man die Maus wieder los lässt?
    2. Gibt es eine ähnliche Funktion die schon reagiert sobald ich denn Mauszeiger über das Bild halte?

  • zu2:
    Du suchst eine Hover Funktion. Dazu gibt verschiedene Möglichkeiten, diese hier gefällt mir ganz gut

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>

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

    Opt("GUICoordMode",1)
    $HauptGUI = GUICreate("Hover", 400, 560)
    $Button1 = GUICtrlCreateButton("Test", 100, 100, 200, 60, 0)
    $bild1 = GUICtrlCreatePic(@SystemDir & "\oobe\images\mslogo.jpg", 100, 250, 200, 50)
    GuiSetState()

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

    $Hover_Old = ""

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

    While 1

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

    If GUIGetMsg() = -3 Then Exit

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

    $Cursor = GUIGetCursorInfo($HauptGUI) ;Einfache Hover Funktion
    If $Cursor[4] <> $Hover_Old Then
    Hover($Cursor[4])
    $Hover_Old = $Cursor[4]
    EndIf

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

    WEnd

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

    Func Hover($ID) ;wenn der Zeiger über dem Kontrol ist dann ...
    Switch $ID
    Case $Button1
    msgbox(1, "", "Cursor über Button1") ;hier kommt die jeweilige Funktion hin
    case $bild1
    msgbox(1, "", "Cursor über Bild1")
    EndSwitch
    EndFunc

    [/autoit]
  • Zu 1.
    Füg in die Funktion am Anfang

    [autoit]


    While _IsPressed("01")
    Wend

    [/autoit]


    Und natürlich die Misc.au3 includen

    Padmak

  • wollte jetzt nicht ein neuen ähnlichen threat anfangen also schreib ich das hier rein:
    Wie soll der code lauten wenn *es* auf eine bestimmte Stelle und in einem bestimmten Fenster etwas anklicken soll ?