While schleife wird nicht abgefragt

  • Guten Tag

    Ich schreibe gerade ein kleines Progrämmchen für das GTA San Andreas. Mit dem Programm kann man (wenn es dann mal fertig ist) sagen, welche Autos in welcher Gruppe sind.
    Aus irgendeinem Grund fragt mein Programm aber die While-Schleife nicht ab.

    Hier mal der Quelltext:

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <file.au3>
    #Include <GuiListBox.au3>

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

    Opt("GUIOnEventMode", 1)

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

    Global $lH = 20
    Global $i_bH = 15
    Global $group[19]
    Global $btn[19]
    Global $line = 8
    Global $cars = @ScriptDir & "\cars.txt"

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

    $main = GUICreate("Cargroup Editor for GTA San Andreas - CopyRight by StengelProductions", 940, 485)
    GUICtrlCreateLabel("Worker:", 20, $lH, 100, 25)
    GUICtrlCreateLabel("Business:", 20, $lH + 25, 100, 25)
    GUICtrlCreateLabel("Clubbers", 20, $lH + 50, 100, 25)
    GUICtrlCreateLabel("Farmers:", 20, $lH + 75, 100, 25)
    GUICtrlCreateLabel("Beachfolk:", 20, $lH + 100, 100, 25)
    GUICtrlCreateLabel("Parkfolk:", 20, $lH + 125, 100, 25)
    GUICtrlCreateLabel("Casual Rich:", 20, $lH + 150, 100, 25)
    GUICtrlCreateLabel("Casual Average:", 20, $lH + 175, 100, 25)
    GUICtrlCreateLabel("Casual Poor:", 20, $lH + 200, 100, 25)
    GUICtrlCreateLabel("Prostitutes:", 20, $lH + 225, 100, 25)
    GUICtrlCreateLabel("Criminals:", 20, $lH + 250, 100, 25)
    GUICtrlCreateLabel("Golfers:", 20, $lH + 275, 100, 25)
    GUICtrlCreateLabel("Servants:", 20, $lH + 300, 100, 25)
    GUICtrlCreateLabel("Aircrew:", 20, $lH + 325, 100, 25)
    GUICtrlCreateLabel("Entertainer:", 20, $lH + 350, 100, 25)
    GUICtrlCreateLabel("Out-Of-Town:", 20, $lH + 375, 100, 25)
    GUICtrlCreateLabel("Desert Folk:", 20, $lH + 400, 100, 25)
    GUICtrlCreateLabel("Aircrew on Runway:", 20, $lH + 425, 100, 25)

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

    $group[1] = GUICtrlCreateInput("", 150, $i_bH, 650, 25)
    $group[2] = GUICtrlCreateInput("", 150, $i_bH + 25, 650, 25)
    $group[3] = GUICtrlCreateInput("", 150, $i_bH + 50, 650, 25)
    $group[4] = GUICtrlCreateInput("", 150, $i_bH + 75, 650, 25)
    $group[5] = GUICtrlCreateInput("", 150, $i_bH + 100, 650, 25)
    $group[6] = GUICtrlCreateInput("", 150, $i_bH + 125, 650, 25)
    $group[7] = GUICtrlCreateInput("", 150, $i_bH + 150, 650, 25)
    $group[8] = GUICtrlCreateInput("", 150, $i_bH + 175, 650, 25)
    $group[9] = GUICtrlCreateInput("", 150, $i_bH + 200, 650, 25)
    $group[10] = GUICtrlCreateInput("", 150, $i_bH + 225, 650, 25)
    $group[11] = GUICtrlCreateInput("", 150, $i_bH + 250, 650, 25)
    $group[12] = GUICtrlCreateInput("", 150, $i_bH + 275, 650, 25)
    $group[13] = GUICtrlCreateInput("", 150, $i_bH + 300, 650, 25)
    $group[14] = GUICtrlCreateInput("", 150, $i_bH + 325, 650, 25)
    $group[15] = GUICtrlCreateInput("", 150, $i_bH + 350, 650, 25)
    $group[16] = GUICtrlCreateInput("", 150, $i_bH + 375, 650, 25)
    $group[17] = GUICtrlCreateInput("", 150, $i_bH + 400, 650, 25)
    $group[18] = GUICtrlCreateInput("", 150, $i_bH + 425, 650, 25)

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

    $btn[1] = GUICtrlCreateButton("Ändern", 820, $i_bH, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[2] = GUICtrlCreateButton("Ändern", 820, $i_bH + 25, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[3] = GUICtrlCreateButton("Ändern", 820, $i_bH + 50, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[4] = GUICtrlCreateButton("Ändern", 820, $i_bH + 75, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[5] = GUICtrlCreateButton("Ändern", 820, $i_bH + 100, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[6] = GUICtrlCreateButton("Ändern", 820, $i_bH + 125, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[7] = GUICtrlCreateButton("Ändern", 820, $i_bH + 150, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[8] = GUICtrlCreateButton("Ändern", 820, $i_bH + 175, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[9] = GUICtrlCreateButton("Ändern", 820, $i_bH + 200, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[10] = GUICtrlCreateButton("Ändern", 820, $i_bH + 225, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[11] = GUICtrlCreateButton("Ändern", 820, $i_bH + 250, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[12] = GUICtrlCreateButton("Ändern", 820, $i_bH + 275, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[13] = GUICtrlCreateButton("Ändern", 820, $i_bH + 300, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[14] = GUICtrlCreateButton("Ändern", 820, $i_bH + 325, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[15] = GUICtrlCreateButton("Ändern", 820, $i_bH + 350, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[16] = GUICtrlCreateButton("Ändern", 820, $i_bH + 375, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn[17] = GUICtrlCreateButton("Ändern", 820, $i_bH + 400, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")
    $btn = GUICtrlCreateButton("Ändern", 820, $i_bH + 425, 100, 25)
    GUICtrlSetOnEvent(-1, "_change")

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

    $cargui = GUICreate("Auto Auswählen", 480, 360, -1, -1, -1, -1, $main)
    $ingroup = _GUICtrlListBox_Create($cargui, "", 20, 20, 160, 210)
    $notingroup = _GUICtrlListBox_Create($cargui, "", 300, 20, 160, 210)
    $addcar = GUICtrlCreateButton("Hinzufügen", 190, 20, 100, 25)
    GUICtrlSetOnEvent(-1, "_add")
    $delcar = GUICtrlCreateButton("Löschen", 190, 65, 100, 25)
    GUICtrlSetOnEvent(-1, "_del")
    $addallcars = GUICtrlCreateButton("Alle Hinzufügen", 190, 110, 100, 25)
    GUICtrlSetOnEvent(-1, "_addall")
    $delallcars = GUICtrlCreateButton("Alle Löschen", 190, 155, 100, 25)
    GUICtrlSetOnEvent(-1, "_delall")
    $ok = GUICtrlCreateButton("Übernehmen", 190, 197, 100, 25)
    GUICtrlSetOnEvent(-1, "_ok")
    $pic2 = GUICtrlCreatePic("", 300, 240, 160, 112, $SS_SUNKEN)
    $pic1 = GUICtrlCreatePic("", 20, 240, 160, 112, $SS_SUNKEN)
    $logo = GUICtrlCreatePic("", 184, 240, 112, 112, $SS_SUNKEN)
    GUICtrlSetImage($logo, "gfx\sp.jpg")

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

    If Not FileExists(@scriptdir & "\cars.txt") Then
    GUISetState(@SW_DISABLE, $main)
    MsgBox(262160, "Error", "Die Datei ""cars.txt"" konnte nicht gefunden werden." & @CRLF & "Drücken Sie OK um das Programm zu beenden.")
    Exit
    EndIf

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

    If RegRead("HKLM\SOFTWARE\Rockstar Games\GTA San Andreas\Installation", "Installed") <> 1 Then
    GUISetState(@SW_DISABLE, $main)
    MsgBox(262160, "Error", "GTA San Andreas ist nicht auf Ihrem Computer Installiert." & @CRLF & "Drücken Sie OK um das Programm zu beenden.")
    Exit
    EndIf

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

    $searchfile = String(StringTrimRight(RegRead("HKLM\SOFTWARE\Rockstar Games\GTA San Andreas\Installation", "ExePath"), 11) & "data\cargrp.dat")
    $file = StringTrimLeft($searchfile, 1)

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

    For $read_line = 1 to 18
    $readen_line = string(filereadline($file, $line))
    GUICtrlSetData($group[$read_line], $readen_line)
    Do
    $readen_line = String(StringTrimRight($readen_line, 1))
    GUICtrlSetData($group[$read_line], $readen_line)
    Until StringIsLower(StringRight(GUICtrlRead($group[$read_line]), 1)) = 1 Or StringInStr("1234567890", StringRight(GUICtrlRead($group[$read_line]), 1)) <> 0
    $line += 1
    Next

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

    GUISetState(@SW_SHOW, $main)

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

    While 1
    $msg = GUIGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE
    If $msg[1] = $main Then
    GUISetState(@SW_DISABLE, $main)
    $endask = MsgBox(262160, "CarGroup Editor", "Wollen sie das Programm wirklich beenden?")
    If $endask = 6 Then
    Exit
    EndIf
    ElseIf $msg[1] = $cargui Then
    GUISetState(@SW_HIDE, $cargui)
    GUISetState(@SW_ENABLE, $main)
    EndIf
    EndSelect
    WEnd

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

    Func _change()
    GUISetState(@SW_DISABLE, $main)
    GUISetState(@SW_SHOW, $cargui)
    Global $ctrlid = @gui_ctrlid - 38
    _GUICtrlListBox_BeginUpdate ($ingroup)
    _GUICtrlListBox_BeginUpdate ($notingroup)
    For $carcount = 1 to _FileCountLines($cars)
    $carname = FileReadLine($cars, $carcount)
    $isingroup = String(guictrlread($group[$ctrlid]))
    If StringInStr($isingroup, $carname) = 0 then
    _GUICtrlListBox_AddString($notingroup, $carname)
    Else
    _GUICtrlListBox_AddString($ingroup, $carname)
    EndIf
    Next
    _GUICtrlListBox_EndUpdate ($ingroup)
    _GUICtrlListBox_EndUpdate ($notingroup)
    EndFunc

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

    Func _add()
    $selectedcar = _GUICtrlListBox_GetCurSel($notingroup)
    $cartoadd = _GUICtrlListBox_GetText ($notingroup, $selectedcar)
    _GUICtrlListBox_AddString($ingroup, $cartoadd)
    _GUICtrlListBox_DeleteString($notingroup, $selectedcar)
    EndFunc

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

    Func _del()
    $selectedcar = _GUICtrlListBox_GetCurSel ($ingroup)
    $cartoadd = _GUICtrlListBox_GetText ($ingroup, $selectedcar)
    _GUICtrlListBox_AddString($notingroup, $cartoadd)
    _GUICtrlListBox_DeleteString($ingroup, $selectedcar)
    EndFunc

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

    Func _delall()
    _GUICtrlListBox_BeginUpdate ($ingroup)
    _GUICtrlListBox_BeginUpdate ($notingroup)
    Do
    $cartodel = _GUICtrlListBox_GetText ($ingroup, 0)
    _GUICtrlListBox_AddString($notingroup, $cartodel)
    _GUICtrlListBox_DeleteString($ingroup, 0)
    Until _GUICtrlListBox_GetCount($ingroup) = 0
    _GUICtrlListBox_EndUpdate ($ingroup)
    _GUICtrlListBox_EndUpdate ($notingroup)
    EndFunc

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

    Func _addall()
    _GUICtrlListBox_BeginUpdate ($ingroup)
    _GUICtrlListBox_BeginUpdate ($notingroup)
    Do
    $cartoadd = _GUICtrlListBox_GetText ($notingroup, 0)
    _GUICtrlListBox_AddString($ingroup, $cartoadd)
    _GUICtrlListBox_DeleteString($notingroup, 0)
    Until _GUICtrlListBox_GetCount($notingroup) = 0
    _GUICtrlListBox_EndUpdate ($ingroup)
    _GUICtrlListBox_EndUpdate ($notingroup)
    EndFunc

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

    Func _ok()
    ;~ funktion
    EndFunc

    [/autoit]

    Weiss jemand von euch warum die While-Schleife nicht abgefragt wird?

    Danke im Voraus

  • An dem kann es nicht liegen, denn bevor die Schleife nicht verlassen wird, wird das GUI nicht angezeigt. Und angezeigt wird es jedesmal.

  • Ich denke es liegt daran:

    [autoit]

    $btn[17] = GUICtrlCreateButton("Ändern", 820, $i_bH + 400, 100, 25);Da ist $btn noch ein Array
    GUICtrlSetOnEvent(-1, "_change")
    $btn = GUICtrlCreateButton("Ändern", 820, $i_bH + 425, 100, 25);Hier wird es von AutoIt als Variable neu definiert
    GUICtrlSetOnEvent(-1, "_change")

    [/autoit]


    Und falls sich jetzt jemand fragt wieso das so ist: Weil $Array für das ganze Array steht (z.B. für Return) , $Array[$index] für ein Element aber $Variable ist ja ne Variable. Da AutoIt intern alle Variablentypen bei änderungen neu angleicht gibt es keinen Fehler $Array=$Variable zu machen. $Array wird dann intern in eine Variable umdeklariert. In Sprachen wie C++ o.ä. hätte man mit dieser Anweißung einen Fehler verursacht.
    Stimmts BugFix? ;):P:D Falls nicht, dann einfach korrigieren

    Projekte: Keine größeren (und fertigen)
    Gegen Internetzensur:
    https://epetitionen.bundestag.de/index.php?acti…s;petition=3860
    (Zeichnungsfrist abgelaufen)
    __________________________________________________________________________________________________________________________________
    Dieser Beitrag wurde bereits 264 mal editiert, zuletzt von »Fast2« (30. Februar 2009, 12:99)

  • Ich konnte das Problem soeben beheben.

    Es lag an den GUICtrlSetOnEvent's und der GUIGetMsg().
    Das hat sich irgendwie gestört