GUI updaten - Team To Do Liste

  • Hallo zusammen,

    bin Anfänger und nur gelegentlich im Forum unterwegs, um genau zu sein seit längerem mal wieder das erste mal.

    Derzeit versuche ich eine tägliche Team To Do Liste zu erstellen, die eine simple "Abhaken" Funktion erfüllen soll mit gleichzeitigem
    Zugriff für mehrere Personen.

    Der Kern der Geschichte ist eine Ini in der alle Zustände der GUI gespeichert werden und alle im Netzwerk geöffneten Tools gleichzeitig
    zugreifen und sich daraus aktualisieren.

    Hat A etwas erledigt, sehen alle anderen das es erledigt wurde und die Checkbox wird ausgegraut. Sollte A sich vertan haben, kann nur er
    es wieder aktivieren.

    Das Problem an dem ich momentan arbeite ist, die GUI Update Funktion zu vereinfachen mit z.b. einer Schleife o.ä. .
    Da weis ich leider nicht wie ich es adäquat umsetzen könnte , ohne für mögliche 20-30 Checkboxen alles einzeln in die Funktion reinzupacken :S

    Den Code hab ich angefügt und die Problemstelle Funktion "GUI Update" auch kommentiert.

    Wäre klasse wenn mir jemand dazu einen Tipp geben könnte. Falls ich mich zu unverständlich ausgedrückt habe bitte fragen.

    Schon mal danke im voraus für evtl. Hilfe Tipps :)


    Spoiler anzeigen
    [autoit]


    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_icon=..\Icons\2_1.ico
    #AutoIt3Wrapper_outfile=TeamToDo_beta 1.3.0.exe
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include <ButtonConstants.au3>
    #include <DateTimeConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <file.au3>
    #include <array.au3>

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

    ;0xFF0000 = rot
    ;0x00FF00 = grün

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

    ;---------------- Startparameter -------------------------------

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

    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    Global $User = @UserName
    Global $Userdone = "Guest"
    Global $logpath = @ScriptDir & "\Data\Logfile\" & @MDAY & @MON & @YEAR & ".txt"
    Global $Dataini = @ScriptDir & "\Data\IniDB\" & @MDAY & @MON & @YEAR & ".ini"
    Global $DBactivityExist = @ScriptDir & "\db.activity"

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

    ;---------------- Ini Database erstellen -------------------------------

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

    if not FileExists ($Dataini) then

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

    Global $aData1[4][2] = [ [ "$Checkbox1", "0" ], [ "$Checkbox2", "0" ], [ "$Checkbox3", "0" ],[ "$Checkbox4", "0" ] ]
    IniWriteSection($Dataini,'GUI Update Box', $aData1, 0)

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

    Global $aData2[4][2] = [ [ "$Checkbox1User", "" ], [ "$Checkbox2User", "" ], [ "$Checkbox3User", "" ],[ "$Checkbox4User", "" ] ]
    IniWriteSection($Dataini,'GUI Update User', $aData2, 0)

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

    ;IniWrite($Dataini, 'GUI Update', '$Checkbox1', "0")
    ;IniWrite($Dataini, 'GUI Update', '$Checkbox1User', "")

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

    EndIf

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

    ;--------- User Func ausführen, Func Datenbank registrieren ------

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

    User ()
    AdlibRegister ("DBactivity", 500)

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

    ;---------------- GUI erstellen -------------------------------

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

    #Region ### START Koda GUI section ### Form=S:\Sascha\Schäfer\AutoIT\Koda_GUI\Forms\to_do_lu690.kxf
    Global $Form2 = GUICreate("Team To Do ", 1038, 631, 353, 159)
    ;GUISetBkColor(0xFFFFFF)
    GUISetOnEvent($GUI_EVENT_CLOSE, "Close")
    GUISetIcon("D:\005.ico")
    Global $PageControl1 = GUICtrlCreateTab(16, 8, 724, 576)
    GUICtrlSetResizing(-1, $GUI_DOCKWIDTH+$GUI_DOCKHEIGHT)
    Global $TabSheet1 = GUICtrlCreateTabItem("Frühschicht")
    Global $Checkbox1 = GUICtrlCreateCheckbox("Aufgabe 1", 35, 53, 200, 40)
    GUICtrlSetOnEvent(-1, "Checkbox1")
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    Global $Checkbox2 = GUICtrlCreateCheckbox("Aufgabe 2", 35, 113, 200, 40)
    GUICtrlSetOnEvent(-1, "Checkbox2")
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    Global $Checkbox3 = GUICtrlCreateCheckbox("Aufgabe 3", 35, 173, 200, 40)
    GUICtrlSetOnEvent(-1, "Checkbox3")
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    Global $Checkbox4 = GUICtrlCreateCheckbox("Aufgabe 4", 35, 233, 200, 40)
    GUICtrlSetOnEvent(-1, "Checkbox4")
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    Global $Checkbox5 = GUICtrlCreateCheckbox("Aufgabe 5", 35, 293, 200, 40)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    Global $Checkbox6 = GUICtrlCreateCheckbox("Aufgabe 6", 35, 353, 200, 40)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    Global $Checkbox7 = GUICtrlCreateCheckbox("Aufgabe 7", 35, 413, 200, 40)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    Global $Checkbox8 = GUICtrlCreateCheckbox("Aufgabe 8", 35, 473, 200, 40)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    Global $Label1 = GUICtrlCreateLabel("", 248, 56, 38, 38)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    Global $Label2 = GUICtrlCreateLabel("", 248, 115, 38, 38)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    Global $Label3 = GUICtrlCreateLabel("", 248, 174, 38, 38)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    Global $Label4 = GUICtrlCreateLabel("", 248, 233, 38, 38)
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    Global $TabSheet2 = GUICtrlCreateTabItem("Spätschicht")
    Global $TabSheet3 = GUICtrlCreateTabItem("Diverse")
    GUICtrlCreateTabItem("")
    Global $Button2 = GUICtrlCreateButton("&Beenden", 808, 560, 80, 25, 0)
    Global $Button3 = GUICtrlCreateButton("&Tagesabschluß", 904, 560, 80, 25, 0)
    Global $MonthCal1 = GUICtrlCreateMonthCal(@MDAY, 784, 152, 201, 177)
    Global $Label200 = GUICtrlCreateLabel("Team To Do", 792, 32, 192, 42)
    GUICtrlSetFont(-1, 25, 800, 0, "Arial")
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1

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

    sleep (5)

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

    WEnd

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

    Func Close ()

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

    Exit

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

    EndFunc

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

    ;---------------------- User Abfragen ----------------------------------------

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

    Func User ()

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

    Switch $User

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

    Case $User = "1234"
    $Userdone = "Peter"
    Case $User = "1235"
    $Userdone = "Thomas"
    Case $User = "1236"
    $Userdone = "Christian"

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

    EndSwitch

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

    EndFunc

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

    ;------------------ Check Datenbank Aktivität ------------------------------

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

    Func DBactivity ()

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

    if not FileExists ($DBactivityExist) Then

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

    call ("GuiUpdate")

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

    EndIf

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

    EndFunc

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

    ;---------------------- GUI Update Funktion ----------------------------------------

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

    Func GuiUpdate ()

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

    Global $CB1update = IniRead ($Dataini, 'GUI Update Box', '$Checkbox1', "")
    Global $CB1user = IniRead ($Dataini, 'GUI Update User', '$Checkbox1User', "")

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

    #comments-start
    Wenn Box markiert und der User NICHT der gleiche ist wie ich, dann
    Box markieren, Grün setzen, Label User aktualisieren, Control deaktivieren
    #comments-end

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

    If $CB1update = 1 and $CB1user <> $Userdone Then
    GUICtrlSetBkColor($Checkbox1, 0x00FF00)
    GUICtrlSetState($Checkbox1, $GUI_CHECKED)
    GUICtrlSetData ($Label1, $CB1user)
    GUICtrlSetState($Checkbox1, $GUI_DISABLE)

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

    EndIf

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

    #comments-start
    Wenn Box markiert und der User der gleiche ist wie ich, dann
    Box markieren, Grün setzen, Label User aktualisieren
    #comments-end

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

    If $CB1update = 1 and $CB1user = $Userdone Then

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

    GUICtrlSetBkColor($Checkbox1, 0x00FF00)
    GUICtrlSetState($Checkbox1, $GUI_CHECKED)
    GUICtrlSetData ($Label1, $CB1user)

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

    EndIf

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

    #comments-start
    Wenn Box nicht markiert ist , dann
    Box unchecked markieren, Rot setzen, Label User aktualisieren, Control aktivieren
    #comments-end

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

    If $CB1update = 0 Then

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

    GUICtrlSetBkColor($Checkbox1, 0xFF0000)
    GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
    GUICtrlSetData ($Label1, "")
    GUICtrlSetState($Checkbox1, $GUI_ENABLE)

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

    EndIf

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

    EndFunc

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

    ;---------------------- Checkboxen Abfragen ----------------------------------------

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

    Func Checkbox1 ()

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

    if BitAnd(GUICtrlRead($Checkbox1),$GUI_CHECKED) = $GUI_CHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($Checkbox1, 0x00FF00)
    _FileWriteLog ($logpath, " * " & $Userdone & " * erledigte Aufgabe 1")
    GUICtrlSetData ($Label1, $Userdone)
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox1', "1")
    IniWrite($Dataini, 'GUI Update User', '$Checkbox1User', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf

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

    if BitAnd(GUICtrlRead($Checkbox1),$GUI_UNCHECKED) = $GUI_UNCHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($Checkbox1, 0xFF0000)
    _FileWriteLog ($logpath, " * " & $Userdone & " * hat Aufgabe 1 reaktiviert")
    GUICtrlSetData ($Label1, "")
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox1', "0")
    IniWrite($Dataini, 'GUI Update User', '$Checkbox1User', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf

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

    EndFunc

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

    Func Checkbox2 ()

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

    if BitAnd(GUICtrlRead($Checkbox2),$GUI_CHECKED) = $GUI_CHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($Checkbox2, 0x00FF00)
    _FileWriteLog ($logpath, " * " & $Userdone & " * erledigte Aufgabe 2")
    GUICtrlSetData ($Label2, $Userdone)
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox2', "1")
    IniWrite($Dataini, 'GUI Update User', '$Checkbox2User', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf

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

    if BitAnd(GUICtrlRead($Checkbox2),$GUI_UNCHECKED) = $GUI_UNCHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($Checkbox2, 0xFF0000)
    _FileWriteLog ($logpath, " * " & $Userdone & " * hat Aufgabe 2 reaktiviert")
    GUICtrlSetData ($Label2, "")
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox2', "0")
    IniWrite($Dataini, 'GUI Update User', '$Checkbox2User', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf

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

    EndFunc

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

    Func Checkbox3 ()

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

    if BitAnd(GUICtrlRead($Checkbox3),$GUI_CHECKED) = $GUI_CHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($Checkbox3, 0x00FF00)
    _FileWriteLog ($logpath, " * " & $Userdone & " * erledigte Aufgabe 3")
    GUICtrlSetData ($Label3, $Userdone)
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox3', "1")
    IniWrite($Dataini, 'GUI Update User', '$Checkbox3User', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf

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

    if BitAnd(GUICtrlRead($Checkbox3),$GUI_UNCHECKED) = $GUI_UNCHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($Checkbox3, 0xFF0000)
    _FileWriteLog ($logpath, " * " & $Userdone & " * hat Aufgabe 3 reaktiviert")
    GUICtrlSetData ($Label3, "")
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox3', "0")
    IniWrite($Dataini, 'GUI Update User', '$Checkbox3User', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf

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

    EndFunc

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

    Func Checkbox4 ()

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

    if BitAnd(GUICtrlRead($Checkbox4),$GUI_CHECKED) = $GUI_CHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($Checkbox4, 0x00FF00)
    _FileWriteLog ($logpath, " * " & $Userdone & " * erledigte Aufgabe 4")
    GUICtrlSetData ($Label4, $Userdone)
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox4', "1")
    IniWrite($Dataini, 'GUI Update User', '$Checkbox4User', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf

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

    if BitAnd(GUICtrlRead($Checkbox4),$GUI_UNCHECKED) = $GUI_UNCHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($Checkbox4, 0xFF0000)
    _FileWriteLog ($logpath, " * " & $Userdone & " * hat Aufgabe 4 reaktiviert")
    GUICtrlSetData ($Label4, "")
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox4', "1")
    IniWrite($Dataini, 'GUI Update User', '$Checkbox4User', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf

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

    EndFunc

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

    Einmal editiert, zuletzt von seturo1375 (30. Januar 2013 um 13:44)

  • Aaaalso:

    1. Die Checkbox-Funktionen lassen sich vereinfachen. Dafür gibt es das Makro @GUI_CTRLID. Ausserdem vereinfacht es dir vieles, wenn du die Control-ID in ein Array packst. Das ganze könnte dann etwa so aussehen:

    Spoiler anzeigen
    [autoit]

    ...
    ; Da wo du die Checkboxen definierst. Kann man auch noch in eine Schleife packen.
    Global $Checkbox[AnzahlCheckboxenHier]

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

    $Checkbox[0] = GUICtrlCreateCheckbox("Aufgabe 1", 35, 113, 200, 40)
    GUICtrlSetOnEvent(-1, "Checkbox")
    GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, 0xFF0000)
    ...
    ; usw.

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

    Func Checkbox1 ()

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

    $Index = _ArraySearch($Checkbox, @GUI_CTRLID)

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

    If BitAnd(GUICtrlRead($Checkbox[$Index]),$GUI_CHECKED) Then
    GUICtrlSetBkColor($Checkbox[$Index], 0x00FF00)
    _FileWriteLog ($logpath, " * " & $Userdone & " * erledigte Aufgabe 1")
    GUICtrlSetData ($Label[$Index], $Userdone)
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox' & $Index, "1")
    Else
    GUICtrlSetBkColor($Checkbox[$Index], 0xFF0000)
    _FileWriteLog ($logpath, " * " & $Userdone & " * hat Aufgabe " & $Index & " reaktiviert")
    GUICtrlSetData ($Label[$Index], "")
    IniWrite($Dataini, 'GUI Update Box', '$Checkbox' & $Index, "0")
    EndIf

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

    IniWrite($Dataini, 'GUI Update User', '$Checkbox' & $Index & 'User', $Userdone)
    Sleep(10) ; 10 ist der Mindestwert
    FileDelete (@ScriptDir & "\db.activity")

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

    EndFunc

    [/autoit]


    Ist aber ungetestet! Hab versucht das ganze so gut wie möglich zusammenzufassen.

    2. Dein Problem mit GuiUpdate sollte sich dadurch auch vereinfachen. Etwa so:

    Spoiler anzeigen
    [autoit]

    Func GuiUpdate ()

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

    If $CB1update = 1
    GUICtrlSetBkColor($Checkbox1, 0x00FF00)
    GUICtrlSetState($Checkbox1, $GUI_CHECKED)
    GUICtrlSetData ($Label1, $CB1user)
    If $CB1user <> $Userdone Then GUICtrlSetState($Checkbox1, $GUI_DISABLE)
    Else
    GUICtrlSetBkColor($Checkbox1, 0xFF0000)
    GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
    GUICtrlSetData ($Label1, "")
    GUICtrlSetState($Checkbox1, $GUI_ENABLE)
    EndIf

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

    EndFunc

    [/autoit]


    So. Teste das erstmal aus. Dann können wir ja noch weiterschauen.

    Gruss Shadowigor

  • Hallo,

    pack bitte erstmal deinen Code in einen Spoiler, damit die anderen User nicht immer soweit runterscrollen müssen.

    Also ich würde es so verkürzen, dass du für Quellcode, welchen du immer wieder einsetzt einfach eine separate Funktion mit Parametern schreibst.
    Hier habe ich mal die Checkbox-Abfragen kurz in eine Funktion gepackt.

    Spoiler anzeigen
    [autoit]


    ; Beispiel: anstelle von Checkbox3() kannst du nun das schreiben
    CheckboxAbfrage($Checkbox3, $Label3, "$Checkbox3User", $Checkbox3, 3)

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

    Func CheckboxAbfrage($varCheckbox, $varLabel, $sCheckboxUser, $sCheckboxName, $iAufgabenNr)
    if BitAnd(GUICtrlRead($varCheckbox),$GUI_CHECKED) = $GUI_CHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($varCheckbox, 0x00FF00)
    _FileWriteLog ($logpath, " * " & $Userdone & " * erledigte Aufgabe 3")
    GUICtrlSetData ($varLabel, $Userdone)
    IniWrite($Dataini, 'GUI Update Box', '$sCheckboxName', "1")
    IniWrite($Dataini, 'GUI Update User', '$sCheckboxUser', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf

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

    if BitAnd(GUICtrlRead($varCheckbox),$GUI_UNCHECKED) = $GUI_UNCHECKED then

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

    IniWrite (@ScriptDir & "\db.activity","active","1","1")

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

    GUICtrlSetBkColor($varCheckbox, 0xFF0000)
    _FileWriteLog ($logpath, " * " & $Userdone & " * hat Aufgabe 3 reaktiviert")
    GUICtrlSetData ($varLabel, "")
    IniWrite($Dataini, 'GUI Update Box', '$sCheckboxName', "0")
    IniWrite($Dataini, 'GUI Update User', '$sCheckboxUser', $Userdone)

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

    sleep(2)
    FileDelete (@ScriptDir & "\db.activity")

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

    EndIf
    EndFunc

    [/autoit]

    Noch besser wäre es, wenn du deine Checkboxen und Labels usw. einfach in einem Array speicherst. Damit hast du dann auf alle Fälle die Möglichkeit Schleifen zu durchlaufen.
    Anstelle von:

    [autoit]

    Global $Label3 = GUICtrlCreateLabel("", 248, 174, 38, 38)

    [/autoit]


    Könntest du dann einfach

    [autoit]

    $Labels[3] = GUICtrlCreateLabel("", 248, 174, 38, 38)

    [/autoit]


    verwenden. Vorher natürlich noch das Array deklarieren mit

    [autoit]

    Global $Labels[4]

    [/autoit]
  • Du solltest die ControlIDs deiner Checkboxen und den dazugehörigen Labels ("Guest") in einem Array speichern. Dann kannst du für jede Checkbox die gleiche Funktion aufrufen und dann anhand des Makros @GUI_CtrlId über eine einfache Rehenformel gezielt die Checkbox auswerten. Beispiel für diese Technik:

    Spoiler anzeigen
    [autoit]

    ;http://www.autoit.de/index.php?page…3282#post293282
    #include <GUIConstantsEx.au3>

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

    Opt('MustDeclareVars', 1)
    Opt("GUIOnEventMode", 1)

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

    Const $sIni = @ScriptDir & "\Aufgaben.ini"
    Const $iRed = 0xFF0000
    Const $iGreen = 0x00FF00
    Global $idChkAufgaben[8]
    Global $idLblAufgaben[8]
    Global $hGui = GUICreate("Beispiel für @GUI_CtrlId ", 800, 600)
    GUISetFont(10, 400, 0, "Arial")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Close")
    For $i = 0 To 7
    $idChkAufgaben[$i] = GUICtrlCreateCheckbox("Aufgabe " & $i + 1, 35, 53 + $i * 60, 200, 40)
    GUICtrlSetOnEvent(-1, "_AufgabenCheck")
    ;GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    GUICtrlSetBkColor(-1, $iRed)
    Next
    For $i = 0 To 7
    $idLblAufgaben[$i] = GUICtrlCreateLabel("", 248, 56 + $i * 60, 200, 38)
    ;GUICtrlSetFont(-1, 10, 400, 0, "Arial")
    If IniRead($sIni, "Main", "Aufgabe[" & $i & "]", 4) = 1 Then
    GUICtrlSetState($idChkAufgaben[$i], $GUI_CHECKED)
    _TeilAufgabe($i)
    EndIf
    Next
    GUISetState(@SW_SHOW)

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

    While 1
    Sleep(5555)
    WEnd

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

    Func _Close()
    For $iArrayNr = 0 To 7
    IniWrite($sIni, "Main", "Aufgabe[" & $iArrayNr & "]", GUICtrlRead($idChkAufgaben[$iArrayNr]))
    Next
    Exit
    EndFunc ;==>_Close

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

    Func _AufgabenCheck()
    Local $iArrayNr = @GUI_CtrlId - $idChkAufgaben[0] ;umrechnen der CtrlID zu Arrayelement
    _TeilAufgabe($iArrayNr)
    EndFunc ;==>_AufgabenCheck

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

    Func _TeilAufgabe($iArrayNr)
    ;ConsoleWrite($iArrayNr&@CRLF)
    If BitAND(GUICtrlRead($idChkAufgaben[$iArrayNr]), $GUI_CHECKED) Then
    GUICtrlSetData($idLblAufgaben[$iArrayNr], "ist erledigt")
    GUICtrlSetBkColor($idChkAufgaben[$iArrayNr], $iGreen)
    Else
    GUICtrlSetData($idLblAufgaben[$iArrayNr], "ist noch zu erledigen")
    GUICtrlSetBkColor($idChkAufgaben[$iArrayNr], $iRed)
    EndIf
    EndFunc ;==>_TeilAufgabe

    [/autoit]

    mfg autoBert

    Einmal editiert, zuletzt von autoBert (30. Januar 2013 um 11:39)

  • Tagchen nochmal,

    erstmal sorry , hab den Code gleich mal in Spoiler gesetzt. Passiert leider wenn man nicht so oft im Forum unterwegs ist. :whistling:

    Also vielen dank für die ganzen Tipps an alle Poster. Hab jetzt grad nicht soviel Zeit, aber den Tipp von Shadow hab ich schon mal ins

    Auge gefasst.

    @Shadow

    Dein Bsp hab ich aufgegriffen und das funktioniert auch wunderbar, @GUI_CTRLID war mir nicht bekannt. Echt klasse, das hab ich auch

    recht flott als unterqualifizierter Hobby Progger verstanden :thumbup: .

    Die Controls lassen sich spielend abfragen. Nur wie ich das in die GUI Update Funktion reinfrimmele muss ich erstmal heut abend schauen,

    da ich die Daten ja aus der Ini holen muss was abgehakt ist . Dabei werd ich auch mal noch die anderen Tipps näher anschaun.

  • So jetzt hab ich mich mal eingehender mit den Tips beschäfigt, Bert deine Variante ist natürlich super deluxe effzient, aber ich wollte
    das ganze mit Auswertung wer was gemacht in der GUI darstellen, deswegen auch die User Abfrage. Das Tool soll an mehreren PCs
    gleichzeitig laufen können.

    Also Checkboxen funktioniert mit der Variante von Shadow ohne Probleme, aber leider häng ich fest was die Update Funktion betrifft,
    ich möchte die Werte aus der Ini verwenden um die GUI in echtzeit aktuell zu halten, und da knotet es bei mir :S

    Wenn ich die mit "IniReadSection" einlese hab ich ein 2d Array, aber wie werte ich das vernünfitg aus bzw kombiniere
    es mit If Abfrage ?

    Zudem wären es 2 Sektionen die ich auswerten muss, "Checkbox an/aus" und "Welcher user" ?

    Bsp Ini:
    [GUI Update Box]
    $Checkbox0=0
    $Checkbox1=0
    $Checkbox2=0
    $Checkbox3=0
    [GUI Update User]
    $Checkbox0User=Guest
    $Checkbox1User=Peter
    $Checkbox2User=
    $Checkbox3User=


    Spoiler anzeigen
    [autoit]


    Func GuiUpdate ()

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

    Global $CBupdate = IniReadSection ($Dataini, 'GUI Update Box')
    Global $CBuser = IniReadSection ($Dataini, 'GUI Update User')

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

    If $CBupdate[$i] = 1 then
    GUICtrlSetBkColor($Checkbox1, 0x00FF00)
    GUICtrlSetState($Checkbox1, $GUI_CHECKED)
    GUICtrlSetData ($Label1, $CB1user)
    If $CBuser <> $Userdone Then GUICtrlSetState($Checkbox1, $GUI_DISABLE)
    Else
    GUICtrlSetBkColor($Checkbox1, 0xFF0000)
    GUICtrlSetState($Checkbox1, $GUI_UNCHECKED)
    GUICtrlSetData ($Label1, "")
    GUICtrlSetState($Checkbox1, $GUI_ENABLE)
    EndIf

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

    EndFunc

    [/autoit]
  • Bert deine Variante ist natürlich super deluxe effzient, aber ich wollte
    das ganze mit Auswertung wer was gemacht in der GUI darstellen, deswegen auch die User Abfrage.

    Es soll ja nur ein Beispiel sein.

    Das Tool soll an mehreren PCs
    gleichzeitig laufen können.


    Gibt Chaos wenn eine INI als "DB" von mehreren verwendet wird.

    mfg autoBert

  • Ich habe gerade bemerkt, dass mein GuiUpdate() Beispiel völliger Mist ist :D Hab die Arrays und Ini's komplett vergessen :S Eigentlich meinte ich das in etwa so:

    Spoiler anzeigen
    [autoit]

    Func GuiUpdate ()

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

    Local $CBuser, $CBupdate, $i

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

    For $i = 0 To UBound($Checkbox) - 1
    $CBupdate = IniRead ($Dataini, 'GUI Update Box', '$Checkbox' & $i, "")
    $CBuser = IniRead ($Dataini, 'GUI Update User', '$Checkbox' & $i & 'User', "")

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

    If $CBupdate = 1
    GUICtrlSetBkColor($Checkbox[$i], 0x00FF00)
    GUICtrlSetState($Checkbox[$i], $GUI_CHECKED)
    GUICtrlSetData ($Label[$i], $CBuser)
    If $CBuser <> $Userdone Then GUICtrlSetState($Checkbox[$i], $GUI_DISABLE)
    Else
    GUICtrlSetBkColor($Checkbox[$i], 0xFF0000)
    GUICtrlSetState($Checkbox[$i], $GUI_UNCHECKED)
    GUICtrlSetData ($Label[$i], "")
    GUICtrlSetState($Checkbox[$i], $GUI_ENABLE)
    EndIf
    Next

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

    EndFunc

    [/autoit]


    Bedingung dafür ist, dass du die Variable $Label1 ebenfalls zu einem Array konvertierst. Genau wie du es mit $Checkbox1 zum $Checkbox Array auch gemacht hast. Dann sollte es funktionieren.

    Ausserdem musst du noch die Funktion Checkbox1 in Checkbox umbenennen. Hab das bei der ersten Funktion noch vergessen. Wirst du aber wohl schon gemerkt haben wenns funktioniert hat ^^.

  • Hallo zusammen,

    superklasse Shadow, funzt perfekt :thumbup:

    Vielen Dank, das war genau die Lösung nach der ich gesucht hatte und an der ich auch schon rumgedoktert hatte.

    Nachdem die Basis jetzt mal steht kann ich mich dem weiteren Design widmen.

    Vielen Dank auch an die anderen.

  • Nabend,

    wollte noch ein Extra Danke an Bert loswerden, hab deine Technik zur Control Erstellung übernommen.

    Da es vermutlich 50+ Checkboxen über 3 Tabs werden, wird das äußerst hilffreich sein mir nicht mit Koda die Finger zu brechen :thumbup: