Guictrlread gibt zu viele Daten aus!

  • Hallo,

    ich habe folgendes Problem:

    Mein Programm soll aus den Daten, die bei $Input_name, $Combo_ort und bei $Combo_category eingegeben wurden in eine INI schreiben.

    Code:


    Spoiler anzeigen
    [autoit]


    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <ProgressConstants.au3>
    #include <StaticConstants.au3>
    #include <TabConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=

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

    ; Deklarationen

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

    Global $label
    Global $Input_category
    Global $Button4
    Global $Hier_name_test = 1
    Global $tab_name
    Global $file= @ScriptDir &"/data.ini"

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

    ; GUI-Erstellung

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

    $Form1_1 = GUICreate("Filmdoku -Filmliste- © by Emperormatem", 485, 406, 258, 152)

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

    $Tab= GUICtrlCreateTab(0, 0, 481, 401)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    ; Neuer Tab

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

    $TabSheet1 = GUICtrlCreateTabItem("Filmliste")
    $List_movies = GUICtrlCreateList("", 8, 82, 225, 286)
    GUICtrlSetData(-1, "Peter|Peter2|Peter3|Peter4|Peter5|")
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Group1 = GUICtrlCreateGroup("", 240, 74, 225, 161)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Label1 = GUICtrlCreateLabel("Name", 248, 106, 32, 17)
    $Label2 = GUICtrlCreateLabel("Ort", 248, 162, 18, 17)
    $Label3 = GUICtrlCreateLabel("Kategorie", 248, 210, 49, 17)
    $Label5 = GUICtrlCreateLabel("HierOrt", 376, 162, 37, 17)
    $Label6 = GUICtrlCreateLabel("Hierkategorie", 376, 210, 67, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Progress_dateneinlesung = GUICtrlCreateProgress(240, 322, 225, 25)
    $Label7 = GUICtrlCreateLabel("Fortschritt der Dateneinlesung:", 240, 282, 148, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Label9 = GUICtrlCreateLabel("Hier sehen sie eine Liste aller eingetragenen", 16, 42, 212, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Label10 = GUICtrlCreateLabel("Filme", 16, 58, 28, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Label13 = GUICtrlCreateLabel("Hier sehen sie die Daten des ausgewählten", 248, 42, 209, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Label14 = GUICtrlCreateLabel("Films", 248, 58, 27, 17)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Button3 = GUICtrlCreateButton("Daten einlesen", 240, 241, 225, 33, $WS_GROUP)
    GUICtrlSetFont(-1, 12, 400, 0, "Arial")
    ; Neuer Tab

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

    $TabSheet2 = GUICtrlCreateTabItem("Hinzufügen/Löschen")
    $Group2 = GUICtrlCreateGroup("Hinzufügen", 8, 42, 209, 337)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Label8 = GUICtrlCreateLabel("Name", 16, 74, 32, 17)
    $Combo_ort = GUICtrlCreateCombo("", 16, 170, 177, 25,$CBS_DROPDOWNLIST)
    GUICtrlSetData(-1,"Bitte auswählen|David's Zimmer|Sonstiges","Bitte auswählen")
    $Input_name = GUICtrlCreateInput("", 16, 98, 177, 22)
    $Label11 = GUICtrlCreateLabel("Ort", 16, 138, 18, 17)
    $Combo_category = GUICtrlCreateCombo("", 16, 242, 177, 25,$CBS_DROPDOWNLIST)
    GUICtrlSetData(-1, "Bitte auswählen|Actionfilm|Film noir|Liebesfilm|Thriller|Horrorfilm|Abenteuerfilm|Katastrophenfilm|Kriminalfilm|Fantasyfilm|Mystery-Film|Science-Fiction-Film|Heimatfilm|Western|Historienfilm|Kriegsfilm / Antikriegsfilm|Sonstiges", "Bitte auswählen")
    $Label12 = GUICtrlCreateLabel("Kategorie", 16, 210, 49, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("Löschen", 232, 42, 225, 337)
    GUICtrlSetFont(-1, 8, 400, 0, "Arial")
    $Combo_delete_film = GUICtrlCreateCombo("Combo_delete_film", 248, 98, 177, 25)
    $Label15 = GUICtrlCreateLabel("Film aussuchen und löschen drücken", 248, 74, 180, 17)
    $Label16 = GUICtrlCreateLabel("Kategorie aussuchen und löschen drücken", 248, 210, 207, 17)
    $Label17 = GUICtrlCreateLabel("GANZE Kategorie wird gelöscht!", 248, 314, 190, 17)
    GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
    $Button1 = GUICtrlCreateButton("Löschen", 248, 154, 177, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Löschen", 247, 271, 177, 25, $WS_GROUP)

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

    $Combo_delete_kategorie = GUICtrlCreateCombo("Combo_delete_kategorie", 248, 234, 177, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateTabItem("")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1

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

    $nMsg = GUIGetMsg()
    Switch $nMsg

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

    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Button3

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

    GUICtrlSetData($Progress_dateneinlesung , 0)

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

    $Hier_name=GUICtrlRead($List_movies)

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

    If $Hier_name = "" Then
    For $i = 0 to 50 Step 3
    GUICtrlSetData($Progress_dateneinlesung , $i)
    Sleep(1)
    Next
    Sleep(600)
    MsgBox(0+16,"Fehler","Kein Filmtitel ausgewählt!")
    ContinueLoop
    EndIf

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

    If $Hier_name = $Hier_name_test Then;Abfrage, ob derselbe Film geladen werden soll, was zu einer Fehlfunktion führen würde
    For $i = 0 to 50 Step 3
    GUICtrlSetData($Progress_dateneinlesung , $i)
    Sleep(1)
    Next
    Sleep(600)
    MsgBox(0+16,"Fehler","Derselbe Film kann nicht zweimal hintereinander eingelesen werden!")
    ContinueLoop
    EndIf

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

    $Hier_name_test = $Hier_name

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

    For $i = 0 to 99 Step 3
    GUICtrlSetData($Progress_dateneinlesung , $i)
    Sleep(1)
    Next

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

    Global $label = GUICtrlCreateLabel($Hier_name, 376, 104, 50, 18)

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

    Case $Combo_category

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

    Kategorie()

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

    Case $Tab

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

    Local $tab_name = not $tab_name

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

    GUICtrlDelete($label)
    GUICtrlDelete($Button4)
    GuictrlDelete($Input_category)
    $Hier_name_test = 1

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

    Case $Button4

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

    $Input_name_out=GUICtrlRead($Input_name)
    $Combo_ort_out=GUICtrlRead($Combo_ort)
    $Combo_category_out=GUICtrlRead($Combo_category)

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

    IniWrite($file,$Input_name_out,$Combo_ort_out,$Combo_category_out)

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

    Case Else

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

    EndSwitch

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

    WEnd

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

    Func Kategorie()

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

    GUICtrlDelete($Input_category)
    GUICtrlDelete($Button4)

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

    Switch GUICtrlRead($Combo_category)

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

    Case "Sonstiges"

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

    Global $Input_category = GUICtrlCreateInput("", 16, 290, 177, 22)
    $Button4 = GUICtrlCreateButton("Hinzufügen", 16, 328, 177, 33, $WS_GROUP)

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

    Case "Bitte Auswählen"

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

    Case Else

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

    $Button4 = GUICtrlCreateButton("Hinzufügen", 16, 328, 177, 33, $WS_GROUP)

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

    EndSwitch

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

    EndFunc

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

    Aber das, was dabei herauskommt, ist das:

    Spoiler anzeigen

    Ich würde mich über schnelle Hilfe freuen!

    4 Mal editiert, zuletzt von Emperormatem (12. Februar 2011 um 23:41) aus folgendem Grund: Keine Spoiler... :D

  • Dein Problem liegt an der Variable $button4. Diese Variable hat anfangs keinen Wert. Du prüfst dann in der GUI Schleife ob $nmsg gleich $button4 ist. Wenn also $nmsg 0 ist weil nichts angeklickt wurde wird diese Bedingung als True erkannt.

    Der Case Fall wird permanent ausgeführt und zwar solange bis du im hinzufügen tab auf das Kategorie Dropdown klickst, denn dann wird der Variable $button4 erstmalig ein Wert (Button-ID) zugewiesen was dann dazu führt dass der Case Fall nur noch beim klicken des Buttons zutrifft.

    Als Notlösung könntest du bei der globalen Definierung einfach einen Wert von "-99" zuweisen oder irgendeine andere Zahl, die $nmsg niemals annehmen wird.
    Besser wäre aber, wenn du dein ganzes System überdenkst und anstatt den Button immer wieder zu löschen und neu zu erstellen diesen von anfang an als Button erstellst und sichtbar oder unsichtbar machst je nach Tab und/oder Eingabe/Auswahl. Dies solltest du auch für alle anderen Elemente so handhaben.

    EDIT: Mit deiner Progressbar stimmt im übrigen auch irgendwas nicht, die wird niemals 100%, aber so ganz verstanden hab ich deine Progressfunktion ohnehin noch nicht...

    Einmal editiert, zuletzt von misterspeed (12. Februar 2011 um 14:22)

  • Hallo Emperormatem,

    herzlich willkommen im Forum und viel Spass mit AutoIt.

    Hier kannst du dir die deutsche Hilfe herunterladen.
    Hier gibt es ein AutoIt-Tutorial: http://wiki.autoit.de/wiki/index.php/TutorialSehr hilfreich ist auch das Buch von peethebee

    dein Problem wurde meines Erachtens ja schon von misterspeed gelöst, wenn du es auch als gelöst ansiehst wäre es schön wenn du den Thread auf gelöst setzt. Einfach 1. Beitrag bearbeiten, Präfix (nähe Überschrift) ändern und speichern (absenden)

    mfg autoBert

  • Danke für die schnelle Antwort und die nette Einweisung! (Das tut kenn ich aber schon... :D)

    Zur Progressbar: Sie soll nie auf 100 gehen, weil sie, wenn der "Film" geladen ist noch dableiben soll...

    Und danke wegen deiner Lösung, misterspeed! Ich werd' mein ganzes System danach überarbeiten... (Danke nochmals!)

    Einmal editiert, zuletzt von Emperormatem (12. Februar 2011 um 23:41)

  • ok^^

    Aber gibt es einen visuellen unterschied zwischen 99 und 100? Ich kanns ja rein aus prinzip mal ändern... :D

    Einmal editiert, zuletzt von Emperormatem (12. Februar 2011 um 23:41)