Mehrzeilige Array Eingabe

  • Hi Leute,
    nach längerer Pause beschäftige ich mich auch wieder mal intensiver mit AutoIt und steh natürlich gleich vor einem Problem.

    Ich hab eine Tabelle in Array Form bzw List Array. Die Eingabe erfolgt über ein Gui Fenster mit verschiedenen Inputs. Das Problem hierbei ist dass die Input Gui mitlerweile so lang ist dass mein Bildschirm nicht mehr ausreicht. Deshalb wollte ich die Eingaben mehrzeilig machen was an sich kein Problem war, nur dann wurden die Werte in die falschen Arrays geschrieben. Vergleichbar ist das Programm mit der Listview Datenbank von Oscar. Was auch helfen würde wäre einen horizontalen Scrollbalken zu erstellen, bloß dazu find ich leider nix -.-'

    Einmal editiert, zuletzt von Black Viper (11. Januar 2009 um 21:09)

    • Offizieller Beitrag

    Nimm doch statt eine GuiCtrlCreateInput ein GuiCtrlCreateEdit .

    Spoiler anzeigen
    [autoit]

    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 633, 447, 193, 125)
    $Edit1 = GUICtrlCreateEdit("", 48, 32, 465, 41, BitOR($ES_AUTOHSCROLL,$ES_WANTRETURN,$WS_HSCROLL))
    GUICtrlSetData(-1, "Edit1")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

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

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

    EndSwitch
    WEnd

    [/autoit]
  • ok, ich könnt auch einfach mal den Code posten xD
    Wie gesagt, die Grundform basiert auf Oscars listviwew script welches mich sehr überzeugt hat und mir n bissl an arbeit erspart hat.
    Es geht darum wenn man einen neuen Eintrag anlegt dass das Gui fenster zu groß bzw Lang wird. Deshalb soll entweder n Scrollbalken dazu
    bzw die Eingabefelder Mehrzeilig werden. Das war an sich kein Problem, jedoch wurden dann die Werte nicht mehr richtig eingetragen.
    Allgemein geht es um die versch. Wasserwerte die Gemessen werden und eben da gespeichert werden um einen Überblick zu schaffen.

    naja viel Text, hier das Script:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include<WindowsConstants.au3>
    #include<ListViewConstants.au3>
    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<Guilistview.au3>

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

    Global $sHeader = "Datum|Zeit|Temperatur|GH|KH|pH|NH3|NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung"
    Global $sHeader1 = "Datum|Zeit|Temperatur|GH|KH|pH|NH3"; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
    global $sHeader2 = "NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung"
    Global $sDBFile = @ScriptDir & "\WW_Datenbank.txt" ; Pfad und Name der Datenbank-Datei
    Global $iEdit

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

    #Region Hauptfenster
    Global $hGui = GUICreate("Wasserwerte Tabelle v1.1 - Garnelenforum.de", 695, 500) ; Hauptfenster erstellen
    Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 695, 420, $LVS_SHOWSELALWAYS) ; Listview erstellen

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

    Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Datum", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Uhrzeit", 60, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Temperatur °C", 90, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 3, "GH °dh", 49, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 4, "KH °dh", 49, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 5, "pH", 34, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 6, "NH3 mg/l", 64, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 7, "NO2 mg/l", 64, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 8, "NO3 mg/l", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 9, "O2 mg/l", 52, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 10, "Fe mg/l", 51, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 11, "Cu mg/l", 51, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 12, "CO2 mg/l", 59, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 13, "Leitwert µS/cm", 100, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 14, "Bemerkung", 150, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet

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

    Global $hNew = GUICtrlCreateButton("Neuer Eintrag", 40, 430, 80, 35, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
    Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 140, 430, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
    Global $hLoad = GUICtrlCreateButton("Laden", 270, 430, 70, 35)
    Global $hSave = GUICtrlCreateButton("Speichern", 375, 430, 70, 35)
    Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 465, 430, 90, 35, $BS_MULTILINE)
    Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 575, 430, 90, 35, $BS_MULTILINE)
    Global $hCO2 = GUICtrlCreateButton("CO2 Rechner", 322, 470, 75, 25, $BS_MULTILINE)

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

    Global $copyright = GUICtrlCreateLabel("by Thomas D.", 625, 485, 90, 35, $BS_MULTILINE)
    GUICtrlSetCursor (-1, 0)
    Global $forum = GUICtrlCreateLabel("www.garnelenforum.de", 2, 485, 120, 35, $BS_MULTILINE)
    GUICtrlSetCursor (-1, 0)

    [/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
    #EndRegion Hauptfenster

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

    #Region Fenster für neuen Eintrag
    Global $hGuiNew = GUICreate("Neuer Eintrag", 750, 150, -1, -1,BitOR($WS_MINIMIZEBOX,$WS_SYSMENU,$WS_CAPTION,$WS_POPUP,$WS_POPUPWINDOW,$WS_GROUP,$WS_HSCROLL,$WS_BORDER,$WS_CLIPSIBLINGS))
    ; 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], 20 + ($i - 1) * 62, 25, 55, 20) ; Überschriften-Label erstellen
    $aNew[$i - 1] = GUICtrlCreateInput("", 20 + ($i - 1) * 60, 45, 50, 20) ; Eingabefelder erstellen
    Next
    Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 300,85, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für neuen Eintrag

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

    #Region Fenster für CO2 Rechner
    Global $hGuiCO2 = GUICreate("CO2 Rechner", 200, 150, -1, -1, $WS_SYSMENU) ; das Fenster "CO2 Rechner" erstellen
    Global $aKH = GUICtrlCreateLabel("KH",20,20,20,30)
    Global $apH = GUICtrlCreateLabel("pH",80,20,20,30)
    Global $aCO2 = GUICtrlCreateLabel("CO2",140,20,55,30)
    Global $iKH = GUICtrlCreateInput("",15,40,30,20)
    Global $ipH = GUICtrlCreateInput("",75,40,30,20)
    Global $iCO2 = GUICtrlCreateInput("",140,40,30,20)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Global $hCalc = GUICtrlCreateButton("Wert ermitteln", 42,85, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für CO2 Rechner

    [/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($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann 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 $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
    Load()
    Case $hSave ; User hat auf "Laden" 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 "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
    NewItem()
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    case $copyright ; User hat auf Copyright geklickt, Inet explorer öffnen zu Garnelenforum Profil
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/board/member.php?u=30561", "C:\Programme\Internet Explorer\", "open")
    case $forum
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/", "C:\Programme\Internet Explorer\", "open")
    case $hCO2
    WinSetTitle($hGuiCO2, "", "CO2 Rechner") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiCO2) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    case $hCalc
    CO2()
    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
    end()
    ;~ 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 = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    case $hGuiCO2
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiCO2) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    EndSwitch
    EndSwitch
    WEnd

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

    Func End()
    ;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
    _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 Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    _GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
    Else ; sonst $iEdit = 0 (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 Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Else ; sonst $iEdit = 0 (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
    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
    EndFunc ;==>Edit

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

    Func Load() ; Datenbank-Datei laden
    Local $sItem
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    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
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    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 co2()
    local $kh = GUICtrlRead($iKH)
    local $ph = GUICtrlRead($iph)
    Local $CO2 = $KH/2.8 * 10^(7.90-$pH)
    $rCO2 = round ($CO2)
    guictrlsetdata($iCO2,$rCO2)
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Zwei Zeilen ist kein Problem:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include<WindowsConstants.au3>
    #include<ListViewConstants.au3>
    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<Guilistview.au3>

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

    Global $sHeader = "Datum|Zeit|Temperatur|GH|KH|pH|NH3||NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
    Global $sHeader1 = "Datum|Zeit|Temperatur|GH|KH|pH|NH3"
    Global $sHeader2 = "NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung"
    Global $sDBFile = @ScriptDir & "\WW_Datenbank.txt" ; Pfad und Name der Datenbank-Datei
    Global $iEdit

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

    #Region Hauptfenster
    Global $hGui = GUICreate("Wasserwerte Tabelle v1.1 - Garnelenforum.de", 695, 500) ; Hauptfenster erstellen
    Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 695, 420, $LVS_SHOWSELALWAYS) ; Listview erstellen

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

    Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Datum", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Uhrzeit", 60, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Temperatur °C", 90, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 3, "GH °dh", 49, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 4, "KH °dh", 49, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 5, "pH", 34, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 6, "NH3 mg/l", 64, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 7, "NO2 mg/l", 64, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 8, "NO3 mg/l", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 9, "O2 mg/l", 52, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 10, "Fe mg/l", 51, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 11, "Cu mg/l", 51, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 12, "CO2 mg/l", 59, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 13, "Leitwert µS/cm", 100, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 14, "Bemerkung", 150, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet

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

    Global $hNew = GUICtrlCreateButton("Neuer Eintrag", 40, 430, 80, 35, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
    Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 140, 430, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
    Global $hLoad = GUICtrlCreateButton("Laden", 270, 430, 70, 35)
    Global $hSave = GUICtrlCreateButton("Speichern", 375, 430, 70, 35)
    Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 465, 430, 90, 35, $BS_MULTILINE)
    Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 575, 430, 90, 35, $BS_MULTILINE)
    Global $hCO2 = GUICtrlCreateButton("CO2 Rechner", 322, 470, 75, 25, $BS_MULTILINE)

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

    Global $copyright = GUICtrlCreateLabel("by Thomas D.", 625, 485, 90, 35, $BS_MULTILINE)
    GUICtrlSetCursor(-1, 0)
    Global $forum = GUICtrlCreateLabel("www.garnelenforum.de", 2, 485, 120, 35, $BS_MULTILINE)
    GUICtrlSetCursor(-1, 0)

    [/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
    #EndRegion Hauptfenster

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

    #Region Fenster für neuen Eintrag
    Global $hGuiNew = GUICreate("Neuer Eintrag", 670, 220, -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]
    If $aHeader[$i] <> '' Then
    GUICtrlCreateLabel($aHeader[$i], 20 + Mod($i - 1, 8) * 80, 22 + Int(($i - 1) / 8) * 60, 65, 20) ; Überschriften-Label erstellen
    $aNew[$i - 1] = GUICtrlCreateInput("", 20 + Mod($i - 1, 8) * 80, 42 + Int(($i - 1) / 8) * 60, 65, 20) ; Eingabefelder erstellen
    EndIf
    Next
    Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 300, 155, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für neuen Eintrag

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

    #Region Fenster für CO2 Rechner
    Global $hGuiCO2 = GUICreate("CO2 Rechner", 200, 150, -1, -1, $WS_SYSMENU) ; das Fenster "CO2 Rechner" erstellen
    Global $aKH = GUICtrlCreateLabel("KH", 20, 20, 20, 30)
    Global $apH = GUICtrlCreateLabel("pH", 80, 20, 20, 30)
    Global $aCO2 = GUICtrlCreateLabel("CO2", 140, 20, 55, 30)
    Global $iKH = GUICtrlCreateInput("", 15, 40, 30, 20)
    Global $ipH = GUICtrlCreateInput("", 75, 40, 30, 20)
    Global $iCO2 = GUICtrlCreateInput("", 140, 40, 30, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Global $hCalc = GUICtrlCreateButton("Wert ermitteln", 42, 85, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für CO2 Rechner

    [/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($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann 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 $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
    Load()
    Case $hSave ; User hat auf "Laden" 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 "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
    NewItem()
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Case $copyright ; User hat auf Copyright geklickt, Inet explorer öffnen zu Garnelenforum Profil
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/board/member.php?u=30561", "C:\Programme\Internet Explorer\", "open")
    Case $forum
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/", "C:\Programme\Internet Explorer\", "open")
    Case $hCO2
    WinSetTitle($hGuiCO2, "", "CO2 Rechner") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiCO2) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Case $hCalc
    CO2()
    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
    end()
    ;~ 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 = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Case $hGuiCO2
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiCO2) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    EndSwitch
    EndSwitch
    WEnd

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

    Func End()
    ;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
    _GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
    Exit ; Programm beenden
    EndFunc ;==>End

    [/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 Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    _GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
    Else ; sonst $iEdit = 0 (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 Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Else ; sonst $iEdit = 0 (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
    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
    EndFunc ;==>Edit

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

    Func Load() ; Datenbank-Datei laden
    Local $sItem
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    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
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    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 co2()
    Local $kh = GUICtrlRead($iKH)
    Local $ph = GUICtrlRead($ipH)
    Local $CO2 = $kh / 2.8 * 10 ^ (7.90 - $ph)
    $rCO2 = Round($CO2)
    GUICtrlSetData($iCO2, $rCO2)
    EndFunc ;==>co2

    [/autoit]
  • Danke genau sowas brauch ich, aber du hast nen kleinen Fehler drinnen. Sobald man ab NO2 was eingibt wird alles um eine Stelle verschoben. Dh gib bei NO2 zb 1 ein steht da 0 und bei NO3 dann die 1, gibt bei NO3 1 ein und es steht dann bei O2

    • Offizieller Beitrag

    Reicht es Dir, wenn das so aufgeteilt ist:

    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include<WindowsConstants.au3>
    #include<ListViewConstants.au3>
    #include<ButtonConstants.au3>
    #include<GUIConstantsEx.au3>
    #include<Guilistview.au3>

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

    Global $sHeader = "Datum|Zeit|Temperatur|GH|KH|pH|NH3|NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung" ; Die Überschriften für das Listview und für das "Neuer Eintrag"-Fenster
    Global $sHeader1 = "Datum|Zeit|Temperatur|GH|KH|pH|NH3"
    Global $sHeader2 = "NO2|NO3|O2|Fe|Cu|CO2|Leitwert|Bemerkung"
    Global $sDBFile = @ScriptDir & "\WW_Datenbank.txt" ; Pfad und Name der Datenbank-Datei
    Global $iEdit

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

    #Region Hauptfenster
    Global $hGui = GUICreate("Wasserwerte Tabelle v1.1 - Garnelenforum.de", 695, 500) ; Hauptfenster erstellen
    Global $hListView = GUICtrlCreateListView($sHeader, 0, 0, 695, 420, $LVS_SHOWSELALWAYS) ; Listview erstellen

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

    Global $hLVHandle = GUICtrlGetHandle($hListView) ; das Handle vom Listview wird für die UDF-Listview-Funktionen benötigt
    _GUICtrlListView_SetColumn($hLVHandle, 0, "Datum", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 1, "Uhrzeit", 60, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 2, "Temperatur °C", 90, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 3, "GH °dh", 49, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 4, "KH °dh", 49, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 5, "pH", 34, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 6, "NH3 mg/l", 64, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 7, "NO2 mg/l", 64, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 8, "NO3 mg/l", 64, 2) ; 1. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 9, "O2 mg/l", 52, 2) ; 2. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 10, "Fe mg/l", 51, 2) ; 3. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 11, "Cu mg/l", 51, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 12, "CO2 mg/l", 59, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 13, "Leitwert µS/cm", 100, 2) ; 4. Spalte = 40 Px breit, zentriert ausgerichtet
    _GUICtrlListView_SetColumn($hLVHandle, 14, "Bemerkung", 150, 2) ; 5. Spalte = 40 Px breit, zentriert ausgerichtet

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

    Global $hNew = GUICtrlCreateButton("Neuer Eintrag", 40, 430, 80, 35, $BS_DEFPUSHBUTTON) ; Dieser Button ist der Default-Push-Button (wenn der User [Enter] drückt)
    Global $hEdit = GUICtrlCreateButton("Markierten Eintrag bearbeiten", 140, 430, 110, 35, $BS_MULTILINE) ; $BS_Multiline für mehrzeiligen Button
    Global $hLoad = GUICtrlCreateButton("Laden", 270, 430, 70, 35)
    Global $hSave = GUICtrlCreateButton("Speichern", 375, 430, 70, 35)
    Global $hDel = GUICtrlCreateButton("Markierte Einträge löschen", 465, 430, 90, 35, $BS_MULTILINE)
    Global $hDelAll = GUICtrlCreateButton("Alle Einträge löschen", 575, 430, 90, 35, $BS_MULTILINE)
    Global $hCO2 = GUICtrlCreateButton("CO2 Rechner", 322, 470, 75, 25, $BS_MULTILINE)

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

    Global $copyright = GUICtrlCreateLabel("by Thomas D.", 625, 485, 90, 35, $BS_MULTILINE)
    GUICtrlSetCursor(-1, 0)
    Global $forum = GUICtrlCreateLabel("www.garnelenforum.de", 2, 485, 120, 35, $BS_MULTILINE)
    GUICtrlSetCursor(-1, 0)

    [/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
    #EndRegion Hauptfenster

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

    #Region Fenster für neuen Eintrag
    Global $hGuiNew = GUICreate("Neuer Eintrag", 670, 220, -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], 22 + Mod($i - 1, 8) * 80, 22 + Int(($i - 1) / 8) * 60, 65, 20) ; Überschriften-Label erstellen
    $aNew[$i - 1] = GUICtrlCreateInput("", 20 + Mod($i - 1, 8) * 80, 40 + Int(($i - 1) / 8) * 60, 65, 20) ; Eingabefelder erstellen
    Next
    Global $hCreate = GUICtrlCreateButton("Eintrag speichern", 300, 155, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für neuen Eintrag

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

    #Region Fenster für CO2 Rechner
    Global $hGuiCO2 = GUICreate("CO2 Rechner", 200, 150, -1, -1, $WS_SYSMENU) ; das Fenster "CO2 Rechner" erstellen
    Global $aKH = GUICtrlCreateLabel("KH", 20, 20, 20, 30)
    Global $apH = GUICtrlCreateLabel("pH", 80, 20, 20, 30)
    Global $aCO2 = GUICtrlCreateLabel("CO2", 140, 20, 55, 30)
    Global $iKH = GUICtrlCreateInput("", 15, 40, 30, 20)
    Global $ipH = GUICtrlCreateInput("", 75, 40, 30, 20)
    Global $iCO2 = GUICtrlCreateInput("", 140, 40, 30, 20)
    GUICtrlSetState(-1, $GUI_DISABLE)

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

    Global $hCalc = GUICtrlCreateButton("Wert ermitteln", 42, 85, 120, 25, $BS_DEFPUSHBUTTON) ; Button zum speichern
    #EndRegion Fenster für CO2 Rechner

    [/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($sDBFile) Then Load() ; wenn Datenbank-Datei existiert, dann 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 $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
    Load()
    Case $hSave ; User hat auf "Laden" 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 "Eintrag speichern" im Fenster "Neuer Eintrag" geklickt
    NewItem()
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Case $copyright ; User hat auf Copyright geklickt, Inet explorer öffnen zu Garnelenforum Profil
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/board/member.php?u=30561", "C:\Programme\Internet Explorer\", "open")
    Case $forum
    ShellExecute("iexplore.exe", "http://www.garnelenforum.de/", "C:\Programme\Internet Explorer\", "open")
    Case $hCO2
    WinSetTitle($hGuiCO2, "", "CO2 Rechner") ; den Titel des Fenster anpassen
    GUISetState(@SW_SHOW, $hGuiCO2) ; das Fenster "Neuer Eintrag" anzeigen
    GUISetState(@SW_DISABLE, $hGui) ; das Hauptfenster deaktivieren
    Case $hCalc
    CO2()
    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
    end()
    ;~ 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 = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Case $hGuiCO2
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiCO2) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    EndSwitch
    EndSwitch
    WEnd

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

    Func End()
    ;~ Save() ; wenn der vordere Kommentar entfernt wird, dann werden vor dem beenden noch die Daten gespeichert
    _GUICtrlListView_UnRegisterSortCallBack($hLVHandle) ; Sortierroutine wieder de-registrieren
    Exit ; Programm beenden
    EndFunc ;==>End

    [/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 Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    _GUICtrlListView_SetItemText($hLVHandle, $iEdit, GUICtrlRead($aNew[$i]), $i) ; den Eintrag aus dem Eingabefeld ins Listview schreiben
    Else ; sonst $iEdit = 0 (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 Then ; wenn $iEdit <> 0 (Eintrag bearbeiten), dann...
    $iEdit = 0
    GUISetState(@SW_HIDE, $hGuiNew) ; "Neuer Eintrag"-Fenster verstecken
    GUISetState(@SW_ENABLE, $hGui) ; Hauptfenster wieder aktivieren
    WinActivate($hGui) ; und in den Vordergrund holen
    Else ; sonst $iEdit = 0 (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
    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
    EndFunc ;==>Edit

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

    Func Load() ; Datenbank-Datei laden
    Local $sItem
    Local $hFile = FileOpen($sDBFile, 0) ; Datei zum lesen öffnen
    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
    If $hFile <> -1 Then ; wenn das öffnen erfolgreich war, dann...
    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 co2()
    Local $kh = GUICtrlRead($iKH)
    Local $ph = GUICtrlRead($ipH)
    Local $CO2 = $kh / 2.8 * 10 ^ (7.90 - $ph)
    $rCO2 = Round($CO2)
    GUICtrlSetData($iCO2, $rCO2)
    EndFunc ;==>co2

    [/autoit]
    • Offizieller Beitrag

    Wenn du die Gui Scrollen willst, dann schau dir mal das Beispiel von _GUIScrollBars_ScrollWindow in der Hilfe an .