Hi zusammen, habe vorgestern angefangen mit AutoIT zu programmieren (vorher hatte ich 2Monate C++ und C# gemacht) die waren mir aber zu Komplex und ich wollte erstmal hiermit anfangen.
Habe gestern einen Terminkalender programmiert (mit bischen beihilfe von SEuBo) den ich euch hier mal vorstellen will.
Der ganze Terminkalender ist Passwortgeschütz und noch net ganz fertig.
Das standard-Passwort ist "12345".
Werde hier einfach mal den Code posten und ihr könnt dann ja mal reinschauen.
#include <Array.au3>
#include <GuiListView.au3>
$input = InputBox("Passwort eingeben", "Bitte geben Sie das Passwort ein", "", "*")
If $input <> IniRead(@ScriptDir & "\config.ini", "data", "passwort", "12345") Then
Exit MsgBox(0, "", "Falsches Passwort")
Else
If $input = "12345" Then
$neup = InputBox("Neues Passwort", "Bitte geben Sie ein neues Passwort ein", "", "*")
IniWrite(@ScriptDir & "\config.ini", "data", "passwort", $neup)
EndIf
EndIf
Opt("TrayMenuMode", 1)
TraySetClick(16)
$hMax = TrayCreateItem("Anzeigen")
$hGhost = TrayCreateItem("Verstecken")
TrayCreateItem("")
$hTray = TrayCreateItem("Schliessen")
$SEC = @SEC
$GUI = GUICreate("Terminkalender", 440, 400)
GUISetBkColor(0xFACBAFF)
$ccal = GUICtrlCreateMonthCal("Kalender", 20, 225, 400, 160)
GUISetState()
;~ Liste für termine
$cListView = GUICtrlCreateListView("Termin|Beschreibung|Datum|Uhrzeit", 20, 30, 400, 150)
$hListView = GUICtrlGetHandle($cListView)
_GUICtrlListView_SetColumnWidth($hListView, 1, 175) ; für Beschreibung abstand
_GUICtrlListView_SetColumnWidth($hListView, 0, 100) ; für Termin abstand
;~ Buttons
$cNeu = GUICtrlCreateButton("Neu", 20, 2, 100, 20)
$csave = GUICtrlCreateButton("Speichern", 220, 2, 100, 20)
$load = GUICtrlCreateButton("Laden", 120, 2, 100, 20)
$cLoeschen = GUICtrlCreateButton("Löschen", 320, 2, 100, 20)
$such = GUICtrlCreateInput("", 20, 185, 200, 30)
$suchGo = GUICtrlCreateButton("Suchen", 240, 185, 100, 30)
$uhr = GUICtrlCreateLabel(@HOUR & ":" & @MIN & ":" & @SEC, 360, 185, 50, 20)
;~ Contextmenü
$contextmenu = GUICtrlCreateContextMenu($cListView)
$iNeu = GUICtrlCreateMenu("Neu", $contextmenu)
$iDel = GUICtrlCreateMenuItem("Löschen", $contextmenu)
$iEin = GUICtrlCreateMenuItem("Eintrag", $iNeu)
While 1
$nMsg = GUIGetMsg() ; Fragt ab, was auf der GUI passiert, und speichert das in $nMSg
Switch $nMsg ; Welchen Wert hat $nMSg grade?
Case -3 ; $nMsg = -3 [also das X oben rechts]
Exit
Case $cNeu, $iEin
$sInput = InputBox("Neuer Termin", "Bitte Termin eingeben:")
$sbeschreibung = InputBox("Neuer Eintrag:", "Bitte geben Sie die Beschreibung ein!")
$suhrzeit = InputBox("Neuer Eintrag:", "Bitte geben Sie die Uhrzeit ein!")
$sdatum = InputBox("Neuer Eintrag:", "Bitte geben Sie das Datum ein!")
GUICtrlCreateListViewItem($sInput & "|" & $sbeschreibung & "|" & $sdatum & "|" & $suhrzeit, $cListView)
Case $csave
$PathSave = FileSaveDialog("Speichern unter", @DesktopDir, "Textdateien (*.txt)")
If StringRight($PathSave, 4) <> ".txt" Then $PathSave &= ".txt"
$aArrayListView = _ListViewToArray()
_FileWriteFromArray2D($PathSave, $aArrayListView)
Case $load
$PathLoad = FileOpenDialog("Datei öffnen", @DesktopDir, "Textdateien (*.txt)")
Local $ARRAY
_FileReadToArray2D($PathLoad, $ARRAY, "|")
_ArrayDelete($ARRAY, 0)
_GUICtrlListView_AddArray($hListView, $ARRAY)
Case $cLoeschen, $iDel
_GUICtrlListView_DeleteItemsSelected($hListView)
Case $suchGo, $such
$suchterm = GUICtrlRead($such)
$gefunden = _GUICtrlListView_FindInText($hListView, $suchterm)
_GUICtrlListView_ClickItem($hListView, $gefunden)
EndSwitch
$TrayMessage = TrayGetMsg()
Switch $TrayMessage
Case $hTray
Exit
EndSwitch
If @SEC <> $SEC Then
$SEC = @SEC
GUICtrlSetData($uhr, @HOUR & ":" & @MIN & ":" & @SEC)
EndIf
WEnd
Func _ListViewToArray()
Local $iCnt = _GUICtrlListView_GetItemCount($hListView) ; Anzahl der Zeilen auslesen.
If $iCnt < 1 Then Return SetError(1) ; Falls kein Eintrag, dann Funktion verlassen.
Dim $aRet[$iCnt][4] ; Array erstellen. Mit genauso vielen Zeilen wie die Listview einträge hat, und 4 Spalten (termin, beschreibung usw)
For $i = 0 To $iCnt - 1 ; Alle Elemente der Listview in einer For-Next Schleife durchgehen. Wir starten bei 0 (erste Zeile) und hören bei $iCnt-1 auf. (icnt ist ja die anzahl der Zeilen. -1 müssen wir machen, weil die Zeilen ja bei 0 beginnen, und nicht bei 1)
$aRet[$i][0] = _GUICtrlListView_GetItemText($hListView, $i, 0) ; Kannst dir ja denken
$aRet[$i][1] = _GUICtrlListView_GetItemText($hListView, $i, 1)
$aRet[$i][2] = _GUICtrlListView_GetItemText($hListView, $i, 2)
$aRet[$i][3] = _GUICtrlListView_GetItemText($hListView, $i, 3)
Next
Return $aRet ; Array zurückgeben, damit wir den in Zeile 33 in eine Variable speichern können.
EndFunc ;==>_ListViewToArray
;==========================================================================================================================================
; Function: _FileWriteFromArray2D($FILEPATH, $ARRAY [, $iROWstart=0 [, $iROWend=0 [, $iCOLstart=0 [, $iCOLend=0 [, $DELIM='|']]]]])
;
; Description: Write 1D/2D array to file, 2D with delimiter between every entry
;
; Parameter(s): $FILEPATH - path/filename of the file to be write
; $ARRAY - array to write from
; optional $iROWstart - start row-index, default 0
; optional $iROWend - end row-index, default Ubound(array)-1
; optional $iCOLstart - start column-index, default 0
; optional $iCOLend - end column-index, default Ubound(array,2)-1
; optional $DELIM - delimiter for 2D-array entries, default '|'
;
; Requirement(s): None
;
; Return Value(s): On Success - Returns -1
; On Failure - Returns 0 and sets @error = 1 (given array is'nt array); @error = 2 (unable to open filepath)
;
; Note: If $iROWstart > $iROWend or $iCOLstart > $iCOLend the values will be swapped among
;
; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
;==========================================================================================================================================
Func _FileWriteFromArray2D($FILEPATH, $ARRAY, $iROWstart = 0, $iROWend = 0, $iCOLstart = 0, $iCOLend = 0, $DELIM = '|')
If Not IsArray($ARRAY) Then
SetError(1)
Return 0
EndIf
Local $Ubound = UBound($ARRAY)
If $iROWend = 0 Then $iROWend = $Ubound - 1
Local $fh = FileOpen($FILEPATH, 2)
If $fh = -1 Then
SetError(2)
Return 0
EndIf
Select
Case $iROWstart < 0 Or $iROWstart > $Ubound - 1
$iROWstart = 0
ContinueCase
Case $iROWend < 0 Or $iROWend > $Ubound - 1
$iROWend = $Ubound - 1
ContinueCase
Case $iROWstart > $iROWend
$tmp = $iROWstart
$iROWstart = $iROWend
$iROWend = $tmp
EndSelect
Local $Ubound2nd = UBound($ARRAY, 2)
If @error = 2 Then
For $i = $iROWstart To $iROWend
FileWriteLine($fh, $ARRAY[$i])
Next
Else
If $iCOLend = 0 Then $iCOLend = $Ubound2nd - 1
Select
Case $iCOLstart < 0 Or $iCOLstart > $Ubound2nd - 1
$iCOLstart = 0
ContinueCase
Case $iCOLend < 0 Or $iCOLend > $Ubound2nd - 1
$iCOLend = $Ubound2nd - 1
ContinueCase
Case $iCOLstart > $iCOLend
$tmp = $iCOLstart
$iCOLstart = $iCOLend
$iCOLend = $tmp
EndSelect
For $i = $iROWstart To $iROWend
$tmp = ''
For $k = $iCOLstart To $iCOLend
If $k < $iCOLend Then
$tmp &= $ARRAY[$i][$k] & $DELIM
Else
$tmp &= $ARRAY[$i][$k]
EndIf
Next
FileWriteLine($fh, $tmp)
Next
EndIf
FileClose($fh)
Return -1
EndFunc ;==>_FileWriteFromArray2D
;==========================================================================================================================================
; Function: _FileReadToArray2D($FILEPATH, $ARRAY [, $DELIM=-1])
;
; Description: Read 1D/2D array from file, if $DELIM is given (<> -1) 2D array will created
;
; Parameter(s): $FILEPATH - path/filename of the file to read in an array
; $ARRAY - array variable to hold readed data
; optional $DELIM - delimiter for 2D-array entries, default -1 (none 2D-array)
;
; Requirement(s): None
;
; Return Value(s): On Success - Returns -1
; On Failure - Returns 0 and sets @error = 1 (given file are not seperated with given delimiter or count of delimiters
; are not equal); @error = 2 (unable to open filepath)
;
; Note: If given file is delimited to create 2D-array ALL lines need the same count of delimiters, otherwise an error occurs!
;
; Author(s): BugFix ( [email='bugfix@autoit.de'][/email] )
;==========================================================================================================================================
Func _FileReadToArray2D($FILEPATH, ByRef $ARRAY, $DELIM = -1)
Local $fh = FileOpen($FILEPATH, 0), $line, $var, $n = 1
If $fh = -1 Then
SetError(2)
Return 0
EndIf
If $DELIM <> -1 Then
$line = FileReadLine($fh, 1)
$var = StringSplit($line, $DELIM)
If IsArray($var) Then
$Ubound2nd = $var[0]
Local $AR[1][$Ubound2nd]
$AR[0][0] = 0
Else
SetError(1)
Return 0
EndIf
While 1
$line = FileReadLine($fh, $n)
If @error = -1 Then ExitLoop
$var = StringSplit($line, $DELIM)
If IsArray($var) Then
ReDim $AR[UBound($AR) + 1][$Ubound2nd]
For $i = 0 To $Ubound2nd - 1
$AR[UBound($AR) - 1][$i] = $var[$i + 1]
Next
$AR[0][0] += 1
Else
SetError(1)
Return 0
EndIf
$n += 1
WEnd
Else
Local $AR[1]
$AR[0] = 0
While 1
$line = FileReadLine($fh, $n)
If @error = -1 Then ExitLoop
ReDim $AR[UBound($AR) + 1]
$AR[UBound($AR) - 1] = $line
$AR[0] += 1
$n += 1
WEnd
EndIf
FileClose($fh)
$ARRAY = $AR
Return -1
EndFunc ;==>_FileReadToArray2D