Msg eines GUI Controls in einer funktion auserhalb der while schleife

  • Hi Autoitler

    ich habe mal eine Frage
    und zwar wie kann ich die msgs eines GUI Controls auserhalb einer whileschleife in einer funktion abfragen
    mein Ansatz:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 117, 33, 192, 124)
    $_Label = _GuiCtrlLabel_Create(8, 8, 86, 17,"xDD")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd

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

    Func _GuiCtrlLabel_Create($_LEFT,$_TOP,$_WIDTH,$_HEIGHT,$_Text)
    Opt("GUIONEVENTMODE",1)
    $_LABEL = GUICtrlCreateLabel($_Text,$_LEFT,$_TOP,$_WIDTH,$_HEIGHT)
    $_CURSOR = GUICtrlSetCursor($_LABEL,0)
    GUICtrlSetOnEvent($_LABEL,"_GUICTrlLabel_Msg")
    Opt("GUIONEVENTMODE",0)
    EndFunc ;==>_GuiCtrlLabel_Create

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

    Func _GUICTrlLabel_Msg()
    MsgBox(0,"","")
    EndFunc

    [/autoit]

    Leider öffnet sich da per Klick auf das Label keine MsgBox

    Ich hoffe ihr könnt mir da weiterhelfen

    Mfg,simon

  • Hi

    wenn ich den zweiten option dings rausnehme reagiert er mir auf die while schleife nicht mehr

    name22
    bitte ein beispiel

    Mfg.simon

  • Ja, das die Events danach nichtmehr abgefragt werden ist mir bewusst :)
    Ich meinte auch eher, warum nicht generell im OnEventMode bleiben?

    Mir fehlt da im Moment ein Möglicher Grund, warum man dieses eine Event nun unbedingt nicht in der While abfangen sollte?

  • Hier ein Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ArrayMore.au3>

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

    Global $aLabels[1][2]
    $aLabels[0][0] = 0

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

    $Form1 = GUICreate("Form1", 117, 33, 192, 124)
    $_Label = _GuiCtrlLabel_Create(8, 8, 86, 17,"xDD", "_GUICTrlLabel_Msg")
    GUISetState()

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

    Do
    $nMsg = GUIGetMsg()
    For $i = 0 To $aLabels[0][0]
    If $nMsg = $aLabels[$i][0] Then Call($aLabels[$i][1])
    Next
    Until $nMsg = $GUI_EVENT_CLOSE

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

    Func _GuiCtrlLabel_Create($_LEFT,$_TOP,$_WIDTH,$_HEIGHT,$_Text, $sEvent)
    $aLabels[0][0] += 1
    _Array2DAdd($aLabels, GUICtrlCreateLabel($_Text,$_LEFT,$_TOP,$_WIDTH,$_HEIGHT) & "|" & $sEvent)
    EndFunc ;==>_GuiCtrlLabel_Create

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

    Func _GUICTrlLabel_Msg()
    MsgBox(0,"","")
    EndFunc

    [/autoit]
  • Sorry, aber jetzt steh ich total auf'm Schlauch und hab das Gefühl das hier könnte für mich in einer kleinen Peinlichkeit enden, aber ...

    Welchen Vorteil bring mir in der Praxis die do...until gegenüber dem hier?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <ArrayMore.au3>

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

    Global $aLabels[1][2]
    $aLabels[0][0] = 0

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

    $Form1 = GUICreate("Form1", 117, 33, 192, 124)
    $_Label = _GuiCtrlLabel_Create(8, 8, 86, 17,"xDD", "_GUICTrlLabel_Msg")
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    For $i = 0 To $aLabels[0][0]
    If $nMsg = $aLabels[$i][0] Then Call($aLabels[$i][1])
    Next
    WEnd

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

    Func _GuiCtrlLabel_Create($_LEFT,$_TOP,$_WIDTH,$_HEIGHT,$_Text, $sEvent)
    $aLabels[0][0] += 1
    _Array2DAdd($aLabels, GUICtrlCreateLabel($_Text,$_LEFT,$_TOP,$_WIDTH,$_HEIGHT) & "|" & $sEvent)
    EndFunc ;==>_GuiCtrlLabel_Create

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

    Func _GUICTrlLabel_Msg()
    MsgBox(0,"","")
    EndFunc

    [/autoit]
  • Es soll mal eine udf werden, und da es jeder inviduell hat mit while und eventmode will ich es nur so machen dass keine extra funktion in der while schleife ist , somit muss das über irgendetwas per funktion gehen
    dachte schon an guiregistermsg aber das wird da wohl nix bringen oder?

  • Noch eine Idee von mir

    Mit AdlibRegister
    jedoch tritt da das problem auf,dass die msgBox andauernd auf geht
    hier mein versuch

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 117, 33, 192, 124)
    $_Label = _GuiCtrlLabel_Create(8, 8, 86, 17, "xDD")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd

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

    Func _GuiCtrlLabel_Create($_LEFT, $_TOP, $_WIDTH, $_HEIGHT, $_Text)
    Global $_Label = GUICtrlCreateLabel($_Text, $_LEFT, $_TOP, $_WIDTH, $_HEIGHT)
    $_CURSOR = GUICtrlSetCursor($_Label, 0)
    AdlibRegister("_GUICTrlLabel_Msg")
    EndFunc ;==>_GuiCtrlLabel_Create

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

    Func _GUICTrlLabel_Msg()
    Switch GUIGetMsg()
    Case $_Label
    MsgBox(0, "", "")
    EndSwitch
    EndFunc ;==>_GUICTrlLabel_Msg

    [/autoit]

    Ich hoffe das ist damit überhaupt möglich

    Mfg.simon