Hey,
ich habe hier eine merkwürdige Beobachtung gemacht.
Beispiel: Nach dem Listview wird ein weiteres GUI-Element (der Button) hinzugefügt
Spoiler anzeigen
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
Global $sHeader = "Aufgabe|Erstellt am|Termin"
$Form = GUICreate("test", 633, 447, 193, 125)
$ListView = GUICtrlCreateListView($sHeader, 0, 0, 400, 300)
$hListView = GUICtrlGetHandle($ListView)
_GUICtrlListView_SetColumn($hListView, 0, "Column 1", 100, 0)
_GUICtrlListView_SetColumn($hListView, 1, "Column 2", 100, 0)
_GUICtrlListView_SetColumn($hListView, 2, "Column 3", 100, 0)
For $i = 1 To 10
_GUICtrlListView_AddItem($hListView, "Row" & $i & ": Col 1", $i-1)
For $j = 1 To 2
_GUICtrlListView_AddSubItem ($hListView, $i-1, "Row" & $i & ": Col " & $j+1, $j)
Next
Next
Global $hDelAll = GUICtrlCreateButton("Test", 500, 300, 90, 35)
GUISetState(@SW_SHOW, $form)
[/autoit] [autoit][/autoit] [autoit]While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Beispiel2: Nach dem Listview wird kein weiteres GUI-Element hinzugefügt.
Klickt man ein Listviewitem an und "deaktiviert" man es durch einen Klick ins freie Listview bleibt bei Beispiel 2 eine Umrandung stehen. Meiner Meinung nach sieht das sehr unschön aus
Bei Beispiel 1 ist das nicht so.
Hintergrund: Ich habe das Beispiel von Bugfix zum Färben einzelner Listvie-Items in mein Skript eingebaut und dabei wird sowie ich das verstanden hab das ganze "neu gezeichnet". Der Vorgang hat die selbe Auswirkung wie in den Beispielen und ich weiss nicht wie ich das Umgehen kann.
Anbei noch das ganze Skript:
Spoiler anzeigen
#include <WindowsConstants.au3>
#include <ListViewConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <Guilistview.au3>
#include <File.au3>
#include <StaticConstants.au3>
#Include <Date.au3>
#include <EditConstants.au3>
#include <Misc.au3>
#include <StructureConstants.au3>
#include <WinAPI.au3>
#NoTrayIcon
Global $hFont, $defColLV = 0x000000, $defBkColLV = 0xFFFFFF
Global $aSubItemSet[1][5] = [[-1]]
Global $setIndex, $setSubIndex
Global Const $N_DBLCLK = -3
global $titel = "Nuts-Aufgabenplaner"
if _Singleton($titel,1) = 0 then
MsgBox(0, "Achtung", "Anwendung läuft bereits!", 3)
exit
endif
Global $sHeader = "Aufgabe|Erstellt am|Termin|Status|Schlussbemerkung" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
Global $iEdit = -1
Global $sDBFile = IniRead(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB","")
Global $dbnew
Global $todo = "ToDo"
Global $done = "Done"
Global $HA = 630
Global $VA = 1100
HotKeySet("^a", "Checktoggle")
HotKeySet("^e", "Edit")
HotKeySet("^s", "_SetSelected")
HotKeySet("{DELETE}" ,"_DelSelected")
HotKeySet("!s" ,"Save")
HotKeySet("!t", "Termin")
#Region Hauptfenster
Global $bfarbe = 0xC0C0C0
$LVStyle = BitOR($LVS_REPORT, $LVS_SINGLESEL, $LVS_SHOWSELALWAYS )
$ExStyle = BitOR($LVS_EX_FULLROWSELECT, $WS_EX_DLGMODALFRAME, $LVS_EX_CHECKBOXES, $LVS_EX_DOUBLEBUFFER)
Global $hGui = GUICreate($titel ,$VA, $HA) ; Hauptfenster erstellen
GUISetIcon(@ScriptDir & "\Bilder\check.ico", -1)
GUISetBkColor ($bfarbe)
;;;;;Listview erstellen
Global $hListView = GUICtrlCreateListView($sheader, 0, 110, 1100, 500, $LVStyle, $ExStyle) ; Listview erstellen
Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
_GUICtrlListView_SetColumn($hLVHandle, 0, "Aufgabe", 400, 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", 455, 0)
;;;Aktiver User
Global $hinput = Guictrlcreateinput("", 100, 40, 250, 31, BitOR($ES_READONLY, $ES_AUTOHSCROLL), $WS_EX_TRANSPARENT)
GUICtrlSetBkColor ($hinput,$bfarbe)
GUICtrlSetColor($hinput, 0x4169E1)
GUIctrlcreatepic(@ScriptDir & "\Bilder\user-48x48.bmp", 35, 31, 48, 48)
GUICtrlCreateGroup('Aktiver Benutzer', 20, 10, 345, 81)
GUICtrlSetFont($hinput, 14, 800, 0)
;;;;;;;;Hauptmenü
Global $hMenu = GUICtrlCreateMenu("Menü") ;Erstellt das Menü für die HauptGUI
Global $hcUser = GUICtrlCreateMenuItem("Neuer Benutzer", $hmenu) ; der 1. Kontextmenüeintrag
Global $hcopen = GUICtrlCreateMenuItem("Öffnen", $hmenu)
Global $hcEinstellungen = GUICtrlCreateMenuItem("Einstellungen", $hmenu)
Global $hcBackup = GUICtrlCreateMenuItem("Backup", $hmenu)
Global $hcspeichern = GUICtrlCreateMenuItem("Speichern", $hmenu)
Global $hcExit = GUICtrlCreateMenuItem("Exit", $hmenu)
;;;;;; Bearbeiten Menü
Global $hbearbeiten = GUICtrlCreateMenu("Bearbeiten")
Global $hccheckall = GUICtrlCreateMenuItem("Check all / Uncheck all (STRG+A)", $hbearbeiten)
Global $hcdelchecked = GUICtrlCreateMenuItem("Delete all checked", $hbearbeiten)
Global $hcNew = GUICtrlCreateMenuItem("Neuer Eintrag (Enter)", $hbearbeiten)
Global $hcEdit = GUICtrlCreateMenuItem("Markierten Eintrag bearbeiten (STRG+E)" , $hbearbeiten)
Global $hcstatus = GUICtrlCreateMenuItem("Status aller gecheckten Items ändern", $hbearbeiten)
;;;Buttons
GUICtrlCreateGroup("Neu" & @CRLF & "(Enter)", 570, 10, 94, 81,Bitor($BS_MULTILINE, $BS_Center))
GUICtrlCreateGroup("Speichern " & @CRLF & "(Alt+S)", 674, 10, 94, 81,Bitor($BS_MULTILINE, $BS_Center))
GUICtrlCreateGroup("Bearbeiten " & @CRLF & "(Strg+E)", 778, 10, 94, 81,Bitor($BS_MULTILINE, $BS_Center))
GUICtrlCreateGroup("Löschen" & @CRLF & "(Entf)", 882, 10, 94, 81,Bitor($BS_MULTILINE, $BS_Center))
GUICtrlCreateGroup("Status ändern" & @CRLF & "(Strg+S)", 986, 10, 94, 81,Bitor($BS_MULTILINE, $BS_Center))
Global $hNew = GUICtrlCreateButton("", 600, 45, 34, 34, BitOR($BS_DEFPUSHBUTTON, $BS_BITMAP)) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
GUICtrlSetImage($hnew,@ScriptDir & "\Bilder\new-32x32.bmp")
Global $hsave = GUICtrlCreateButton("", 704, 45, 34, 34, $BS_BITMAP)
GUICtrlSetImage($hsave,@ScriptDir & "\Bilder\save-32x32.bmp")
Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten" & @CRLF & "(Strg+E)", 808, 45, 34, 34, $BS_BITMAP)
GUICtrlSetImage($hEdit,@ScriptDir & "\Bilder\edit-32x32.bmp")
Global $hdel = GUICtrlCreateButton("Markierten Eintrag löschen" & @CRLF & "(Entf)", 912, 45, 34, 34, $BS_BITMAP)
GUICtrlSetImage($hdel,@ScriptDir & "\Bilder\delete-32x32.bmp")
Global $hstatus = GUICtrlCreateButton("Status ändern" & @CRLF & "(Strg+S)", 1016, 45,34,34, $BS_BITMAP)
GUICtrlSetImage($hstatus,@ScriptDir & "\Bilder\check-32x32.bmp")
;;;Kontextmenü
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
Global $hcmstatus = GUICtrlCreateMenuItem("Status ändern", $hcm)
#EndRegion Hauptfenster
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]#Region Fenster für neuen Eintrag
Global $hGuiNew = GUICreate("Neuer Eintrag", 1100, 140, -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
Global $aInputWidth[$aHeader[0]] = [370, 100, 100, 100, 400] ; hier die Länge (in Pixel) der Inputfelder eintragen
Global $xPos = 2
For $i = 1 To $aHeader[0]
GUICtrlCreateLabel($aHeader[$i], $xPos + 2, 15, 110, 20) ; Überschriften-Label erstellen
GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
$aNew[$i - 1] = GUICtrlCreateInput("", $xPos, 30, $aInputWidth[$i-1], 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
$xPos += $aInputWidth[$i-1] + 5
Next
GUICtrlSetData($aNew[1], @MDAY & "." & @MON & "." & @YEAR) ;Vorgabe für Column1
GUICtrlSetData($anew[2], "ohne") ;Vorgabe für Column2
GUICtrlSetData($anew[3], $todo) ;Vorgabe für Column3
Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 490, 65, 120, 25, $BS_DEFPUSHBUTTON)
#EndRegion Fenster für neuen Eintrag
#Region Fenster für neuen User
Global $hGUIUser = GUICreate("Neuen Benutzer anlegen", 300, 150)
GUISetBkColor (0xeeeeee)
Global $hSaveUser = GUICtrlCreateButton("Speichern", 80, 100, 140, 30)
GUICtrlSetFont($hSaveUser, 10, 600, 0, 'Verdana')
GUICtrlCreateGroup("Benutzername eingeben", 10, 20, 280, 51)
Global $hInputUser = GUICtrlCreateInput("", 20, 40, 260, 21)
GUICtrlSetFont($hinputUser, 10, 600, 0, 'Verdana')
#EndRegion Fenster für neuen User
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]#Region Fenster für Einstellungen
[/autoit] [autoit][/autoit] [autoit]Global $inistartdb = IniRead(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB","")
Global $inibackup = IniRead(@scriptdir & "\konfig.ini", "Einstellungen", "Backup","")
Global $hGUIEinstellungen = GUICreate("Einstellungen", 600, 600, 193, 125)
GUISetBkColor(0xeeeeee)
Global $hSaveEinstellungen = GUICtrlCreateButton("Speichern", 210, 500, 180, 50, 0)
GUICtrlCreateGroup("Verzeichnis der Start Datenbank angeben", 25, 30, 550, 51)
Global $hInputStartDB = GUICtrlCreateInput($inistartdb , 35, 50, 500, 21, BitOR($ES_READONLY, $ES_AUTOHSCROLL))
Global $hButtonOpen = GUICtrlCreateButton("...", 535, 49, 30, 23)
GUICtrlCreateGroup("Backup-Verzeichnis angeben", 25, 100, 550, 51)
Global $hInputBackup = GUICtrlCreateInput($inibackup , 35, 120, 500, 21, BitOR($ES_READONLY, $ES_AUTOHSCROLL))
Global $hButtonOpen2 = GUICtrlCreateButton("...", 535, 119, 30, 23)
#EndRegion Fenster für Einstellungen
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]_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]GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY" )
;GUIRegisterMsg($WM_NOTIFY, "_DoubleClickOnListView")
If FileExists(IniRead(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB","")) Then Load() ; wenn ein Ini-Eintrag existiert, dann entsprechende Datenbank laden
[/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 $hcEinstellungen
GUISetState(@SW_SHOW, $hGuiEinstellungen) ; das Fenster "Einstellungen" anzeigen
GUISetState(@SW_DISABLE, $hGui)
case $hcbackup
Backup()
Case $hSaveUser
NewUser()
Case $hListView ; User hat auf eine Spaltenüberschrift geklickt
_GUICtrlListView_SortItems($hLVHandle, GUICtrlGetState($hListView)) ; Einträge entsprechend sortieren
Case $hNew, $hCMNew ,$hcNew ; 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, $hcEdit ; User hat auf "Eintrag bearbeiten" geklickt
Edit()
;_OneRowSetCol(2, 0xFF0000, 0x48D1CC)
Case $hcopen ; User hat auf "Öffnen" geklickt
If MsgBox(32 + 4, "Öffnen", "Vor dem öffnen alte Datenbank speichern?") = 6 Then Save()
Local $sDBFile = FileOpenDialog("Bitte auswählen", @ScriptDir & "\Datenbanken\", "Text (*.txt)")
Load()
case $hcstatus
_SetAllcheckedItems()
Case $hcspeichern, $hsave ; User hat auf "Speichern" geklickt
Save()
case $hcdelchecked
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie die angehakten Einträge wirklich löschen?") = 6 Then _DeleteAllcheckedItems()
Case $hCMDel, $hdel ; User hat auf "Markierte Einträge löschen" geklickt
_DelSelected()
case $hcmstatus, $hstatus
_SetSelected()
Case $hCreate ; User hat auf "Speichern" im Fenster "Neuer Eintrag" geklickt
NewItem()
Case $hSaveEinstellungen ;User hat auf "Speichern" im Fenster "Einstellungen" geklickt
Einstellungen()
Case $hButtonOpen
EinstellungenOpenDB()
case $hbuttonopen2
EinstellungenOpenBU()
case $hccheckall
Checktoggle()
case $hcExit
global $box = MsgBox(32 + 3, "Beenden", "Änderungen vor dem Beenden speichern?")
End()
#Region Schließen
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
global $box = MsgBox(32 + 3, "Beenden", "Änderungen vor dem Beenden speichern?")
End() ; End-Funktion aufrufen
Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
For $i = 0 To UBound($aNew) - 1
GUICtrlSetData($aNew[$i], "")
Next
GUICtrlSetData($aNew[1], @MDAY & "." & @MON & "." & @YEAR)
GUICtrlSetData($anew[2], "ohne")
GUICtrlSetData($anew[3], $todo)
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
Sleep(300)
WinActivate($hGui) ; und in den Vordergrund holen
$iEdit = -1
Case $hGuiUser ; User will das Fenster "Neuen Benutzer anlegen" schließen
GUISetState(@SW_HIDE, $hGuiUser)
GUISetState(@SW_ENABLE, $hGui)
WinActivate($hGui)
Case $hGUIEinstellungen ; User will das Fenster "Einstellungen" schließen
If MsgBox(32 + 4, "Beenden", "Änderungen vor dem Beenden speichern?") = 6 Then Einstellungen()
GUICtrlSetData( $hInputStartDB, $inistartdb)
GUICtrlSetData( $hInputbackup, $inibackup)
GUISetState(@SW_HIDE, $hGuiEinstellungen)
GUISetState(@SW_ENABLE, $hGui)
WinActivate($hGui)
EndSwitch
#EndRegion Schließen
EndSwitch
WEnd
Func End() ;Beenden Funktion
If $box = 6 Then
Save() ; Daten vor dem Beenden speichern?
_GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
Exit
ElseIf $box = 7 then
_GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
Exit
endif
EndFunc
Func NewItem() ; Funktion zum auslesen der Eingabefelder (Neuer Eintrag bzw. Eintrag bearbeiten)
Local $sItem = ""
Terminschnellerfassung()
For $i = 0 To UBound($aNew) - 1 ; Schleife, um alle Eingabefelder durchzugehen
If $iEdit > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
_GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
Else ; sonst $iEdit = -1 (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 > -1 Then ; wenn $iEdit > -1 (Eintrag bearbeiten), dann...
$iEdit = -1
GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
GUICtrlSetData($aNew[1], @MDAY & "." & @MON & "." & @YEAR)
GUICtrlSetData($anew[2], "ohne")
GUICtrlSetData($anew[3], $todo)
Sleep(300)
WinActivate($hGui) ; und in den Vordergrund holen
Else ; sonst $iEdit = -1 (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
GUICtrlSetData($aNew[1], @MDAY & "." & @MON & "." & @YEAR)
GUICtrlSetData($anew[2], "ohne")
GUICtrlSetData($anew[3], $todo)
EndIf
EndFunc ;==>NewItem
Func Edit() ; Funktion zum bearbeiten eines Listview-Eintrags im "Eintrag bearbeiten"-Fenster
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
$iEdit = _GUICtrlListView_GetSelectionMark($hLVHandle) ; auslesen, welcher Listview-Eintrag markiert (bei mehreren, den obersten) ist
If $iEdit > -1 Then
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
EndIf
EndFunc ;==>Edit
Func New()
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
EndFunc
Func Load() ; Datenbank-Datei laden
_GUICtrlListView_DeleteAllItems($hLVHandle)
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($hinput ,$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
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($hinput)
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
msgbox(0, "Speichern", "Gesichert")
EndFunc ;==>Save
Func NewUser() ; Neuen Benutzer anlegen
Local $newdb = GUICtrlRead($hInputUser)
if $newdb <> "" then
Global $dbnew = @ScriptDir & "\Datenbanken\" & $newdb &".txt"
_FileCreate($dbnew)
Fileopen(@ScriptDir & "\Datenbanken\" & $newdb &".txt",0)
FileWriteLine(@ScriptDir & "\Datenbanken\" & $newdb &".txt", $newdb)
FileClose(@ScriptDir & "\Datenbanken\" & $newdb &".txt")
If FileExists($dbnew) then msgbox(0, "", "Gespeichert")
else
MsgBox(0, "", "Kein Benutzername eingegeben!")
endif
GUICtrlSetData($hinputuser, '')
EndFunc
Func Einstellungen() ;Button Aktion Einstellungen GUI
Local $startdb = GUICtrlRead($hInputStartDB)
IniWrite(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB", $startdb)
Local $backup = GUICtrlRead($hInputbackup)
IniWrite(@ScriptDir & "\konfig.ini", "Einstellungen", "Backup", $backup)
MsgBox(0, "", "Gesichert")
EndFunc
Func EinstellungenOpenDB() ;Button Aktion Einstellungen GUI
Local $hopen = FileOpenDialog("Bitte auswählen", @ScriptDir & "\Datenbanken\", "Text (*.txt)")
GUICtrlSetData($hInputStartDB ,$hopen)
EndFunc
Func EinstellungenOpenBU() ;Button Aktion Einstellungen GUI
Local $hopen2 = FileSelectFolder("Bitte auswählen", "", 1)
GUICtrlSetData($hInputBackup ,$hopen2)
EndFunc
Func _GUICtrlListView_GetCheckedItemsTextArray($hListView)
Local $aCheckedItems = _GUICtrlListView_GetCheckedIndices($hListView)
Local $iCheckedCount = UBound($aCheckedItems)
If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
Local $iColCount = _GUICtrlListView_GetColumnCount($hListView)
Local $aCheckedItemsText[$iCheckedCount][$iColCount], $aTemp
For $i = 0 To $iCheckedCount - 1
$aTemp = _GUICtrlListView_GetItemTextArray($hListView, $aCheckedItems[$i])
For $j = 1 To $aTemp[0]
$aCheckedItemsText[$i][$j-1] = $aTemp[$j]
Next
Next
Return $aCheckedItemsText
EndFunc ;==>_GUICtrlListView_GetCheckedItemTextArray
Func _GUICtrlListView_GetCheckedIndices($hListView)
Local $iCount = _GUICtrlListView_GetItemCount($hListView)
Local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
Local $aCheckedItems[$iCheckedCount]
$iCheckedCount = 0
For $i = 0 To $iCount - 1
If _GUICtrlListView_GetItemChecked($hListView, $i) Then
$aCheckedItems[$iCheckedCount] = $i
$iCheckedCount += 1
EndIf
Next
Return $aCheckedItems
EndFunc ;==>_GUICtrlListView_GetCheckedIndices
Func _GUICtrlListView_GetCheckedCount($hListView)
Local $iCount = _GUICtrlListView_GetItemCount($hListView), $iCheckedCount = 0
If $iCount = 0 Then Return SetError(1, 0, 0)
For $i = 0 To $iCount - 1
$iCheckedCount += _GUICtrlListView_GetItemChecked($hListView, $i)
Next
Return $iCheckedCount
EndFunc ;==>_GUICtrlListView_GetCheckedCount
Func _SetAllcheckedItems() ;Status bei angehakten Items ändern
local $aCheckedItemsText = _GUICtrlListView_GetCheckedItemsTextArray($hListView)
local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
local $aCheckedIndices = _GUICtrlListView_GetCheckedIndices($hListView)
If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
For $i = 0 to $iCheckedCount -1
if $aCheckedItemsText[$i][3] = $done then
_GUICtrlListView_SetItemText($hLVHandle,$aCheckedIndices[$i], $todo, 3)
ElseIf $aCheckedItemsText[$i][3] = $todo then
_GUICtrlListView_SetItemText($hLVHandle,$aCheckedIndices[$i], $done, 3)
Endif
Next
EndFunc
Func _SetSelected()
local $indices = _GUICtrlListView_GetSelectedIndices( $hLVHandle,0)
local $aitemtext = _GUICtrlListView_GetItemTextArray($hLVHandle)
if $aitemtext[4] = $done then
_GUICtrlListView_SetItemText($hLVHandle,$indices, $todo, 3)
ElseIf $aitemtext[4] = $todo then
_GUICtrlListView_SetItemText($hLVHandle,$indices, $done, 3)
_ColRowOff()
Endif
endfunc
Func _DelSelected()
If MsgBox(256 + 32 + 4, "Einträge löschen", "Wollen sie den markierten Eintrag wirklich löschen?") = 6 Then _GUICtrlListView_DeleteItemsSelected($hLVHandle)
EndFunc
Func _DeleteAllcheckedItems()
local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
local $aCheckedIndices = _GUICtrlListView_GetCheckedIndices($hListView)
If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
for $i = $iCheckedCount - 1 To 0 Step -1
_GUICtrlListView_DeleteItem($hLVHandle, $aCheckedIndices[$i])
next
EndFunc
Func Backup()
local $inibackup = IniRead(@scriptdir & "\konfig.ini", "Einstellungen", "Backup","")
Local $quelle = @ScriptDir & "\Datenbanken\"
local $size1 = DirGetSize($quelle)
if $inibackup <> "" then
dircopy($quelle, $inibackup, 1)
local $size2 = DirGetSize($inibackup)
if $size1 = $size2 then MsgBox(0, "", "Backup erfolgreich")
else
msgbox(0, "", "Kein Backupverzeichnis angegeben")
endif
EndFunc
Func Terminschnellerfassung()
local $read = GUICtrlRead($anew[2])
if $read <> "ohne" then
local $startdate = GUICtrlRead($anew[1])
local $splitsd =StringSplit($startdate, ".")
local $date = $splitsd[3] & "/" & $splitsd[2] & "/" & $splitsd[1]
local $tdate = _DateAdd('d', $read , $date)
if $tdate <> '0' then
local $splited = StringSplit($tdate, "/")
local $enddate = $splited[3] & "." & $splited[2] & "." & $splited[1]
GUICtrlSetData($anew[2], $enddate)
endif
EndIf
EndFunc
Func Checktoggle()
local $checked = _GUICtrlListView_GetCheckedCount($hListView)
local $all = _GUICtrlListView_GetItemCount($hListView)
if $checked = $all then
_GUICtrlListView_SetItemChecked($hListView, -1, False)
else
_GUICtrlListView_SetItemChecked($hListView, -1, True)
endif
Endfunc
Func _DoubleClickOnListView($hWnd, $Msg, $wParam, $lParam);Die Eigentliche Funktion
Local $tagNMHDR, $event, $hwndFrom, $code
$tagNMHDR = DllStructCreate("int;int;int", $lParam)
If @error Then Return
$event = DllStructGetData($tagNMHDR, 3); Checkt wie das EVENT aussieht
If $wParam = $hListView Then;Wenn der Klick auf das ListView ging..
If $event = $N_DBLCLK Then;.. Wenn es ein DoppelKlick war
Edit()
EndIf
EndIf
$tagNMHDR = 0
$event = 0
$lParam = 0
EndFunc ;==>_DoubleClickOnListView
Func Termin()
local $icount = _GUICtrlListView_GetItemCount($hLVHandle)
for $i = 0 to $icount -1
local $stext = _GUICtrlListView_GetItemText($hLVHandle,$i, 2)
local $sstatus = _GUICtrlListView_GetItemText($hLVHandle,$i, 3)
if $stext <> "ohne" and $sstatus = $todo then
local $sdate =StringSplit($stext, ".")
local $date = $sdate[3] & "/" & $sdate[2] & "/" & $sdate[1]
if _DateDiff("d", @year & "/" & @MON & "/" & @MDAY , $date) < 10 then _OneRowSetCol($i, 0xFF0000, 0x000000);MsgBox(1, "", "lala")
endif
next
EndFunc
Func WM_NOTIFY($hWnd, $Msg, $wParam, $lParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR
_DoubleClickOnListView($hWnd, $Msg, $wParam, $lParam)
$tNMHDR = DllStructCreate($tagNMHDR, $lParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
Switch $hWndFrom
Case $hLVHandle
Switch $iCode
Case $NM_CUSTOMDRAW
If Not _GUICtrlListView_GetViewDetails($hWndFrom) Then Return $GUI_RUNDEFMSG
Local $tCustDraw = DllStructCreate($tagNMLVCUSTOMDRAW, $lParam)
Local $iDrawStage, $iItem, $iSubitem, $hDC, $tRect
$iDrawStage = DllStructGetData($tCustDraw, 'dwDrawStage')
Switch $iDrawStage
Case $CDDS_ITEMPREPAINT
Return $CDRF_NOTIFYSUBITEMDRAW
Case BitOR($CDDS_ITEMPREPAINT, $CDDS_SUBITEM)
$iItem = DllStructGetData($tCustDraw, 'dwItemSpec')
$iSubitem = DllStructGetData($tCustDraw, 'iSubItem')
_SetItemCol($hDC, $tCustDraw, $iItem, $iSubitem)
Return $CDRF_NEWFONT
EndSwitch
EndSwitch
EndSwitch
Return $GUI_RUNDEFMSG
EndFunc
Func _SetItemCol(ByRef $hDC, ByRef $tCustDraw, $iItem, $iSubitem)
If $aSubItemSet[0][0] = -1 Then
If $aSubItemSet[0][1] < 0 Then
Switch $aSubItemSet[0][1]
Case -3 ; einzelne Zeile färben
If $iItem = $aSubItemSet[0][4] Then
DllStructSetData($tCustDraw, 'clrText', RGB2BGR($aSubItemSet[0][3]))
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($aSubItemSet[0][2]))
Else
DllStructSetData($tCustDraw, 'clrText', RGB2BGR($defColLV))
DllStructSetData($tCustDraw, 'clrTextBk', RGB2BGR($defBkColLV))
EndIf
Case Else
Return
EndSwitch
EndIf
endif
endfunc
Func RGB2BGR($iColor)
Local $sH = Hex($iColor,6)
Return '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
EndFunc
Func _OneRowSetCol($iIndex, $iBkCol=-1, $iCol=-1) ;die brauch ich
if $iBkCol = -1 Then $iBkCol = $defBkColLV
If $iCol = -1 Then $iCol = $defColLV
$aSubItemSet[0][0] = -1
$aSubItemSet[0][1] = -3
$aSubItemSet[0][2] = $iBkCol
$aSubItemSet[0][3] = $iCol
$aSubItemSet[0][4] = $iIndex
_WinAPI_InvalidateRect($hLVHandle)
EndFunc
Func _ColRowOff()
$aSubItemSet[0][0] = -1
$aSubItemSet[0][1] = 0
$aSubItemSet[0][2] = 0
$aSubItemSet[0][3] = 0
$aSubItemSet[0][4] = 0
_WinAPI_InvalidateRect($hLVHandle)
EndFunc
Edit \ Ohje hab große Probleme mit dem Forum und den Thread 3 mal erstellt
Der hier kann gelöscht werden.