Button Funktion ausführen mit "onClick"

  • Hallo zusammen,

    wenn ich in dem Beispiel-Script den Button mit der linken Maustaste drücke und gedrückt den Button verlasse, wird die Funktion "hinter" dem Button nicht ausgeführt.
    Kann man das ändern , das die Funktion mit "onClick" ausgeführt wird?
    Ich kann mir vorstellen, das das an der grundsätzlichen Programmierung der GuiCtrlCreateButton-Funktion liegt und die Funktion erst mit "OnRelease" ausgeführt wird.
    Gibt es dafür einen einfachen workaround?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    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 = GUICtrlCreateButton ( "Button Test", 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

    [/autoit]

    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. ;)

  • Hi,
    ein click ist eben drücken und loslassen. Was du meinst ist PULL DOWN. Es gibt ne funktion die angiebt wie lang die linke Maustaste gedrückt wurde. Aber ob das hilft. Kann ich dir net sagen.

    MfG
    Der_Doc

  • @ Doc,

    vielleicht hab ich mich etwas ungeschickt ausgedrückt.

    Ich möchte nur, das die Funktion hinter dem Button schon beim anklicken ausgeführt wird, damit der Effekt des
    (ich ziehe die Maus vom Button, bevor ich loslasse und dann passiert nichts...) nicht eintreten kann,

    so wie eben auch der Button selbst schon (beim drücken der Maustaste ;) ) den Focus erhält.

    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. ;)

  • kann man denn irgendwie an die Funktion GUICtrlCreateButton "ran".

    Oder ist die Funktion (weil ja keine UDF) so tief implementiert, dass es da keine Möglichkeit gibt,
    an der Abarbeitung dieser Funktion etwas zu "drehen"?

    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. ;)

  • Mit GUIGetCursorInfo geht es:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    #include <GUIEdit.au3>
    Global $_KEYDOWN_GLOB_SAVEID = -1
    Global $DEBUGEdit
    _DebugInit()

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

    #region - GUI Create
    GUICreate('df')
    $b1 = GUICtrlCreateButton("Button 1",0,0,100,40)
    $b2 = GUICtrlCreateButton("Button 2",0,60,100,40)

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

    GUISetState()
    #endregion

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

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    $keyDown = _GETKEYDOWN()
    Select
    Case $keyDown = $b1
    _DEBUG("Button 1 down")
    Case $keyDown = $b2
    _DEBUG("Button 2 down")
    EndSelect
    WEnd
    #endregion

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

    Func _GETKEYDOWN()
    Local $mouse = GUIGetCursorInfo()
    Switch $mouse[2]
    Case 1
    If $_KEYDOWN_GLOB_SAVEID = -1 Then
    $_KEYDOWN_GLOB_SAVEID = $mouse[4]
    Return $_KEYDOWN_GLOB_SAVEID
    EndIf
    Case 0
    $_KEYDOWN_GLOB_SAVEID = -1
    EndSwitch
    EndFunc

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

    Func _DebugInit()
    GUICreate("DEBUGOUT",300,200,0,0,-1,$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
    $DEBUGEdit = GUICtrlCreateEdit("",0,0,300,200)
    GUISetState()
    EndFunc

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

    Func _DEBUG($text)
    _GUICtrlEdit_AppendText($DEBUGEdit, $text & @CRLF)
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hallo,

    ich versteh zwar den Sinn noch nicht ganz aber so gehts:


    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $myGUI = 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 = GUICtrlCreateButton ( "Button Test", 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(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE
    ExitLoop

    Case $msg[0] = $GUI_EVENT_PRIMARYDOWN
    $aCGP = ControlGetPos($myGUI, "" ,$Button_1)
    If $msg[3] > $aCGP[0] And $msg[3] < $aCGP[0] + $aCGP[2] And $msg[4] > $aCGP[1] And $msg[4] < $aCGP[1] + $aCGP[3] Then Run('Notepad.exe') ; Will Run/Open Notepad

    $aCGP = ControlGetPos($myGUI, "" ,$Button_2)
    If $msg[3] > $aCGP[0] And $msg[3] < $aCGP[0] + $aCGP[2] And $msg[4] > $aCGP[1] And $msg[4] < $aCGP[1] + $aCGP[3] Then MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
    ;~ Case $msg[0] = $Button_1
    ;~ Run('Notepad.exe') ; Will Run/Open Notepad
    ;~ Case $msg[0] = $Button_2
    ;~ MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
    EndSelect
    Wend

    [/autoit]
  • Beides kombiniert: ($GUI_EVENT_PRIMARYDOWN und GUIGetCursorInfo)

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $myGUI = 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 = GUICtrlCreateButton ( "Button Test", 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(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE
    ExitLoop

    Case $msg[0] = $GUI_EVENT_PRIMARYDOWN
    $ctrlMsg = GUIGetCursorInfo()
    $ctrlMsg = $ctrlMsg[4]
    Select
    Case $ctrlMsg = $Button_1
    Run('Notepad.exe') ; Will Run/Open Notepad
    Case $ctrlMsg = $Button_2
    MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
    EndSelect
    ;~ Case $msg[0] = $Button_1
    ;~ Run('Notepad.exe') ; Will Run/Open Notepad
    ;~ Case $msg[0] = $Button_2
    ;~ MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
    EndSelect
    Wend

    [/autoit]
  • Bernd, ich danke Dir.

    ich hatte in meiner Anwendung alles über Tab's gemacht.
    Nachdem ich festgestellt habe, dass bei Tab's der Inhalt nicht ge-"hided" wird,
    sondern bei jedem anklicken neu aufgebaut wird und ich in einem Tab ca. 180 Inputboxen habe (warum auch immer ich die brauche :D )
    brauchen diese halt recht lange, bis das alles so fertig ist.(mit daten füllen aus array und so.....)
    jetzt hab ich umgestellt auf Child-Window's und aktiviere diese jeweils über einen Button mit GuiSetState @SW_HIDE.
    Dabei ist mir aufgefallen, dass eben dieser Effekt auftritt.

    Da hab ich mir gedacht, frag mal nach, tut ja nicht weh. :rolleyes:

    Danke Dir vielmals.
    Damit ist meine Frage beantwortet.

    PS: kann ich als Initiator eines Threads diesen auch auf "gelöst" setzen, oder nur der Moderator?

    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. ;)

  • @ Progandy,

    SUPER GEIL. kürzer geht es ja eigentlich nicht mehr.

    Habt mal wieder vielen Dank.
    Ich werde Euch in mein Nachtgebet einschließen..... 8)

    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. ;)

  • einen kleinen Tip brauch ich noch :),

    wenn ich im GUIOnEventMode bin, wie mach ich das dann?

    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. ;)

    • Offizieller Beitrag

    So:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    Opt("GUIOnEventMode", 1)

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

    $myGUI = GUICreate("My GUI Button") ; will create a dialog box that when displayed is centered
    GUISetOnEvent($GUI_EVENT_CLOSE, "CloseEvent")
    GUISetOnEvent($GUI_EVENT_PRIMARYDOWN, "PrimaryDownEvent")

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

    Opt("GUICoordMode",2)
    $Button_1 = GUICtrlCreateButton ("Run Notepad", 10, 30, 100)
    $Button_2 = GUICtrlCreateButton ( "Button Test", 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
    Sleep(100)
    Wend

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

    Func PrimaryDownEvent()
    $ctrlMsg = GUIGetCursorInfo()
    $ctrlMsg = $ctrlMsg[4]
    Select
    Case $ctrlMsg = $Button_1
    Run('Notepad.exe') ; Will Run/Open Notepad
    Case $ctrlMsg = $Button_2
    MsgBox(0, 'Testing', 'Button 2 was pressed') ; Will demonstrate Button 2 being pressed
    EndSelect
    EndFunc

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

    Func CloseEvent()
    Exit
    EndFunc

    [/autoit]
  • @ Bernd: das nenn ich Teamwork. Super Klasse Vielen Dank :)

    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. ;)