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
#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>
Opt("MustDeclareVars",1) ;# vars nur noch mit dim/global/local
;Opt("GUIOnEventMode", 1) ; No GetMsg for guis
Global $Title = "ToolKit"
if _Singleton($Title,1) = 0 Then
Msgbox(0,"Warnung","Eine Instanz des Skripts wird bereits ausgeführt!")
Exit
EndIf
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
Dim $EditConfig, $eGroup1, $eGroup2, $ListView, $hlistview
Dim $eMsg, $btnSave, $btnCancel, $btnClose, $chbLog
_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
TraySetToolTip("...rightClick 4 menu..."&@CRLF&"...doubleClick 4 gui...")
TraySetClick(16); Only secondary mouse button will show the tray menu.
TraySetOnEvent($TRAY_EVENT_PRIMARYDOUBLE, "ToolKitGui")
;# items...
$tItem1 = TrayCreateItem("GUI")
TrayItemSetOnEvent(-1, "ToolKitGui")
$tItem2 = TrayCreateItem("Config")
TrayItemSetOnEvent(-1, "EditConfig")
TrayCreateItem("");# bewirkt trenner im menü
$tExit = TrayCreateItem("Exit")
TrayItemSetOnEvent(-1, "_CloseApp")
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
;# autostart gui
If $rungui Then
;ToolKitGui()
EditConfig()
EndIf
While 1
sleep(20) ;warum eigentlich diese schleife???
WEnd
EndFunc ;==> MAIN -> trayapp =============
;=================================================================================
; gui für ConfigFile
;=================================================================================
Func EditConfig()
TrayItemSetState($tItem2,$TRAY_CHECKED)
Local $x,$i,$j, $item1,$item2,$item3
Local $sec, $keyval, $count
$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)
$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)
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
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
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... "
danke an alle
kritik & anregungen gerne...