Ich hab für einen Freund ein Prog geschrieben mit denen er seine Alben archivieren kann.
Da vielleicht einige andere sowas auch gerne hätten wollte ich es euch nicht vorenthalten^^
Es sind maximal 1000 Bands, mit je maximal 500 Alben, zu verwalten.
Quelltext:
Spoiler anzeigen
#include <GuiConstants.au3>
#include <File.au3>
#include <Array.au3>
#include <GuiList.au3>
#cs ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]AutoIt Version: 3.2.8.1
Author: Nozdrum
#ce ----------------------------------------------------------------------------
[/autoit] [autoit][/autoit] [autoit]$gui_main = GUICreate("BManager",600,370)
$gui_main_menuD = GUICtrlCreateMenu("Datei")
$gui_main_menuD_new = GUICtrlCreateMenuItem("Neue Liste anlegen",$gui_main_menuD)
$gui_main_menuD_save = GUICtrlCreateMenuItem("Liste Speichern",$gui_main_menuD)
$gui_main_menuD_save2 = GUICtrlCreateMenuItem("Liste Speichern unter",$gui_main_menuD)
$gui_main_menuD_laden = GUICtrlCreateMenuItem("Liste Laden",$gui_main_menuD)
$gui_main_menuD_end = GUICtrlCreateMenuItem("Beenden",$gui_main_menuD)
$gui_main_menuB = GUICtrlCreateMenu("Bearbeiten")
$gui_main_menuB_b1 = GUICtrlCreateMenuItem("Band hinzufügen",$gui_main_menuB)
$gui_main_menuB_b2 = GUICtrlCreateMenuItem("Album hinzufügen",$gui_main_menuB)
$gui_main_menuB_b3 = GUICtrlCreateMenuItem("Band entfernen",$gui_main_menuB)
$gui_main_menuB_b4 = GUICtrlCreateMenuItem("Album entfernen",$gui_main_menuB)
$gui_main_list1 = GUICtrlCreateList("",166,20,210,330)
$gui_main_list2 = GUICtrlCreateList("",382,20,210,330)
$gui_main_label1 = GUICtrlCreateLabel("Bands",166,5,100,15)
$gui_main_label2 = GUICtrlCreateLabel("Alben",382,5,100,15)
$gui_main_b1 = GUICtrlCreateButton("Band hinzufügen",6,20,150,25)
$gui_main_b2 = GUICtrlCreateButton("Album hinzufügen",6,55,150,25)
$gui_main_b3 = GUICtrlCreateButton("Band entfernen",6,253,150,25)
$gui_main_b4 = GUICtrlCreateButton("Album entfernen",6,283,150,25)
$gui_main_b5 = GUICtrlCreateButton("Beenden",6,313,150,25)
$gui_main_b6 = GUICtrlCreateButton("Liste speichern",6,90,150,25)
GUISetState(@SW_SHOW)
Global $f[1000][500]
Global $anz=0
Global $changed=False
Global $pfad=""
While 1
$msg = GUIGetMsg()
Select
Case ( $msg = $GUI_EVENT_CLOSE ) Or ( $msg = $gui_main_menuD_end ) Or ( $msg = $gui_main_b5)
Local $w=7
If $changed=True Then
$w = MsgBox(3,"BManager","Wollten Sie die Änderungen speichern?")
EndIf
If $w = 6 Then
BData_save($f,$anz,$changed,$pfad)
EndIf
If ( $w = 7 ) Or ( $w = 6 ) Then
Exit
EndIf
Case ( $msg = $gui_main_menuD_new )
BData_new($anz,$changed)
Case ( $msg = $gui_main_b1 ) Or ( $msg = $gui_main_menuB_b1 )
Band_add($f,$anz,$changed)
Case ( $msg = $gui_main_b2 ) Or ( $msg = $gui_main_menuB_b2 )
Album_add($f,$anz,$changed)
Case ( $msg = $gui_main_b3 ) Or ( $msg = $gui_main_menuB_b3 )
Band_del($f,$anz,$changed)
Case ( $msg = $gui_main_b4 ) Or ( $msg = $gui_main_menuB_b4 )
Album_del($f,$changed)
Case $msg = $gui_main_list1
Albumchange($f,$anz)
Case ( $msg = $gui_main_b6 ) Or ( $msg = $gui_main_menuD_save )
BData_save($f,$anz,$changed,$pfad)
Case $msg = $gui_main_menuD_save2
BData_save2($f,$anz,$changed,$pfad)
Case $msg = $gui_main_menuD_laden
BData_load($f,$anz,$changed,$pfad)
EndSelect
Sleep(10)
WEnd
Func BandSearch($f,$anz,$name)
For $i=0 To $anz
If $f[$i][1]=$name Then Return $i
Next
Return -1
EndFunc
Func AlbumSearch($f,$index,$name)
For $i=1 To $f[$index][0]
If $f[$index][$i+1]=$name Then Return $i
Next
Return -1
EndFunc
Func _Array2DDelete(ByRef $f,$index, $anz,$anz2)
For $i=$index to $anz
For $j=0 To $anz2+1
$f[$i][$j]=$f[$i+1][$j]
Next
Next
EndFunc
Func _arraydel(ByRef $f,$index,$nummer)
For $i=$nummer To $f[$index][0]
$f[$index][$i+1]=$f[$index][$i+2]
Next
$f[$index][$f[$index][0]+1]=""
EndFunc
Func Albumchange($f,$anz)
$t1 = _GUICtrlListGetSelItemsText($gui_main_list1)
If IsArray($t1) Then
$index = BandSearch($f,$anz,$t1[1])
_GUICtrlListClear($gui_main_list2)
For $i=1 to $f[$index][0]
_GUICtrlListAddItem($gui_main_list2,$f[$index][$i+1])
Next
EndIf
EndFunc
Func BData_new(ByRef $anz, ByRef $changed)
Local $w=7
If $changed=True Then
$w = MsgBox(3,"BManager","Wollten Sie die Änderungen speichern?")
EndIf
If $w = 6 Then
BData_save($f,$anz,$changed,$pfad)
EndIf
If ( $w = 7 ) Or ( $w = 6 ) Then
_GUICtrlListClear($gui_main_list1)
_GUICtrlListClear($gui_main_list2)
$anz=0
$changed=False
EndIf
EndFunc
Func Band_add(ByRef $f,ByRef $anz,ByRef $changed)
$gui_sec = GUICreate("Neue Band",218,68)
$gui_sec_input = GUICtrlCreateInput("Bandname",6,6,206,20)
$gui_sec_b1 = GUICtrlCreateButton("Abbrechen",6,37,100,25)
$gui_sec_b2 = GUICtrlCreateButton("Hinzufügen",112,37,100,25)
GUISetState(@SW_SHOW)
Send("{SHIFTDOWN}{END}{SHIFTUP}")
While 1
$msg = GUIGetMsg()
Select
Case ( $msg = $gui_sec_b1 ) Or ( $msg=$GUI_EVENT_CLOSE)
GUIDelete($gui_sec)
ExitLoop
Case ( $msg = $gui_sec_b2 ) And ( Not(StringIsSpace(GUICtrlRead($gui_sec_input))) ) And ( Not (GUICtrlRead($gui_sec_input)="") )
If BandSearch($f,$anz,GUICtrlRead($gui_sec_input)) =-1 Then
$anz +=1
$f[$anz][0]="0"
$f[$anz][1]=GUICtrlRead($gui_sec_input)
_GUICtrlListAddItem($gui_main_list1,$f[$anz][1])
GUIDelete($gui_sec)
$changed=True
ExitLoop
Else
MsgBox(0,"BManager","Band bereits vorhanden")
EndIf
EndSelect
Sleep(10)
WEnd
EndFunc
Func Album_add(ByRef $f,$anz,ByRef $changed)
$t1 = _GUICtrlListGetSelItemsText($gui_main_list1)
If IsArray($t1)=True Then
$gui_thr = GUICreate("Neue Band",218,68)
$gui_thr_input = GUICtrlCreateInput("Albumname",6,6,206,20)
$gui_thr_b1 = GUICtrlCreateButton("Abbrechen",6,37,100,25)
$gui_thr_b2 = GUICtrlCreateButton("Hinzufügen",112,37,100,25)
GUISetState(@SW_SHOW)
Send("{SHIFTDOWN}{END}{SHIFTUP}")
$index = BandSearch($f,$anz,$t1[1])
While 1
$msg = GUIGetMsg()
Select
Case ( $msg = $gui_thr_b1 ) Or ( $msg=$GUI_EVENT_CLOSE)
GUIDelete($gui_thr)
ExitLoop
Case ( $msg = $gui_thr_b2 ) And ( Not(StringIsSpace(GUICtrlRead($gui_thr_input))) ) And ( Not (GUICtrlRead($gui_thr_input)="") )
If AlbumSearch($f,$index,GUICtrlRead($gui_thr_input))=-1 Then
$f[$index][0] +=1
$f[$index][$f[$index][0]+1]=GUICtrlRead($gui_thr_input)
_GUICtrlListAddItem($gui_main_list2,$f[$index][$f[$index][0]+1])
GUIDelete($gui_thr)
$changed=True
ExitLoop
Else
MsgBox(0,"BManager","Album bereits vorhanden")
EndIf
EndSelect
Sleep(10)
WEnd
Else
MsgBox(0,"Fehler","Keine Band ausgewählt!")
EndIf
EndFunc
Func Band_del(ByRef $f,ByRef $anz,ByRef $changed)
$t1 = _GUICtrlListGetSelItemsText($gui_main_list1)
If IsArray($t1) Then
Local $anz2=0
For $i=1 To $anz
If $f[$i][0]> $anz2 Then
$anz2=$f[$i][0]
EndIf
Next
$index = BandSearch($f,$anz,$t1[1])
_Array2DDelete($f,$index,$anz,$anz2)
$t1 = _GUICtrlListSelectedIndex($gui_main_list1)
_GUICtrlListDeleteItem($gui_main_list1,$t1)
_GUICtrlListClear($gui_main_list2)
$anz -=1
$changed=True
EndIf
EndFunc
Func Album_del(ByRef $f,ByRef $changed)
$t1 = _GUICtrlListGetSelItemsText($gui_main_list1)
$t2 = _GUICtrlListGetSelItemsText($gui_main_list2)
If IsArray($t1) And IsArray($t2) Then
$index = BandSearch($f,$anz,$t1[1])
$nummer = AlbumSearch($f,$index,$t2[1])
$t1 = _GUICtrlListSelectedIndex($gui_main_list2)
_GUICtrlListDeleteItem($gui_main_list2,$t1)
_arraydel($f,$index,$nummer)
$f[$index][0] -=1
$changed=True
EndIf
EndFunc
Func BData_save($f,$anz,ByRef $changed,ByRef $pfad)
If $pfad="" Then
$pfad = FileSaveDialog("Liste speichern unter",@ScriptDir & "\Bands","(*.txt)")
EndIf
If $pfad<>"" Then
If Not(StringInStr($pfad,".txt")) Then
$pfad=$pfad & ".txt"
EndIf
$phandle = FileOpen($pfad,2)
Local $t1[500]
For $i=1 To $anz
For $j=0 To $f[$i][0]+1
$t1[$j]=$f[$i][$j]
If ( $j=0 ) And ( $t1[0]="" ) Then
$t1[0]=0
EndIf
$t1[$j]=$t1[$j] & "|"
FileWrite($pfad,$t1[$j])
Next
FileWrite($pfad,@CRLF)
Next
FileClose($phandle)
$changed=False
EndIf
EndFunc
Func BData_save2($f,$anz,ByRef $changed,ByRef $pfad)
$pfad = FileSaveDialog("Liste speichern unter",@ScriptDir & "\Bands","(*.txt)")
If $pfad<>"" Then
BData_save($f,$anz,$changed,$pfad)
EndIf
EndFunc
Func BData_load(ByRef $f,ByRef $anz,ByRef $changed,$pfad)
Local $w=7
If $changed=True Then
$w = MsgBox(3,"BManager","Wollten Sie die Änderungen speichern?")
EndIf
If $w = 6 Then
BData_save($f,$anz,$changed,$pfad)
EndIf
If ( $w = 7 ) Or ( $w = 6 ) Then
$pfad = FileOpenDialog("Welche Liste wollen Sie laden",@ScriptDir & "\Bands","(*.txt)")
If $pfad<>"" Then
$phandle = FileOpen($pfad,1)
Local $t1[500]
$anz = _FileCountLines($pfad)
For $i=1 to $anz
$t1=StringSplit(FileReadLine($pfad,$i),"|")
_ArrayDelete($t1,0)
For $j=0 To $t1[0]+1
$f[$i][$j]=$t1[$j]
Next
_GUICtrlListAddItem($gui_main_list1,$f[$i][1])
Next
FileClose($phandle)
$changed=False
EndIf
EndIf
EndFunc
Auf Kommentare hatte ich keinen Bock^^
edit: Grad noch 2 Bugs entfernt
edit2: Oo noch einen schwerwiegenden Bug beim Löschen von Bands gefixt