GuiCtrlCreateList-Frage(n)

  • Hiho,

    ich mal wieder. habe ein Script geschrieben, in dem man 5 Programme/ Dateien seiner Wahl starten kann. Da man aber nie genau sagen kann, wieviele solcher Sachen jmd braucht, wollte ich das erweitern.

    Dazu dachte ich mir, mach ich Gui...List, in das man seine Programme adden kann.

    Frage 1:
    gibt es eine möglichkeit, wie bei gui..input, files per drag&drop hinzuzufügen? (original übernommen von der inputbox geht es nicht)?

    Frage 2:
    wie schaffe ich es, einen button remove zu erstellen, der aber jeweils nur das aktuell makierte "tool" aus der liste entfernt?

    Frage 3:

    Spoiler anzeigen


    alle programme müssten anschließend in einer ini gespeichert werden, aber wie genau? ich müsste eine schleife durchlaufen, die, solange eine zeile in der liste nicht leer ist, die einzelnen dateien, fortlaufend nummeriert, in die ini schreibt oO

    Frage 4:

    Spoiler anzeigen


    das gleiche müsste dann beim start des programmes passieren. eine schleife wird durchlaufen und liest ein tool nach dem anderen aus der ini. könnte man aber sicher von Frage 3 umbauen.

    script sieht zZ so aus (funzt aber halt noch net alles *g*):

    PS: updated --- frage 3 hab ich rausgefunden (dank engl. forum)
    PS: updated² --- frage 4 auch erledigt

    Spoiler anzeigen
    [autoit]


    #include <guiconstants.au3>
    #include <array.au3>
    #include <GuiList.au3>

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

    $script = "S.T.A.R.T.E.R"
    $ini = ($script & "-Settings.ini")

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

    If FileExists($ini) then
    $var = IniReadSection ( $ini, "Run after Start")
    For $i = 1 To $var[0][0]
    Run(@ComSpec & ' /c "' & $var[$i][1] & '"', "", @SW_HIDE)
    Next
    Else
    ;create tool-gui
    $guitool = GUICreate("Tool-Settings", 300, 250, -1, -1, -1, $WS_EX_ACCEPTFILES)
    WinSetTrans($guitool, "", 240)
    $ok3 = GUICtrlCreateButton("&Ok", 20, 220, 70)
    $cancel3 = GUICtrlCreateButton("&Cancel", 220, 220, 70)
    $toollist = GUICtrlCreateList("", 80, 20, 210, 190)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED )
    $add = GUICtrlCreateButton("&Add", 10, 20, 60)
    GUICtrlSetTip($add, "Here you can browse for a tool (or something else) you want to start")
    $remove = GUICtrlCreateButton("&Remove", 10, 50, 60)
    GUICtrlSetTip($remove, "Remove the seleted item")

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

    GUISetState(@SW_SHOW, $guitool)

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

    While 1
    $msg = GUIGetMsg(1)
    Select
    case $msg[0] = $gui_event_close And $msg[1] = $guitool
    Exit
    Case $msg[0] = $cancel3 And $msg[1] = $guitool
    Exit
    case $msg[0] = $add And $msg[1] = $guitool
    $file1 = FileOpenDialog("Open File", "", "Alle (*.*)" , 1 + 2)
    GUICtrlSetData($toollist, $file1)
    case $msg[0] = $remove And $msg[1] = $guitool
    $remove = GUICtrlRead($toollist)
    GUICtrlSetData($toollist, $remove)
    case $msg[0] = $ok3 And $msg[1] = $guitool
    $alltext = _GUICtrlListGetAllText($toollist)
    For $i = 1 to $alltext[0]
    IniWrite(@scriptdir & "\" & $ini, "Run after Start", $i, $alltext[$i])
    Next
    Exit
    EndSelect
    WEnd
    EndIf

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

    Func _GUICtrlListGetAllText($listbox)
    Dim $listinfo, $returntext
    $listinfo = _GUICtrlListGetInfo($listbox)
    Dim $returntext[$listinfo + 1]
    $returntext[0] = $listinfo
    If $listinfo = 0 Then
    Return $returntext
    EndIf
    For $i = 0 to ($returntext[0] - 1)
    $returntext[$i + 1] = _GUICtrlListGetText($listbox, $i)
    Next
    Return $returntext
    EndFunc

    [/autoit]
  • Hi,
    zu 1 & 2: Meinst Du etwa so????

    Spoiler anzeigen
    [autoit]

    #include <guiconstants.au3>
    #include <array.au3>
    #include <GuiList.au3>

    $script = "S.T.A.R.T.E.R"
    $ini = ($script & "-Settings.ini")

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

    Global $gaDropFiles[1]

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


    If FileExists($ini) then
    $var = IniReadSection ( $ini, "Run after Start")
    For $i = 1 To $var[0][0]
    Run(@ComSpec & ' /c "' & $var[$i][1] & '"', "", @SW_HIDE)
    Next
    Else
    ;create tool-gui
    $guitool = GUICreate("Tool-Settings", 300, 250, -1, -1, -1, $WS_EX_ACCEPTFILES)
    WinSetTrans($guitool, "", 240)
    $ok3 = GUICtrlCreateButton("&Ok", 20, 220, 70)
    $cancel3 = GUICtrlCreateButton("&Cancel", 220, 220, 70)
    $toollist = GUICtrlCreateList("", 80, 20, 210, 190)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED )
    $add = GUICtrlCreateButton("&Add", 10, 20, 60)
    GUICtrlSetTip($add, "Here you can browse for a tool (or something else) you want to start")
    $remove = GUICtrlCreateButton("&Remove", 10, 50, 60)
    GUICtrlSetTip($remove, "Remove the seleted item")

    GUISetState(@SW_SHOW, $guitool)

    While 1
    $msg = GUIGetMsg(1)
    Select
    case $msg[0] = $gui_event_close; And $msg[1] = $guitool
    Exit
    Case $msg[0] = $cancel3; And $msg[1] = $guitool
    Exit
    case $msg[0] = $add; And $msg[1] = $guitool
    $file1 = FileOpenDialog("Open File", "", "Alle (*.*)" , 1 + 2)
    GUICtrlSetData($toollist, $file1)
    case $msg[0] = $remove; And $msg[1] = $guitool
    ;$remove = GUICtrlRead($toollist)
    _GUICtrlListDeleteItem($toollist,_GUICtrlListFindString($toollist,GUICtrlRead($toollist)))
    case $msg[0] = $ok3; And $msg[1] = $guitool
    $alltext = _GUICtrlListGetAllText($toollist)
    For $i = 1 to $alltext[0]
    IniWrite(@scriptdir & "\" & $ini, "Run after Start", $i, $alltext[$i])
    Next
    Exit
    Case $msg[0]=$GUI_event_dropped
    for $i=_GUICtrlListCount($toollist) To 0 step -1
    if _GUICtrlListFindString($toollist,@GUI_DragFile)=-1 Then
    _GUICtrlListAddItem($toollist,@GUI_DragFile)
    EndIf
    Next
    EndSelect
    WEnd
    EndIf

    Func _GUICtrlListGetAllText($listbox)
    Dim $listinfo, $returntext
    $listinfo = _GUICtrlListGetInfo($listbox)
    Dim $returntext[$listinfo + 1]
    $returntext[0] = $listinfo
    If $listinfo = 0 Then
    Return $returntext
    EndIf
    For $i = 0 to ($returntext[0] - 1)
    $returntext[$i + 1] = _GUICtrlListGetText($listbox, $i)
    Next
    Return $returntext
    EndFunc

    [/autoit]


    Gruss
    eddy_erpel

  • thx euch beiden.
    bugfix, werd mir das morgen mal genau angucken, aber ...

    @eddy, ... das ist genau das, was ich wollte. geile sache. vielen vielen dank euch beiden.
    aber ein verständnisprob hab ich noch, bzgl des d&d ... irgendwie (ok, hab schon paar bier weg), aber was hast du geändert??? (habe meine blick auf die styles fixiert)???

    hatte eigentlich schon mit dem ein oder anderen abgeschlossen, desto überraschter bin ich, dass beides genau so klappt, wie ich wollte *freu*dank*freu*

    PS: mir fällt gerade ein, dass, sofern ich das script über die cmd aufrufe, alle einträge aus der ini, auch in der "list" angezeigt werden sollen. wie mache ich das?

    [autoit]

    $var = IniReadSection ( $ini, "Run after Start")
    For $i = 1 To $var[0][0]
    GUICtrlSetData($toollist, $var[$i][1])
    Next

    [/autoit]


    scheint nicht zu gehen???

  • Hi,
    freut mich dass es Dir geholfen hat...
    Es ist schon richtig die Styles anzupassen, damit D&D für das entsprechende Control aktiviert ist. Dann muss man es nur noch auswerten ($msg=$GUI_event_dropped).
    Ein Element aus der Listboy zu entfernen über GUIICtrlSetData ist etwas zu umständlich. Da bietet sich die Funktion _GUICtrlListDeleteItem besser an...
    Zum Ini-File einlesen: Ist ev. im Ini-File ein Fehler vorhanden???? (Ansonsten müsste es eigentlich funktionieren)

    Gruss
    eddy_erpel

  • hey,

    hatte vllt doch wahrnehmungsstörungen, ist funzte tatsächlich (am nächsten tag *g*)

    jetzt arbeite ich noch daran, dass er nicht mit fehlermeldung abbricht, weil die ini existiert aber die inisection nicht, da das gui nur ein bruchteil eines scriptes ist.
    aber das werd ich schaffen, mir fehlt es grad nur an der nötigen zeit.

    also, problem gelöst, vielen dank =)

  • hey, ich hab noch ne frage bzgl GuiCtrlCreateList:

    und zwar kann ich dort ja nun Dateien samt pfad adden, was aber teilweise ganz schön lang sein kann.
    aber das fenster ist nicht groß genug, um den komplette pfad samt datei anzeigen zu können, und da die anzeige das names immer vorne beginnt, weiss man nicht, um was für ein programm es sich handelt.

    ich find in den styles leider nix ... ich suche entweder einen horizontalen scrollbalken, oder, dass die einträge als TIP angezeigt werden, wie bei treeview.

    gibt es da was?

  • die pfade werden anschließend aus der liste in eine ini geschrieben, also kann ich sie nicht abschneiden.
    und die box rießig groß zu machen, bringt auch nix, da die pfade noch 100 mal länger sein können *g*

    kann man nicht einfach nen tooltip anzeigen lassen?
    aber mir fällt grad ein (wie peinlich), man kann ja manuell scrollbalken einbauen ... vllt sollte ich das mal probieren =)

  • also dass mit der kürzen nur für die anzeige hört sich eigentlich sehr gut an.
    wenn da jeweils nur die exe stehen würde, würde ja locker reichen.

    code kommt auch

    Spoiler anzeigen
    [autoit]


    #include <guiconstants.au3>
    #include <array.au3>
    #include <GuiList.au3>
    #include <GUIAdvance.au3>

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

    Global $flag2

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

    ;tool-gui
    $guitool = GUICreate("Tool-Settings", 300, 250, -1, -1, -1, $WS_EX_ACCEPTFILES)
    WinSetTrans($guitool, "", 240)
    $ok3 = GUICtrlCreateButton("&Ok", 20, 220, 70)
    $cancel3 = GUICtrlCreateButton("&Cancel", 220, 220, 70)
    $add = GUICtrlCreateButton("&Add", 10, 20, 60)
    GUICtrlSetTip($add, "Here you can browse for a tool (or something else) you want to start")
    $remove = GUICtrlCreateButton("&Remove", 10, 50, 60)
    GUICtrlSetTip($remove, "Remove the seleted item")
    $toollist = GUICtrlCreateList("", 80, 20, 210, 190, $LBS_DISABLENOSCROLL)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED )

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

    GUISetState(@SW_show, $guitool)

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

    While 1
    $msg = GUIGetMsg(1)
    Select
    ;Tool-Gui Buttons
    ;Ok
    case $msg[0] = $ok3 And $msg[1] = $guitool
    $alltext = _GUICtrlListGetAllText($toollist)
    If $alltext[0] > "0" Then
    $RunOwnTools = IniWrite(@scriptdir & "\" & $ini, "Run after Start", "Own Tools", "1")
    For $i = 1 to $alltext[0]
    IniWrite(@scriptdir & "\" & $ini, "Run own tools after Start", $i, $alltext[$i])
    Next
    Else
    $RunOwnTools = IniWrite(@scriptdir & "\" & $ini, "Run after Start", "Own Tools", "0")
    EndIf
    GUISetState(@SW_HIDE, $guitool)
    ;Add Tool
    case $msg[0] = $add And $msg[1] = $guitool
    $file1 = FileOpenDialog("Open File", "", "Alle (*.*)" , 1 + 2)
    GUICtrlSetData($toollist, $file1)
    ;Remove ToolTip
    case $msg[0] = $remove And $msg[1] = $guitool
    _GUICtrlListDeleteItem($toollist,_GUICtrlListFindString($toollist,GUICtrlRead($toollist)))
    ;Drag'n'Drop
    Case $msg[0]=$GUI_event_dropped And $msg[1] = $guitool
    for $i=_GUICtrlListCount($toollist) To 0 step -1
    if _GUICtrlListFindString($toollist,@GUI_DragFile)=-1 Then
    _GUICtrlListAddItem($toollist,@GUI_DragFile)
    EndIf
    Next
    EndSelect
    WEnd

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

    Edit Mega: Spoiler

    • Offizieller Beitrag

    HI,

    hier hier ein Ansatz :

    Spoiler anzeigen
    [autoit]

    #include<GUIConstants.au3>
    #include<File.au3>
    #include<GuiList.au3>

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

    ;#include <GUIAdvance.au3>

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

    Global $flag2
    Dim $szDrive, $szDir, $szFName, $szExt

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

    ;tool-gui
    $guitool = GUICreate("Tool-Settings", 300, 250, -1, -1, -1, $WS_EX_ACCEPTFILES)
    WinSetTrans($guitool, "", 240)
    $ok3 = GUICtrlCreateButton("&Ok", 20, 220, 70)
    $cancel3 = GUICtrlCreateButton("&Cancel", 220, 220, 70)
    $add = GUICtrlCreateButton("&Add", 10, 20, 60)
    GUICtrlSetTip($add, "Here you can browse for a tool (or something else) you want to start")
    $remove = GUICtrlCreateButton("&Remove", 10, 50, 60)
    GUICtrlSetTip($remove, "Remove the seleted item")
    $toollist = GUICtrlCreateList("", 80, 20, 210, 190, $LBS_DISABLENOSCROLL)
    GUICtrlSetState(-1, $GUI_DROPACCEPTED)

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

    GUISetState(@SW_SHOW, $guitool)

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

    While 1
    $msg = GUIGetMsg(1)
    Select
    ;Tool-Gui Buttons
    ;Ok
    Case $msg[0] = $ok3 And $msg[1] = $guitool
    ; $alltext = _GUICtrlListGetAllText ($toollist)
    ; If $alltext[0] > "0" Then
    ; $RunOwnTools = IniWrite(@ScriptDir & "\" & $ini, "Run after Start", "Own Tools", "1")
    ; For $i = 1 To $alltext[0]
    ; IniWrite(@ScriptDir & "\" & $ini, "Run own tools after Start", $i, $alltext[$i])
    ; Next
    ; Else
    ; $RunOwnTools = IniWrite(@ScriptDir & "\" & $ini, "Run after Start", "Own Tools", "0")
    ; EndIf
    GUISetState(@SW_HIDE, $guitool)
    ;Add Tool
    Case $msg[0] = $add And $msg[1] = $guitool
    $file1 = FileOpenDialog("Open File", "", "Alle (*.*)", 1 + 2)
    $Path = _PathSplit($file1, $szDrive, $szDir, $szFName, $szExt)
    GUICtrlSetData($toollist, $Path[1] & "\ ..." & $Path[3] & $Path[4])
    ;Remove ToolTip
    Case $msg[0] = $remove And $msg[1] = $guitool
    _GUICtrlListDeleteItem($toollist, _GUICtrlListFindString($toollist, GUICtrlRead($toollist)))
    ;Drag'n'Drop
    Case $msg[0] = $GUI_event_dropped And $msg[1] = $guitool
    For $i = _GUICtrlListCount($toollist) To 0 Step - 1
    If _GUICtrlListFindString($toollist, @GUI_DragFile) = -1 Then
    _GUICtrlListAddItem($toollist, @GUI_DragFile)
    EndIf
    Next
    EndSelect
    WEnd

    [/autoit]

    So long,

    Mega

  • hmm, sieht soweit eigentlich ganz gut aus, aber nicht ganz, was ich suche.
    jedoch bringt mich das auf eine neue idee.

    und zwar in spalte 1 den dateinamen und in spalte 2 den pfad.
    aber um ne scrollleiste komm ich nicht drumrum.

    ich versuch mich mal dran *g*

    PS: nee, dass ist alles nicht das wahre ... kann man nicht einfach nen hozizontalen scrollbalken integrieren?

    PPS: dank hilfe vom engl. board hats geklappt, hier die lösung

    [autoit]


    $toollist = GUICtrlCreateList("", 80, 20, 210, 190, $WS_HSCROLL + $LBS_DISABLENOSCROLL)
    _GUICtrlListSetHorizontalExtent ($toollist, 500)

    [/autoit]