Speichern/Laden Funktioniert nicht richtig ua.


  • 1. Die Inputfelder von den Lagern (wo der Lagerort rein soll) werden ja garnicht mit bedacht (geladen/gespeichert).

    Richtig weil deren Funktion nicht aus deinem Script hervorging, jedenfalls war mir unklar was da rein soll. Bleibt die Frage ob jeder user eigene Orte für seine Lager hat / haben soll oder ob die Orte immer identisch sind, was das input und eine speicherfunktion dafür unsinnig machen würde. Sofern es für jeden User seperat gespeichert werden soll füg eben in jede user sektion der ini noch folgende infos hinzu:


    Code
    Lager1Ort=blah1
    Lager2Ort=blah2
    Lager3Ort=blah3

    und in der save Funktion folgende Änderung:

    [autoit]


    if $mode = "Lager" Then
    $key=$mode & $lagernummer
    IniWrite($DataINI,GUICtrlRead($ComboUser),$key & "Ort",GUICtrlRead($inputLager))
    EndIf
    if $mode = "Schliessfach" Then $key=$mode

    [/autoit]

    Achtung Variablen name geändert und alle Variablen $lagerInput1 bis 3 auskommentiert.
    In der Load Funktion müssen die LagerOrt Werte dann ebenfalls ausgelesen und als inhalt des inputs gesetzt werden, sollte ja kein Problem sein. ;)



    2. Der fehler den du eingebaut hast also wenn ich jetzt nen neuen User erstelle dann wird der Zwar gespeichert aber wenn ich ihn laden will kommt dann deine msgBox "Fehler","ini Datei inkompatibel" ...

    Richtig, weil in der load Funktion überprüft wird ob die ini einträge des Keys der Anzahl der verfügbaren Inputfelder entspricht. Existiert der Key noch nicht oder beinhaltet zuwenig Werte erscheint diese Fehlermeldung, weil er eben nicht gelesen werden konnte. Das kann man jetzt über viele Wege lösen, z.B. indem man die msgbox hinter dem return entfernt, dann besteht der Fehler zwar, aber du wirst nicht darauf aufmerksam gemacht. Der schönere Weg wäre die Keys grundsätzlich beim Speichern anzulegen mit der benötigten Anzahl an senkrechten Strichen. Ist aber auch egal, wichtig ist nur dass die Lesefunktion verlassen wird wenn der Key nicht existiert (return), da es ansonsten zu falschen Adressierungen des Arrays kommt und das ganze Script abstürzt.


    ...und es erstellen sich in der Combo mehrere gleiche User!
    3. Wenn ich einen neuen User in lager eins erstelle und speichere, anschliessend das lager wechsle ihn anwählen will um da dann die einträge zu machen ist er net da!

    Das hängt vermutlich mit der Zeile in der clearGUI Funktion zusammen die ich testweise auskommentiert hatte

    [autoit]

    ;GUICtrlSetData($ComboUser,'')

    [/autoit]

    Ausserdem ist die load Funktion derzeit überhaupt nicht mit dem Dropdown verknüpft, siehe while Schleife. Bedeutet ein Benutzerwechsel lädt keine Daten aus der ini. Das hat derzeit den Grund, weil dir eine Globale Variable fehlt anhand derer dein Script Kenntnis hat auf welcher Seite (Lager1-3 oder Schliessfach) du dich befindest. Ohne diese Angabe kann die Load Funktion nicht aufgerufen werden.


    Lauffähig bedeutet eben nicht fehlerfrei :P
    Vielleicht hab ich ja später oder morgen Zeit da nochmal dran zu basteln, oder du versuchst es selbst, einige Lösungsansätze hab ich dir ja nun genannt.

    Einmal editiert, zuletzt von misterspeed (27. Dezember 2011 um 18:38)

  • So hier eine hoffentlich fehlerfreie Variante:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=Lagerverwaltungstool.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Description=Copyright by Ghostleader & Areneas
    #AutoIt3Wrapper_Res_Fileversion=1.1.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=Copyright by Ghostleader & Areneas
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #cs ------------------------------------
    |
    Author: Ghostleader |
    Script: Version 1.1.0 |
    |
    Script Functionen: |
    - Lagerverwaltungstool = Version_1.1.0 |
    - Bankschließfach = Version_1.1.0 |
    |
    Copyright by Ghostleader @ Areneas |
    #ce ------------------------------------
    #region INCLUDES
    ;------------------------------------------------------------------------------------------
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #endregion INCLUDES
    #region GLOBAL
    ;------------------------------------------------------------------------------------------
    Global $aschliesfach[17][4]
    Global $aLager[13][3]
    Global $userSelection=-1 ; noch wurde garnichts gewählt, programmstart
    Global $DataINI = 'data.ini'
    #endregion GLOBAL
    ;------------------------------------------------------------------------------------------
    #region GUI
    $Form1 = GUICreate("Form1", 940, 550, 192, 5, $WS_BORDER & $WS_POPUP)
    ;GUISetState()
    $Backround = GUICtrlCreatePic("bilder\lager.tgx", 0, 0, 940, 550)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $rightLabel = GUICtrlCreateLabel("Copyright By Ghostleader @ Areneas", 650, 500, 300, 25)
    GUICtrlSetFont(-1, 11, 600)
    GUICtrlSetColor(-1, 000000)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #endregion GUI
    ;------------------------------------------------------------------------------------------
    #region Group´s
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $FrontLagerBank = GUICtrlCreateGroup("", 360, 180, 280, 195)
    $GroupCombo = GUICtrlCreateGroup("", 28, 6, 276, 36)
    $GroupSpeichern = GUICtrlCreateGroup("", 336, 6, 276, 36)
    $Exit = GUICtrlCreateGroup("", 646, 6, 276, 36)
    $LagerLabelGroup = GUICtrlCreateGroup("", 330, 135, 282, 45)
    $LagerGroup = GUICtrlCreateGroup("", 200, 62, 590, 45)
    $LagerSpalte1 = GUICtrlCreateGroup("", 70, 195, 190, 290)
    $LagerSpalte2 = GUICtrlCreateGroup("", 345, 195, 190, 290)
    $LagerSpalte3 = GUICtrlCreateGroup("", 615, 195, 190, 290)
    $BankRahmen1 = GUICtrlCreateGroup("", 30, 112, 190, 370)
    $BankRahmen2 = GUICtrlCreateGroup("", 270, 112, 190, 370)
    $BankRahmen3 = GUICtrlCreateGroup("", 500, 112, 190, 370)
    $BankRahmen4 = GUICtrlCreateGroup("", 730, 112, 190, 370)
    #endregion Group´s
    ;------------------------------------------------------------------------------------------
    #region Button´s
    $Lager1Speichern = GUICtrlCreateButton("Speichern", 350, 16, 110, 22)
    $Lager2Speichern = GUICtrlCreateButton("Speichern", 350, 16, 110, 22)
    $Lager3Speichern = GUICtrlCreateButton("Speichern", 350, 16, 110, 22)
    $SchliessfachSpeichern = GUICtrlCreateButton("Speichern", 350, 16, 110, 22)
    $AccLoschen = GUICtrlCreateButton("Acc Löschen", 490, 16, 110, 22)
    ;------------------------------------------------------------------------------------------
    $SchliessfachOben = GUICtrlCreateButton("Bankschließfach", 660, 16, 110, 22)
    $ButtonExit = GUICtrlCreateButton("Exit", 800, 16, 110, 22)
    ;------------------------------------------------------------------------------------------
    $SchliessfachLoschen = GUICtrlCreateButton("Schliesfach Löschen", 490, 16, 110, 22)
    $LagerOben = GUICtrlCreateButton("Lagerverwaltung", 660, 16, 110, 22)
    ;------------------------------------------------------------------------------------------
    $LagerFront = GUICtrlCreateButton("Lagerverwaltung", 375, 200, 250, 40)
    $SchliessfachFront = GUICtrlCreateButton("Bankschließfach", 375, 260, 250, 40)
    $Schliessen = GUICtrlCreateButton("Programm Schliessen", 375, 320, 250, 40)
    ;------------------------------------------------------------------------------------------
    $Lager1 = GUICtrlCreateButton("LAGER 1", 210, 75, 170, 25)
    $Lager2 = GUICtrlCreateButton("LAGER 2", 410, 75, 170, 25)
    $Lager3 = GUICtrlCreateButton("LAGER 3", 610, 75, 170, 25)
    #endregion Button´s
    ;------------------------------------------------------------------------------------------
    #region Combo´s
    $ComboUser = GUICtrlCreateCombo("", 120, 16, 170, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) ; ein combo reicht völlig
    _setCombo($ComboUser,1) ; NEU: erledigt alles, returned nichts :P, Parameter 1 bedeutet gui initialisierung, wert 1 der ini wird ausgewählt
    #endregion Combo´s
    ;------------------------------------------------------------------------------------------
    #region Label´s
    $LagerLabel1 = GUICtrlCreateLabel("", 340, 150, 100, 25)
    GUICtrlSetFont(-1, 15, 600)
    GUICtrlSetColor(-1, 000000)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label4 = GUICtrlCreateLabel("Account", 42, 17, 80, 19)
    GUICtrlSetFont(-1, 11, 600)
    GUICtrlSetColor(-1, 000000)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #endregion Label´s
    ;---------------------------------------------------------------------------------------------
    #region Input´s
    $inputLager = GUICtrlCreateInput("", 430, 150, 170, 21)
    #endregion Input´s
    ;---------------------------------------------------------------------------------------------
    #region HIDE
    GUICtrlSetState($GroupSpeichern, $GUI_HIDE)
    GUICtrlSetState($Exit, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte1, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte2, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte3, $GUI_HIDE)
    GUICtrlSetState($GroupCombo, $GUI_HIDE)
    GUICtrlSetState($BankRahmen1, $GUI_HIDE)
    GUICtrlSetState($BankRahmen2, $GUI_HIDE)
    GUICtrlSetState($BankRahmen3, $GUI_HIDE)
    GUICtrlSetState($BankRahmen4, $GUI_HIDE)
    GUICtrlSetState($ButtonExit, $GUI_HIDE)
    GUICtrlSetState($Lager1Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager2Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager3Speichern, $GUI_HIDE)
    GUICtrlSetState($SchliessfachOben, $GUI_HIDE)
    GUICtrlSetState($AccLoschen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachLoschen, $GUI_HIDE)
    GUICtrlSetState($LagerOben, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_HIDE)
    GUICtrlSetState($Lager1, $GUI_HIDE)
    GUICtrlSetState($Lager2, $GUI_HIDE)
    GUICtrlSetState($Lager3, $GUI_HIDE)
    GUICtrlSetState($Label4, $GUI_HIDE)
    GUICtrlSetState($inputLager, $GUI_HIDE)
    GUICtrlSetState($ComboUser, $GUI_HIDE)
    GUICtrlSetState($LagerLabelGroup, $GUI_HIDE)
    GUICtrlSetState($LagerGroup, $GUI_HIDE)
    #endregion HIDE
    #region Generat´s
    _generateControls($aLager,"Lager")
    _generateControls($aschliesfach,"Schliessfach")
    #endregion Generat´s

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

    ;---------------------------------------------------------------------------------------------

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

    GUISetState(@SW_SHOW)
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $SchliessfachFront, $SchliessfachOben
    $userSelection = 0
    _ButtonSchliessfach()
    Case $LagerFront, $LagerOben, $Lager1
    $userSelection = 1
    _ButtonLager1()
    Case $Lager2
    $userSelection = 2
    _ButtonLager2()
    Case $Lager3
    $userSelection = 3
    _ButtonLager3()
    Case $ButtonExit, $Schliessen
    Exit
    Case $ComboUser ; umbenannt
    _clearGUI()
    if $userSelection = 0 Then _LoadData($aschliesfach,"Schliessfach",$userSelection)
    if $userSelection > 0 Then _LoadData($aLager,"Lager",$userSelection)
    Case $Lager1Speichern
    _SaveData($aLager,"Lager",1) ; neu
    Case $Lager2Speichern
    _SaveData($aLager,"Lager",2) ; neu
    Case $Lager3Speichern
    _SaveData($aLager,"Lager",3) ; neu
    Case $SchliessfachSpeichern
    _SaveData($aschliesfach,"Schliessfach",0) ; neu
    Case $AccLoschen
    _deleteAccount()
    Case $SchliessfachLoschen
    _deleteSchliessfach()
    EndSwitch
    WEnd
    ;_--------------------------------------------------------------------------------------------
    Func _ButtonSchliessfach()
    ; neu: alle Lager inputs unsichtbar machen

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

    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetState($aLager[$i][$s],$GUI_HIDE)
    Next
    Next

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

    ; neu: alle Schliessfach inputs sichtbar machen

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

    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetState($aschliesfach[$i][$s],$GUI_SHOW)
    Next
    Next

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

    GUICtrlSetState($LagerFront, $GUI_HIDE)
    GUICtrlSetState($SchliessfachFront, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($Lager1, $GUI_HIDE)
    GUICtrlSetState($Lager2, $GUI_HIDE)
    GUICtrlSetState($Lager3, $GUI_HIDE)
    GUICtrlSetState($SchliessfachOben, $GUI_HIDE)
    GUICtrlSetState($FrontLagerBank, $GUI_HIDE)
    GUICtrlSetState($GroupSpeichern, $GUI_SHOW)
    GUICtrlSetState($Exit, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte1, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte2, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte3, $GUI_HIDE)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($AccLoschen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachLoschen, $GUI_SHOW)
    GUICtrlSetState($LagerOben, $GUI_SHOW)
    GUICtrlSetState($GroupCombo, $GUI_SHOW)
    GUICtrlSetState($ButtonExit, $GUI_SHOW)
    GUICtrlSetState($Lager1Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager2Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager3Speichern, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_SHOW)
    GUICtrlSetState($LagerLabel1, $GUI_HIDE)
    GUICtrlSetState($inputLager, $GUI_HIDE)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($ComboUser, $GUI_SHOW)
    GUICtrlSetState($BankRahmen1, $GUI_SHOW)
    GUICtrlSetState($BankRahmen2, $GUI_SHOW)
    GUICtrlSetState($BankRahmen3, $GUI_SHOW)
    GUICtrlSetState($BankRahmen4, $GUI_SHOW)
    GUICtrlSetState($LagerLabelGroup, $GUI_HIDE)
    GUICtrlSetState($LagerGroup, $GUI_HIDE)

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

    _clearGUI(); felder leeren beim wechsel
    _LoadData($aschliesfach,"Schliessfach",0) ; felder neu befüllen
    EndFunc
    ;------------------------------------------------------------------------------------------
    Func _ButtonLager1()

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

    ; neu: alle Schliessfach inputs unsichtbar machen

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

    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetState($aschliesfach[$i][$s],$GUI_HIDE)
    Next
    Next

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

    ; neu: alle Lager inputs sichtbar machen

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

    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetState($aLager[$i][$s],$GUI_SHOW)
    Next
    Next

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

    GUICtrlSetState($SchliessfachLoschen, $GUI_HIDE)
    GUICtrlSetState($LagerOben, $GUI_HIDE)
    GUICtrlSetState($LagerFront, $GUI_HIDE)
    GUICtrlSetState($SchliessfachFront, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($FrontLagerBank, $GUI_HIDE)
    GUICtrlSetState($BankRahmen1, $GUI_HIDE)
    GUICtrlSetState($BankRahmen2, $GUI_HIDE)
    GUICtrlSetState($BankRahmen3, $GUI_HIDE)
    GUICtrlSetState($BankRahmen4, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_HIDE)
    GuiCtrlSetData($LagerLabel1, "Lager 1")
    GUICtrlSetState($GroupCombo, $GUI_SHOW)
    GUICtrlSetState($GroupSpeichern, $GUI_SHOW)
    GUICtrlSetState($Exit, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte1, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte2, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte3, $GUI_SHOW)
    GUICtrlSetState($ButtonExit, $GUI_SHOW)
    GUICtrlSetState($Lager1Speichern, $GUI_SHOW)
    GUICtrlSetState($Lager2Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager3Speichern, $GUI_HIDE)
    GUICtrlSetState($SchliessfachOben, $GUI_SHOW)
    GUICtrlSetState($AccLoschen, $GUI_SHOW)
    GUICtrlSetState($LagerLabel1, $GUI_SHOW)
    GUICtrlSetState($inputLager, $GUI_SHOW)
    GUICtrlSetState($ComboUser, $GUI_SHOW)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($Lager1, $GUI_HIDE)
    GUICtrlSetState($Lager2, $GUI_SHOW)
    GUICtrlSetState($Lager3, $GUI_SHOW)
    GUICtrlSetState($LagerGroup, $GUI_SHOW)
    GUICtrlSetState($LagerLabelGroup, $GUI_SHOW)

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

    _clearGUI(); felder leeren beim wechsel
    _LoadData($aLager,"Lager",1) ; felder neu befüllen
    EndFunc
    ;------------------------------------------------------------------------------------------
    Func _ButtonLager2()

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

    ; neu: alle Schliessfach inputs unsichtbar machen

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

    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetState($aschliesfach[$i][$s],$GUI_HIDE)
    Next
    Next

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

    ; neu: alle Lager inputs sichtbar machen

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

    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetState($aLager[$i][$s],$GUI_SHOW)
    Next
    Next

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

    GUICtrlSetState($SchliessfachLoschen, $GUI_HIDE)
    GUICtrlSetState($LagerOben, $GUI_HIDE)
    GUICtrlSetState($LagerFront, $GUI_HIDE)
    GUICtrlSetState($SchliessfachFront, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($FrontLagerBank, $GUI_HIDE)
    GUICtrlSetState($BankRahmen1, $GUI_HIDE)
    GUICtrlSetState($BankRahmen2, $GUI_HIDE)
    GUICtrlSetState($BankRahmen3, $GUI_HIDE)
    GUICtrlSetState($BankRahmen4, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_HIDE)
    GuiCtrlSetData($LagerLabel1, "Lager 2")
    GUICtrlSetState($GroupCombo, $GUI_SHOW)
    GUICtrlSetState($GroupSpeichern, $GUI_SHOW)
    GUICtrlSetState($Exit, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte1, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte2, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte3, $GUI_SHOW)
    GUICtrlSetState($ButtonExit, $GUI_SHOW)
    GUICtrlSetState($Lager1Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager2Speichern, $GUI_SHOW)
    GUICtrlSetState($Lager3Speichern, $GUI_HIDE)
    GUICtrlSetState($SchliessfachOben, $GUI_SHOW)
    GUICtrlSetState($AccLoschen, $GUI_SHOW)
    GUICtrlSetState($LagerLabel1, $GUI_SHOW)
    GUICtrlSetState($inputLager, $GUI_SHOW)
    GUICtrlSetState($ComboUser, $GUI_SHOW)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($Lager1, $GUI_SHOW)
    GUICtrlSetState($Lager2, $GUI_HIDE)
    GUICtrlSetState($Lager3, $GUI_SHOW)
    GUICtrlSetState($LagerGroup, $GUI_SHOW)
    GUICtrlSetState($LagerLabelGroup, $GUI_SHOW)

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

    _clearGUI(); felder leeren beim wechsel
    _LoadData($aLager,"Lager",2) ; felder neu befüllen
    EndFunc
    ;-------------------------------------------------------------------------------------------------
    Func _ButtonLager3()

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

    ; neu: alle Schliessfach inputs unsichtbar machen

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

    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetState($aschliesfach[$i][$s],$GUI_HIDE)
    Next
    Next

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

    ; neu: alle Lager inputs sichtbar machen

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

    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetState($aLager[$i][$s],$GUI_SHOW)
    Next
    Next

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

    GUICtrlSetState($SchliessfachLoschen, $GUI_HIDE)
    GUICtrlSetState($LagerOben, $GUI_HIDE)
    GUICtrlSetState($LagerFront, $GUI_HIDE)
    GUICtrlSetState($SchliessfachFront, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($FrontLagerBank, $GUI_HIDE)
    GUICtrlSetState($BankRahmen1, $GUI_HIDE)
    GUICtrlSetState($BankRahmen2, $GUI_HIDE)
    GUICtrlSetState($BankRahmen3, $GUI_HIDE)
    GUICtrlSetState($BankRahmen4, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_HIDE)
    GuiCtrlSetData($LagerLabel1, "Lager 3")
    GUICtrlSetState($GroupCombo, $GUI_SHOW)
    GUICtrlSetState($GroupSpeichern, $GUI_SHOW)
    GUICtrlSetState($Exit, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte1, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte2, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte3, $GUI_SHOW)
    GUICtrlSetState($ButtonExit, $GUI_SHOW)
    GUICtrlSetState($Lager1Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager2Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager3Speichern, $GUI_SHOW)
    GUICtrlSetState($SchliessfachOben, $GUI_SHOW)
    GUICtrlSetState($AccLoschen, $GUI_SHOW)
    GUICtrlSetState($LagerLabel1, $GUI_SHOW)
    GUICtrlSetState($inputLager, $GUI_SHOW)
    GUICtrlSetState($ComboUser, $GUI_SHOW)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($Lager1, $GUI_SHOW)
    GUICtrlSetState($Lager2, $GUI_SHOW)
    GUICtrlSetState($Lager3, $GUI_HIDE)
    GUICtrlSetState($LagerGroup, $GUI_SHOW)
    GUICtrlSetState($LagerLabelGroup, $GUI_SHOW)

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

    _clearGUI(); felder leeren beim wechsel
    _LoadData($aLager,"Lager",3) ; felder neu befüllen
    EndFunc
    ;-------------------------------------------------------------------------------------------------

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

    Func _generateControls(ByRef $ArrayToUse,$mode)
    #cs
    Neue Funktion die die generate Funktionen für Lager und Schliessfach ersetzt und alle control ids in 2-Dimensionalen Arrays speichert
    Könnte weiter optimiert werden, da es kaum unterschiede zwischen beiden Modes gibt, wir belassen es jetzt erstmal so...
    #ce

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

    if $mode = "Lager" Then
    For $s=0 to UBound($ArrayToUse,2)-1 ; für alle Spalten
    $Abstand = 2
    if $s=0 then $left=1
    if $s=1 then $left=275
    if $s=2 then $left=545
    For $i = 1 To UBound($ArrayToUse)-1 ; für alle Zeilen
    GUICtrlCreateLabel(' ' ,$left,216+$Abstand,5) ; wozu du die leeren labels brauchst weiß ich ehrlich gesagt nicht
    GUICtrlSetFont(-1, 10, 600) ; label hat keinen inhalt, wozu die Schrift setzen?
    GUICtrlSetColor(-1, 000000) ; ich denke der farbcode ist nicht gültig sollte eher so ausschaun: 0x000000
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $ArrayToUse[$i][$s] = GUICtrlCreateInput("",85+$left,216+$Abstand,160)
    GUICtrlSetState(-1,$GUI_HIDE)
    $Abstand +=21
    Next
    Next
    EndIf

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

    if $mode = "Schliessfach" Then
    For $s=0 to UBound($ArrayToUse,2)-1 ; für alle Spalten
    $Abstand = 2
    if $s=0 Then $left=40
    if $s=1 Then $left=280
    if $s=2 Then $left=510
    if $s=3 Then $left=740
    For $i = 1 To UBound($ArrayToUse)-1 ; für alle Zeilen
    $Fach = GUICtrlCreateLabel(' ' ,$left,216+$Abstand,5) ; wozu du die leeren labels brauchst weiß ich ehrlich gesagt nicht, ausserdem überschreibst du die variable, somit label später nicht mehr änderbar
    GUICtrlSetFont(-1, 10, 600) ; label hat keinen inhalt, wozu die Schrift setzen?
    GUICtrlSetColor(-1, 000000) ; ich denke der farbcode ist nicht gültig sollte eher so ausschaun: 0x000000
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $ArrayToUse[$i][$s] = GUICtrlCreateInput("",5+$left,130+$Abstand,160)
    GUICtrlSetState(-1,$GUI_HIDE)
    $Abstand +=21
    Next
    Next
    EndIf

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

    EndFunc

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

    ;------------------------------------------------------------------------------------------
    #region Load Lagerverwaltung
    Func _LoadData(ByRef $ArrayToUse,$mode,$lagernummer)
    if $mode="Lager" Then
    $key=$mode & $lagernummer
    GUICtrlSetData($inputLager,IniRead($DataINI,GUICtrlRead($ComboUser),$key & "Ort",""))
    EndIf
    if $mode="Schliessfach" Then $key=$mode

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

    $value=IniRead($DataINI,GUICtrlRead($ComboUser),$key,"")
    $aTemp=StringSplit($value,"|") ; erstellt array mit den einzelwerten aus dem string im ini key-value

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

    if (UBound($aTemp)-1)/UBound($ArrayToUse,2) <> UBound($ArrayToUse)-1 Then Return ;MsgBox(0,"Fehler","ini Datei inkompatibel") ; verlässt die Funktion, weil zuviele oder zuwenige einträge in der ini

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

    ; inputs befüllen
    $j=1
    For $s=0 to UBound($ArrayToUse,2)-1
    For $i=1 to UBound($ArrayToUse)-1
    GUICtrlSetData($ArrayToUse[$i][$s],$aTemp[$j])
    $j+=1
    Next
    Next
    EndFunc
    #endregion Load Lagerverwaltung
    ;-------------------------------------------------------------------------------------------
    #region Save Lagerverwaltung
    Func _SaveData(ByRef $ArrayToUse,$mode,$lagernummer)
    if $mode = "Lager" Then
    $key=$mode & $lagernummer
    IniWrite($DataINI,GUICtrlRead($ComboUser),$key & "Ort",GUICtrlRead($inputLager))
    EndIf
    if $mode = "Schliessfach" Then $key=$mode

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

    $value=""
    For $s=0 to UBound($ArrayToUse,2)-1
    For $i=1 to UBound($ArrayToUse)-1
    $value&=GUICtrlRead($ArrayToUse[$i][$s]) & "|"
    Next
    Next

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

    $value=StringTrimRight($value,1) ; entfernt letzten senkrechten Strich
    IniWrite($DataINI,GUICtrlRead($ComboUser),$key,$value)
    EndFunc
    #endregion Save Lagerverwaltung
    ;-------------------------------------------------------------------------------------------
    Func _deleteAccount()
    IniDelete("data.ini", GUICtrlRead($ComboUser))
    _clearGUI()
    EndFunc
    ;------------------------------------------------------------------------------------------
    Func _deleteSchliessfach()
    $sBesitzer = GUICtrlRead($ComboUser)
    $aSections = IniReadSection("data.ini", $sBesitzer) ;sectionname auslesen
    For $i = 1 To $aSections[0][0]
    If StringRegExp($aSections[$i][0], "\d000") Then ;wir überprüfen den Sectionname mit einem regulären Ausdruck (geht auch einfacher mit StringLeft)
    ;~ConsoleWrite($aSections[$i][0] & @crlf)
    IniDelete("data.ini", $sBesitzer, $aSections[$i][0]) ;jeden Key löschen, auf den der reguläre Ausdruck zutrifft
    EndIf
    Next
    _clearGUI()
    EndFunc
    ;------------------------------------------------------------------------------------------
    Func _clearGUI()
    GUICtrlSetData($inputLager,'')

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

    ; neu: alle Schliessfach inputs leer machen

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

    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetData($aschliesfach[$i][$s],"")
    Next
    Next

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

    ; neu: alle Lager inputs leer machen

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

    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetData($aLager[$i][$s],"")
    Next
    Next

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

    _setCombo($ComboUser) ; NEU....
    EndFunc
    ;-------------------------------------------------------------------------------------------
    Func _setCombo($comboToSet,$init=-1) ; wenn init -1 ist soll der derzeit gewählte Eintrag gewählt bleiben, standard Verhalten der Funktion
    Local $Sections = IniReadSectionNames($DataINI)
    if @error then Return -1 ; verlässt die Funktion, da in der ini keine Einträge gefunden wurden
    Local $SectionString = _ArrayToString($Sections,'|',1,UBound($Sections)-1)
    $auswahl=GUICtrlRead($comboToSet)
    GUICtrlSetData($comboToSet,"") ; leert combo bevor Daten neu gesetzt werden
    if $init <> -1 Then
    GUICtrlSetData($comboToSet,$SectionString,$Sections[1]) ; Setzt Werte des combos und wählt Eintrag 1 der ini
    Else
    GUICtrlSetData($comboToSet,$SectionString,$auswahl) ; Setzt Werte des combos und behält ursprüngliche Wahl bei
    EndIf
    ;Return($SectionString) ; entfernt, da die control daten jetzt innerhalb der Funktion gesetzt werden
    EndFunc
    ;-------------------------------------------------------------------------------------------

    [/autoit]

    Was evtl. noch geändert werden sollte ist die Art wie man neue Accounts anlegt. Ein Button zum hinzufügen wäre besser, denn dann kannst du die clearGUI Funktion aufrufen damit der neue Account gleich ein leeres Formular hat. Derzeit müsste man nach der Account Namenseingabe zuerst einen der lagerbuttons drücken damit das Formular leer wird, bei den Schliessfächern wäre das z.B. nicht möglich. Deswegen besser gleich einen Button zum Hinzufügen neuer Accounts.

    Der Fehler mit dem Dropdown wurde im übrigen durch das Ändern der Funktion _setCombo behoben.

    EDIT:
    Die beiden delete Funktionen müssen evtl noch angepasst werden, die hab ich bislang nicht angerührt.

    Einmal editiert, zuletzt von misterspeed (27. Dezember 2011 um 20:33)

  • Hallo misterspeed,

    nochmals vielen vielen DANK für deine großartige Hilfe und Ausdauer mit mir :thumbup: .

    Es funzt alles einwandfrei. Ich habe wie von dir vorgeschlagen den Button zum erstellen neuer Accounts eingefügt!
    Ebenfalls habe ich die Schliessfach Löschen Function dangepasst so dass diese jetzt hier auch wieder richtig geht!
    Ich werde das Thema hier jetzt als gelöst setzen da ja diese Probleme Dank dir gelöst sind!

    Es soll noch eine weitere Function eingebaut werden, die ich aber erstmal selber versuche nun anhand deiner Erläuterungen!
    Wenn ich es doch nicht alleine schaffen sollte mache ich einfach ein neues Thema auf!

    Vielen Dank nochmal bis hierhin!

    Mfg Ghostleader

    PS:
    Hier nochmal das bis hierher fertige Script:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_Outfile=Lagerverwaltungstool.exe
    #AutoIt3Wrapper_UseUpx=n
    #AutoIt3Wrapper_Res_Description=Copyright by Ghostleader & Areneas
    #AutoIt3Wrapper_Res_Fileversion=1.1.0.0
    #AutoIt3Wrapper_Res_LegalCopyright=Copyright by Ghostleader & Areneas
    #AutoIt3Wrapper_Res_Language=1031
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #region INCLUDES
    ;------------------------------------------------------------------------------------------
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <ComboConstants.au3>
    #include <GUIConstantsEx.au3>
    #endregion INCLUDES
    #region GLOBAL
    ;------------------------------------------------------------------------------------------
    Global $aschliesfach[17][4]
    Global $aLager[13][3]
    Global $userSelection=-1 ; noch wurde garnichts gewählt, programmstart
    Global $DataINI = 'data.ini'
    #endregion GLOBAL
    ;------------------------------------------------------------------------------------------
    #region GUI
    $Form1 = GUICreate("Form1", 940, 550, 192, 5, $WS_BORDER & $WS_POPUP)
    ;GUISetState()
    $Backround = GUICtrlCreatePic("bilder\lager.tgx", 0, 0, 940, 550)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $rightLabel = GUICtrlCreateLabel("Copyright By Ghostleader @ Areneas", 650, 500, 300, 25)
    GUICtrlSetFont(-1, 11, 600)
    GUICtrlSetColor(-1, 000000)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #endregion GUI
    ;------------------------------------------------------------------------------------------
    #region Group´s
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $FrontLagerBank = GUICtrlCreateGroup("", 360, 180, 280, 195)
    $GroupCombo = GUICtrlCreateGroup("", 10, 6, 276, 36)
    $GroupAccountNeu = GUICtrlCreateGroup("", 302, 6, 121, 36)
    $GroupSpeichern = GUICtrlCreateGroup("", 440, 6, 235, 36)
    $Exit = GUICtrlCreateGroup("", 685, 6, 238, 36)
    $LagerLabelGroup = GUICtrlCreateGroup("", 330, 135, 282, 45)
    $LagerGroup = GUICtrlCreateGroup("", 200, 62, 590, 45)
    $LagerSpalte1 = GUICtrlCreateGroup("", 70, 195, 190, 290)
    $LagerSpalte2 = GUICtrlCreateGroup("", 345, 195, 190, 290)
    $LagerSpalte3 = GUICtrlCreateGroup("", 615, 195, 190, 290)
    $BankRahmen1 = GUICtrlCreateGroup("", 30, 112, 190, 370)
    $BankRahmen2 = GUICtrlCreateGroup("", 270, 112, 190, 370)
    $BankRahmen3 = GUICtrlCreateGroup("", 500, 112, 190, 370)
    $BankRahmen4 = GUICtrlCreateGroup("", 730, 112, 190, 370)
    #endregion Group´s
    ;------------------------------------------------------------------------------------------
    #region Button´s
    $AccountNeu = GUICtrlCreateButton("Neuer Account", 310, 16, 105, 22)
    $Lager1Speichern = GUICtrlCreateButton("Speichern", 448, 16, 105, 22)
    $Lager2Speichern = GUICtrlCreateButton("Speichern", 448, 16, 105, 22)
    $Lager3Speichern = GUICtrlCreateButton("Speichern", 448, 16, 105, 22)
    $SchliessfachSpeichern = GUICtrlCreateButton("Speichern", 448, 16, 105, 22)
    $AccLoschen = GUICtrlCreateButton("Acc Löschen", 565, 16, 105, 22)
    ;------------------------------------------------------------------------------------------
    $SchliessfachOben = GUICtrlCreateButton("Bankschließfach", 695, 16, 105, 22)
    $ButtonExit = GUICtrlCreateButton("Exit", 810, 16, 105, 22)
    ;------------------------------------------------------------------------------------------
    $SchliessfachLoschen = GUICtrlCreateButton("Schliesfach Löschen", 565, 16, 105, 22)
    $LagerOben = GUICtrlCreateButton("Lagerverwaltung",695, 16, 105, 22)
    ;------------------------------------------------------------------------------------------
    $LagerFront = GUICtrlCreateButton("Lagerverwaltung", 375, 200, 250, 40)
    $SchliessfachFront = GUICtrlCreateButton("Bankschließfach", 375, 260, 250, 40)
    $Schliessen = GUICtrlCreateButton("Programm Schliessen", 375, 320, 250, 40)
    ;------------------------------------------------------------------------------------------
    $Lager1 = GUICtrlCreateButton("LAGER 1", 210, 75, 170, 25)
    $Lager2 = GUICtrlCreateButton("LAGER 2", 410, 75, 170, 25)
    $Lager3 = GUICtrlCreateButton("LAGER 3", 610, 75, 170, 25)
    #endregion Button´s
    ;------------------------------------------------------------------------------------------
    #region Combo
    $ComboUser = GUICtrlCreateCombo("", 100, 16, 170, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL)) ; ein combo reicht völlig
    _setCombo($ComboUser,1) ; NEU: erledigt alles, returned nichts :P, Parameter 1 bedeutet gui initialisierung, wert 1 der ini wird ausgewählt
    #endregion Combo
    ;------------------------------------------------------------------------------------------
    #region Label´s
    $LagerLabel1 = GUICtrlCreateLabel("", 340, 150, 100, 25)
    GUICtrlSetFont(-1, 15, 600)
    GUICtrlSetColor(-1, 000000)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $Label4 = GUICtrlCreateLabel("Account", 22, 17, 80, 19)
    GUICtrlSetFont(-1, 11, 600)
    GUICtrlSetColor(-1, 000000)
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    #endregion Label´s
    ;---------------------------------------------------------------------------------------------
    #region Input
    $inputLager = GUICtrlCreateInput("", 430, 150, 170, 21)
    #endregion Input
    ;---------------------------------------------------------------------------------------------
    #region HIDE
    GUICtrlSetState($GroupSpeichern, $GUI_HIDE)
    GUICtrlSetState($GroupAccountNeu, $GUI_HIDE)
    GUICtrlSetState($Exit, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte1, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte2, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte3, $GUI_HIDE)
    GUICtrlSetState($GroupCombo, $GUI_HIDE)
    GUICtrlSetState($BankRahmen1, $GUI_HIDE)
    GUICtrlSetState($BankRahmen2, $GUI_HIDE)
    GUICtrlSetState($BankRahmen3, $GUI_HIDE)
    GUICtrlSetState($BankRahmen4, $GUI_HIDE)
    GUICtrlSetState($ButtonExit, $GUI_HIDE)
    GUICtrlSetState($Lager1Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager2Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager3Speichern, $GUI_HIDE)
    GUICtrlSetState($SchliessfachOben, $GUI_HIDE)
    GUICtrlSetState($AccLoschen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachLoschen, $GUI_HIDE)
    GUICtrlSetState($LagerOben, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_HIDE)
    GUICtrlSetState($Lager1, $GUI_HIDE)
    GUICtrlSetState($Lager2, $GUI_HIDE)
    GUICtrlSetState($Lager3, $GUI_HIDE)
    GUICtrlSetState($Label4, $GUI_HIDE)
    GUICtrlSetState($inputLager, $GUI_HIDE)
    GUICtrlSetState($ComboUser, $GUI_HIDE)
    GUICtrlSetState($LagerLabelGroup, $GUI_HIDE)
    GUICtrlSetState($LagerGroup, $GUI_HIDE)
    GUICtrlSetState($AccountNeu, $GUI_HIDE)
    #endregion HIDE
    ;----------------------------------------------------------------------------------------------
    #region Generat´s
    _generateControls($aLager,"Lager")
    _generateControls($aschliesfach,"Schliessfach")
    #endregion Generat´s
    GUISetState(@SW_SHOW)
    ;---------------------------------------------------------------------------------------------
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $SchliessfachFront, $SchliessfachOben
    $userSelection = 0
    _ButtonSchliessfach()
    Case $LagerFront, $LagerOben
    $userSelection = 1
    _clearkommplettGUI()
    _ButtonLager1()
    Case $Lager1
    $userSelection = 1
    _ButtonLager1()
    Case $Lager2
    $userSelection = 2
    _ButtonLager2()
    Case $Lager3
    $userSelection = 3
    _ButtonLager3()
    Case $AccountNeu
    _clearkommplettGUI()
    Case $ButtonExit, $Schliessen
    Exit
    Case $ComboUser ; umbenannt
    _clearGUI()
    if $userSelection = 0 Then _LoadData($aschliesfach,"Schliessfach",$userSelection)
    if $userSelection > 0 Then _LoadData($aLager,"Lager",$userSelection)
    Case $Lager1Speichern
    _SaveData($aLager,"Lager",1) ; neu
    Case $Lager2Speichern
    _SaveData($aLager,"Lager",2) ; neu
    Case $Lager3Speichern
    _SaveData($aLager,"Lager",3) ; neu
    Case $SchliessfachSpeichern
    _SaveData($aschliesfach,"Schliessfach",0) ; neu
    Case $AccLoschen
    _deleteAccount()
    Case $SchliessfachLoschen
    _deleteSchliessfach()
    EndSwitch
    WEnd
    ;_--------------------------------------------------------------------------------------------
    Func _ButtonSchliessfach()
    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetState($aLager[$i][$s],$GUI_HIDE)
    Next
    Next
    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetState($aschliesfach[$i][$s],$GUI_SHOW)
    Next
    Next
    _clearkommplettGUI()
    GUICtrlSetState($GroupAccountNeu, $GUI_HIDE)
    GUICtrlSetState($AccountNeu, $GUI_HIDE)
    GUICtrlSetState($LagerFront, $GUI_HIDE)
    GUICtrlSetState($SchliessfachFront, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($Lager1, $GUI_HIDE)
    GUICtrlSetState($Lager2, $GUI_HIDE)
    GUICtrlSetState($Lager3, $GUI_HIDE)
    GUICtrlSetState($SchliessfachOben, $GUI_HIDE)
    GUICtrlSetState($FrontLagerBank, $GUI_HIDE)
    GUICtrlSetState($GroupSpeichern, $GUI_SHOW)
    GUICtrlSetState($Exit, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte1, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte2, $GUI_HIDE)
    GUICtrlSetState($LagerSpalte3, $GUI_HIDE)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($AccLoschen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachLoschen, $GUI_SHOW)
    GUICtrlSetState($LagerOben, $GUI_SHOW)
    GUICtrlSetState($GroupCombo, $GUI_SHOW)
    GUICtrlSetState($ButtonExit, $GUI_SHOW)
    GUICtrlSetState($Lager1Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager2Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager3Speichern, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_SHOW)
    GUICtrlSetState($LagerLabel1, $GUI_HIDE)
    GUICtrlSetState($inputLager, $GUI_HIDE)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($ComboUser, $GUI_SHOW)
    GUICtrlSetState($BankRahmen1, $GUI_SHOW)
    GUICtrlSetState($BankRahmen2, $GUI_SHOW)
    GUICtrlSetState($BankRahmen3, $GUI_SHOW)
    GUICtrlSetState($BankRahmen4, $GUI_SHOW)
    GUICtrlSetState($LagerLabelGroup, $GUI_HIDE)
    GUICtrlSetState($LagerGroup, $GUI_HIDE)
    _clearGUI(); felder leeren beim wechsel
    _LoadData($aschliesfach,"Schliessfach",0) ; felder neu befüllen
    EndFunc
    ;------------------------------------------------------------------------------------------
    Func _ButtonLager1()
    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetState($aschliesfach[$i][$s],$GUI_HIDE)
    Next
    Next
    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetState($aLager[$i][$s],$GUI_SHOW)
    Next
    Next
    GUICtrlSetState($SchliessfachLoschen, $GUI_HIDE)
    GUICtrlSetState($LagerOben, $GUI_HIDE)
    GUICtrlSetState($LagerFront, $GUI_HIDE)
    GUICtrlSetState($SchliessfachFront, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($FrontLagerBank, $GUI_HIDE)
    GUICtrlSetState($BankRahmen1, $GUI_HIDE)
    GUICtrlSetState($BankRahmen2, $GUI_HIDE)
    GUICtrlSetState($BankRahmen3, $GUI_HIDE)
    GUICtrlSetState($BankRahmen4, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_HIDE)
    GuiCtrlSetData($LagerLabel1, "Lager 1")
    GUICtrlSetState($GroupAccountNeu, $GUI_SHOW)
    GUICtrlSetState($AccountNeu, $GUI_SHOW)
    GUICtrlSetState($GroupCombo, $GUI_SHOW)
    GUICtrlSetState($GroupSpeichern, $GUI_SHOW)
    GUICtrlSetState($Exit, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte1, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte2, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte3, $GUI_SHOW)
    GUICtrlSetState($ButtonExit, $GUI_SHOW)
    GUICtrlSetState($Lager1Speichern, $GUI_SHOW)
    GUICtrlSetState($Lager2Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager3Speichern, $GUI_HIDE)
    GUICtrlSetState($SchliessfachOben, $GUI_SHOW)
    GUICtrlSetState($AccLoschen, $GUI_SHOW)
    GUICtrlSetState($LagerLabel1, $GUI_SHOW)
    GUICtrlSetState($inputLager, $GUI_SHOW)
    GUICtrlSetState($ComboUser, $GUI_SHOW)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($Lager1, $GUI_HIDE)
    GUICtrlSetState($Lager2, $GUI_SHOW)
    GUICtrlSetState($Lager3, $GUI_SHOW)
    GUICtrlSetState($LagerGroup, $GUI_SHOW)
    GUICtrlSetState($LagerLabelGroup, $GUI_SHOW)
    _clearGUI(); felder leeren beim wechsel
    _LoadData($aLager,"Lager",1) ; felder neu befüllen
    EndFunc
    ;------------------------------------------------------------------------------------------
    Func _ButtonLager2()
    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetState($aschliesfach[$i][$s],$GUI_HIDE)
    Next
    Next
    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetState($aLager[$i][$s],$GUI_SHOW)
    Next
    Next
    GUICtrlSetState($SchliessfachLoschen, $GUI_HIDE)
    GUICtrlSetState($LagerOben, $GUI_HIDE)
    GUICtrlSetState($LagerFront, $GUI_HIDE)
    GUICtrlSetState($SchliessfachFront, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($FrontLagerBank, $GUI_HIDE)
    GUICtrlSetState($BankRahmen1, $GUI_HIDE)
    GUICtrlSetState($BankRahmen2, $GUI_HIDE)
    GUICtrlSetState($BankRahmen3, $GUI_HIDE)
    GUICtrlSetState($BankRahmen4, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_HIDE)
    GuiCtrlSetData($LagerLabel1, "Lager 2")
    GUICtrlSetState($GroupAccountNeu, $GUI_SHOW)
    GUICtrlSetState($AccountNeu, $GUI_SHOW)
    GUICtrlSetState($GroupCombo, $GUI_SHOW)
    GUICtrlSetState($GroupSpeichern, $GUI_SHOW)
    GUICtrlSetState($Exit, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte1, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte2, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte3, $GUI_SHOW)
    GUICtrlSetState($ButtonExit, $GUI_SHOW)
    GUICtrlSetState($Lager1Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager2Speichern, $GUI_SHOW)
    GUICtrlSetState($Lager3Speichern, $GUI_HIDE)
    GUICtrlSetState($SchliessfachOben, $GUI_SHOW)
    GUICtrlSetState($AccLoschen, $GUI_SHOW)
    GUICtrlSetState($LagerLabel1, $GUI_SHOW)
    GUICtrlSetState($inputLager, $GUI_SHOW)
    GUICtrlSetState($ComboUser, $GUI_SHOW)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($Lager1, $GUI_SHOW)
    GUICtrlSetState($Lager2, $GUI_HIDE)
    GUICtrlSetState($Lager3, $GUI_SHOW)
    GUICtrlSetState($LagerGroup, $GUI_SHOW)
    GUICtrlSetState($LagerLabelGroup, $GUI_SHOW)
    _clearGUI(); felder leeren beim wechsel
    _LoadData($aLager,"Lager",2) ; felder neu befüllen
    EndFunc
    ;-------------------------------------------------------------------------------------------------
    Func _ButtonLager3()
    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetState($aschliesfach[$i][$s],$GUI_HIDE)
    Next
    Next
    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetState($aLager[$i][$s],$GUI_SHOW)
    Next
    Next
    GUICtrlSetState($SchliessfachLoschen, $GUI_HIDE)
    GUICtrlSetState($LagerOben, $GUI_HIDE)
    GUICtrlSetState($LagerFront, $GUI_HIDE)
    GUICtrlSetState($SchliessfachFront, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($FrontLagerBank, $GUI_HIDE)
    GUICtrlSetState($BankRahmen1, $GUI_HIDE)
    GUICtrlSetState($BankRahmen2, $GUI_HIDE)
    GUICtrlSetState($BankRahmen3, $GUI_HIDE)
    GUICtrlSetState($BankRahmen4, $GUI_HIDE)
    GUICtrlSetState($Schliessen, $GUI_HIDE)
    GUICtrlSetState($SchliessfachSpeichern, $GUI_HIDE)
    GuiCtrlSetData($LagerLabel1, "Lager 3")
    GUICtrlSetState($GroupAccountNeu, $GUI_SHOW)
    GUICtrlSetState($AccountNeu, $GUI_SHOW)
    GUICtrlSetState($GroupCombo, $GUI_SHOW)
    GUICtrlSetState($GroupSpeichern, $GUI_SHOW)
    GUICtrlSetState($Exit, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte1, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte2, $GUI_SHOW)
    GUICtrlSetState($LagerSpalte3, $GUI_SHOW)
    GUICtrlSetState($ButtonExit, $GUI_SHOW)
    GUICtrlSetState($Lager1Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager2Speichern, $GUI_HIDE)
    GUICtrlSetState($Lager3Speichern, $GUI_SHOW)
    GUICtrlSetState($SchliessfachOben, $GUI_SHOW)
    GUICtrlSetState($AccLoschen, $GUI_SHOW)
    GUICtrlSetState($LagerLabel1, $GUI_SHOW)
    GUICtrlSetState($inputLager, $GUI_SHOW)
    GUICtrlSetState($ComboUser, $GUI_SHOW)
    GUICtrlSetState($Label4, $GUI_SHOW)
    GUICtrlSetState($Lager1, $GUI_SHOW)
    GUICtrlSetState($Lager2, $GUI_SHOW)
    GUICtrlSetState($Lager3, $GUI_HIDE)
    GUICtrlSetState($LagerGroup, $GUI_SHOW)
    GUICtrlSetState($LagerLabelGroup, $GUI_SHOW)
    _clearGUI(); felder leeren beim wechsel
    _LoadData($aLager,"Lager",3) ; felder neu befüllen
    EndFunc
    ;-------------------------------------------------------------------------------------------------
    Func _generateControls(ByRef $ArrayToUse,$mode)
    #cs
    Neue Funktion die die generate Funktionen für Lager und Schliessfach ersetzt und alle control ids in 2-Dimensionalen Arrays speichert
    Könnte weiter optimiert werden, da es kaum unterschiede zwischen beiden Modes gibt, wir belassen es jetzt erstmal so...
    #ce

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

    if $mode = "Lager" Then
    For $s=0 to UBound($ArrayToUse,2)-1 ; für alle Spalten
    $Abstand = 2
    if $s=0 then $left=1
    if $s=1 then $left=275
    if $s=2 then $left=545
    For $i = 1 To UBound($ArrayToUse)-1 ; für alle Zeilen
    GUICtrlCreateLabel(' ' ,$left,216+$Abstand,5) ; wozu du die leeren labels brauchst weiß ich ehrlich gesagt nicht
    GUICtrlSetFont(-1, 10, 600) ; label hat keinen inhalt, wozu die Schrift setzen?
    GUICtrlSetColor(-1, 000000) ; ich denke der farbcode ist nicht gültig sollte eher so ausschaun: 0x000000
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $ArrayToUse[$i][$s] = GUICtrlCreateInput("",85+$left,216+$Abstand,160)
    GUICtrlSetState(-1,$GUI_HIDE)
    $Abstand +=21
    Next
    Next
    EndIf
    ;---------------------------------------------------------------------------------------------------
    if $mode = "Schliessfach" Then
    For $s=0 to UBound($ArrayToUse,2)-1 ; für alle Spalten
    $Abstand = 2
    if $s=0 Then $left=40
    if $s=1 Then $left=280
    if $s=2 Then $left=510
    if $s=3 Then $left=740
    For $i = 1 To UBound($ArrayToUse)-1 ; für alle Zeilen
    $Fach = GUICtrlCreateLabel(' ' ,$left,216+$Abstand,5) ; wozu du die leeren labels brauchst weiß ich ehrlich gesagt nicht, ausserdem überschreibst du die variable, somit label später nicht mehr änderbar
    GUICtrlSetFont(-1, 10, 600) ; label hat keinen inhalt, wozu die Schrift setzen?
    GUICtrlSetColor(-1, 000000) ; ich denke der farbcode ist nicht gültig sollte eher so ausschaun: 0x000000
    GUICtrlSetBkColor(-1, $GUI_BKCOLOR_TRANSPARENT)
    $ArrayToUse[$i][$s] = GUICtrlCreateInput("",5+$left,130+$Abstand,160)
    GUICtrlSetState(-1,$GUI_HIDE)
    $Abstand +=21
    Next
    Next
    EndIf
    EndFunc
    ;------------------------------------------------------------------------------------------
    #region Load Lagerverwaltung
    Func _LoadData(ByRef $ArrayToUse,$mode,$lagernummer)
    if $mode="Lager" Then
    $key=$mode & $lagernummer
    GUICtrlSetData($inputLager,IniRead($DataINI,GUICtrlRead($ComboUser),$key & "Ort",""))
    EndIf
    if $mode="Schliessfach" Then $key=$mode
    $value=IniRead($DataINI,GUICtrlRead($ComboUser),$key,"")
    $aTemp=StringSplit($value,"|") ; erstellt array mit den einzelwerten aus dem string im ini key-value
    if (UBound($aTemp)-1)/UBound($ArrayToUse,2) <> UBound($ArrayToUse)-1 Then Return ;MsgBox(0,"Fehler","ini Datei inkompatibel") ; verlässt die Funktion, weil zuviele oder zuwenige einträge in der ini
    ; inputs befüllen
    $j=1
    For $s=0 to UBound($ArrayToUse,2)-1
    For $i=1 to UBound($ArrayToUse)-1
    GUICtrlSetData($ArrayToUse[$i][$s],$aTemp[$j])
    $j+=1
    Next
    Next
    EndFunc
    #endregion Load Lagerverwaltung
    ;-------------------------------------------------------------------------------------------
    #region Save Lagerverwaltung
    Func _SaveData(ByRef $ArrayToUse,$mode,$lagernummer)
    if $mode = "Lager" Then
    $key=$mode & $lagernummer
    IniWrite($DataINI,GUICtrlRead($ComboUser),$key & "Ort",GUICtrlRead($inputLager))
    EndIf
    if $mode = "Schliessfach" Then $key=$mode
    $value=""
    For $s=0 to UBound($ArrayToUse,2)-1
    For $i=1 to UBound($ArrayToUse)-1
    $value&=GUICtrlRead($ArrayToUse[$i][$s]) & "|"
    Next
    Next
    $value=StringTrimRight($value,1) ; entfernt letzten senkrechten Strich
    IniWrite($DataINI,GUICtrlRead($ComboUser),$key,$value)
    _clearGUI()
    EndFunc
    #endregion Save Lagerverwaltung
    ;-------------------------------------------------------------------------------------------
    Func _deleteAccount()
    IniDelete("data.ini", GUICtrlRead($ComboUser))
    _clearGUI()
    EndFunc
    ;------------------------------------------------------------------------------------------
    Func _deleteSchliessfach()
    $sBesitzer = GUICtrlRead($ComboUser)
    $aSections = IniReadSection("data.ini", $sBesitzer) ;sectionname auslesen
    For $i = 1 To $aSections[0][0]
    If StringRegExp($aSections[$i][0], "Schliessfach") Then ;wir überprüfen den Sectionname mit einem regulären Ausdruck (geht auch einfacher mit StringLeft)
    ;~ConsoleWrite($aSections[$i][0] & @crlf)
    IniDelete("data.ini", $sBesitzer, $aSections[$i][0]) ;jeden Key löschen, auf den der reguläre Ausdruck zutrifft
    EndIf
    Next
    _clearGUI()
    EndFunc
    ;------------------------------------------------------------------------------------------
    Func _clearGUI()
    GUICtrlSetData($inputLager,'')
    ; neu: alle Schliessfach inputs leer machen
    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetData($aschliesfach[$i][$s],"")
    Next
    Next
    ; neu: alle Lager inputs leer machen
    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetData($aLager[$i][$s],"")
    Next
    Next
    _setCombo($ComboUser) ; NEU....
    EndFunc
    ;------------------------------------------------------------------------------------------
    Func _clearkommplettGUI()
    GUICtrlSetData($inputLager,'')
    GUICtrlSetData($ComboUser,"")
    For $s=0 to UBound($aschliesfach,2)-1
    For $i=1 To UBound($aschliesfach)-1
    GUICtrlSetData($aschliesfach[$i][$s],"")
    Next
    Next
    For $s=0 to UBound($aLager,2)-1
    For $i=1 To UBound($aLager)-1
    GUICtrlSetData($aLager[$i][$s],"")
    Next
    Next
    EndFunc
    ;-------------------------------------------------------------------------------------------
    Func _setCombo($comboToSet,$init=-1) ; wenn init -1 ist soll der derzeit gewählte Eintrag gewählt bleiben, standard Verhalten der Funktion
    Local $Sections = IniReadSectionNames($DataINI)
    if @error then Return -1 ; verlässt die Funktion, da in der ini keine Einträge gefunden wurden
    Local $SectionString = _ArrayToString($Sections,'|',1,UBound($Sections)-1)
    $auswahl=GUICtrlRead($comboToSet)
    GUICtrlSetData($comboToSet,"") ; leert combo bevor Daten neu gesetzt werden
    if $init <> -1 Then
    GUICtrlSetData($comboToSet,$SectionString,$Sections[1]) ; Setzt Werte des combos und wählt Eintrag 1 der ini
    Else
    GUICtrlSetData($comboToSet,$SectionString,$auswahl) ; Setzt Werte des combos und behält ursprüngliche Wahl bei
    EndIf
    ;Return($SectionString) ; entfernt, da die control daten jetzt innerhalb der Funktion gesetzt werden
    EndFunc
    ;-------------------------------------------------------------------------------------------

    [/autoit]

    Einmal editiert, zuletzt von Ghostleader (28. Dezember 2011 um 00:00)