Listview Optik - Seltsames Verhalten

  • Hey,

    ich habe hier eine merkwürdige Beobachtung gemacht.

    Beispiel: Nach dem Listview wird ein weiteres GUI-Element (der Button) hinzugefügt

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <GuiListView.au3>

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

    Global $sHeader = "Aufgabe|Erstellt am|Termin"
    $Form = GUICreate("test", 633, 447, 193, 125)

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

    $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)

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

    GUISetState(@SW_SHOW, $form)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]

    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
    [autoit]


    #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

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

    Global $hFont, $defColLV = 0x000000, $defBkColLV = 0xFFFFFF
    Global $aSubItemSet[1][5] = [[-1]]
    Global $setIndex, $setSubIndex

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

    Global Const $N_DBLCLK = -3
    global $titel = "Nuts-Aufgabenplaner"

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

    if _Singleton($titel,1) = 0 then
    MsgBox(0, "Achtung", "Anwendung läuft bereits!", 3)
    exit
    endif

    [/autoit] [autoit][/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 = -1
    Global $sDBFile = IniRead(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB","")
    Global $dbnew
    Global $todo = "ToDo"
    Global $done = "Done"
    Global $HA = 630
    Global $VA = 1100

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

    HotKeySet("^a", "Checktoggle")
    HotKeySet("^e", "Edit")
    HotKeySet("^s", "_SetSelected")
    HotKeySet("{DELETE}" ,"_DelSelected")
    HotKeySet("!s" ,"Save")
    HotKeySet("!t", "Termin")

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

    #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)

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

    ;;;;;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)

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

    ;;;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)

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

    ;;;;;;;;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)

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

    ;;;;;; 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)

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

    ;;;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))

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

    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")

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

    ;;;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)

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

    #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

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

    #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')

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

    #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)

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

    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)

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

    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)

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

    #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")

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

    [/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($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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    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

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

    EndIf
    endif
    endfunc

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

    Func RGB2BGR($iColor)
    Local $sH = Hex($iColor,6)
    Return '0x' & StringRight($sH, 2) & StringMid($sH,3,2) & StringLeft($sH, 2)
    EndFunc

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

    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

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

    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

    [/autoit]

    Edit \ Ohje hab große Probleme mit dem Forum und den Thread 3 mal erstellt :thumbdown:
    Der hier kann gelöscht werden.

    Einmal editiert, zuletzt von nuts (6. März 2009 um 20:28)