erste Gehversuche

  • aller anfang is schwer, aber mit hilfe net sehr...

    Hallo Leute...

    nach etwas stöbern und herumexperimentieren wollte ich mich an ein größeres Projekt wagen.
    Eine kleine App im Tray über die weitere kleine Apps gestartet werden.
    Drum dachte ich mir wie hier die Konfiguration im Programm zu bearbeiten.
    Das Grundgerüst steht soweit, doch langsan komm ich an Grenzen...
    benutze ich die initolistview()-func aus dem thread, is die Ausgabe wunderbar, aber da diese Ansicht nur ab XP+ geht und, was mich mehr gestört hat, kein Gitternetz hinbekommen habe, brauchte ich ne eigene Routine.
    So aber ich bekomms einfach nich hin eine optische Trennung zwischen den SectionNames in der Listview anzuzeigen...
    ich dachte an eine durchgehende Zeile als SectionName statt der SpaltenüberschriftEN.
    geht das in einer Listview oder muss ich mehrere (pro SectionName) anlegen?
    oder gibt es gar eine viel einfachere Lösung?
    bisher:

    Spoiler anzeigen
    [autoit]


    #NoTrayIcon
    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_outfile=ToolKit.exe
    #AutoIt3Wrapper_Res_Description=AutoIt3-Gui-Tray-sample.
    #AutoIt3Wrapper_Res_Fileversion=0.0.1.6
    #AutoIt3Wrapper_Res_LegalCopyright=@me :)
    #AutoIt3Wrapper_Res_Language=5127
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <Constants.au3>
    #include <ButtonConstants.au3>
    #include <GUIConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIButton.au3>
    #include <WindowsConstants.au3>
    #include <GuiListView.au3>
    #include <Misc.au3>

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

    Opt("MustDeclareVars",1) ;# vars nur noch mit dim/global/local
    ;Opt("GUIOnEventMode", 1) ; No GetMsg for guis

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

    Global $Title = "ToolKit"
    if _Singleton($Title,1) = 0 Then
    Msgbox(0,"Warnung","Eine Instanz des Skripts wird bereits ausgeführt!")
    Exit
    EndIf

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

    Global $Log = "Text der in die logdatei geschrieben werden soll"

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

    Dim $ConfigFile = @ScriptDir & "\ToolKit.ini"
    Dim $rungui=True
    ;Dim $ToolKit
    Dim $gMsg, $tExit, $tItem1, $tItem2

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

    Dim $EditConfig, $eGroup1, $eGroup2, $ListView, $hlistview
    Dim $eMsg, $btnSave, $btnCancel, $btnClose, $chbLog

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

    _MAIN()

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

    ;=================================================================================
    ; Main Setup - Tray
    ;=================================================================================
    Func _MAIN()
    Opt("TrayIconHide", 0)
    Opt("TrayAutoPause", 0) ; No AutoPause
    Opt("TrayMenuMode", 1) ; No Pause or Exit
    Opt("TrayOnEventMode", 1) ; No GetMsg for Tray Events

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

    TraySetToolTip("...rightClick 4 menu..."&@CRLF&"...doubleClick 4 gui...")
    TraySetClick(16); Only secondary mouse button will show the tray menu.
    TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "ToolKitGui")

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

    ;# items...
    $tItem1 = TrayCreateItem("GUI")
    TrayItemSetOnEvent(-1, "ToolKitGui")
    $tItem2 = TrayCreateItem("Config")
    TrayItemSetOnEvent(-1, "EditConfig")
    TrayCreateItem("");# bewirkt trenner im menü
    $tExit = TrayCreateItem("Exit")
    TrayItemSetOnEvent(-1, "_CloseApp")

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

    TraySetState()

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

    If Not (IniRead($ConfigFile, "config", "lastdir", "NichtGefunden") == @ScriptDir) Then
    MsgBox(64, "debug-msg", "dir changed since last run...will add to configfile when app is closed...", 2)
    EndIf

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

    ;# autostart gui
    If $rungui Then
    ;ToolKitGui()
    EditConfig()
    EndIf

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

    While 1
    sleep(20) ;warum eigentlich diese schleife???
    WEnd
    EndFunc ;==> MAIN -> trayapp =============
    ;=================================================================================
    ; gui für ConfigFile
    ;=================================================================================
    Func EditConfig()
    TrayItemSetState($tItem2,$TRAY_CHECKED)

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

    Local $x,$i,$j, $item1,$item2,$item3
    Local $sec, $keyval, $count

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

    $EditConfig = GUICreate("file -> "&$ConfigFile, 617, 340, -1, -1)
    $eGroup1 = GUICtrlCreateGroup("", 8, 8, 600, 40)
    $chbLog = GUICtrlCreateCheckbox("show Log", 16, 18, 65, 20)
    ;GUICtrlSetState(-1, $GUI_CHECKED)
    $btnSave = GUICtrlCreateButton("Save", 534, 17, 65, 25)
    $btnCancel = GUICtrlCreateButton("Cancel", 456, 17, 65, 25)
    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    $eGroup2 = GUICtrlCreateGroup("", 8, 54, 600, 275)
    ;# listview mit erweiterten Control Stile
    $ListView = GUICtrlCreateListView("", -1, -1, -1, -1)
    ; Aktiviert die erweiterten Control Stile
    _GUICtrlListView_SetExtendedListViewStyle($ListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_SUBITEMIMAGES))
    ;# spalten - überschrift + breite + [align]
    _GUICtrlListView_InsertColumn($ListView, 0, "Key", 150)
    _GUICtrlListView_InsertColumn($ListView, 1, "Value", 400) ;, $LVSCW_AUTOSIZE_USEHEADER
    _GUICtrlListView_InsertColumn($ListView, 2, "flag", 45, 2)

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

    GUICtrlCreateGroup("", -99, -99, 1, 1)

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

    GUISetState(@SW_SHOW, $EditConfig)

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

    ; Füge die Items hinzu
    If FileExists($ConfigFile) Then
    $count = -1;_GUICtrlListView_GetItemCount($hwnd) ;# zählt mit start bei -1
    $sec = IniReadSectionNames($ConfigFile) ;# Namen aller Sections in ein Array laden
    ;ConsoleWrite("s[count] = " & $s[0] &@CRLF)
    For $i=1 To $sec[0] ;# loop durchs Array der Section
    ;ConsoleWrite("sec["&$i&"]:"&$sec[$i] &@CRLF)
    $keyval = IniReadSection($ConfigFile, $sec[$i]);# ganze Section in ein Array laden
    ;_GUICtrlListView_AddItem($ListView, $sec[$i], ($i-1))
    ;_GUICtrlListView_AddSubItem($ListView, ($i-1), "Row "&$i&": Col 2", 1)
    For $j=1 To $keyval[0][0]
    ;ConsoleWrite($keyval[$j][0] & " : " & $keyval[$j][1] &@CRLF)
    $count += 1
    _GUICtrlListView_AddItem($ListView, $keyval[$j][0], $count)
    _GUICtrlListView_AddSubItem($ListView, $count, $keyval[$j][1], 1)
    _GUICtrlListView_AddSubItem($ListView, $count, "xx", 2)
    Next
    ;2do... section-trenner?!
    Next
    EndIf

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

    While 1
    $eMsg = GUIGetMsg()
    Select
    Case $eMsg = 0
    ContinueLoop
    Case $eMsg = $chbLog
    If BitAND(GUICtrlRead($chbLog), $BN_CLICKED) = $BN_CLICKED Then
    If _GUICtrlButton_GetCheck($chbLog) Then
    ConsoleWrite("Checkbox checked... " & @CRLF)
    ToolTip("............................"&@CRLF&$Log, 300, 300, "DebugLog",1,2)
    Else
    ConsoleWrite("Checkbox unchecked... " & @CRLF)
    ToolTip("")
    EndIf
    EndIf
    Case $eMsg = $btnSave
    SoundPlay(@WindowsDir & "\media\tada.wav", 0)
    Case $eMsg = $btnCancel
    ;SoundPlay(@WindowsDir & "\media\tada.wav", 0)
    _CloseApp()
    Case $eMsg = $GUI_EVENT_CLOSE
    GuiDelete($EditConfig)
    TrayItemSetState($tItem2,$TRAY_UNCHECKED)
    ExitLoop
    EndSelect
    WEnd
    EndFunc ; === EditConfig gui
    ;=================================================================================
    ; GUI
    ;=================================================================================
    Func ToolKitGui()
    MsgBox(64, "debug-msg", "des kommt später...")
    TrayItemSetState($tItem1,$TRAY_UNCHECKED)
    EndFunc
    ;=================================================================================
    ; LOG
    ;=================================================================================
    Func setLog($tz) ;zeilenweise...
    $Log = $Log & $tz & @CRLF
    EndFunc
    Func clearLog()
    $Log = ""
    EndFunc
    ;=================================================================================
    Func _CloseApp()
    MsgBox(64, "debug-msg", "app is closing...", 2)
    ;# save current dirpath to config if changed
    If Not(IniRead($ConfigFile, "config", "lastdir", "NichtGefunden") == @ScriptDir) Then
    IniWrite($ConfigFile, "config", "lastdir", @ScriptDir)
    EndIf
    Exit
    EndFunc

    [/autoit]

    ToolKit.ini

    ps:
    wie isses mit GUIRegisterMsg($WM_NOTIFY, "_WM_NOTIFY")? Muss ich sowas unbedingt benutzen um auf Klickevents (doppelklick=bearbeiteEintrag o.ä.) bez. der Listview zu reagieren oder is das auch wie mit der checkbox möglich?
    "kommt als nächstes... :sleeping: "

    danke an alle :thumbup:
    kritik & anregungen gerne...