1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. nuts

Beiträge von nuts

  • Listview-Datenbank-Beispiel

    • nuts
    • 31. Januar 2009 um 18:06

    hey,

    kann es sein, dass sich in der Edit() Funktion ein Bug eingeschlichen hat?
    Immer wenn ich den ersten Eintrag im Listview editieren will, wird dieser mit den geänderten Werten nochmal erstellt.
    Bei den folgenden Einträgen funktionierts wie erwartet.

    Bin mir noch nicht so ganz im Klaren woran das liegt.

  • Problem mit dem Verwalten mehrerer "Datenbanken"

    • nuts
    • 31. Januar 2009 um 00:15

    Mhm doch noch eine Frage zu so später Stunde.

    Mein Script sieht jetzt etwas vereinfacht so aus:

    Spoiler anzeigen
    [autoit]


    #include<WindowsConstants.au3>
    #include<ListViewConstants.au3>
    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<Guilistview.au3>
    #include <File.au3>
    #include <StaticConstants.au3>

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

    Global $sHeader = "Aufgabe|Erstellt am|Termin|Status|Schlussbemerkung" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
    Global $iEdit

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

    #Region Hauptfenster
    Global $hGui = GUICreate("Listview-Datenbank-Beispiel",900, 600) ; Hauptfenster erstellen
    Global $hListView = GUICtrlCreateListView($sHeader, 0, 100, 900, 420, $LVS_SHOWSELALWAYS) ; Listview erstellen
    Global $hLabel = GUICtrlCreateLabel("" , 10, 10, 250, 50, Bitor($SS_CENTER, $SS_Centerimage),$SS_BLACKFRAME)
    GUICtrlSetFont($hlabel, 14, "", 0)
    Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Aufgabe", 360, 0) ; 1. Spalte = 360 Px breit, links ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Erstellt am", 80, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Termin", 80, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 3, "Status", 80, 0)
    _GUICtrlListView_SetColumn($hLVHandle, 4, "Schlussbemerkung", 295, 0)

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

    Global $hMenu = GUICtrlCreateMenu("Menü") ;Erstellt das Menü für die HauptGUI
    Global $hcUser = GUICtrlCreateMenuItem("Neuer Benutzer", $hmenu) ; der 1. Kontextmenüeintrag
    Global $hcEinstellungen = GUICtrlCreateMenuItem("Einstellungen", $hmenu) ; der 2. Kontextmenüeintrag

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

    Global $hNew = GUICtrlCreateButton("Neuer Eintrag", 5, 530, 80, 35, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
    Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 95, 530, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
    Global $hLoad = GUICtrlCreateButton("Laden", 230, 530, 70, 35)
    Global $hSave = GUICtrlCreateButton("Speichern", 310, 530, 70, 35)
    Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 400, 530, 90, 35, $BS_MULTILINE)
    Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 500, 530, 90, 35, $BS_MULTILINE)

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

    Global $hCM = GUICtrlCreateContextMenu($hListView) ; ein Kontextmenü für das Listview erstellen
    Global $hCMNew = GUICtrlCreateMenuItem("Neuer Eintrag", $hCM) ; der 1. Kontextmenüeintrag
    Global $hCMEdit = GUICtrlCreateMenuItem("Eintrag bearbeiten", $hCM) ; der 2. Kontextmenüeintrag
    Global $hCMDel = GUICtrlCreateMenuItem("Markierte Einträge löschen", $hCM) ; der 3. Kontextmenüeintrag

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

    #EndRegion Hauptfenster

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

    #Region Fenster für neuen Eintrag
    Global $hGuiNew = GUICreate("Neuer Eintrag", 632, 150, -1, -1, $WS_SYSMENU) ; das Fenster "Neuer Eintrag" erstellen
    Global $aHeader = StringSplit($sHeader, '|') ; Überschriften-Array
    Global $aNew[$aHeader[0]] ; Array für die Input-IDs
    For $i = 1 To $aHeader[0]
    GUICtrlCreateLabel($aHeader[$i], 4 + ($i - 1) * 125, 25, 90, 20) ; Überschriften-Label erstellen
    $aNew[$i - 1] = GUICtrlCreateInput("", 2 + ($i - 1) * 125, 40, 120, 20) ; Eingabefelder erstellen
    Next
    Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 254, 85, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für neuen Eintrag

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

    #Region Fenster für neuen User
    Global $hGUIUser = GUICreate("Neuen Benutzer anlegen", 293, 217, 193, 125)
    Global $hSaveUser = GUICtrlCreateButton("Speichern", 60, 120, 180, 50, 0)
    Global $hInputUser = GUICtrlCreateInput("", 50, 70, 200, 21)
    Global $hLabelUser = GUICtrlCreateLabel("Benutzername eingeben", 60, 20, 179, 24, Bitor($SS_CENTER, $SS_Centerimage))

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

    #EndRegion Fenster für neuen User
    _GUICtrlListView_RegisterSortCallBack($hLVHandle) ; damit man das Listview (mit Klick auf die Spaltenüberschrift) sortieren kann

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

    GUISetState(@SW_SHOW, $hGui) ; Hauptfenster sichtbar machen

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

    While 1
    $nMsg = GUIGetMsg(1) ; Message-Event holen (1) = erweiterter Modus
    Switch $nMsg[0] ; anhand der Control-ID das entsprechende Case aufrufen
    Case $hcUser
    GUISetState(@SW_SHOW, $hGuiUser) ; das Fenster "Neuer Benutzer" anzeigen
    GUISetState(@SW_DISABLE, $hGui)
    Case $hSaveUser
    NewUser()
    Case $hListView ; User hat auf eine Spaltenüberschrift geklickt
    _GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortieren
    Case $hNew, $hCMNew ; User hat auf "Neuer Eintrag" geklickt
    WinSetTitle($hGuiNew, "", "Neuer Eintrag") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Case $hEdit, $hCMEdit ; User hat auf "Eintrag bearbeiten" geklickt
    WinSetTitle($hGuiNew, "", "Eintrag bearbeiten") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiNew) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Edit()
    Case $hLoad ; User hat auf "Laden" geklickt
    Load()
    Case $hSave ; User hat auf "Laden" geklickt
    Save()
    Case $hDel, $hCMDel ; User hat auf "Markierte Einträge löschen" geklickt
    If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die markierten Einträge wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
    Case $hDelAll ; User hat auf "Alle Einträge löschen" geklickt
    If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie wirklich alle Einträge löschen?") = 6 Then _GUICtrlListView_DeleteAllItems($hLVHandle)
    Case $hCreate ; User hat auf "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
    NewItem()
    Case $GUI_EVENT_CLOSE ; User hat auf das Schließen-Symbol geklickt (bzw. die ESC-Taste gedrückt)
    Switch $nMsg[1] ; erweiterte Abfrage für welches Fenster
    Case $hGui ; User will das Hauptfenster schließen
    If MsgBox(32 + 4, "Beenden", "Wollen sie das Programm wirklich beenden?") = 6 Then End() ; wenn ja, dann End-Funktion aufrufen
    Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Case $hGuiUser ; User will das Fenster "Neuen Benutzer anlegen" schließen
    GUISetState(@SW_HIDE, $hGuiUser) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    EndSwitch
    EndSwitch
    WEnd

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

    Func End()
    ;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
    _GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
    Exit ; Programm beenden
    EndFunc

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

    Func NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
    Local $sItem = ""
    For $i = 0 To UBound($aNew) - 1 ; Schleife, um alle Eingabefelder durchzugehen
    If $iEdit Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    _GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
    Else ; sonst $iEdit = 0 (neuer Eintrag)
    $sItem &= GUICtrlRead($aNew[$i]) & "|" ; den Eintrag aus dem Eingabefeld erstmal in einer Variablen ($sItem) speichern
    EndIf
    GUICtrlSetData($aNew[$i], "") ; das entsprechende Eingabefeld leeren
    Next
    If $iEdit Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Else ; sonst $iEdit = 0 (neuer Eintrag)
    GUICtrlSetState($aNew[0], $GUI_FOCUS) ; den Focus wieder auf das erste Eingabefeld setzen, für weitere Eingaben
    GUICtrlCreateListViewItem(StringTrimRight($sItem, 1), $hListView) ; mit den Werten aus $sItem einen neuen Listview-Eintrag hinzufügen
    EndIf
    EndFunc ;==>NewItem

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

    Func Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
    $iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
    Local $aItem = _GUICtrlListView_GetItemTextArray($hLVHandle, $iEdit) ; die Einträge aus dem Listview in ein Array holen
    For $i = 1 To $aItem[0]
    GUICtrlSetData($aNew[$i - 1], $aItem[$i]) ; und in die entsprechenden Eingabefelder schreiben
    Next
    EndFunc ;==>Edit

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

    Func Load() ; Datenbank-Datei laden
    _GUICtrlListView_DeleteAllItems($hLVHandle)
    Local $opendb = FileOpenDialog("Bitte auswählen", @ScriptDir & "\Datenbanken\", "Text (*.txt)")
    Global $sDBFile = $opendb
    Local $sItem
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    Local $hLabelInfo = FileReadLine($hfile) ; 1. Zeile der Datenbank wird gelesen -> Für Labelbeschriftung
    GUICtrlSetData($hLabel ,$hLabelInfo)
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Load

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

    Func Save() ; Datenbank-Datei speichern
    Local $sItem
    Local $iCount = _GUICtrlListView_GetItemCount($hLVHandle) - 1 ; Anzahl der Listview-Einträge holen
    Local $hFile = FileOpen($sDBFile, 2) ; Datei zum speichern (überschreiben) öffnen
    Local $LabelInhalt = GUICtrlRead($hlabel)
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    FileWriteLine($hFile, $LabelInhalt) ; 1. Zeile schreiben
    For $i = 0 To $iCount ; Schleife, um alle Listview-Einträge durchzugehen
    $sItem = _GUICtrlListView_GetItemTextString($hLVHandle, $i) ; die Werte aus dem Listview-Eintrag holen
    FileWriteLine($hFile, $sItem) ; und in die Datei schreiben
    Next
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Save

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

    Func NewUser() ; Neuen Benutzer anlegen
    Local $newdb = GUICtrlRead($hInputUser)
    _FileCreate(@ScriptDir & "\Datenbanken\" & $newdb &".txt")
    Fileopen(@ScriptDir & "\Datenbanken\" & $newdb &".txt",0)
    FileWriteLine(@ScriptDir & "\Datenbanken\" & $newdb &".txt", $newdb)
    FileClose(@ScriptDir & "\Datenbanken\" & $newdb &".txt")
    EndFunc

    [/autoit]

    Allerdings bekomme ich 2 "Warnings" beim Syntax prüfen:

    Code
    C:\Dokumente und Einstellungen\Nussman\Desktop\autoitskripte\todo\ToDo.au3(170,34) : WARNING: $sDBFile: possibly used before declaration.
    	Local $hFile = FileOpen($sDBFile,
    	~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
    C:\Dokumente und Einstellungen\Nussman\Desktop\autoitskripte\todo\ToDo.au3(149,27) : WARNING: $sDBFile: declared global in function only. Prefer top of file.
    	Global $sDBFile = $opendb

    Aushebeln kann ich die Warnmeldung indem ich "Global $sDBFile" einfach an den Anfang des Skriptes setze.
    Zu funktionieren scheint es auch, wollte mich nur aml vergewissern ob man so einfach die Variablen in einer Funktion als "Global" deklarieren kann/soll/darf?

  • Problem mit dem Verwalten mehrerer "Datenbanken"

    • nuts
    • 30. Januar 2009 um 20:29

    Super eine ganz simple Lösung - wie immer genial Oscar, vielen dank!

    edit \ kleiner Nachtrag zu Problem2:
    ein _GUICtrlListView_DeleteAllItems($hLVHandle) an den Anfang der Load() Funktion zu hängen führt auch zum Ziel.

  • Problem mit dem Verwalten mehrerer "Datenbanken"

    • nuts
    • 30. Januar 2009 um 12:46

    Hm also erstmal zu 1, dann müsste ich aber in der Funktion anders weitermachen oder (Filereadtoarray?)? Bei Filereadline innerhalb der While Wend Schleife gelingt es mir nicht mehrere Zeilen auszuschließen. Laut Hilfe kann ich alle Zeilen einlesen oder eine bestimmte.

    2. + 3. gute Idee, glaube das schaffe ich :thumbup:

    edit \ Singleton ist verstanden und läuft. Ganz einfach wenn man den richtigen Befehl dafür kennt.
    Nur wie kommt man denn auf die Idee bei diesem Problem nach "Singleton" zu suchen? ?(

  • Problem mit dem Verwalten mehrerer "Datenbanken"

    • nuts
    • 29. Januar 2009 um 23:10

    Hey,


    ich spiele gerade mit dem Listview-Datenbank Beispiel von Oscar (Listview-Datenbank-Beispiel) und wollte eine Funktion einbauen.
    Also es soll nicht nur eine Datenbank aufgerufen werden, sondern über "Fileopendialog" eine bestimmte Datenbank ausgewählt werden.
    Soweit ist das noch kein Problem, allerdings möchte ich neben der Informationen aus der Datenbank noch verschiedene Labels/Inputfelder mit zusätzlichen Daten zur jeweiligen Datenbank füttern.

    Meine Lösung:

    Spoiler anzeigen
    [autoit]


    Func Load() ; Datenbank-Datei laden
    $ini = FileOpenDialog("Bitte auswählen", @ScriptDir, "INI (*.ini)")
    Local $sDBFile = IniRead($ini, "DB", "File", "")
    Local $sItem
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    _GUICtrlListView_BeginUpdate($hLVHandle) ; Listview sperren
    While True ; Endlosschleife
    $sItem = FileReadLine($hFile) ; Zeile aus der Datei lesen
    If @error Then ExitLoop ; wenn das Ende der Datei erreicht ist, dann Endlosschleife verlassen
    GUICtrlCreateListViewItem($sItem, $hListView) ; mit den eingelesenen Daten einen neuen Listview-Eintrag erstellen
    WEnd
    _GUICtrlListView_EndUpdate($hLVHandle) ; Listview wieder freigeben
    FileClose($hFile) ; Datei schließen
    EndIf
    EndFunc ;==>Load

    [/autoit]


    Die Load() Funktion bekommt ihre Info welche Datenbank gelesen werden soll direkt aus einer .ini und dort kann ich auch die Zusatzinfos auslesen.
    Allerdings brauche ich dann pro Datenbank eine extra .ini :(
    Vielleicht habt ihr da ein besseres Konzept? Alles in eine .ini zu schreiben hat das Problem mit der Auswahl der jeweiligen Datenbank, also über eine einfaches Fileopendialog funktionierts dann nichtmehr.
    Die Zusatzinfo in die jeweilige Datenbank zu packen hat den Nachteil, dass man die jeweiligen Zeilen beim einlesen fürs Listview irgendwie ausschließen müsste.

    Naja wie gesagt vielleicht hat einer von euch ja eine bessere Idee?

    Zweites Problem:
    Wie kann ich das mehrmalige Laden der gleichen Datenbank unterbinden?

    Drittes Problem:
    Wie kann ich verhindern, dass mein Programm mehr als 1-mal gestartet werden kann? Erste Versuche mit "ProcessExists" führten mich nichts zum Ziel (irgendwie logisch wenn ich das am Anfang abfrage beendet sich das Prog. selbst :D )

    Danke schonmal für die Antworten.

    Gruß nuts

  • Winamp Playliste erstellen

    • nuts
    • 15. Dezember 2008 um 21:52

    aha so funktioniert das ganze schonmal :D

    Spoiler anzeigen
    [autoit]


    #include<GuiListView.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #include<ButtonConstants.au3>

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

    ;Form1
    $Form1 = GUICreate("Aufnahmen", 1000, 750, 50, 10)

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

    ;Auswahl
    Global $path = "D:\Mp3\MP3s\"
    Global $playlistpath = "D:\Mp3\MP3s\playlist.m3u"
    Global $Header = "Titel"
    Global $Header2 = "Playlist"
    Global $ListView = GUICtrlCreateListView($Header, 0, 5, 800, 300, $LVS_SHOWSELALWAYS)
    Global $Listview2= GUICtrlCreateListView($Header2, 0, 320, 800, 250, $LVS_SHOWSELALWAYS)
    GUICtrlSetFont($ListView, 16)
    GUICtrlSetFont($ListView2, 16)
    Global $hLVHandle = GUICtrlGetHandle($ListView)
    Global $hLVHandle2 = GUICtrlGetHandle($ListView2)
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Titel", 700, 0)
    _GUICtrlListView_SetColumn($hLVHandle2, 0, "Playlist", 700, 0)

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

    $red = GUICtrlCreateButton("Hinzufügen", 10, 600, 100, 60)
    GUICtrlSetBkColor($red, "0xFF0000")
    $green = GUICtrlCreateButton("Remove", 130, 600, 100, 60)
    GUICtrlSetBkColor($green, "0x006400")
    $yellow = GUICtrlCreateButton("Remove All", 250, 600, 100, 60)
    GUICtrlSetBkColor($yellow, "0xFFFF00")
    $blue = GUICtrlCreateButton("Abpsielen", 370, 600, 100, 60)
    GUICtrlSetBkColor($blue, "0x0000FF")

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

    GUISetState(@SW_SHOW)

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

    $FileList = _FileListToArray($path)

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

    If @error = 1 Then
    MsgBox(0, "", "No Files\Folders Found.")
    Exit
    EndIf
    For $i = 1 To $FileList[0]
    GUICtrlCreateListViewItem($FileList[$i], $ListView)
    Next

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

    Global $aRecords
    $read = _FileReadToArray($playlistpath, $aRecords)
    If @error = 1 Then
    MsgBox(0, "", "No Files\Folders Found.",1)
    Else
    For $i = 1 To $arecords[0]
    GUICtrlCreateListViewItem($arecords[$i], $Listview2)
    Next
    Endif

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

    While 1
    $Msg = GUIGetMsg(1)
    Switch $Msg[0]
    Case $GUI_EVENT_CLOSE ; Fenster schließen
    Exit

    Case $red
    $aIndex = _GUICtrlListView_GetSelectedIndices($hLVHandle, 1)
    ;_ArrayDisplay($aindex)
    Local $Playlist = ''
    For $i = 1 To $aIndex[0]
    $Playlist &= $path & _GUICtrlListView_GetItemTextString($hLVHandle, $aIndex[$i]) & @CRLF
    Next
    FileWrite($path & 'playlist.m3u', $Playlist)
    ;MsgBox(1, "", $Playlist)

    _GUICtrlListView_DeleteAllItems($hLVHandle2)
    ;Dim $aRecords
    $read = _FileReadToArray($playlistpath, $aRecords)
    If @error = 1 Then
    MsgBox(0, "", "No Files\Folders Found.")
    EndIf
    For $i = 1 To $arecords[0]
    GUICtrlCreateListViewItem($arecords[$i], $Listview2)
    Next
    case $green
    _GUICtrlListView_DeleteItemsSelected($hLVHandle2)

    $all = _GUICtrlListView_GetAllItems($ListView2)

    $count = Ubound($all)
    FileDelete($playlistpath)
    for $i = 0 to $count -1
    FileWriteLine($playlistpath, $all[$i][0])

    Next

    case $yellow
    _GUICtrlListView_DeleteAllItems($hLVHandle2)
    FileDelete($playlistpath)
    case $blue
    ShellExecute($path & 'playlist.m3u')

    EndSwitch
    WEnd

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

    Func _GUICtrlListView_GetAllItems($hListView)
    Local $iItem = _GUICtrlListView_GetItemCount($hListView)
    Local $iCount = _GUICtrlListView_GetColumnCount($hListView)
    If $iItem = 0 Then Return SetError(1, 0, 0)
    Local $aAllItems[$iItem][$iCount], $aTemp
    For $i = 0 To $iItem - 1
    $aTemp = _GUICtrlListView_GetItemTextArray($hListView, $i)
    For $j = 1 To $aTemp[0]
    $aAllItems[$i][$j - 1] = $aTemp[$j]
    Next
    Next
    Return $aAllItems
    EndFunc ;==>_GUICtrlListView_GetAllItems

    [/autoit]

    vielen dank für die hilfe oscar.

  • ListView - zählen der "checked Items"

    • nuts
    • 15. Dezember 2008 um 21:01

    joa diese funktion wäre sehr interessant.

  • Winamp Playliste erstellen

    • nuts
    • 15. Dezember 2008 um 20:57

    ah super.
    ich hänge grad noch etwas an der weiterverarbeitung des array's (das ist ein zweidimensionales?, irgendwie fehlt mir die info wieviele items jetzt im array sind).
    mal sehn vielleicht krieg ich das alleine hin.

  • ListView - zählen der "checked Items"

    • nuts
    • 15. Dezember 2008 um 20:51

    wieso muss denn in dieser zeile : For $i = 0 To 9999 der zweite wert so hoch sein?
    wenn man den runter setzt wirds deutlich flotter.

    die funktion gefällt mir aber, ich glaube das kann ich für meinen skript zum erstellen einer winamp playliste gebrauchen.

  • Winamp Playliste erstellen

    • nuts
    • 15. Dezember 2008 um 00:52

    hey,

    sorry für die späte rückmeldung und danke für die funktion.
    so wie ich das jetzt gesehen hab gibts noch einen bug wenn ich das letzte item aus dem listview lösche.
    ist jetzt wieder eine etwas kompliziertere funktion geworden und ich muss das aber erstmal selbst durchprobieren.
    melde mich wieder.

    gruß nuts

  • Winamp Playliste erstellen

    • nuts
    • 13. Dezember 2008 um 17:29

    mhm mit der forumsuche bin ich auch nicht weitergekommen.
    ist es nicht möglich aus einem listview alle items zurückzubekommen? wenn nein: hat jemand eine andere idee? irgendwie muss ich auch einzelne eintrage der playliste löschen können :(
    sonst macht mein skript wenig sinn.

  • Hintergrundbild

    • nuts
    • 12. Dezember 2008 um 17:10

    ich hab das bis jetzt immer so gelöst: (so ungefährt)

    [autoit]


    $INI = @ScriptDir & "\deine.ini"
    $Bild1 = IniRead($INI, "Hintergrundbilder", "Bild1", "")
    $GUI = GUICreate(...)
    GUICtrlCreatePic ($Bild, ....)

    [/autoit]


    GuiCreat und GUICtrlCreatePic müssen natürlich noch mit den entsprechenden Paramtern gefüllt werden.

    die .ini sieht dann so aus:

    Code
    [Hintergrundbilder]
    Bild1 = [i]Verzeichnis des Bildes eingeben[/i]
  • Winamp Playliste erstellen

    • nuts
    • 12. Dezember 2008 um 16:01

    und damit kann ich einen dateibrowser erstellen? ist mir jetzt nicht ganz klar.
    mir fällt jetzt kein geeignetes freeware prog. ein aber vielleicht kennt jemand den dvbviewer ge? dort gibts so einen dateibrwoser für die mediendateiwiedergabe, imho auch über ein listview realisiert. so in der art stelle ich mir das vor.

    beim ersten problem mit dem greenbutton bin ich auch noch nicht weitergekommen.
    muss mir jetzt nochmal in ruhe die hilfe ansehen, vielleicht finde ich da was passendes. eure vorschläge sind aber weiterhin erwünscht :D

    edit \ um das zweite problem mal einzugrenzen:
    ich möchte alle items in einem listview in ein array laden, danach müsste ichs allein schaffen.

    mit _GUICtrlListView_GetItemTextArray schaffe ich es nur das markierte item ins array zu holen? kann aber irgendwie nicht sein, denn für 1 item bräuchte man ja keins?
    vermutlich scheitere ich am zweiten parameter für diese funktion, welcher wäre den richtig für alle items im listview?

  • Winamp Playliste erstellen

    • nuts
    • 11. Dezember 2008 um 23:27

    so bin schon ein stück weitergekommen.

    Spoiler anzeigen
    [autoit]


    #include<GuiListView.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #include <File.au3>
    #include <Array.au3>
    #include<ButtonConstants.au3>

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

    ;Form1
    $Form1 = GUICreate("Aufnahmen", 1000, 750, 50, 10)

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

    ;Auswahl
    Global $path = "D:\Mp3\MP3s\"
    Global $playlistpath = "D:\Mp3\MP3s\playlist.m3u"
    Global $Header = "Titel"
    Global $Header2 = "Playlist"
    Global $ListView = GUICtrlCreateListView($Header, 0, 5, 800, 300, $LVS_SHOWSELALWAYS)
    Global $Listview2 = GUICtrlCreateListView($Header2, 0, 320, 800, 250, $LVS_SHOWSELALWAYS)
    GUICtrlSetFont($ListView, 16)
    GUICtrlSetFont($ListView2, 16)
    Global $hLVHandle = GUICtrlGetHandle($ListView)
    Global $hLVHandle2 = GUICtrlGetHandle($ListView2)
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Titel", 700, 0)
    _GUICtrlListView_SetColumn($hLVHandle2, 0, "Playlist", 700, 0)

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

    $red = GUICtrlCreateButton("Hinzufügen", 10, 600, 100, 60)
    GUICtrlSetBkColor($red, "0xFF0000")
    $green = GUICtrlCreateButton("Remove", 130, 600, 100, 60)
    GUICtrlSetBkColor($green, "0x006400")
    $yellow = GUICtrlCreateButton("Remove All", 250, 600, 100, 60)
    GUICtrlSetBkColor($yellow, "0xFFFF00")
    $blue = GUICtrlCreateButton("Abpsielen", 370, 600, 100, 60)
    GUICtrlSetBkColor($blue, "0x0000FF")

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

    GUISetState(@SW_SHOW)

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

    $FileList = _FileListToArray($path)
    If @error = 1 Then
    MsgBox(0, "", "No Files\Folders Found.")
    Exit
    EndIf
    For $i = 1 To $FileList[0]
    GUICtrlCreateListViewItem($FileList[$i], $ListView)
    Next

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

    Global $aRecords
    $read = _FileReadToArray($playlistpath, $aRecords)
    If @error = 1 Then
    MsgBox(0, "", "No Files\Folders Found.",1)
    Else
    For $i = 1 To $arecords[0]
    GUICtrlCreateListViewItem($arecords[$i], $Listview2)
    Next
    Endif

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

    While 1
    $Msg = GUIGetMsg(1)
    Switch $Msg[0]
    Case $GUI_EVENT_CLOSE ; Fenster schließen
    Exit

    Case $red
    $aIndex = _GUICtrlListView_GetSelectedIndices($hLVHandle, 1)
    $Playlist = ''
    For $i = 1 To $aIndex[0]
    $Playlist &= $path & _GUICtrlListView_GetItemTextString($hLVHandle, $aIndex[$i]) & @CRLF
    Next
    FileWrite($path & 'playlist.m3u', $Playlist)
    ;MsgBox(1, "", $Playlist)

    _GUICtrlListView_DeleteAllItems($hLVHandle2)
    ;Dim $aRecords
    $read = _FileReadToArray($playlistpath, $aRecords)
    If @error = 1 Then
    MsgBox(0, "", "No Files\Folders Found.")
    EndIf
    For $i = 1 To $arecords[0]
    GUICtrlCreateListViewItem($arecords[$i], $Listview2)
    Next
    case $green
    _GUICtrlListView_DeleteItemsSelected($hLVHandle2)

    case $yellow
    _GUICtrlListView_DeleteAllItems($hLVHandle2)
    FileDelete($playlistpath)
    case $blue
    ShellExecute($path & 'playlist.m3u')

    EndSwitch
    WEnd

    [/autoit]


    beim grünen button, also dem der das ausgewählte item löschen soll hab ich noch ein kleines problem.
    dort müsste dann die playliste überschrieben werden und zwar mit allen sich noch im listview2 befindenden items.
    ich hab jetzt aber bei den Listview funktionen nichts passendes gefunden.

    allgemein wäre es schöner wenn man statt dem ersten listview eine art browser hätte mit dem man durch die verzeichnisse seines computer browsen kann.
    hat sowas schonmal jemand innerhalb einer gui gemacht und lust mir zumindest den ansatz zu erklären?

  • Winamp Playliste erstellen

    • nuts
    • 11. Dezember 2008 um 21:54

    thx.
    nicht ganz was ich wollte aber ich glaube damit komme ich weiter.

  • Winamp Playliste erstellen

    • nuts
    • 11. Dezember 2008 um 20:53

    hey,

    ich versuche gerade ein kleines prog. zu schreiben mit dem ich mir eine playliste für winamp erstellen kann.
    abspeicherbar muss diese gar nicht umbedingt sein, dass klappt dann aus dem winamp heraus.

    hier mal die basis version.

    Spoiler anzeigen
    [autoit]


    #include<GuiListView.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #Include <File.au3>
    #Include <Array.au3>
    #include<ButtonConstants.au3>

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

    ;Form1
    $Form1 = GUICreate("Aufnahmen", 1000, 700, 195, 112)

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

    ;Auswahl
    Global $path = "D:\Mp3\MP3s\"
    Global $Header = "Titel"
    Global $ListView = GUICtrlCreateListView($header, 0, 20, 600, 300, $LVS_SHOWSELALWAYS)
    GUICtrlSetFont($ListView, 16)
    Global $hLVHandle = GUICtrlGetHandle($ListView)
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Titel", 595, 0)
    $red = GUICtrlCreateButton("Tab", 10, 400, 100, 60)
    GUICtrlSetBkColor($red, "0xFF0000")
    $green = GUICtrlCreateButton("Untab", 130, 400, 100, 60)
    GUICtrlSetBkColor($green, "0x006400")
    $yellow = GUICtrlCreateButton("Übergeben", 250, 400, 100, 60)
    GUICtrlSetBkColor($yellow, "0xFFFF00")
    $blue = GUICtrlCreateButton("Zurück", 370, 400, 100, 60)
    GUICtrlSetBkColor($blue, "0x0000FF")
    GUISetState(@SW_SHOW)

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


    $FileList=_FileListToArray($path)
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf
    ;_ArrayDisplay($FileList,"$FileList")
    ;MsgBox(1, "", $Filelist[5])
    For $i = 1 to $FileList[0]
    GUICtrlCreateListViewItem($Filelist[$i] , $ListView)
    Next

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

    While 1
    $Msg = GUIGetMsg(1)
    Switch $Msg[0]
    Case $GUI_EVENT_CLOSE ; Fenster schließen
    Exit
    case $red
    $Item = _GUICtrlListView_GetItemText($hLVHandle, _GUICtrlListView_GetSelectedIndices($hLVHandle))
    ;msgbox(1, "", $path & $item)
    ShellExecute($path & $item)
    EndSwitch
    Wend

    [/autoit]

    aber irgendwie komme ich an diesem punkt mangels guter ideen nicht weiter.
    wenn ich in der listbox per strg+klick mehrere items markiere wird trotzdem nur der erste titel übergeben. irgendwie komisch ich dachte _GUICtrlListView_GetItemText($hLVHandle, _GUICtrlListView_GetSelectedIndices($hLVHandle)) gibt alle markierten zurück? dem scheint aber leider nicht so zu sein.

    ich hab noch übelegt markierte items per buttonsklick in ein zweites listview zu übertragen und dann den inhalt des ganzen zweiten listviews an winamp zu übergeben (vielleicht aus den infos des zweiten listview eine playliste im winamp format erstellen und über shellexecute aufrufen?).
    mit einem listview wäre es halt einfacher, aber leider bekomme ich mehrere markierte items eben nicht übergeben.


    am ende sollte das ganze prog. wieder nur über 4 farbtasten, die hoch/runter + links/recht tasten und eine ok taste bedienbar sein (über eine fernbedienung eben).

    wie würdet ihr sowas lösen? freue mich schon auf eure vorschläge.

    gruß nuts

    P.S. winamp fernsteuern geht vermutlich am einfachsten über controlsend?

  • Frage zu den Objects

    • nuts
    • 2. Dezember 2008 um 18:40

    kurze zwischenfrage:

    wie baue ich dann noch back/forward buttons ein? mit _IEAction klappts bei mir leider nicht.

  • _FileListToArray richtig anwenden.

    • nuts
    • 23. November 2008 um 19:43
    Zitat von blubbstar

    Worin besteht das Problem, wenn du nur den Dateinamen bekommst und nicht den ganzen Pfad? Du benötigst den Pfad bei _FileListToArray also musst du ihn ja vorher definieren, am besten in einer Variable. Beim Aufrufen einfach die Variable + Filename benutzen.


    Oh mann, stimmt :D . Manchmal sieht man den Wald vor lauter Bäumen nicht ..

    Dann mach ich mal weiter mit dem Skript. Thx

  • _FileListToArray richtig anwenden.

    • nuts
    • 23. November 2008 um 19:31

    Hey,

    folgendes möchte ich gern machen:

    Ein Verzeichnis einlesen und die dort vorhandenen Dateien in einem ListView anzeigen.

    Mein Ansatz:

    Spoiler anzeigen
    [autoit]


    #include<GuiListView.au3>
    #include<GUIConstantsEx.au3>
    #include<ListViewConstants.au3>
    #Include <File.au3>
    #Include <Array.au3>

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

    ;Form1
    $Form1 = GUICreate("Aufnahmen", 1000, 700, 195, 112)

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

    ;Auswahl
    $ListView = GUICtrlCreateListView("Name | Pfad", 0, 20, 600, 300, $LVS_SHOWSELALWAYS)
    $red = GUICtrlCreateButton("Rot", 10, 400, 100, 60)
    GUICtrlSetBkColor($red, "0xFF0000")
    $green = GUICtrlCreateButton("Grün", 130, 400, 100, 60)
    GUICtrlSetBkColor($green, "0x006400")
    $yellow = GUICtrlCreateButton("Gelb", 250, 400, 100, 60)
    GUICtrlSetBkColor($yellow, "0xFFFF00")
    $blue = GUICtrlCreateButton("Blau", 370, 400, 100, 60)
    GUICtrlSetBkColor($blue, "0x0000FF")
    GUISetState(@SW_SHOW, $Form1)

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

    While 1
    $Msg = GUIGetMsg(1)
    Switch $Msg[0]
    Case $GUI_EVENT_CLOSE ; Fenster schließen
    Exit
    case $red

    $FileList=_FileListToArray("D:\Mp3\MP3s")
    If @Error=1 Then
    MsgBox (0,"","No Files\Folders Found.")
    Exit
    EndIf
    _ArrayDisplay($FileList,"$FileList") ;nur zur kontrolle
    MsgBox(1, "", $Filelist[5]) ;nur zur kontrolle
    For $i = 1 to $FileList[0]
    GUICtrlCreateListViewItem($Filelist[$i] , $ListView)
    Next
    EndSwitch
    Wend

    [/autoit]


    Ich habe aber Schwierigkeiten mit dem Rückgabewert des Arrays. Laut Hilfe sollte bei den default Einstellungen der Filename und das komplette Verzeichnis zurückgegeben werden (was eh komisch ist, ist ja ein dimensionales Array? aber naja mit Arrays hab ichs nicht so).
    Ich bräuchte auch beide Infos, da ich über den Pfad die Dateien über Shellexecute später aufrufen will.
    Laut msgbox und _ArrayDisplay wird aber nur der Filename zurückgegeben :(
    Dementsprechend wird der Listviewbox auch nur der Name und nicht die Pfad eingetragen.

    Beim setzen der flags bricht der Skript auch immer mit einem Fehler ab (zumal 0 eh richtig sein müsste).

    Jemand ne Idee?

    Gruß nuts

  • GUI Fensterschließen

    • nuts
    • 22. November 2008 um 17:10

    Du must eben den auszuführenden Befehl nach dem drücken des roten x abändern.

    z.b. über @SW_HIDE/@SW_Show

    [autoit]


    GUISetState(@SW_HIDE, $NebenGUI)
    GUISetState(@SW_SHOW, $HauptGUI)

    [/autoit]

    oder über

    [autoit]

    GUIDelete

    [/autoit]


    das jeweilige Fenster wieder löschen.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™