Projekt Starter

  • Hi,

    evlt kanns jemand brauchen.

    GUI ist Drag&Drop-kompatibel, in die erste Zeile das Programm oder die Datei reinziehen, rechts daneben einen Namen angeben, hinzufügen und der Rest sollte selbsterklärend sein :)

    Spoiler anzeigen
    [autoit]

    #include <array.au3>
    #include <file.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <GUIComboBox.au3>
    #include <GUIListView.au3>
    #include <WindowsConstants.au3>

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

    Global $list1, $active = 0

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

    $Form1 = GUICreate("Projekte", 633, 454, 192, 114, BitOR($WS_MINIMIZEBOX, $WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS), $WS_EX_ACCEPTFILES)
    $list1 = GUICtrlCreateList("", 8, 48, 537, 396, BitOR($WS_BORDER, $LBS_MULTIPLESEL))
    $add = GUICtrlCreateButton("Add", 552, 16, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $start = GUICtrlCreateButton("Start", 552, 56, 75, 25, $WS_GROUP)
    $mark = GUICtrlCreateButton("Select All", 552, 96, 75, 25, $WS_GROUP)
    $del = GUICtrlCreateButton("Delete", 552, 416, 75, 25, $WS_GROUP)
    $in = GUICtrlCreateInput("", 8, 16, 409, 21)
    GUICtrlSetState(-1, $GUI_ACCEPTFILES)
    $camp = GUICtrlCreateInput("", 424, 16, 121, 21)
    GUISetState(@SW_SHOW)

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

    Global $ini = @ScriptDir & "\Projekte.ini"

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

    filllist()
    Global $marking = 0

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $start
    start()
    Case $add
    add()
    Case $del
    del()
    Case $mark
    if $marking = 1 Then
    _GUICtrlListBox_ResetContent($list1)
    filllist()
    $marking = 0
    GUICtrlSetData($mark, "Select All")
    ElseIf $marking = 0 Then
    _GUICtrlListBox_SelItemRange($list1, 0, _GUICtrlListBox_GetCount($list1))
    $marking = 1
    GUICtrlSetData($mark, "Unselect All")
    EndIf

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

    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

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

    If GUICtrlRead($in) <> "" And GUICtrlRead($camp) <> "" And $active = 0 Then
    GUICtrlSetState($add, $GUI_ENABLE)
    $active = 1
    EndIf
    WEnd

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

    Func filllist()
    _GUICtrlListBox_Destroy($list1)
    $list1 = GUICtrlCreateList("", 8, 48, 537, 396, BitOR($WS_BORDER, $LBS_MULTIPLESEL))
    Local $sec = IniReadSection($ini, "proj")
    _ArraySort($sec)
    For $i = 1 To UBound($sec, 1) - 1
    _GUICtrlListBox_AddString($list1, $sec[$i][0] & " > " & IniRead($ini, "proj", $sec[$i][0], "") & @LF)
    Next
    EndFunc ;==>filllist

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

    Func add()
    IniWrite($ini, "proj", GUICtrlRead($camp), GUICtrlRead($in))
    GUICtrlSetData($in, "")
    GUICtrlSetData($camp, "")
    GUICtrlSetState($add, $GUI_DISABLE)
    $active = 0
    filllist()
    EndFunc ;==>add

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

    Func del()
    Local $test = _GUICtrlListBox_GetSelItemsText($list1)
    if UBound($test) > 1 Then
    local $a = MsgBox(68,"Löschen","Sicher?")
    if $a = 6 Then
    For $x = 1 To $test[0]
    Local $boom = StringSplit($test[$x], " > ")
    IniDelete($ini, "proj", $boom[1])
    Next
    filllist()
    EndIf
    EndIf
    EndFunc ;==>del

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

    Func start()
    Local $test = _GUICtrlListBox_GetSelItemsText($list1)
    For $x = 1 To $test[0]
    Local $boom = StringSplit($test[$x], ">")
    ShellExecute(StringTrimLeft(StringTrimRight($boom[2],1),1))
    sleep(1000)
    Next
    EndFunc ;==>start

    [/autoit]

    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.

  • Warum erstellst du die Liste immer wieder neu? Leer doch einfach die Liste mit GUICtrlSetData($list, "").
    Was sollen die ganzen Styles bei GUICreate?
    Z.B. $WS_POPUPWINDOW
    In der Hilfe dazu steht:

    Code
    Erzeugt ein Pop-up-Fenster mit den Stilen WS_BORDER, WS_POPUP und WS_SYSMENU. Die Stile WS_CAPTION und WS_POPUPWINDOW müssen kombiniert werden, um das Menü des Fensters sichtbar zu machen.


    D.h. du brauchst $WS_POPUP und so, nicht mit einbinden.
    Wenn du schon Variablen deklarierst, solltest du auch alle machen.

    Für mich ist jetzt nicht alles selbsterklärend. Was kommt z.B. in dem zweiten Input rein? Da fehlen irgendwie noch Labels.

    Du musst immer bedenken, auch Anfänger gucken sich diese Scripte an. Die sollen ja es nicht gleich falsch lernen. ;)

    Das wäre mein Vorschlag:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIListBox.au3>
    #include <WindowsConstants.au3>

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

    Global $cList, $cAdd, $cStart, $cMark, $cDel, $cIn, $cCamp
    Global $sIniPath = @ScriptDir & "\Projekte.ini"

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

    GUICreate("Projekte", 633, 454, 192, 114, BitOR($WS_MINIMIZEBOX, $WS_SYSMENU, $WS_CAPTION, $WS_POPUP, $WS_POPUPWINDOW, $WS_GROUP, $WS_BORDER, $WS_CLIPSIBLINGS), $WS_EX_ACCEPTFILES)
    $cList = GUICtrlCreateList("", 8, 48, 537, 396, BitOR($WS_BORDER, $LBS_MULTIPLESEL))
    $cAdd = GUICtrlCreateButton("Add", 552, 16, 75, 25, $WS_GROUP)
    GUICtrlSetState(-1, $GUI_DISABLE)
    $cStart = GUICtrlCreateButton("Start", 552, 56, 75, 25, $WS_GROUP)
    $cMark = GUICtrlCreateButton("Select All", 552, 96, 75, 25, $WS_GROUP)
    $cDel = GUICtrlCreateButton("Delete", 552, 416, 75, 25, $WS_GROUP)
    $cIn = GUICtrlCreateInput("", 8, 16, 409, 21)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)
    $cCamp = GUICtrlCreateInput("", 424, 16, 121, 21)
    GUISetState()

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

    _FillList()

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

    While 1
    Switch GUIGetMsg()
    Case $cStart
    _Start()
    Case $cAdd
    _Add()
    Case $cDel
    _Del()
    Case $cMark
    If GUICtrlRead($cMark) = "Unselect All" Then
    _GUICtrlListBox_ResetContent($cList)
    _FillList()
    GUICtrlSetData($cMark, "Select All")
    Else
    _GUICtrlListBox_SelItemRange($cList, 0, _GUICtrlListBox_GetCount($cList))
    GUICtrlSetData($cMark, "Unselect All")
    EndIf
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch

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

    If GUICtrlRead($cIn) <> "" And GUICtrlRead($cCamp) <> "" And Not BitAND(GUICtrlGetState($cAdd), $GUI_ENABLE) Then GUICtrlSetState($cAdd, $GUI_ENABLE)
    WEnd

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

    Func _FillList()
    GUICtrlSetData($cList, "")
    Local $_aIni = IniReadSection($sIniPath, "proj")
    _ArraySort($_aIni)
    For $i = 1 To UBound($_aIni) - 1
    GUICtrlSetData($cList, $_aIni[$i][0] & " > " & IniRead($sIniPath, "proj", $_aIni[$i][0], ""))
    Next
    EndFunc ;==>_FillList

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

    Func _Add()
    IniWrite($sIniPath, "proj", GUICtrlRead($cCamp), GUICtrlRead($cIn))
    GUICtrlSetData($cIn, "")
    GUICtrlSetData($cCamp, "")
    GUICtrlSetState($cAdd, $GUI_DISABLE)
    _FillList()
    EndFunc ;==>_Add

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

    Func _Del()
    Local $_aSS
    Local $_aItems = _GUICtrlListBox_GetSelItemsText($cList)
    If $_aItems[0] > 0 Then
    If MsgBox(68, "Löschen", "Sicher?") = 6 Then
    For $i = 1 To $_aItems[0]
    $_aSS = StringSplit($_aItems[$i], " > ")
    IniDelete($sIniPath, "proj", $_aSS[1])
    Next
    _FillList()
    EndIf
    EndIf
    EndFunc ;==>_Del

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

    Func _Start()
    Local $_aSS
    Local $_aItems = _GUICtrlListBox_GetSelItemsText($cList)
    For $i = 1 To $_aItems[0]
    $_aSS = StringSplit($_aItems[$i], " > ")
    ShellExecute($_aSS[2])
    Sleep(1000)
    Next
    EndFunc ;==>_Start

    [/autoit]
  • Hi,

    Zitat

    in die erste Zeile das Programm oder die Datei reinziehen, rechts daneben einen Namen angeben

    Ich hab geschrieben "evtl kanns jemand brauchen" und nicht "wer nicht damit umgehen kann" ;)

    Keine Ahnung, warum ich irgendwelche Styles verwende, die hab ich aus nem älteren Projekt kopiert.

    ...und die Liste neu erstellen hat sich als funktionierend herausgestellt, glaube irgendeinen Fehler hatte ich mit "GUICtrlSetData()".

    Ich finde es gut, meine Kollegen lieben es. Wie es programmiert ist, spielt keine Rolle (es kann in der Firma niemand programmieren!), solange es perfekt funktioniert - und das tut es ;)

    Gruß
    x0r

    Simon nörgelt, Simon nervt - aber Simon verbessert die Welt. Glaubt er.