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

  • Doppelklick in Listview auswerten

    • nuts
    • 4. März 2009 um 23:40

    Achso, na dann wäre das auch geklärt.

    Bei deinem Skript haben mich die vielen Zeilen erschreckt.
    Mit etwas Abstand und einer ungefähren Vorstellung wie die Funktionen arbeiten erkenne ich die Ähnlichkeit.

    P.S. Derzeit versuche ich mich gerade in deine Funktion zum Färben einzelner Listviewitems reinzuarbeiten und stehe dort vor dem gleichen Problem. 8o

  • Doppelklick in Listview auswerten

    • nuts
    • 4. März 2009 um 10:47

    Okay danke.
    Deine Funktion ist leider etwas "too advanced" für mich.

    Ich habe aber hier im Forum gefunden wonach ich suche:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>

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

    ;Globals für die Funktion:
    Global Const $NM_DBLCLK = -3

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

    $MainGui = GUICreate("DBClick test", 516, 295, 192, 120)
    GUISetBkColor(0x0)

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

    $ListView = GUICtrlCreateListView("Produkt Name", 8, 8, 498, 214)
    $TestItem = GUICtrlCreateListViewItem("TEST1", $ListView)
    $TestItem = GUICtrlCreateListViewItem("TEST2", $ListView)

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

    GUISetState(@SW_SHOW)
    GUIRegisterMsg(0x004E, "_DoubleClickOnListView");Die Funktion wird bei einem Klick auf die GUI aufgerufen!

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

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

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

    Func _DoubleClickOnListView($hWndGUI, $MsgID, $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 = $ListView Then;Wenn der Klick auf das ListView ging..
    If $event = $NM_DBLCLK Then;.. Wenn es ein DoppelKlick war
    ; Hier kommt hin was er machen soll:
    MsgBox(0, "",GUICtrlRead(GUICtrlRead($ListView)))
    EndIf
    EndIf
    $tagNMHDR = 0
    $event = 0
    $lParam = 0
    EndFunc ;==>_DoubleClickOnListView

    [/autoit]

    Komischerweise bekomme ich in meinem Skript (im Beispiel gehts) in der Zeile Global Const $NM_DBLCLK = -3 folgende Fehlermeldung: ERROR: $NM_DBLCLK previously declared as a 'Const'
    Ändere ich die Zeile in: $N_DBLCLK = -3 (in der Funktion natürlich auch) läuft auch mein Skript.
    Das versteh mal einer ...

  • Doppelklick in Listview auswerten

    • nuts
    • 3. März 2009 um 21:26

    Interessant. Leider bin ich heute etwas schwer von Begriff. Eigentlich suche ich nur eine Möglichkeit um auf einen Doppelklick ins Listview zu reagieren - ich schaus mir aber mal genauer an.

  • Doppelklick in Listview auswerten

    • nuts
    • 3. März 2009 um 12:41

    [BugFix: verschoben aus Skripte]

    Hey,

    wäre es möglich die Funktion auf einen Doppelklick zu erweitern?
    z.B. bei Programmen mit Listview wäre das ziemlich gut. Links markieren, rechts das Kontextmenü und per Doppelklick den Eintrag bearbeiten.

    Bei der Funktion blicke ich leider nicht so richtig durch

  • FileRenamer

    • nuts
    • 3. März 2009 um 00:11

    Mit dem VLC Player funktioniert bei mir auch kein ShellExecute (mehr macht das Programm ja auch nicht). Woran das genau liegt kann ich dir nicht sagen, da ich den VLC Player eigentlich nicht verwende.

  • FileRenamer

    • nuts
    • 2. März 2009 um 20:32

    Funktioniert bei mir (ausprobiert mit WMP und Winamp) wie gewollt.

    Ist wirklich ein tolles Programm geworden. :thumbup:

    P.S. Frage am Rande: Woher bekommt man eigentlich so coole Icons? Alles selbst gemacht oder gibts dafür ne Seite im Netz?

  • _GUICtrlListView_DeleteItem raubt mir dem letzten Nerv.

    • nuts
    • 28. Februar 2009 um 00:20

    8o Ich glaub jetzt hab ichs gleich! Danke :thumbup:

  • _GUICtrlListView_DeleteItem raubt mir dem letzten Nerv.

    • nuts
    • 27. Februar 2009 um 23:54

    Schon irgendwie :S
    Welch eine Aufgabe zu so später Stunde.

    Das Array $aCheckedIndices[$i] wird ja nicht ständig neu gebildet sondern anstatt von 0- xy eben von xy-0 durchgearbeitet. Irgendwie ist der Groschen noch nicht gefallen.

  • _GUICtrlListView_DeleteItem raubt mir dem letzten Nerv.

    • nuts
    • 27. Februar 2009 um 23:10

    Oh je sehs auch gerade. Hab hier noch die alte Version drauf.

    Was ein Fehler, hoffentlich halten sich die Anpassungen im Rahmen :(

    Ich Update mal und melde mich wieder.

    Edit \ So jetzt bin ich auf dem neusten Stand. (Vers. 3.3.0.0)
    Bei mir läuft das ganze Programm scheinbar aber noch, welche Funktionen fehlen dir denn Tweaky?

    Edit2\
    Die Funktion von Tweaky läuft. Danke
    Wieso es anders nicht klappt bleibt mir aber ein Rätzel.

    Edit3\

    So nochmal genauer angesehen:

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

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

    next
    EndFunc

    [/autoit]


    So klappts mit meiner auch. Kann mir jemand den Unterschied zwischen for $i = $iCheckedCount - 1 To 0 Step -1 und for $i = 0 to $iCheckedCount -1 erklären? Sonst lern ich ja nix :S
    Ist doch das ganze nur Rückwärts oder?

  • _GUICtrlListView_DeleteItem raubt mir dem letzten Nerv.

    • nuts
    • 27. Februar 2009 um 22:44

    Hey,

    ich schreibe gerade an einem kleinen ToDo-Planer. Klappt auch super und macht Spaß.

    Hier mal das Skript zum testen:

    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>

    [/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"
    ;TraySetIcon(@ScriptDir & "\Bilder\clock.ico") ; TrayIcon setzen
    #Region Hauptfenster
    $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("Listview-Datenbank-Beispiel",900, 600) ; Hauptfenster erstellen
    Global $hListView = GUICtrlCreateListView($sheader, 0, 100, 900, 420, $LVStyle, $ExStyle) ; 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 $hcopen = GUICtrlCreateMenuItem("Öffnen", $hmenu)
    Global $hcEinstellungen = GUICtrlCreateMenuItem("Einstellungen", $hmenu)
    Global $hcBackup = GUICtrlCreateMenuItem("Backup", $hmenu)

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

    Global $hbearbeiten = GUICtrlCreateMenu("Bearbeiten")
    Global $hcheckall = GUICtrlCreateMenuItem("Check all", $hbearbeiten)
    Global $huncheckall = GUICtrlCreateMenuItem("Uncheck all", $hbearbeiten)
    Global $hdelchecked = GUICtrlCreateMenuItem("Delete all checked", $hbearbeiten)

    [/autoit] [autoit][/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 $hchecked = GUICtrlCreateButton("checked", 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

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

    Global $hGuiNew = GUICreate("Neuer Eintrag", 900, 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]] = [400, 100, 100, 100, 170] ; 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", 390, 65, 120, 25, $BS_DEFPUSHBUTTON)

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

    #EndRegion Fenster für neuen Eintrag

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

    #Region Fenster für neuen User
    Global $hGUIUser = GUICreate("Neuen Benutzer anlegen", 300, 100)
    Global $hSaveUser = GUICtrlCreateButton("Speichern", 80, 50, 140, 30)
    GUICtrlSetFont($hSaveUser, 10, 600, 0, 'Verdana')
    Global $hInputUser = GUICtrlCreateInput("Benutzername eingeben", 10, 10, 280, 21)
    GUICtrlSetFont($hInputUser, 10, 600, 0, 'Verdana')
    #EndRegion Fenster für neuen User

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

    #Region Fenster für Einstellungen
    Global $inistartdb = IniRead(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB","")
    Global $inibackup = IniRead(@scriptdir & "\konfig.ini", "Einstellungen", "Backup","")
    Global $hGUIEinstellungen = GUICreate("Einstellungen", 600, 600, 193, 125)
    Global $hSaveEinstellungen = GUICtrlCreateButton("Speichern", 210, 500, 180, 50, 0)
    Global $hInputStartDB = GUICtrlCreateInput($inistartdb , 50, 50, 500, 21)
    Global $hLabelStartDB = GUICtrlCreateLabel("Verzeichnis der Start DB angeben", 50, 10, 179, 24, Bitor($SS_CENTER, $SS_Centerimage), $SS_BLACKFRAME)
    Global $hInputBackup = GUICtrlCreateInput($inibackup , 50, 140, 500, 21)
    Global $hLabelStartDB = GUICtrlCreateLabel("Backup-Verzeichnis angeben", 50, 100, 179, 24, Bitor($SS_CENTER, $SS_Centerimage), $SS_BLACKFRAME)
    Global $hButtonOpen = GUICtrlCreateButton("./.", 560, 50, 20, 21)
    Global $hButtonOpen2 = GUICtrlCreateButton("./.", 560, 140, 20, 21)
    #EndRegion Fenster für Einstellungen

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

    If FileExists(IniRead(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB","")) Then Load() ; wenn ein Ini-Eintrag existiert, dann entsprechende Datenbank laden

    [/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()
    If FileExists($dbnew) then
    msgbox(0, "", "Gespeichert")
    else
    MsgBox (0, "", "Speichern fehlgeschlagen oder kein Benutzer angegeben")
    endif
    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 $hcopen ; User hat auf "Laden" geklickt
    Local $sDBFile = FileOpenDialog("Bitte auswählen", @ScriptDir & "\Datenbanken\", "Text (*.txt)")
    Load()
    case $hchecked
    _SetAllcheckedItems()
    Case $hSave ; User hat auf "Speichern" geklickt
    Save()
    case $hdelchecked
    _DeleteAllcheckedItems()
    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 "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 $hcheckall
    _GUICtrlListView_SetItemChecked($hListView, -1, True)
    case $huncheckall
    _GUICtrlListView_SetItemChecked($hListView, -1, False)

    #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
    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
    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
    GUISetState(@SW_HIDE, $hGuiEinstellungen)
    GUISetState(@SW_ENABLE, $hGui)
    WinActivate($hGui)
    EndSwitch

    #EndRegion Schließen
    EndSwitch

    WEnd

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

    Func End()
    Save() ; Daten vor dem Beenden speichern
    _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 = ""
    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
    ;$iEdit = -1
    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
    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 Load() ; Datenbank-Datei laden
    ;Save()
    _GUICtrlListView_DeleteAllItems($hLVHandle)
    ;Global $sDBFile = FileOpenDialog("Bitte auswählen", @ScriptDir & "\Datenbanken\", "Text (*.txt)")
    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 $sDBFile
    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)
    ;if $newdb <>0 then
    Global $dbnew = @ScriptDir & "\Datenbanken\" & $newdb &".txt"
    ;msgbox(1, "", $dbnew)
    _FileCreate($dbnew)
    Fileopen(@ScriptDir & "\Datenbanken\" & $newdb &".txt",0)
    FileWriteLine(@ScriptDir & "\Datenbanken\" & $newdb &".txt", $newdb)
    FileClose(@ScriptDir & "\Datenbanken\" & $newdb &".txt")
    ;endif
    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()
    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 _DeleteAllcheckedItems()
    local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
    ;MsgBox(1, "",$iCheckedcount)
    local $aCheckedIndices = _GUICtrlListView_GetCheckedIndices($hListView)
    ;_ArrayDisplay($aCheckedIndices)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    for $i = 0 to $iCheckedCount -1
    $test = _GUICtrlListView_DeleteItem($hLVHandle, $aCheckedIndices[$i])
    msgbox(1, "", $test)
    next
    EndFunc

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

    Func Backup()
    Local $quelle = @ScriptDir & "\Datenbanken\"
    local $size1 = DirGetSize($quelle)
    dircopy($quelle, $inibackup, 1)
    local $size2 = DirGetSize($inibackup)
    if $size1 = $size2 then
    MsgBox(1, "", "Backup erfolgreich")
    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

    [/autoit]

    Probleme macht mir diese Funktion

    Spoiler anzeigen
    [autoit]

    Func _DeleteAllcheckedItems()
    local $iCheckedCount = _GUICtrlListView_GetCheckedCount($hListView)
    ;MsgBox(1, "",$iCheckedcount)
    local $aCheckedIndices = _GUICtrlListView_GetCheckedIndices($hListView)
    ;_ArrayDisplay($aCheckedIndices)
    If $iCheckedCount = 0 Then Return SetError(1, 0, 0)
    for $i = 0 to $iCheckedCount -1
    $test = _GUICtrlListView_DeleteItem($hLVHandle, $aCheckedIndices[$i])
    msgbox(1, "", $test)
    next
    EndFunc

    [/autoit]


    Und zwar werden beim ersten Anlauf nicht immer alle angehakten Items gelöscht, sondern nur die "Hälfte" (so genau konnte ichs noch nicht bestimmten, bei ungerader Anzahl wird glaube ich abgerundet).

    Die Funktion direkt darüber

    Spoiler anzeigen
    [autoit]

    Func _SetAllcheckedItems()
    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]

    läuft einwandfrei und folgt eigentlich dem selben Ansatz.

    Die eingebaute msgbox zeigt bei den nicht gelöschten Items auch ein "False" an. Die Frage ist nur wieso?


    Gruß und schonmal danke für die Antworten.

  • GUI an Desktopgrösse anpassen

    • nuts
    • 27. Februar 2009 um 16:45

    Ich habe für meinen HTPC vor kurzem sowas ähnliches versucht (die Buttons sind natürlich mit "Leben" gefüllt):

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include<Array.au3>
    #include <WinAPI.au3>
    #include <ButtonConstants.au3>

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

    Opt("GUICoordMode", 1)
    Global $HA = @DesktopHeight -200
    Global $VA = @DesktopWidth -800

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

    Global $Farbe = 0x00BFFF
    Global $Fokusfarbe = 0x4169E1
    Global $binfo = "Aktiviere DVB Viewer|Aktiviere Tastatur|Aktiviere Winamp|Aktiviere PowerDVD|Anwendungs-Stop|Shutdown|Reboot|1080p50|1080p24|720p50|Exit" ;Buttonbeschriftung für jeden Button mit | getrennt eingeben -> Anzahl der Beschriftungen bestimmt gleichzeitig die Anzahl der Buttons
    Global $abfinfo = StringSplit($binfo, '|')
    Global $banzahl = $abfinfo[0]
    Global $babstandleft = 50 ;Abstand links und rechts zur HauptGUI
    Global $babstandtop = 10 ;Abstand zwischen den Buttons
    Global $bwidth = $VA - 2* $babstandleft ;Button Left ausrechnen
    Global $bheight = $HA / $banzahl - $babstandtop* ($banzahl +1) / $banzahl ;Button Höhe in Abhängigkeit zur Auflösung ausrechnen
    Global $HauptGUI = GUICreate("HTPC", $VA, $HA, -1, -1, BitOR($WS_POPUP,$WS_BORDER,$WS_CLIPSIBLINGS))

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

    ;Buttons erstellen und Button TOP ausrechnen
    For $i = 1 to $banzahl
    Global $Button = GUICtrlCreateButton($abfinfo[$i], $babstandleft, $i*$babstandtop+ ($i -1)* $bheight, $bwidth, $bheight,$BS_BITMAP )
    GUICtrlSetFont(-1, 20)
    GUICtrlSetBkColor(-1, $Farbe)

    next

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

    GUISetState(@SW_SHOW, $HauptGUI)

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

    Global $last_focus = GUICtrlGetHandle(-1)
    GUIRegisterMsg($WM_USER, "MY_WM_USER")

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

    While 1

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

    $msg = GUIGetMsg()
    switch $msg
    case $GUI_EVENT_Close
    Exit
    case 3

    case 4

    case 5

    case 6

    case 7

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

    case 8

    case 9

    case 10

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

    case 11

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

    case 12

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

    case 13
    Exit

    EndSwitch
    WEnd

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

    Func MY_WM_USER($hWnd, $msg, $wParam, $lParam)
    Local $Button = WinGetHandle(_WinAPI_GetFocus())
    GUICtrlSetBkColor(_WinAPI_GetDlgCtrlID($last_focus), $Farbe)
    GUICtrlSetBkColor(_WinAPI_GetDlgCtrlID($Button), $Fokusfarbe)
    $last_focus = $Button
    EndFunc ;==>_HauptReset

    [/autoit]

    Funktioniert auch im Prinzip. Einziger Nachteil: man muss mit dem ControlID's weiterarbeiten und ich mir nicht so ganz im Klaren ob nachträgliches Einfügen von weiteren Buttons/Labels usw. darauf eine Auswirkunge hat? Aber vielleicht kann einer von den Profis dazu noch etwas sagen oder eine bessere Lösung vorschlagen.

  • Fehlerhafte Ergebnisse mit "PIXElGetColor" mit ATI-Grafikkarten

    • nuts
    • 13. Februar 2009 um 17:57

    Ab CCC 8.12 kann man bei ATI 4 verschiedene Farbmodelle auswählen - YCbCr PC/Video Level (0-255/16-236) und RGB PC/Video Level (0-255/16-236). Dadurch ändern sich schon die Helligkeitsbereiche, ich dachte aber eigentlich, dass AutoIT das vorher abfragt?

  • Per GUI in Ini Schreiben

    • nuts
    • 12. Februar 2009 um 20:52

    Hab Probleme mit dem Forum hier :wacko: - jetzt ists verbessert!

  • Per GUI in Ini Schreiben

    • nuts
    • 12. Februar 2009 um 20:50

    Wenn ichs richtig verstanden habe suchst du

    [autoit]

    GUICtrlSetData

    [/autoit]

    in deinem beispiel:

    [autoit]


    Case $msg[0] = $save
    IniDelete("ini\confic.ini", "id", "login") ; ID aus der INI löschen
    IniDelete("ini\confic.ini", "pw", "pass") ; PW aus der INI löschen

    IniWrite("ini\confic.ini", "id", "login", GUICtrlRead($idi)) ; ID in die INI schreiben
    IniWrite("ini\confic.ini", "pw", "pass", GUICtrlRead($pwi)) ; PW in die INI schreiben

    Case $msg[0] = $load
    $var1 = IniRead("ini\confic.ini", "id", "login", "") ;Beim letztem Parameter kannst (musst aber nicht) du einen default Wert eingeben)
    $var2 = IniRead("ini\confic.ini", "pw", "pass", "")
    GUICtrlSetData($idi, $var1)
    GUICtrlSetData($pwi, $var2)

    [/autoit]
  • Listview-Datenbank-Beispiel

    • nuts
    • 12. Februar 2009 um 16:48

    so ich nochmal ...

    Wenn man das "Eintrag bearbeiten Fenster" über den Exitbutton verlässt wird kein

    [autoit]

    GUICtrlSetData($aNew[$i], "") ; das entsprechende Eingabefeld leeren

    [/autoit]

    durchgeführt und dadurch verbleibt das Skript im "Edit-Modus" wenn man wieder einen neuen Eintrag hinzufügen will.

    Die entsprechenden Zeilen hab ich für mein Skript jetzt so geändert:

    [autoit]


    Case $hGuiNew ; User will das "Neuer Eintrag"-Fenster schließen
    $iEdit = -1
    For $i = 0 To UBound($aNew) - 1
    GUICtrlSetData($aNew[$i], "")
    Next
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen

    [/autoit]

    So scheint es (probierts mal bei euch aus) zu funktionieren.

  • Seltsames Problem mit GUISetFont

    • nuts
    • 7. Februar 2009 um 16:18

    Ähm ja natürlich, vergesst den thread :rolleyes:

    Danke dir!

  • Seltsames Problem mit GUISetFont

    • nuts
    • 7. Februar 2009 um 16:03

    Hey,

    ich schreibe gerade ein Skript zum automatschen Erstellen von Buttons in Abhängigkeit zur Desktopauflösung.

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include<Array.au3>
    #include <WinAPI.au3>

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

    Opt("GUICoordMode", 1)
    Global $HA = @DesktopHeight -200
    Global $VA = @DesktopWidth -800

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

    Global $Farbe = 0x00BFFF
    Global $binfo = "Aktiviere DVB Viewer|Aktiviere Tastatur|Aktiviere Winamp|Aktiviere PowerDVD|Anwendungs-Stop|Shutdown|Reboot|1080p50|1080p24|720p50" ;Buttonbeschriftung für jeden Button mit | getrennt eingeben -> Anzahl der Beschriftungen bestimmt gleichzeitig die Anzahl der Buttons
    Global $abfinfo = StringSplit($binfo, '|')
    Global $banzahl = $abfinfo[0]
    Global $babstandleft = 10 ;Abstand links und rechts zur HauptGUI
    Global $babstandtop = 10 ;Abstand zwischen den Buttons
    Global $bwidth = $VA - 2* $babstandleft ;Button Left ausrechnen
    Global $bheight = $HA / $banzahl - $babstandtop* ($banzahl +1) / $banzahl ;Button Höhe in Abhängigkeit zur Auflösung ausrechnen
    Global $HauptGUI = GUICreate("HTPC", $VA, $HA, -1, -1)

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

    ;Buttons erstellen und Button TOP ausrechnen
    For $i = 1 to $banzahl
    Global $Button = GUICtrlCreateButton($abfinfo[$i], $babstandleft, $i*$babstandtop+ ($i -1)* $bheight, $bwidth, $bheight)
    GUISetFont(20)
    GUICtrlSetBkColor(-1, $Farbe)
    next

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

    GUISetState(@SW_SHOW, $HauptGUI)

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

    While 1

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

    $msg = GUIGetMsg()
    switch $msg
    case $GUI_EVENT_Close
    Exit
    case 3 ;Handle des ersten Buttons
    Exit
    EndSwitch
    WEnd

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

    Kann mir jemand sagen wieso ich beim ersten Button die Schriftgröße nicht ändern kann? Bei allen anderen funktionierts doch auch?

    Gruß nuts

  • Problem mit dem Verwalten mehrerer "Datenbanken"

    • nuts
    • 3. Februar 2009 um 18:08

    Ah danke, ich kam erst jetzt zum testen, funktioniert wie gewollt!
    Wird immer besser das Programm, jetzt sollen noch die Überschriften je User individuelle anpassbar sein, mal sehn ob ich das alleine schaffe :thumbup:

  • Problem mit dem Verwalten mehrerer "Datenbanken"

    • nuts
    • 1. Februar 2009 um 15:44

    Ähm ja thx. Die Zeile ist natürlich unnötig.

    Noch eine Frage:

    Spoiler anzeigen
    [autoit]


    #Region Fenster für neuen Eintrag

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

    Global $hGuiNew = GUICreate("Neuer Eintrag", 632, 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
    For $i = 1 To $aHeader[0]
    GUICtrlCreateLabel($aHeader[$i], 4 + ($i - 1) * 125, 15, 110, 20) ; Überschriften-Label erstellen
    GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
    $aNew[$i - 1] = GUICtrlCreateInput("", 2 + ($i - 1) * 125, 30, 120, 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
    GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
    Next
    GUICtrlSetData($aNew[1], @MDAY & "." & @MON & "." & @YEAR) ;Vorgabe für Column1
    GUICtrlSetData($anew[2], "ohne") ;Vorgabe für Column2
    GUICtrlSetData($anew[3], "offen") ;Vorgabe für Column3
    Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 254, 65, 120, 25, $BS_DEFPUSHBUTTON)

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

    #EndRegion Fenster für neuen Eintrag

    [/autoit]


    In dieser Region wird die Eingabemaske automatisch nach den Listviewüberschriften erstellt. Ziemlich cool und das wollte ich auch so lassen.
    Seht ihr eine Möglichkeit die erstellten Inputs auch der Länge nach den Überschriften im Listview anzupassen?

    Hier mal mein ganzes Skript, ich habe das Listview-Beispiel von Oscar etwas ausgebaut, soll ein Aufgabenplaner werden.

    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 = -1
    Global $sDBFile = IniRead(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB","")
    Global $dbnew
    #Region Hauptfenster
    $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("Listview-Datenbank-Beispiel",900, 600) ; Hauptfenster erstellen
    Global $hListView = GUICtrlCreateListView($sHeader, 0, 100, 900, 420, $LVStyle, $ExStyle) ; 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, 2, "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

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

    Global $hGuiNew = GUICreate("Neuer Eintrag", 632, 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
    For $i = 1 To $aHeader[0]
    GUICtrlCreateLabel($aHeader[$i], 4 + ($i - 1) * 125, 15, 110, 20) ; Überschriften-Label erstellen
    GUICtrlSetFont(-1, 8, 400, 0, 'Verdana') ; Schriftgröße und -art der Überschriften festlegen
    $aNew[$i - 1] = GUICtrlCreateInput("", 2 + ($i - 1) * 125, 30, 120, 20, Default, $WS_EX_STATICEDGE) ; Eingabefelder erstellen
    GUICtrlSetFont(-1, 10, 600, 0, 'Verdana') ; Schriftgröße und -art der Eingabefelder festlegen
    Next
    GUICtrlSetData($aNew[1], @MDAY & "." & @MON & "." & @YEAR) ;Vorgabe für Column1
    GUICtrlSetData($anew[2], "ohne") ;Vorgabe für Column2
    GUICtrlSetData($anew[3], "offen") ;Vorgabe für Column3
    Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 254, 65, 120, 25, $BS_DEFPUSHBUTTON)

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

    #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), $SS_BLACKFRAME)
    #EndRegion Fenster für neuen User

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

    #Region Fenster für Einstellungen
    Global $inistartdb = IniRead(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB","")
    Global $hGUIEinstellungen = GUICreate("Einstellungen", 600, 600, 193, 125)
    Global $hSaveEinstellungen = GUICtrlCreateButton("Speichern", 210, 500, 180, 50, 0)
    Global $hInputStartDB = GUICtrlCreateInput($inistartdb , 50, 50, 500, 21)
    Global $hLabelStartDB = GUICtrlCreateLabel("Verzeichnis der Start DB angeben", 50, 10, 179, 24, Bitor($SS_CENTER, $SS_Centerimage), $SS_BLACKFRAME)
    Global $hButtonOpen = GUICtrlCreateButton("./.", 560, 50, 20, 21)
    #EndRegion Fenster für Einstellungen

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

    If FileExists(IniRead(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB","")) Then Load() ; wenn ein Ini-Eintrag existiert, dann entsprechende Datenbank laden

    [/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 $hSaveUser
    NewUser()
    If FileExists($dbnew) then
    msgbox(0, "", "Gespeichert")
    else
    MsgBox (0, "", "Speichern fehlgeschlagen oder kein Benutzer angegeben")
    endif
    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
    Local $sDBFile = FileOpenDialog("Bitte auswählen", @ScriptDir & "\Datenbanken\", "Text (*.txt)")
    Load()
    Case $hSave ; User hat auf "Speichern" 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 "Speichern" im Fenster "Neuer Eintrag" geklickt
    NewItem()
    Case $hSaveEinstellungen ;User hat auf "Speichern" im Fenster "Einstellungen" geklickt
    Einstellungen()
    Case $hButtonOpen
    EinstellungenOpen()
    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 = -1
    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)
    GUISetState(@SW_ENABLE, $hGui)
    WinActivate($hGui)
    Case $hGUIEinstellungen ; User will das Fenster "Einstellungen" schließen
    GUISetState(@SW_HIDE, $hGuiEinstellungen)
    GUISetState(@SW_ENABLE, $hGui)
    WinActivate($hGui)
    EndSwitch
    EndSwitch
    WEnd

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

    Func End()
    Save() ; Daten vor dem Beenden speichern
    _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 > -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)
    GUICtrlSetData($aNew[1], @MDAY & "." & @MON & "." & @YEAR)
    GUICtrlSetData($anew[2], "ohne")
    GUICtrlSetData($anew[3], "offen")
    $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
    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
    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
    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 Load() ; Datenbank-Datei laden
    _GUICtrlListView_DeleteAllItems($hLVHandle)
    ;Global $sDBFile = FileOpenDialog("Bitte auswählen", @ScriptDir & "\Datenbanken\", "Text (*.txt)")
    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 $sDBFile
    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)
    if $newdb <>0 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")
    endif
    EndFunc

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

    Func Einstellungen() ;Button Aktion Einstellungen GUI
    Local $startdb = GUICtrlRead($hInputStartDB)
    IniWrite(@ScriptDir & "\konfig.ini", "Einstellungen", "StartDB", $startdb)
    MsgBox(0, "", "Gesichert")
    EndFunc
    Func EinstellungenOpen() ;Button Aktion Einstellungen GUI
    Local $hopen = FileOpenDialog("Bitte auswählen", @ScriptDir & "\Datenbanken\", "Text (*.txt)")
    GUICtrlSetData($hInputStartDB ,$hopen)
    EndFunc

    [/autoit]
  • Listview-Datenbank-Beispiel

    • nuts
    • 1. Februar 2009 um 15:35

    So klappts, super!
    In Zeile 84, also beim Verlassen des "Neuer Eintrag" Fensters muss das $iEdit dann aber auch wieder auf -1 gesetzt werden, sonst funktionierts nur einmal :)

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™