MsgBox-Buttons Text ändern mal anders :)

  • Ich hab mir eine ganz einfache Variante überlegt, wie ich meinen MsgBox-Buttons eine andere Beschriftung zukommen lassen kann. Das ist dabei herausgekommen:

    Wie es begann...
    [autoit]

    #Include <File.au3>
    Local $filelines[6]
    Local $filename = @TempDir&"\MsgText.au3"

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

    $filelines[0] = '#NoTrayIcon'
    $filelines[1] = 'Opt("WinWaitDelay",0)'
    $filelines[2] = 'WinWaitActive("[Class:#32770]")'
    $filelines[3] = 'ControlSetText("","","Button1","Bin dabei")'
    $filelines[4] = 'ControlSetText("","","Button2","Mag nicht")'
    $filelines[5] = 'ControlSetText("","","Button3","Vielleicht")'

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

    _FileWriteFromArray($filename, $filelines)
    Run(RegRead("HKLM\SOFTWARE\Autoit v3\Autoit","Installdir")&"\AutoIt3.exe " & $filename)

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

    MsgBox(34,"Frage","Gehst du heute mit mir aus?")

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

    FileDelete($filename)

    [/autoit]
    Wie es nun fertig aussieht
    [autoit]

    Func _MsgBoxIndividual($flag, $title, $text, $btn_text1 = "OK", $btn_text2 = "Nein", $btn_text3 = "Vielleicht")
    Local $str = "Local $x = Opt('WinWaitDelay',50)+WinWait('"&$title&"','')+" & _
    "ControlSetText('"&$title&"','"&$text&"','Button1','"&$btn_text1&"')+" & _
    "ControlSetText('"&$title&"','"&$text&"','Button2','"&$btn_text2&"')+" & _
    "ControlSetText('"&$title&"','"&$text&"','Button3','"&$btn_text3&"')"
    Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
    Sleep(100)
    Return MsgBox($flag, $title, $text)
    EndFunc

    [/autoit]

    Dank an progandy für den Aufrufparameter /AutoIt3ExecuteLine

    • Offizieller Beitrag

    Sollte so auch reichen (ungetestet):

    [autoit]

    $str = Execute('#NoTrayIcon' & @LF & _
    'Opt("WinWaitDelay",0)' & @LF & _
    'WinWaitActive("[Class:#32770]")' & @LF & _
    'ControlSetText("","","Button1","Bin dabei")' & @LF & _
    'ControlSetText("","","Button2","Mag nicht")' & @LF & _
    'ControlSetText("","","Button3","Vielleicht")')

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

    Run(RegRead("HKLM\SOFTWARE\Autoit v3\Autoit","Installdir")&"\AutoIt3.exe " & $str)

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

    MsgBox(34,"Frage","Gehst du heute mit mir aus?")

    [/autoit]
  • Also, warum niocht die nehmen? MessageBox mit Benutzerdefinierten Schaltflächen
    Sonst:

    Spoiler anzeigen
    [autoit]


    $titel = "Frage"
    $text = "Gehst du heute mit mir aus?"
    $Button1 = "Ja"
    $Button2 = "Nein"
    $Button3 = "Vielleicht"

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

    Local $FrageTitel = "[Class:#32770; TITLE:"&$titel&"]"
    Local $str = "Local $x = Opt('WinWaitDelay',0)+WinWait('"&$FrageTitel&"','"&$text&"')+" & _
    "ControlSetText('"&$FrageTitel&"','"&$text&"','Button1','"&$Button1&"')+" & _
    "ControlSetText('"&$FrageTitel&"','"&$text&"','Button2','"&$Button2&"')+" & _
    "ControlSetText('"&$FrageTitel&"','"&$text&"','Button3','"&$Button3&"')"
    Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
    Sleep(100)

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

    MsgBox(34,$titel,$text)

    [/autoit]
  • Danke Progandy für deine Verbesserungsvorschlag! Ich kannte den Schalter '/AutoIt3ExecuteLine ' noch nicht. Das ist genau das was mir noch gefehlt hat. Jetzt dürfte das Skript auch auf Computern laufen ,auf dene kein Autoit installiert ist. Ich kenne deine Messagebox, aber ich finde diese Version reicht im Normalfall aus und ist auch ca. 230 Zeilen kürzer. ;)

    So werde ich das Skript in Zukunft verwenden, wenn keiner mehr einen Verbesserungsvorschlag hat:

    [autoit]

    _MsgBoxIndividual(34, "Frage", "Gehst du heute mit mir aus?", "Ja", "Nein", "Vielleicht")

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

    Func _MsgBoxIndividual($flag, $title, $text, $btn_text1, $btn_text2, $btn_text3)
    Local $str = "Local $x = Opt('WinWaitDelay',50)+WinWait('[Class:#32770]','')+" & _
    "ControlSetText('[Class:#32770]','','Button1','"&$btn_text1&"')+" & _
    "ControlSetText('[Class:#32770]','','Button2','"&$btn_text2&"')+" & _
    "ControlSetText('[Class:#32770]','','Button3','"&$btn_text3&"')"
    Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
    Sleep(100)
    MsgBox($flag, $title, $text)
    EndFunc

    [/autoit]
  • Hallo zusammen.

    Schaue ja echt gut aus, aber wie spreche ich jetzt die Buttons an. Ist Button-1 gedrückt, dann MSgBox ...... ! Wie macht man das? Das blicke ich gerade nicht so durch.

    LG,
    Alina.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Ach ja, sorry. Hab den Return vergessen, also einfach so:

    [autoit]

    $Antwort = _MsgBoxIndividual(34, "Frage", "Gehst du heute mit mir aus?", "Ja", "Nein", "Vielleicht")
    MsgBox(0,"",$Antwort)

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

    Func _MsgBoxIndividual($flag, $title, $text, $btn_text1, $btn_text2, $btn_text3)
    Local $str = "Local $x = Opt('WinWaitDelay',50)+WinWait('[Class:#32770]','')+" & _
    "ControlSetText('[Class:#32770]','','Button1','"&$btn_text1&"')+" & _
    "ControlSetText('[Class:#32770]','','Button2','"&$btn_text2&"')+" & _
    "ControlSetText('[Class:#32770]','','Button3','"&$btn_text3&"')"
    Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
    Sleep(100)
    Return MsgBox($flag, $title, $text)
    EndFunc

    [/autoit]
  • funktioniert bei mir nicht... Sicher dass es so funktioniert??

    ---
    In "Independence Day" konnten die Windows-Erdcomputer problemlos mit denen der Außerirdischen kommunizieren. Was sagt uns das über unseren lieben Bill Gates? :D
    ---

  • funkey

    Dank dem RETURN ist alles weitere kein Problem mehr.
    Habe lange überlegt wie man Buttons in einer MsgBox verändern könnte und habe schon vor Monaten das Forum und das GB-Forum durchsucht. Aber nie so die Lösung gefunden.

    Coole Lösung und man kann sogar fast unendlich viele Fragen nacheinander stellen. ;)

    Danke nochmals für die Antwort und eine ruhige Nacht.

    LG,
    Alina.

    Edit: da mein Vorschreiber sagt, das es bei IHM nicht funzt.
    So läuft es bei mir einwandfrei:

    Spoiler anzeigen
    [autoit]


    $Antwort = _MsgBoxIndividual(34, "Frage", "Gehst du heute mit mir aus?", "Ja", "Nein", "Vielleicht")

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

    Switch $Antwort
    Case 3
    $msg = "Okay, dann treffen wir uns um 19:30 beim Griechen."
    Case 4
    $msg = "Wenn Du nicht möchtest, dann gehe ich alleine aus."
    Case Else
    $msg = "Okay, die Entscheidung ist wirklich nicht leicht. Wenn Du dich entschieden hast melde dich."

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

    EndSwitch

    MsgBox(0, "Standard", $msg)

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

    Func _MsgBoxIndividual($flag, $title, $text, $btn_text1, $btn_text2, $btn_text3)
    Local $str = "Local $x = Opt('WinWaitDelay',50)+WinWait('[Class:#32770]','')+" & _
    "ControlSetText('[Class:#32770]','','Button1','"&$btn_text1&"')+" & _
    "ControlSetText('[Class:#32770]','','Button2','"&$btn_text2&"')+" & _
    "ControlSetText('[Class:#32770]','','Button3','"&$btn_text3&"')"
    Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
    Sleep(100)
    Return MsgBox($flag, $title, $text)
    EndFunc

    [/autoit]

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Freut mich Alina, dass es dir gefällt und dass es bei dir funktioniert. :D

    Ich bin mir bewusst, dass das nicht die Non-Plus-Ultra-Lösung ist, ich weiß nicht mal ob es auf W2K oder Vista funktioniert (wegen der festen Klasse [Class:#32770]). Man kann manchmal auch ganz kurz den Originaltext sehen, aber auf alle Fälle ist es die einfachste Lösung!

    EDIT: Franz ich habe es jetzt auf mehreren Rechnern getestet, und wirklich, auf einem ging es nicht, keine Ahnung wieso. Aber mit den Variablen und nicht mit der Class (wie Progandy es schon hatte) ging's auch auf dem:

    [autoit]

    Func _MsgBoxIndividual($flag, $title, $text, $btn_text1, $btn_text2, $btn_text3)
    Local $str = "Local $x = Opt('WinWaitDelay',50)+WinWait('[Class:#32770]','')+" & _
    "ControlSetText('"&$title&"','"&$text&"','Button1','"&$btn_text1&"')+" & _
    "ControlSetText('"&$title&"','"&$text&"','Button2','"&$btn_text2&"')+" & _
    "ControlSetText('"&$title&"','"&$text&"','Button3','"&$btn_text3&"')"
    Run('"' & @AutoItExe & '" /AutoIt3ExecuteLine "' & $str & '"')
    Sleep(100)
    Return MsgBox($flag, $title, $text)
    EndFunc

    [/autoit]

    Außerdem musste ich bei einem Rechner die Option WinWaitDelay auf 80 stellen, damit es zuverlässig funktioniert, aber auf den meisten geht's auch mit 0.