Problem mit udf

  • Tach zusamm.

    Hab mir mal ne kleine MsgBox erstellt, die man in der Farbe und Posiotion verändern kann.

    Will noch ne veränderbare Größe und Style dazu machen, aber das kommt später.

    Im moment hab ich das Problem, dass wenn ich das script starte, es gleich wieder beendet wird.

    Schauts euch mal an, vllt findet einer von euch nen Fehler ^^

    Spoiler anzeigen
    [autoit]

    Func _MsgBox ($Flag, $Titel, $Text, $Left, $Top, $Color)
    Local $Button1, $Button2, $Button3, $Button4, $Button5, $Button6, $Button7, $Button8, $Button9, $Button10, $Button11, $Button12, $Button13, $Button14, $Button15, $Button16
    Local $Size = 7
    Local $FontWidth = 50
    $MsgGUI = GUICreate ($Titel, 225, 200, $Left, $Top)
    GUISetBkColor ($Color)
    GUISetState (@SW_SHOW, $MsgGUI)
    ; ---
    If $Flag = 0 Then
    $Button1 = GUICtrlCreateButton ("Ok", 75, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 1 Then
    $Button2 = GUICtrlCreateButton ("Ok", 25, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button3 = GUICtrlCreateButton ("Abbrechen", 125, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 2 Then
    $Button4 = GUICtrlCreateButton ("Abbrechen", 10, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button5 = GUICtrlCreateButton ("Wiederhohlen", 80, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button6 = GUICtrlCreateButton ("Ignorieren", 150, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 3 Then
    $Button7 = GUICtrlCreateButton ("Ja", 10, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button8 = GUICtrlCreateButton ("Nein", 80, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button9 = GUICtrlCreateButton ("Abbrechen", 150, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 4 Then
    $Button10 = GUICtrlCreateButton ("Ja", 25, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button11 = GUICtrlCreateButton ("Nein", 125, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 5 Then
    $Button12 = GUICtrlCreateButton ("Wiederhohlen", 25, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button13 = GUICtrlCreateButton ("Abbrechen", 125, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 6 Then
    $Button14 = GUICtrlCreateButton ("Abbrechen", 10, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button15 = GUICtrlCreateButton ("Wiederhohlen", 80, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button16 = GUICtrlCreateButton ("Weiter", 150, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    EndIf ;==> Flags
    $MsgText = GUICtrlCreateEdit ($Text, 10, 10, 205, 160, 0x0800)
    ; ---
    While 1
    $MsgBox = GUIGetMsg ()
    Switch $MsgBox
    Case $Button1
    Return 1
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button2
    Return 1
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button3
    Return 2
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button4
    Return 2
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button5
    Return 4
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button6
    Return 5
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button7
    Return 6
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button8
    Return 7
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button9
    Return 2
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button10
    Return 6
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button11
    Return 7
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button12
    Return 4
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button13
    Return 2
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button14
    Return 2
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button15
    Return 4
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $Button16
    Return 11
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case -3
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    EndSwitch ;==> MsgBox
    Sleep (10)
    WEnd
    EndFunc ;==> _MsgBox
    ;~ #cs
    _MsgBox (1, "Titel", "Text", 500, 500, 0x00FF00)
    Sleep (2000)
    ;~ #ce

    [/autoit]

    MfG

  • Hallo Commander21,

    du fragst in Deiner While-Schleife ohne Rücksicht auf Erstellung jeden Button ab.

    Erstell Dir doch nur 3 Button und beschrifte / hide was Du nicht brauchst, dann kannst Du diese auch abfragen,

    Spoiler anzeigen
    [autoit]


    _MsgBox (1, "Titel", "Text", 500, 500, 0x00FF00)
    Sleep (2000)

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

    Func _MsgBox ($Flag, $Titel, $Text, $Left, $Top, $Color)
    Local $Button1, $Button2, $Button3, $Button4, $Button5, $Button6, $Button7, $Button8, $Button9, $Button10, $Button11, $Button12, $Button13, $Button14, $Button15, $Button16
    Local $Size = 7
    Local $FontWidth = 50
    $MsgGUI = GUICreate ($Titel, 225, 200, $Left, $Top)
    GUISetBkColor ($Color)
    GUISetState (@SW_SHOW, $MsgGUI)
    ; ---
    If $Flag = 0 Then
    $Button1 = GUICtrlCreateButton ("Ok", 75, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 1 Then
    $Button2 = GUICtrlCreateButton ("Ok", 25, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button3 = GUICtrlCreateButton ("Abbrechen", 125, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 2 Then
    $Button4 = GUICtrlCreateButton ("Abbrechen", 10, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button5 = GUICtrlCreateButton ("Wiederhohlen", 80, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button6 = GUICtrlCreateButton ("Ignorieren", 150, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 3 Then
    $Button7 = GUICtrlCreateButton ("Ja", 10, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button8 = GUICtrlCreateButton ("Nein", 80, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button9 = GUICtrlCreateButton ("Abbrechen", 150, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 4 Then
    $Button10 = GUICtrlCreateButton ("Ja", 25, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button11 = GUICtrlCreateButton ("Nein", 125, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 5 Then
    $Button12 = GUICtrlCreateButton ("Wiederhohlen", 25, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button13 = GUICtrlCreateButton ("Abbrechen", 125, 175, 75, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    ElseIf $Flag = 6 Then
    $Button14 = GUICtrlCreateButton ("Abbrechen", 10, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button15 = GUICtrlCreateButton ("Wiederhohlen", 80, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    $Button16 = GUICtrlCreateButton ("Weiter", 150, 175, 60, 20)
    GUICtrlSetFont (-1, $Size, $FontWidth)
    EndIf ;==> Flags
    $MsgText = GUICtrlCreateEdit ($Text, 10, 10, 205, 160, 0x0800)
    ; ---
    While 1
    $msg = GUIGetMsg()
    Select
    ;~ Case $msg = $Button1
    ;~ Return 1
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    Case $msg = $Button2
    Return 1
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    Case $msg = $Button3
    Return 2
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    ;~ Case $Button4
    ;~ Return 2
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button5
    ;~ Return 4
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button6
    ;~ Return 5
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button7
    ;~ Return 6
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button8
    ;~ Return 7
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button9
    ;~ Return 2
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button10
    ;~ Return 6
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button11
    ;~ Return 7
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button12
    ;~ Return 4
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button13
    ;~ Return 2
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button14
    ;~ Return 2
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button15
    ;~ Return 4
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    ;~ Case $Button16
    ;~ Return 11
    ;~ GUISetState (@SW_HIDE, $MsgGUI)
    ;~ ExitLoop
    Case $msg = -3
    GUISetState (@SW_HIDE, $MsgGUI)
    ExitLoop
    EndSelect ;==> MsgBox
    Sleep (10)
    WEnd
    EndFunc ;==> _MsgBox

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit][/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. ;)

    • Offizieller Beitrag

    Der Fehler liegt darin, dass Du nicht allen $Button-Variablen Werte zuweist, sondern (in dem Beispiel) nur $Button2 und $Button3. Alle anderen $Button-Variablen besitzen einen Leerstring (Vorgabe) und somit trifft bei der Switch-Anweisung gleich das erste Case zu (GUIGetMsg liefert einen Leerstring, weil bisher kein Ereignis eingetreten ist). Das Return sorgt dann gleich für eine Beendigung der Funktion.
    Das ist übrigens noch ein Fehler in Deinem Script. Alle Anweisungen nach Return werden nicht mehr ausgeführt, weil man mit Return bereits die Funktion verläßt.

    Edit: Mist, schon wieder zu langsam. :whistling:

  • I.wie kapier ich nich so ganz was ich da ändern soll xD

    Kann mir das nochmal einer besser erklären?

    EDIT: Habs jetz ganz anders gelöst. Hab jetz für jeden If ( Flag ) ne eigene While mit den entsprechenden Case gemacht.

    Klappt jetz einwandfrei ^^

    Thx Oscar, hast mich auf die Idee gebracht :D

    Einmal editiert, zuletzt von Commander21 (28. April 2009 um 15:01)