schleife während msgbox

  • hallo leute,

    ich würde gern eine msgbox einblenden und gleichzeitig solange eine schleife
    ausführen lassen. und den rückgabewert der msgbox dann in ne variable speichern.

    so nach dem motto:

    [autoit]

    while msgbox(0,"","test")
    do ;something
    wend

    [/autoit]

    dieser code klappt so natürlich nicht. aber vielleicht wisst ihr ja was ich meine und es gibt ne lösung.

    Einmal editiert, zuletzt von andygo (4. Dezember 2009 um 13:20)

  • Hi,

    1) msgbox ist modal, d.h die Abarbeitung des Codes wird angehalten.
    2) Das lässt sich gffs. mit Adlibenable und Adlibdisable steuern -> s. Hilfe
    3) Speichern des Rückgabewertes MsgBox: $btn = MsgBox ....Die entsprechden Rückgabewerte entnimmst Du der Hilfe.

    ;-))
    Stefan

  • Ja, allerdings nicht mit der Msgbox.
    Mach dir ein eigenes Fenster, dessen Buttons in deiner Schleife abgefragt werden. Je nach gedrücktem Button werden die Variablenwerte zugewiesen.

    Spoiler anzeigen
    [autoit]

    #include <WinAPI.au3>

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

    $anz=10

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

    global $button[$anz+1],$x[$anz+1],$y[$anz+1]
    $gui=guicreate("Test",600,600)
    for $i=1 to $anz
    $button[$i]= guictrlcreatebutton($i,10+random(20,500,1),10+random(20,500,1),20,20)
    next

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

    $Msgbox=Guicreate("Eigene Messagebox",300,80,50,50)
    $label=guictrlcreatelabel("Die Variablen werden im Fenstertitel angezeigt!",10,10,280,20)
    $msb1=GUICtrlCreateButton("Button1",20,35)
    $msb2=GUICtrlCreateButton("Button2",180,35)
    guisetstate(@sw_show,$gui)
    guisetstate(@sw_show,$msgbox)
    $variable=0
    adlibenable("_move",1000)

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

    while 1
    $msg=GUIGetMsg(1) ;array mit Daten
    switch $msg[1] ;welches fenster löst das Ereignis aus?
    case $msgbox ;die msgbox wars...
    if $msg[0]=$msb1 then $variable=1 ;den Buttons variablen zuweisen
    if $msg[0]=$msb2 then $variable=2 ;den Buttons variablen zuweisen
    if $msg[0]=-3 then guisetstate(@sw_hide,$msgbox) ;msgbox schließen
    if $msg[0]=$msb1 or $msg[0]=$msb2 then winsettitle($Msgbox,"","Die Variable ist: "&$variable)
    ;hier könnte man nun die messagebox "deaktivieren"
    case $gui ;die hauptgui bekam die Nachricht
    if $msg[0]=-3 then Exit ;prog beenden beenden
    endswitch

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

    for $i=1 to $anz
    $a=controlgetpos($gui,"Test",$button[$i])
    if $a[0]<10 then $x[$i]=-$x[$i]
    if $a[1]<10 then $y[$i]=-$y[$i]
    if $a[0]>490 then $x[$i]=-$x[$i]
    if $a[1]>490 then $y[$i]=-$y[$i]
    controlmove("Test","",$button[$i],$a[0]+$x[$i],$a[1]+$y[$i],$a[0]/10,$a[0]/10)
    next
    wend
    exit
    func _move()
    for $i=1 to $anz
    $x[$i]=random(-2,+2,1)
    $y[$i]=random(-2,+2,1)
    next
    _WinAPI_RedrawWindow($gui)
    endfunc

    [/autoit] [autoit][/autoit] [autoit][/autoit]
  • hallo und danke für eure rückmeldungen.

    ja ich denke auch das eine eigene gui die beste lösung ist.
    zu testzwecken habe ich das hier mal gemacht:

    [autoit]


    #include <Timers.au3>
    #include <WindowsConstants.au3>

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

    $f0 = GUICreate("Frage", 310, 130)
    GUICtrlCreateLabel("eigene msgbox test", 70, 50, 200, 15)
    $f1 = GUICtrlCreateButton("Ja", 125, 100, 85, 25)
    $f2 = GUICtrlCreateButton("Nein", 220, 100, 85, 25)
    GUISetState(@SW_SHOW, $f0)
    $area = GuiCreate("test2", 100, 100, 100, 100, $WS_POPUP)
    GUISetBkColor(0x0c6eec)
    GUISetState(@SW_SHOW, $area)
    $i = 1
    $starttime = _Timer_Init()
    do
    $msg = GUIGetMsg()
    switch $msg
    case $f1
    $i = 0
    EndSwitch
    if _Timer_Diff($starttime) > 600 then GUISetState(@SW_hide, $area)
    if _Timer_Diff($starttime) > 1200 then GUISetState(@SW_SHOW, $area)
    if _Timer_Diff($starttime) > 1200 then $starttime = _Timer_Init()
    until $msg > 0
    Splashoff()
    GUIDelete($f0)
    msgbox(0,"",$i)

    [/autoit]

    da werd ich drauf aufbauen.

    nice weekend 2 all