Endlosberechnung anstelle einmaliger Summe

  • Hy Leute,

    habe (mal wieder) ein kleines logisches Problem.
    Folgender Code sollte eigentlich eine Summe aus einzelnen Input-Feldern ziehen und diese einmalig in einem anderen Inputfeld eintragen ABER leider rechnet es keine Summe sondern zählt unendlich nach oben. Gebe ich im Feld die Zahl 20 ein, dann rechnet er mir ewig immer 20+20+20+20 usw. und hört nicht auf.

    Folgende Schleife sollte eigentlich die Summe aus den einzelnen Feldern ziehen:

    [autoit]

    For $i = 0 To UBound($agCB) - 1
    If BitAND(GUICtrlRead($agCB[$i]), $GUI_checked) Then
    $cb_validate += Int(GUICtrlRead($agIn[$i]))
    GUICtrlSetData($amenge, $cb_validate)
    EndIf
    Next

    [/autoit]

    Das Script ist mittlerweile sehr lang geworden aber zum besseren Verständnis gibts hier mal die Hauptfunktion:

    Spoiler anzeigen
    [autoit]

    Func _main()

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

    ;~ ******************** Temp-variables ********************
    Local $fileexist, $file_temp, $GUI_Msg
    Local $ar_adate
    Local $last = 'Noch keine Meldung gespeichert.' ; Setting var[last message] to NULL
    Local $cb_validate = 0 ; Temp var for validating splitted waste quantity

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

    ;~ ******************** Delete last record in INI ********************
    IniWrite('options.ini', 'Options', 'Lastrun', '')

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

    ;~ ******************** File check operations ********************
    DirCreate('lib')
    DirCreate('data')

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

    If Not FileExists('Options.ini') Then FileInstall('Options.ini', 'Options.ini')
    If Not FileExists('lib/Logo.jpg') Then FileInstall('lib/Logo.jpg', 'lib/Logo.jpg')
    If Not FileExists('lib/bg.jpg') Then FileInstall('lib/bg.jpg', 'lib/bg.jpg')
    If Not FileExists('lib/schliessen.ico') Then FileInstall('lib/schliessen.ico', 'lib/schliessen.ico')
    If Not FileExists('lib/loeschen.ico') Then FileInstall('lib/loeschen.ico', 'lib/loeschen.ico')
    If Not FileExists('lib/drucken.ico') Then FileInstall('lib/drucken.ico', 'lib/drucken.ico')
    If Not FileExists('lib/speichern.ico') Then FileInstall('lib/speichern.ico', 'lib/speichern.ico')

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

    If FileExists('meldung.html') = 1 Then FileDelete('meldung.html')

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

    If IniRead('options.ini', 'Setup', 'SetupDone', 'No') = 'No' Then
    MsgBox(16, 'Ausschusserfassung Einstellungen', 'Einstellungen für Ausschusserfassung noch nicht vollständig! Bitte überprüfen Sie die Eintragungen in Datei' & @CRLF & @CRLF _
    & '"' & @ScriptDir & '\Options.ini"' & @CRLF & @CRLF _
    & 'Wenn alle Einstellungen korrekt sind, setzen Sie den Wert für "SetupDone" auf "Yes".')
    Exit
    EndIf

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

    _createDB()
    _createTBL()

    #Region ### START Koda GUI section ### Form=Haupt-GUI.kxf

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

    GUICreate($firma & ": Ausschuss Erfassung " & $department & " by ToWaCom", 945, 638, 0, 0)
    ;~ Dim $background = GUICtrlCreatePic('lib/bg.jpg', 0, 0, 1050, 750)
    ;~ GUICtrlSetState($background, $GUI_DISABLE)

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

    GUICtrlCreatePic($logo, 845, 0, 100, 100, 0)
    GUICtrlCreateLabel('Version ' & FileGetVersion(@ScriptName), 750, 10)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")

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

    GUICtrlCreateLabel("Meldedatum:", 475, 125, 120, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 600, 0, "MS Sans Serif")
    GUICtrlSetColor(-1, 0x006400)
    $save_date = GUICtrlCreateDate('', 475, 145, 85, 25, $DTS_SHORTDATEFORMAT)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    GUICtrlCreateLabel("Ausschusserfassung " & $department, 10, 10, 356, 30)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 14, 800, 0, "Arial Black")
    GUICtrlSetColor(-1, 0x0000FF)

    GUICtrlCreateGroup(" Info ", 10, 40, 410, 60)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlCreateLabel("Diese Software ist lediglich für die Abteilung " & $department & " der Firma " & $firma & "! Sie darf nicht von anderen" & _
    "Abteilungen verwendet werden!" & _
    "Bitte füllen Sie alle Felder komplett aus bevor Sie fortfahren! Danke.", 15, 55, 400, 50)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)

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

    ;~ ******************** Group quantity details ********************
    GUICtrlCreateGroup("Mengenangaben", 10, 120, 410, 80)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")
    GUICtrlCreateLabel("Ausschuss Menge (Stück):", 65, 140, 160, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $amenge = GUICtrlCreateInput("", 230, 140, 150, 20, $ES_READONLY + $ES_NUMBER)
    GUICtrlSetTip(-1, 'Summenanzeige der unten eingegebenen Teilmengen.', 'Ausschussmenge gesamt', 1, 1)
    GUICtrlSetData(-1, '0')

    GUICtrlCreateLabel("Fertigungsmenge (inkl. Ausschuss):", 15, 170, 210, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $fmenge = GUICtrlCreateInput("", 230, 170, 150, 20, $ES_NUMBER)
    GUICtrlSetTip(-1, 'Bitte geben Sie die gesamte gefertigte Menge ein.' & @CRLF & 'D.h. die Gesamtmenge inkl. Ausschussstückzahl!', 'Fertigungsmenge eingeben', 1, 1)

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

    ;~ ******************** Group waste reasons ********************

    Global $str_agType = ''

    For $i = 0 To 10
    $agType[$i] = Eval('G' & $i + 1)
    $str_agType &= Eval('G' & $i + 1)
    $str_agType &= '|'
    Next

    GUICtrlCreateTab(10, 210, 580, 310)

    For $i = 0 To UBound($agType) - 1

    GUICtrlCreateTabItem('Menge' & $i + 1)

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

    $agCB[$i] = GUICtrlCreateCheckbox('aktivieren', 20, 250, 100, 20)

    GUICtrlCreateLabel('Prozesschritt:', 20, 300, 150, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $agType[$i] = GUICtrlCreateCombo('', 170, 300, 130, 20)
    GUICtrlSetTip(-1, 'Bitte wählen Sie den Prozessschritt aus um im nächsten Feld' & @CRLF & _
    'entsprechende Ausschussgründe zu erhalten', 1, 1)
    GUICtrlSetData(-1, $str_agType)
    GUICtrlSetState(-1, $GUI_DISABLE)

    GUICtrlCreateLabel('Ausschussgrund:', 20, 330, 150, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $agCombo[$i] = GUICtrlCreateCombo('', 170, 330, 130, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetTip(-1, 'Bitten wählen Sie für die Teilmenge den' & @CRLF & _
    'entsprechenden Ausschussgrund aus.', 'Ausschuss-Grund wählen', 1, 1)
    GUICtrlSetData(-1, '')
    GUICtrlSetState(-1, $GUI_DISABLE)

    GUICtrlCreateLabel('Ausschuss-Teilmenge:', 20, 360, 150, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $agIn[$i] = GUICtrlCreateInput("", 170, 360, 130, 20, $ES_NUMBER)
    GUICtrlSetTip(-1, 'Bitte geben Sie die Teilmengen an.', 'Ausschuss-Teilmenge eingeben', 1, 1)
    GUICtrlSetLimit(-1, 10)
    GUICtrlSetState(-1, $GUI_DISABLE)

    GUICtrlCreateLabel('Evtl. Kommentar:', 20, 390, 150, 20)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $agIn2[$i] = GUICtrlCreateInput("", 170, 390, 200, 20)
    GUICtrlSetTip(-1, 'Bei Bedarf können Sie einen Kommentar angeben.', 'Optionaler Kommentar', 1, 1)
    GUICtrlSetLimit(-1, 200)
    GUICtrlSetState(-1, $GUI_DISABLE)
    Next

    GUICtrlCreateTabItem("")

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

    #cs ******************** Group message details ********************
    $wo_id -> Fertigungsauftragsnummer $ps_id -> Leitzahl Arbeitsgang
    $combo_woKind -> Erstfertigung, Nacharbeit oder Zusatzarbeit
    $save_date -> Datum der Ausschussmeldung

    $adate -> Datum des Ausschuss-Buchungsdatums (Ausschussanfall)
    $input_worker -> Namen der Arbeiter, die den Auftrag bearbeiten
    **************************************************************************
    #ce

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

    GUICtrlCreateGroup("Fertigungsauftragsdetails", 610, 120, 325, 400)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    GUICtrlSetFont(-1, 10, 800, 0, "MS Sans Serif")

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

    GUICtrlCreateLabel("Fertigungsauftragsnummer:", 615, 140, 166, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $wo_id = GUICtrlCreateInput("", 780, 140, 150, 20, $ES_NUMBER)
    GUICtrlSetTip(-1, 'Bitte geben Sie die Fertigungsauftrags-Nummer ein.' & @CRLF & 'Alle Eingaben bitte OHNE Schrägstrich oder Sonderzeichen.', 'FA-Nummer eingeben', 1, 1)

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

    GUICtrlCreateLabel("Arbeitsgang-Leitzahl:", 615, 170, 129, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $ps_id = GUICtrlCreateInput("", 780, 170, 150, 20, $ES_NUMBER)
    GUICtrlSetTip(-1, 'Bitte geben Sie die Arbeitsgang-Leitzahl ein.' & @CRLF & 'Alle Eingaben bitte OHNE Schrägstrich oder Sonderzeichen.', 'Leitzahl eingeben', 1, 1)

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

    GUICtrlCreateLabel("Teile-Nummer:", 615, 200, 100, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $combo_partnr = GUICtrlCreateCombo("", 780, 200, 100, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetTip(-1, 'Bitte wählen Sie die entsprechende Teile-Nr. aus.', 'Teilenummer wählen', 1, 1)
    GUICtrlSetData($combo_partnr, $INI_teilelist)

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

    GUICtrlCreateLabel("Ausschuss aus:", 615, 230, 100, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $combo_woKind = GUICtrlCreateCombo("", 780, 230, 100, 20, $CBS_DROPDOWNLIST)
    GUICtrlSetTip(-1, 'Wählen Sie bitte die Auftragsart gemäß der Auswahlliste aus.', 'Auftragsart wählen', 1, 1)
    GUICtrlSetData($combo_woKind, $INI_FAart)

    GUICtrlCreateLabel("Zeitpunkt Ausschussanfall:", 615, 260, 160, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $adate = GUICtrlCreateDate(@YEAR & '/' & (@MON + 1) & '/' & @MDAY, 780, 260, 100, 20, $DTS_SHORTDATEFORMAT)
    GUICtrlSetTip(-1, 'Bitte wählen Sie den Endzeitpunkt des Zeitraumes aus,' & @CRLF & _
    'in dem der Ausschuss angefallen ist.', 'Ausschusszeitpunkt wählen', 1, 1)

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

    GUICtrlCreateLabel('Arbeitername / Personen:', 615, 300, 160, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $input_worker = GUICtrlCreateInput("", 615, 320, 315, 20)
    GUICtrlSetTip(-1, 'Bitte geben Sie mindestens den Nachnamen der Person an,' & @CRLF & 'die den genannten Auftrag bearbeitet hat.' & @CRLF & _
    'Mehrere Namen bitte durch einfaches Komma trennen.', 'Person eingeben', 1, 1)

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

    GUICtrlCreateLabel("Zusatzkommentare (max. 5000 Zeichen):", 615, 360, 320, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
    $comment = GUICtrlCreateEdit("", 615, 380, 315, 135)
    GUICtrlSetTip(-1, 'Bei Bedarf können Sie hier einen Kommentar zur generellen Meldung hinterlegen.' & @CRLF & _
    'ausschussgrund-spezifische Angaben bitte im Kommentarfeld der Ausschussgründe hinterlegen.', 'Optionaler Kommentar', 1, 1)
    GUICtrlSetLimit(-1, 5000)
    GUICtrlSetData(-1, "")
    GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")

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

    ;~ ******************** Common action buttons ********************
    Local $button_go, $button_print, $button_form_null, $button_quit = 0

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

    GUICtrlCreateLabel("Speichern", 15, 525, 50, 15)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $button_go = GUICtrlCreateButton("Eintragen", 15, 540, 48, 48, $BS_Icon)
    GUICtrlSetTip(-1, 'Die Eingaben werden geprüft und in die Datenbank geschrieben.' & @CRLF & 'Danach wird die Maske geleert bzw. auf Null gesetzt.', 'Eingaben speichern', 1, 1)
    GUICtrlSetImage(-1, 'lib/speichern.ico', -1, 1)
    GUICtrlSetFont(-1, 12, 800, 0, "Arial Black")

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

    GUICtrlCreateLabel("Drucken", 80, 525, 50, 15)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $button_print = GUICtrlCreateButton("Nur drucken", 80, 540, 48, 48, $BS_Icon)
    GUICtrlSetTip(-1, 'Die Eingaben werden in eine Tabelle eingetragen und ausgedruckt.' & @CRLF & 'Nur möglich solange Maske gefüllt ist!', 'Maskeneingaben drucken', 1, 1)
    GUICtrlSetImage(-1, 'lib/drucken.ico', -1, 1)
    GUICtrlSetFont(-1, 12, 800, 0, "Arial Black")

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

    GUICtrlCreateLabel("Löschen", 250, 525, 50, 15)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $button_form_null = GUICtrlCreateButton("Formular leeren", 250, 540, 48, 48, $BS_Icon)
    GUICtrlSetTip(-1, 'Die gesamte Eingabemaske wird nach dem Anklicken auf Null gesetzt.' & @CRLF & 'Alle Eingaben gehen verloren!', 'Eingaben löschen', 1, 1)
    GUICtrlSetImage(-1, 'lib/loeschen.ico', -1, 1)
    GUICtrlSetFont(-1, 12, 800, 0, "Arial Black")

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

    GUICtrlCreateLabel("Beenden", 882, 525, 50, 15)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $button_quit = GUICtrlCreateButton("Schliessen", 882, 540, 48, 48, $BS_Icon)
    GUICtrlSetTip(-1, 'Das Programm wird nach Rückfrage beendet.', 'Programm Beenden', 1, 1)
    GUICtrlSetImage(-1, 'lib/schliessen.ico', -1, 1)
    GUICtrlSetFont(-1, 12, 800, 0, "Arial Black")

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

    ;~ ******************** Show last saved message ********************
    GUICtrlCreateLabel("Letzte Meldung:", 15, 603, 80, 20)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $edit_last = GUICtrlCreateEdit("", 100, 603, 830, 20, $ES_READONLY + $ES_AUTOVSCROLL + $ES_CENTER)
    GUICtrlSetTip(-1, 'Anzeige der zuletzt gespeicherten Meldung seit Programmaufruf in Kurzform.', 'Letzte gespeicherte Meldung', 1, 1)
    GUICtrlSetData(-1, $last)
    GUICtrlSetFont(-1, 8, 400, 0, "MS Sans Serif")

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

    ;~ ******************** GUI show ********************
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $GUI_Msg = GUIGetMsg()

    Switch $GUI_Msg
    Case $GUI_EVENT_CLOSE
    _quit()
    ContinueLoop

    Case $button_go

    If MsgBox(4, 'Meldung speichern', 'Wollen Sie die Daten endgültig speichern?') = 7 Then
    ContinueLoop
    Else

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

    $ar_adate = StringSplit(GUICtrlRead($adate), '.')

    Select
    ;~ Case Int(GUICtrlRead($amenge)) <= 0 ; $amenge -> validate bigger than 0
    ;~ MsgBox(16, 'Ausschussmenge', 'Ausschussmenge zu klein oder falsche Eingabe. Bitte prüfen!')
    ;~
    Case Int(GUICtrlRead($fmenge)) <= 0 Or Int(GUICtrlRead($fmenge)) < Int(GUICtrlRead($amenge)) ; $fmenge -> validate bigger than 0 and bigger than $amenge
    MsgBox(16, 'Fertigungsmenge', 'Fertigungsmenge zu klein oder falsche Eingabe. Bitte prüfen!')

    Case Int(GUICtrlRead($wo_id)) > Int($INI_FAmax) Or Int(GUICtrlRead($wo_id)) < Int($INI_FAmin) ; $wo_id -> validate int with ini-options
    MsgBox(16, 'Fertigungsauftragsnummer', 'FA-ID fehlerhaft: Bitte kontrollieren Sie Ihre Eingaben!')

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

    Case Int(GUICtrlRead($ps_id)) > Int($INI_LZmax) Or Int(GUICtrlRead($ps_id)) < Int($INI_LZmin) ; $ps_id -> validate int with ini-options
    MsgBox(16, 'Leitzahl', 'Leitzahl fehlerhaft: Bitte kontrollieren Sie Ihre Eingaben!')

    Case GUICtrlRead($combo_partnr) = '' ; $combo_partnr -> validate combo-box not NULL
    MsgBox(16, 'Teilenummer', 'Fehlende Eingaben: Keine Teilenummer angegeben.' & @CRLF & 'Bitte prüfen!')

    Case GUICtrlRead($combo_woKind) = '' ; $combo_woKind -> validate combo-box not NULL
    MsgBox(16, 'Auftragsart', 'Fehlende Eingaben: Keine Auftragsart angegeben.' & @CRLF & 'Bitte prüfen!')

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

    Case $ar_adate[3] < String(@YEAR - 2) Or String($ar_adate[3] & '/' & $ar_adate[2] & '/' & $ar_adate[1]) > String(@YEAR & '/' & @MON & '/' & @MDAY) ; $adate -> validate not smaller than (today - 2 years) and not bigger than today
    MsgBox(16, 'Ausschuss-Datum', 'Ausschussdatum falsch: Datum kann nicht in der Zukunft liegen.' & @CRLF & _
    'Datum muss nach Jahr ' & (@YEAR - 3) & ' liegen. Bitte kontrollieren Sie Ihre Eingaben!')

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

    Case GUICtrlRead($input_worker) = '' ; $input_worker -> validate input-field not NULL
    MsgBox(16, 'Bearbeiter Name(n)', 'Fehlende Eingaben: Kein Bearbeiter angegeben.' & @CRLF & 'Bitte prüfen!')

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

    Case $cb_validate = 0
    MsgBox(16, 'Ausschussgründe', 'Keine Mengenzuordnung zu Ausschussgründen. Bitten prüfen!')

    ;~ Case $cb_validate <> GUICtrlRead($amenge)
    ;~ MsgBox(16, 'Ausschussmengensumme', 'Gesamtausschuss und Summe der Einzelmengen stimmten nicht überein. Bitte prüfen!')
    ;~
    Case Else
    _save()
    _form_null()

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

    EndSelect
    EndIf

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

    ContinueLoop

    Case $button_print
    _print()
    ContinueLoop

    Case $button_form_null

    If MsgBox(4, 'Form löschen', 'Wollen Sie Ihr Formular wirklich leeren?') = 7 Then
    ContinueLoop
    Else
    _form_null()
    ContinueLoop
    EndIf

    Case $button_quit
    _quit()
    ContinueLoop

    EndSwitch

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

    For $i = 0 To UBound($agType) - 1
    If $GUI_Msg = $agCB[$i] Then
    If BitAND(GUICtrlRead($agCB[$i]), $GUI_checked) Then
    GUICtrlSetState($agType[$i], $GUI_Enable)
    GUICtrlSetState($agCombo[$i], $GUI_Enable)
    GUICtrlSetState($agIn[$i], $GUI_Enable)
    GUICtrlSetState($agIn2[$i], $GUI_Enable)
    Else
    GUICtrlSetData($agType[$i], '')
    GUICtrlSetData($agType[$i], $str_agType)
    GUICtrlSetState($agType[$i], $GUI_DISABLE)
    GUICtrlSetData($agCombo[$i], '')
    GUICtrlSetState($agCombo[$i], $GUI_DISABLE)
    GUICtrlSetData($agIn[$i], '')
    GUICtrlSetState($agIn[$i], $GUI_DISABLE)
    GUICtrlSetData($agIn2[$i], '')
    GUICtrlSetState($agIn2[$i], $GUI_DISABLE)
    EndIf
    EndIf
    Next

    For $i = 0 To UBound($agCB) - 1
    If BitAND(GUICtrlRead($agCB[$i]), $GUI_checked) Then
    $cb_validate += Int(GUICtrlRead($agIn[$i]))
    GUICtrlSetData($amenge, $cb_validate)
    EndIf
    Next

    For $i = 0 To UBound($agType) - 1
    If BitAND(GUICtrlRead($agCB[$i]), $GUI_checked) Then
    If $GUI_Msg = $agType[$i] Then
    GUICtrlSetData($agCombo[$i], '')

    Switch GUICtrlRead($agType[$i])
    Case $G1
    GUICtrlSetData($agCombo[$i], $G1Sub)
    ContinueLoop
    Case $G2
    GUICtrlSetData($agCombo[$i], $G2Sub)
    ContinueLoop
    Case $G3
    GUICtrlSetData($agCombo[$i], $G3Sub)
    ContinueLoop
    Case $G4
    GUICtrlSetData($agCombo[$i], $G4Sub)
    ContinueLoop
    Case $G5
    GUICtrlSetData($agCombo[$i], $G5Sub)
    ContinueLoop
    Case $G6
    GUICtrlSetData($agCombo[$i], $G6Sub)
    ContinueLoop
    Case $G7
    GUICtrlSetData($agCombo[$i], $G8Sub)
    ContinueLoop
    Case $G9
    GUICtrlSetData($agCombo[$i], $G9Sub)
    ContinueLoop
    Case $G10
    GUICtrlSetData($agCombo[$i], $G10Sub)
    ContinueLoop
    Case $G11
    GUICtrlSetData($agCombo[$i], $G11Sub)
    ContinueLoop
    Case Else
    GUICtrlSetData($agCombo[$i], 'Fehler')
    ContinueLoop
    EndSwitch

    EndIf
    EndIf
    Next

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

    WEnd

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

    EndFunc ;==>_main

    [/autoit]

    Vielleicht ist es ein kleines Problem bei dem mir nur die letzte Hürde fehlt. Sollte jemand die Lust und die Zeit haben sich den Fehler anzusehn wäre ich sehr dankbar.

    Grüsse,
    Towacom

    PS: Habe noch ein Screenshot beigefügt, in dem das Fehler-Feld markiert ist (zum besseren Verständnis).

    Einmal editiert, zuletzt von Towacom (28. Juli 2008 um 17:51)

  • Danke aber das hab ich ja eigentlich schon.
    Ganz am Anfang der _main()-Func steht:

    [autoit]

    Local $cb_validate = 0 ; Temp var for validating splitted waste quantity

    [/autoit]

    Macht es einen Unterschied ob es direkt vor der Schleife nochmal steht? O.o

    EDIT: Also ich habe es versucht - ich hab keinen Schimmer wieso aber jetzt berechnet er nicht mehr ewig weiter.
    Dafür fängt er aber ab der zweiten Eingabe in ein zweites Mengenfeld an zu flimmern und wenn man genau hinkuckt scheint er verschiedene Zahlen anzeigen zu wollen. *lol Ich bin ausgestiegen :D ähm... zu Hüüüülfe!

    Einmal editiert, zuletzt von Towacom (28. Juli 2008 um 15:55)

  • Danke Oscar, stimmt wohl - wieso auch immer. Aber habe jetzt dafür anderes Problem:

    Zitat

    EDIT: Also ich habe es versucht - ich hab keinen Schimmer wieso aber jetzt berechnet er nicht mehr ewig weiter.
    Dafür fängt er aber ab der zweiten Eingabe in ein zweites Mengenfeld an zu flimmern und wenn man genau hinkuckt scheint er verschiedene Zahlen anzeigen zu wollen. *lol Ich bin ausgestiegen ähm... zu Hüüüülfe!

    • Offizieller Beitrag

    Vermutlich berechnest du das Ergebnis halt ständig (hab den Code nicht genau angeschaut), daher dann Flimmern.
    Abhilfe:
    - OnEventMode und nur Berechnen, wenn sich Eingaben in den "Ziel"-Inputs ändern (kompliziert umzubauen auf OnEvent, aber am wenigsten Rechenleistung forndernd)
    - letztes Ergebnis global speichern und aktuellen Wert nur setzen, wenn er sich unterscheidet (und dann als alten Wert speichern) (einfach, berechnet aber einiges unnütz, trotzdem möglich).

    peethebee

  • Hm... habe mir gerade das OnEventMode angeschaut.
    Eigentlich - wenn ich alles richtig verstehe macht es immer Sinn seine Skripte mit OnEvent zu machen oder? Ich hab ne bessere Aufteilung auf einzelne Funktionen und spare dabei noch Rechenlast.

    Wie sind da eure Erfahrungen?

    Dein Tipp ist super PeeTheBee, werde jedoch um unnötige Systemlast zu vermeiden das so umstellen, dass ich die Summenbildung erst berechne bei ButtonClick.

    Umbasteln werde ich wohl das ganze nimmer aber ich hab noch ein anderes Modul offen dann werd ich das mal mit dem OnEventMode machen wenn's Sinn macht.

    Thx mal - ich probiers mal aus ob's funzt mit der Berechnung an anderer Stelle.

    • Offizieller Beitrag

    Hallo!

    Du brauchst es nicht woanders berechnen, sondern nur das GUICTRLSetData unterbinden, wenn es kein neuer Wert ist :).
    Ich arbeite immer im OnEventModus und es gab nie ernsthafte Probleme. Manchmal muss man sich ein wenig verrenken, aber in aller Regel ist es einfacher als der andere Modus.

    Viel Erfolg beim Flickr-Bekämpfen :D.

    peethebee

    • Offizieller Beitrag

    Ich benutze für solche Fälle immer eine Hilfs-Variable, in der ich den alten Wert speichere und dann mit dem neuen Wert vergleichen. Wenn der dann anders ist, dann die Anzeige aktualisieren:

    [autoit]


    Local $cb_validate, $cb_validate_old ; außerhalb der While...WEnd-Schleife

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

    $cb_validate = 0
    For $i = 0 To UBound($agCB) - 1
    If BitAND(GUICtrlRead($agCB[$i]), $GUI_checked) Then
    $cb_validate += Int(GUICtrlRead($agIn[$i]))
    EndIf
    Next
    If $cb_validate <> $cb_validate_old Then
    GUICtrlSetData($amenge, $cb_validate)
    $cb_validate_old = $cb_validate
    EndIf

    [/autoit]
  • Hey ihr Helferlein :)

    Jup sowas wollte ich jetzt auch versuchen - wohl gemerkt: "versuchen" ;)

    Leider klappts auch nicht - steh grad irgendwie auf dem Schlauch. Er setzt zwar die erste Eingabe in die Variable aber rechnet dann nicht mehr weiter - ABER zumindest flimmerts nimmer :D Is ja klar - er macht jetzt nix mehr.

    Hier mein misslungener Versuch:

    [autoit]

    Local $cb_validate = 0
    Local $cb_vali_temp = 0
    For $i = 0 To UBound($agCB) - 1
    If BitAND(GUICtrlRead($agCB[$i]), $GUI_checked) Then
    If NOT ($cb_validate + Int(GUICtrlRead($agIn[$i]))) = $cb_vali_temp Then
    $cb_validate += Int(GUICtrlRead($agIn[$i]))
    GUICtrlSetData($amenge, $cb_validate)
    $cb_vali_temp = Int($cb_validate)
    EndIf
    EndIf
    Next

    [/autoit]

    Ich glaub ich mach mal ne Pause - mir denkt es kein Stück mehr momentan. Find irgendwie keine saubere Lösung.
    Meins ist doch im Prinzip das gleiche wie das von dir Oscar oder? ?(
    Nur dass ich das ganze anders vergleichen muss da mir das "If $cb_validate <> $cb_validate_old Then" als Bedingung nicht reicht. Ich muss ja prüfen bevor er rechnet.

    Thx, Grüsse

  • So - nach ner kreativen Pause habe ich jetzt deine Version mal reingesetzt und siehe da es tut :)
    Perfekt!

    Was fast noch besser ist: Nachdem ich jetzt erst mal nen Kaffee hatte und ne Zigi geraucht versteh ich sogar was da abläuft ;)
    Super Sache.

    Also nochmals vielen Dank! *puh*... schön... jetzt kanns wieder weitergehn :D

    Dankööö