Mein erstes kleines Skript =)

  • Guten Abend Leute =)

    Hab soeben mein erstes kleines Skript fertiggestellt.

    Beschreibung:

    Kleine Datenbank zur speicherung von Artikeln, die man auf Verkaufsportalen anbieten will.

    Hoffe auf Feedback ;)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <ListViewConstants.au3>
    #include <WindowsConstants.au3>
    #Include <GuiListView.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form_Add = GUICreate("Hinzufügen", 196, 231, 192, 124)
    $Input1_Add = GUICtrlCreateInput("", 36, 24, 121, 21)
    $Input2_Add = GUICtrlCreateInput("", 36, 72, 121, 21)
    $Input3_Add = GUICtrlCreateInput("", 36, 120, 121, 21)
    $Input4_Add = GUICtrlCreateInput("", 36, 165, 121, 21)
    $Button1_Add = GUICtrlCreateButton("Add", 36, 192, 43, 25, $WS_GROUP)
    $Button2_Add = GUICtrlCreateButton("Cancel", 84, 192, 75, 25, $WS_GROUP)
    $Label1_Add = GUICtrlCreateLabel("Artikelbeschreibung:", 36, 8, 100, 17)
    $Label2_Add = GUICtrlCreateLabel("Anzahl verfügbare Artikel:", 36, 56, 125, 17)
    $Label3_Add = GUICtrlCreateLabel("Anzahl verkaufte Artikel:", 36, 104, 119, 17)
    $Label4_Add = GUICtrlCreateLabel("Interne Artikelnummer:", 36, 152, 109, 17)
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

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

    #Region ### START Koda GUI section ### Form=
    $Form_bearb = GUICreate("Bearbeiten", 196, 231, 192, 124)
    $Input1_bearb = GUICtrlCreateInput("", 36, 24, 121, 21)
    $Input2_bearb = GUICtrlCreateInput("", 36, 72, 121, 21)
    $Input3_bearb = GUICtrlCreateInput("", 36, 120, 121, 21)
    $Input4_bearb = GUICtrlCreateInput("", 36, 165, 121, 21)
    $Button1_bearb = GUICtrlCreateButton("Ok", 36, 192, 43, 25, $WS_GROUP)
    $Button2_bearb = GUICtrlCreateButton("Cancel", 84, 192, 75, 25, $WS_GROUP)
    $Label1_bearb = GUICtrlCreateLabel("Artikelbeschreibung:", 36, 8, 100, 17)
    $Label2_bearb = GUICtrlCreateLabel("Anzahl verfügbare Artikel:", 36, 56, 125, 17)
    $Label3_bearb = GUICtrlCreateLabel("Anzahl verkaufte Artikel:", 36, 104, 119, 17)
    $Label4_bearb = GUICtrlCreateLabel("Interne Artikelnummer:", 36, 152, 109, 17)
    GUISetState(@SW_HIDE)
    #EndRegion ### END Koda GUI section ###

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

    #Region ### START Koda GUI section ### Form=
    $Form_Main = GUICreate("Verkaufsdatenbank", 620, 447, 192, 124)
    $ListView1 = GUICtrlCreateListView("Artikelbeschreibung|Verf.|Verk.|Rest|Int. Art-Nr.", 0, 0, 619, 414)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 420)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 40)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 40)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 40)
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 75)
    $Button1 = GUICtrlCreateButton("Hinzufügen", 0, 416, 75, 25, $WS_GROUP)
    $Button2 = GUICtrlCreateButton("Bearbeiten", 80, 416, 75, 25, $WS_GROUP)
    $Button3 = GUICtrlCreateButton("Löschen", 160, 416, 75, 25, $WS_GROUP)
    $Button4 = GUICtrlCreateButton("Beenden", 544, 416, 75, 25, $WS_GROUP)
    $Button5 = GUICtrlCreateButton("Speichern", 464, 416, 75, 25, $WS_GROUP)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    if FileExists(@ScriptDir&"\Data.ini") Then
    $numItems=0
    Do
    $1=IniRead(@ScriptDir&"\Data.ini","Description",$numItems,"")
    $2=IniRead(@ScriptDir&"\Data.ini","Content",$numItems,"")
    $3=IniRead(@ScriptDir&"\Data.ini","Sold",$numItems,"")
    $4=IniRead(@ScriptDir&"\Data.ini","Remain",$numItems,"")
    $5=IniRead(@ScriptDir&"\Data.ini","Art-Nr.",$numItems,"")
    _GUICtrlListView_AddItem($listview1,$1)
    _GUICtrlListView_SetItemText($listview1,$numItems,$2,1)
    _GUICtrlListView_SetItemText($listview1,$numItems,$3,2)
    _GUICtrlListView_SetItemText($listview1,$numItems,$4,3)
    _GUICtrlListView_SetItemText($listview1,$numItems,$5,4)
    $numItems = $numItems + 1
    Until IniRead(@scriptdir&"\data.ini","Description",$numItems,"")=""
    EndIf

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

    Func Beenden()
    $msgExit=MsgBox(36,"Wirklich beenden?", "Wollen sie das Programm wirklich beenden?")
    Switch $msgExit
    Case 6
    Exit
    Case 7
    sleep(100)
    EndSwitch
    EndFunc
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Call("Beenden")
    Case $Button4
    Call("Beenden")
    Case $Button1
    GUISetState(@SW_HIDE,$Form_Main)
    GUISetState(@SW_SHOW,$Form_Add)
    Case $Button2_Add
    GUISetState(@SW_HIDE,$Form_Add)
    GUISetState(@SW_SHOW,$Form_Main)
    Case $Button1_Add
    $inpDesc=GUICtrlRead($Input1_Add)
    if $inpDesc = "" Then
    TrayTip("Hinweis","Bitte geben sie eine Artikelbeschreibung ein!",5)
    ContinueLoop
    EndIf
    $inpNum=GUICtrlRead($Input2_Add)
    if StringIsInt($inpnum)=0 Then
    TrayTip("Hinweis","Die Verfügbare Artikelzahl ist keine Zahlenfolge!",5)
    ContinueLoop
    EndIf
    $inpNumSold=GUICtrlRead($Input3_Add)
    if StringIsInt($inpNumSold)=0 Then
    TrayTip("Hinweis","Die Verkaufte Artikelzahl ist keine Zahlenfolge!",5)
    ContinueLoop
    EndIf
    $comRemain=($inpNum)-($inpNumSold)
    if $comRemain < 0 Then
    TrayTip("Hinweis", "Überprüfe deine Eingaben, Restbestand kann nicht negativ sein!",5)
    ContinueLoop
    EndIf
    $inpIAN=GUICtrlRead($Input4_Add)
    _GUICtrlListView_AddItem($ListView1,$inpDesc)
    _GUICtrlListView_AddSubItem($ListView1,_GUICtrlListView_GetItemCount($ListView1)-1,$inpNum,1)
    _GUICtrlListView_AddSubItem($ListView1,_GUICtrlListView_GetItemCount($ListView1)-1,$inpNumSold,2)
    _GUICtrlListView_AddSubItem($ListView1,_GUICtrlListView_GetItemCount($ListView1)-1,$inpIAN,4)
    _GUICtrlListView_AddSubItem($ListView1,_GUICtrlListView_GetItemCount($ListView1)-1,$comRemain,3)
    GUISetState(@SW_HIDE,$Form_Add)
    GUISetState(@SW_SHOW,$Form_Main)
    Case $Button2
    $Index=_GUICtrlListView_GetSelectedIndices($ListView1,True)
    If $index[0] = 0 Then
    traytip("Hinweis","Kein Eintrag ausgewählt!",5)
    ContinueLoop
    EndIf
    $inpDesc=_GUICtrlListView_GetItemText($listview1,$Index[1])
    $inpNum=_GUICtrlListView_GetItemText($listview1,$index[1],1)
    $inpNumSold=_GUICtrlListView_GetItemText($listview1,$index[1],2)
    $inpIAN=_GUICtrlListView_GetItemText($listview1,$index[1],4)
    GUICtrlSetData($Input1_bearb,$inpDesc)
    GUICtrlSetData($Input2_bearb,$inpNum)
    GUICtrlSetData($Input3_bearb,$inpNumSold)
    GUICtrlSetData($input4_bearb,$inpIAN)
    GUISetState(@SW_HIDE,$Form_Main)
    GUISetState(@SW_SHOW,$Form_bearb)
    Case $Button2_bearb
    GUISetState(@SW_HIDE,$Form_bearb)
    GUISetState(@SW_SHOW,$Form_Main)
    GUICtrlSetData($Input1_bearb,"")
    GUICtrlSetData($Input2_bearb,"")
    GUICtrlSetData($Input3_bearb,"")
    Case $Button1_bearb
    $inpDesc=GUICtrlRead($Input1_bearb)
    if $inpDesc = "" Then
    TrayTip("Hinweis","Bitte geben sie eine Artikelbeschreibung ein!",5)
    ContinueLoop
    EndIf
    $inpNum=GUICtrlRead($Input2_bearb)
    if StringIsInt($inpnum)=0 Then
    TrayTip("Hinweis","Die Verfügbare Artikelzahl ist keine Zahlenfolge!",5)
    ContinueLoop
    EndIf
    $inpNumSold=GUICtrlRead($Input3_bearb)
    if StringIsInt($inpNumSold)=0 Then
    TrayTip("Hinweis","Die Verkaufte Artikelzahl ist keine Zahlenfolge!",5)
    ContinueLoop
    EndIf
    $comRemain=(GUICtrlRead($Input2_bearb)-GUICtrlRead($Input3_bearb))
    if $comRemain < 0 Then
    TrayTip("Hinweis", "Überprüfe deine Eingaben, Restbestand kann nicht negativ sein!",5)
    ContinueLoop
    EndIf
    _GUICtrlListView_SetItemText($listview1,$Index[1],GUICtrlRead($Input1_bearb))
    _GUICtrlListView_SetItemText($listview1,$Index[1],GUICtrlRead($Input2_bearb),1)
    _GUICtrlListView_SetItemText($listview1,$Index[1],GUICtrlRead($Input3_bearb),2)
    _GUICtrlListView_SetItemText($listview1,$Index[1],GUICtrlRead($Input4_bearb),4)
    _GUICtrlListView_SetItemText($listview1,$Index[1],$comRemain,3)
    GUISetState(@SW_HIDE,$Form_bearb)
    GUISetState(@SW_SHOW,$Form_Main)
    Case $Button3
    $Index=_GUICtrlListView_GetSelectedIndices($ListView1,True)
    If $index[0] = 0 Then
    traytip("Hinweis","Kein Eintrag ausgewählt!",5)
    ContinueLoop
    EndIf
    $msgDelete=MsgBox(36,"Wirklich löschen?","Wollen sie den ausgewählten Eintrag wirklich löschen?")
    Switch $msgDelete
    Case 6
    _GUICtrlListView_DeleteItemsSelected(GUICtrlGetHandle($listview1))
    Case 7
    ContinueLoop
    EndSwitch
    Case $Button5
    $numItems = 0
    If _GUICtrlListView_GetItemCount($listview1)="-1" Then
    TrayTip("Hinweis","Keine Einträge vorhanden!",5)
    ContinueLoop
    EndIf
    Do
    IniWrite(@ScriptDir&"\Data.ini","Description",$numItems,_GUICtrlListView_GetItemText($listview1,$numItems))
    IniWrite(@ScriptDir&"\Data.ini","Content",$numItems,_GUICtrlListView_GetItemText($listview1,$numItems,1))
    IniWrite(@ScriptDir&"\Data.ini","Sold",$numItems,_GUICtrlListView_GetItemText($listview1,$numItems,2))
    IniWrite(@ScriptDir&"\Data.ini","Remain",$numItems,_GUICtrlListView_GetItemText($listview1,$numItems,3))
    IniWrite(@ScriptDir&"\Data.ini","Art-Nr.",$numItems,_GUICtrlListView_GetItemText($listview1,$numItems,4))
    $numItems = $numItems + 1
    Until $numItems=_GUICtrlListView_GetItemCount($listview1)+1
    EndSwitch
    WEnd

    [/autoit] [autoit][/autoit] [autoit][/autoit]
    • Offizieller Beitrag

    Du kannst den Code aber um einiges kürzen, wenn du Arrays verwendest!


    Mag das meist der Fall sein - hier trifft es nicht unbedingt zu. Die Controls in Arrays zu packen führt zur Einsparung von nur einigen wenigen Skriptzeilen und würde aufgrund des Aufbaus nicht unbedingt die Lesbarkeit erhöhen. ;)

    Was ich empfehelen würde:
    Eine GUI einsparen und Titel und Aktionen nach Bedarf zuordnen.

    Spoiler anzeigen
    [autoit]

    ;~ #Region ### START Koda GUI section ### Form= ===> Identisch zu Form_Add, einfach Umbenennen bei Bedarf und und nach Titel die Aktionen zuordnen (Add oder Bearb.)
    ;~ $Form_bearb = GUICreate("Bearbeiten", 196, 231, 192, 124)
    ;~ $Input1_bearb = GUICtrlCreateInput("", 36, 24, 121, 21)
    ;~ $Input2_bearb = GUICtrlCreateInput("", 36, 72, 121, 21)
    ;~ $Input3_bearb = GUICtrlCreateInput("", 36, 120, 121, 21)
    ;~ $Input4_bearb = GUICtrlCreateInput("", 36, 165, 121, 21)
    ;~ $Button1_bearb = GUICtrlCreateButton("Ok", 36, 192, 43, 25, $WS_GROUP)
    ;~ $Button2_bearb = GUICtrlCreateButton("Cancel", 84, 192, 75, 25, $WS_GROUP)
    ;~ $Label1_bearb = GUICtrlCreateLabel("Artikelbeschreibung:", 36, 8, 100, 17)
    ;~ $Label2_bearb = GUICtrlCreateLabel("Anzahl verfügbare Artikel:", 36, 56, 125, 17)
    ;~ $Label3_bearb = GUICtrlCreateLabel("Anzahl verkaufte Artikel:", 36, 104, 119, 17)
    ;~ $Label4_bearb = GUICtrlCreateLabel("Interne Artikelnummer:", 36, 152, 109, 17)
    ;~ GUISetState(@SW_HIDE)

    [/autoit]


    Die Spaltenbreitenzuordnung könnte man in einer Schleife lösen, bringt aber auch keine große Einsparung.

    Spoiler anzeigen
    [autoit]

    Local $aWidth[420,40,40,40,75]
    For $i = 0 To 4
    GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, $i, $aWidth[$i])
    Next
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 0, 420)
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 1, 40)
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 2, 40)
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 3, 40)
    ;~ GUICtrlSendMsg(-1, $LVM_SETCOLUMNWIDTH, 4, 75)

    [/autoit]

    Eventuell überlegenswert, die INI-Struktur so anzupassen, dass sektionsweise gelesen wird. Dann hat man die Daten sofort im Array.

    Eines meiner ersten Skripte war auch eine Artikelverwaltung. Kannst du dir ja mal anschauen. Der Code muß allerdings erst an die aktuelle AutoItversion angepaßt werden.