Variablen aus Werte erstellen

  • Hallo leute.
    habe folgendes Problem.

    Ich möchte gerne in einer Schleife sämtliche Checkboxen aktivieren.
    Das hab ich mir so vorgestellt:

    [autoit]

    Case $nMsg = $Button1
    $a = 0
    While $a <=12
    $Checkbox = "$TreeView1_" & $a
    MsgBox(0, "Ausgabe", $Checkbox)
    GUICtrlSetState($Checkbox, $GUI_CHECKED)
    $a = $a + 1
    WEnd

    [/autoit]

    Jedoch funktioniert das nicht.
    Das zusammensetzen der variable aus Text und Wert passt soweit.
    Wo liegt da der Fehler?

  • Da müssen die "" beim TreeView weg, Variable bekommen keine Anführungszeichen.

    Spoiler anzeigen
    [autoit]

    Case $nMsg = $Button1
    $a = 0
    While $a <=12
    $Checkbox = $TreeView1_ & $a
    MsgBox(0, "Ausgabe", $Checkbox)
    GUICtrlSetState($Checkbox, $GUI_CHECKED)
    $a = $a + 1
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von penta.phoenix (30. August 2007 um 14:46)

  • Das ist es leider nicht.
    Dann bekomme ich den Fehler: Variable used without being declared.

    Was ja auch logisch klingt da die Variable $TreeView1_ nicht definiert ist.

    peethebee: Kannst du mir ein beispiel geben wie das dann aussehen muß?

    Einmal editiert, zuletzt von DerSchatten (30. August 2007 um 14:55)

  • Ok, vielleicht habe ich da was falsch verstanden!?!

    Wenn $TreeView1_ eine Variable ist, dann musst Du sie selbstverständlich vorher definieren.

    Sollte es aber keine Variable sein, dann kannst Du meinen ersten Post vergessen. Allerdings verstehe ich dann nicht, warum Du ein $ verwendest.

    • Offizieller Beitrag

    Dein System sollte so gehen:

    [autoit]

    Case $nMsg = $Button1
    $a = 0
    While $a <=12
    GUICtrlSetState(Eval("$TreeView1_" & $a), $GUI_CHECKED)
    $a = $a + 1
    WEnd

    [/autoit]

    Ich würde es so machen:

    [autoit]

    Dim $Tree[12]
    $Tree[0] = GUICTRLCreateTreeView(...)
    $Tree[1] = GUICTRLCreateTreeView(...)
    ;[usw.]

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

    For $i = 0 to Ubound($Tree) -1
    GUICtrlSetState($Tree[$i], $GUI_CHECKED)
    Next

    [/autoit]

    peethebee

  • Hallo nochmal.
    Ich habe dazu jetzt noch ein problem.
    Wenn ich nun den Status der einzelnen Checkboxen abfragen möchte und dementsprechend eine Aktion ausgeführt werden soll, wie gehe ich dann vor?

    Momentan sieht das ganze so aus:

    [autoit]

    If GUICtrlRead ($TreeView[0]) = 1 Then ...
    If GUICtrlRead ($TreeView[1]) = 1 Then ...
    If GUICtrlRead ($TreeView[2]) = 1 Then ...
    If GUICtrlRead ($TreeView[3]) = 1 Then ...
    If GUICtrlRead ($TreeView[4]) = 1 Then ...

    [/autoit]

    Das scheint aber so nicht zu funktionieren.

  • Konnte ich auch gerade in Erfahrung bringen.
    Jedoch funkt das ganze trotzdem nicht:

    [autoit]

    If GUICtrlRead ($TreeView[0]) = $GUI_CHECKED Then ...
    If GUICtrlRead ($TreeView[1]) = $GUI_CHECKED Then ...
    If GUICtrlRead ($TreeView[2]) = $GUI_CHECKED Then ...
    If GUICtrlRead ($TreeView[3]) = $GUI_CHECKED Then ...
    If GUICtrlRead ($TreeView[4]) = $GUI_CHECKED Then ...
    ...

    [/autoit]

    Das ganze funktioniert nur, wenn alle Checkboxen vor der zu letzt aktivierten, aktiviert sind.

    Funkt nicht:
    Box 1: x
    Box 2: x
    Box 3: -
    Box 4: x

    Funkt:
    Box 1: x
    Box 2: x
    Box 3: x
    Box 4: x

    Einmal editiert, zuletzt von DerSchatten (30. August 2007 um 22:42)

  • mach mal MSgBox(0,"",GuICtrlRead($checkbox) )

    Einmal wenn Es aktiviert ist, einmal wenn nicht.

    vll komsmt du selber drauf! :)

  • Irgendwie werd ich aus dem ganzen nicht schlau.
    Die Ausgabe liefert immer einen anderen Wert.

    Wie prüft man denn nun ob eine checkbox aktiviert ist oder nicht?

    Einmal editiert, zuletzt von DerSchatten (31. August 2007 um 09:46)

    • Offizieller Beitrag

    Der Status ist nicht nur ein Bit, sonder eine ganze Menge. Du kannst damit ja auch aktiviert/nicht aktiviert usw. abfragen.
    D.h. du musst das einzelne Bit erst herausholen und dann abfragen.
    Wenn ich mich recht erinnere, geht das so:

    [autoit]

    $res = BitAnd(GUICTRLRead($Checkbox), $GUI_CHECKED)
    MsgBox(0, "", $res)

    [/autoit]


    Damit sollte das Ergebnis auf 0/1 normiert sein.

    peethebee

  • Leider nein. genau das gleiche Phänomen.
    Mal 5, mal 257, mal 260
    Jeh nachdem ob danach auch eine Checkbox aktiviert ist oder davor.

    Was ist das für ein Sch.... ? :(

    Liegts das problem vielleicht am Array?

  • Hab ich:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    $Form1 = GUICreate("Backup-System", 629, 449, 664, 419)
    $Label1 = GUICtrlCreateLabel("Bitte die gewünschten Programme für die Sicherung auswählen", 32, 16, 493, 23)
    GUICtrlSetFont(-1, 12, 800, 4, "Arial")
    GUICtrlSetColor(-1, 0x0000FF)
    $progressbar1 = GUICtrlCreateProgress (72,340,200,20)
    $Button1 = GUICtrlCreateButton("Alle", 72, 390, 75, 25, 0)
    $Button2 = GUICtrlCreateButton("Keine", 200, 390, 75, 25, 0)
    $Button3 = GUICtrlCreateButton("OK", 72, 422, 75, 25, 0)
    $Button4 = GUICtrlCreateButton("Abbrechen", 200, 422, 75, 25, 0)
    $Label1 = GUICtrlCreateLabel("Pfad:",45,363,25,21)
    $pfad = GUICtrlCreateInput("E:\Rettungsdaten\Programme\SICHERUNG\", 72, 360, 300, 21)
    $Auswahl = GUICtrlCreateButton("...", 375, 359, 19, 22, 0)
    $auswahl = GUICtrlCreateGroup("Auswahl:", 88, 64, 217, 273)
    $TreeView1 = GUICtrlCreateTreeView(96, 80, 200, 250, BitOR($TVS_DISABLEDRAGDROP,$TVS_SHOWSELALWAYS,$TVS_CHECKBOXES,$WS_GROUP,$WS_TABSTOP))
    Dim $TreeView[13]
    If FileExists("C:\Program Files\ACDSee\9.0") Then $TreeView[0] = GUICtrlCreateTreeViewItem("ACDSee 9.0", $TreeView1)
    If FileExists("C:\Users\User1\AppData\Roaming\Adobe\Adobe Photoshop CS3\Adobe Photoshop CS3 Settings\WorkSpaces") Then $TreeView[1] = GUICtrlCreateTreeViewItem("Adobe CS3 Arbeitsbereich", $TreeView1)
    If FileExists("C:\Program Files\CDLIB") Then $TreeView[2] = GUICtrlCreateTreeViewItem("CD Library 4.0", $TreeView1)
    If FileExists("C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Hagel Technologies\DU Meter") Then $TreeView[3] = GUICtrlCreateTreeViewItem("DU Meter", $TreeView1)
    If FileExists("C:\Users\User1\Documents\Turbo Lister Backup") Then $TreeView[4] = GUICtrlCreateTreeViewItem("eBay TurboLister2", $TreeView1)
    If FileExists("C:\Users\User1\AppData\Roaming\FlashGet\DataBase") Then $TreeView[5] = GUICtrlCreateTreeViewItem("FlashGet", $TreeView1)
    If FileExists("C:\Users\User1\AppData\Roaming\Logitech\SetPoint") Then $TreeView[6] = GUICtrlCreateTreeViewItem("Logitech Mauseinstellungen", $TreeView1)
    If FileExists("C:\Program Files\PhotoWatermark Professional 6") Then $TreeView[7] = GUICtrlCreateTreeViewItem("PhotoWatermark Professional 6", $TreeView1)
    If FileExists("C:\Dokumente und Einstellungen\User1\Anwendungsdaten\Radmin") Then $TreeView[8] = GUICtrlCreateTreeViewItem("Radmin Viewer 3.0", $TreeView1)
    If FileExists("C:\Program Files\SciTE") Then $TreeView[9] = GUICtrlCreateTreeViewItem("SciTE", $TreeView1)
    If FileExists("C:\Users\User1\AppData\Roaming\SpeedProject\SpeedCommander 11") Then $TreeView[10] = GUICtrlCreateTreeViewItem("Speed Commander 11", $TreeView1)
    If FileExists("C:\Program Files\Windows Mail") Then $TreeView[11] = GUICtrlCreateTreeViewItem("Windows Mail", $TreeView1)
    If FileExists("C:\Program Files\WinSCP") Then $TreeView[12] = GUICtrlCreateTreeViewItem("WinSCP", $TreeView1)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    GUISetState(@SW_SHOW)
    For $a = 0 to Ubound($TreeView) -1
    GUICtrlSetState($TreeView[$a], $GUI_CHECKED)
    Next

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

    While 1
    $nMsg = GUIGetMsg()
    Select
    Case $nMsg = $GUI_EVENT_CLOSE
    Exit
    Case $nMsg = $Button1
    For $a = 0 to Ubound($TreeView) -1
    GUICtrlSetState($TreeView[$a], $GUI_CHECKED)
    Next
    Case $nMsg = $Button2
    For $a = 0 to Ubound($TreeView) -1
    GUICtrlSetState($TreeView[$a], $GUI_UNCHECKED)
    Next
    Case $nMsg = $Button3
    $wert = 0
    $regedit = "regedit.exe /E"
    If GUICtrlRead ($TreeView[0]) = 4 Then
    Run ($regedit & " " & GUICtrlRead($pfad) & "ACDSee.reg" & " " & '"HKEY_CURRENT_USER\Software\ACD Systems\ACDSee\90"') ;ACDSee
    GUICtrlSetData ($progressbar1,1)
    EndIf
    If GUICtrlRead ($TreeView[1]) = 4 Then
    FileCopy("C:\Users\User1\AppData\Roaming\Adobe\Adobe Photoshop CS3\Adobe Photoshop CS3 Settings\WorkSpaces\User1", GUICtrlRead($pfad)) ;Adobe Arbeitsbereich
    GUICtrlSetData ($progressbar1,2)
    EndIf
    If GUICtrlRead ($TreeView[2]) = 4 Then
    FileCopy("C:\Program Files\CDLIB\Data\Cdlib.ini", GUICtrlRead($pfad)) ;CD Library Einstellungen
    FileCopy("C:\Program Files\CDLIB\CDLIB.MDB", GUICtrlRead($pfad)) ;CD Library Datenbank
    GUICtrlSetData ($progressbar1,3)
    EndIf
    If GUICtrlRead ($TreeView[3]) = 4 Then
    Run ($regedit & " " & GUICtrlRead($pfad) & "DUMeter.reg" & " " & '"HKEY_CURRENT_USER\Software\Hagel\DU Meter"') ;DU Meter Einstellungen
    FileCopy("C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\Hagel Technologies\DU Meter\log.csv", GUICtrlRead($pfad)) ;DU Meter Statistik
    GUICtrlSetData ($progressbar1,4)
    EndIf
    If GUICtrlRead ($TreeView[4]) = 4 Then
    FileCopy("C:\Users\User1\Documents\Turbo Lister Backup\*.*", GUICtrlRead($pfad)) ;eBay TurboLister
    GUICtrlSetData ($progressbar1,5)
    EndIf
    If GUICtrlRead ($TreeView[5]) = 4 Then
    ;Run ($regedit & " " & GUICtrlRead($pfad) & "FlashGet.reg" & " " & '"HKEY_CURRENT_USER\Software\JetCar"') ;FlasGet Einstellungen
    FileCopy("C:\Users\User1\AppData\Roaming\FlashGet\DataBase\*.*", GUICtrlRead($pfad)) ;FlashGet Einstellungen
    GUICtrlSetData ($progressbar1,6)
    EndIf
    If GUICtrlRead ($TreeView[6]) = 4 Then
    FileCopy("C:\Users\User1\AppData\Roaming\Logitech\SetPoint\user.xml", GUICtrlRead($pfad)) ;Maus
    GUICtrlSetData ($progressbar1,7)
    EndIf
    If GUICtrlRead ($TreeView[7]) = 4 Then
    FileCopy("C:\Users\User1\Documents\My Watermarks\*.wmk", GUICtrlRead($pfad)) ;PhotoWatermark Watermarks
    FileCopy("C:\Program Files\PhotoWatermark Professional 6\watermark.ini", GUICtrlRead($pfad)) ;PhotoWatermark Einstellungen
    GUICtrlSetData ($progressbar1,8)
    EndIf
    If GUICtrlRead ($TreeView[8]) = 4 Then
    Run ($regedit & " " & GUICtrlRead($pfad) & "RAdmin.reg" & " " & '"HKEY_CURRENT_USER\Software\Radmin"') ;RAdmin Einstellungen
    FileCopy("C:\Dokumente und Einstellungen\User1\Anwendungsdaten\Radmin\radmin.rpb", GUICtrlRead($pfad)) ;RAdmin Adressbuch
    GUICtrlSetData ($progressbar1,9)
    EndIf
    If GUICtrlRead ($TreeView[9]) = 4 Then
    FileCopy("C:\Program Files\SciTE\locale.properties", GUICtrlRead($pfad)) ;SciTE Deutsche Sprachdatei
    FileCopy("C:\Program Files\SciTE\SciTEGlobal.properties", GUICtrlRead($pfad)) ;SciTE Konfiguration
    GUICtrlSetData ($progressbar1,10)
    EndIf
    If GUICtrlRead ($TreeView[10]) = 4 Then
    FileCopy("C:\Users\User1\AppData\Roaming\SpeedProject\SpeedCommander 11\SpeedCommander.xml", GUICtrlRead($pfad)) ;Speed Commander
    GUICtrlSetData ($progressbar1,11)
    EndIf
    If GUICtrlRead ($TreeView[11]) = 4 Then
    Run ($regedit & " " & GUICtrlRead($pfad) & "WindowsMail.reg" & " " & '"HKEY_CURRENT_USER\Software\Microsoft\Windows Mail"') ;Windows Mail
    GUICtrlSetData ($progressbar1,12)
    EndIf
    If GUICtrlRead ($TreeView[12]) = 4 Then
    Run ($regedit & " " & GUICtrlRead($pfad) & "WinSCP.reg" & " " & '"HKEY_CURRENT_USER\Software\Martin Prikryl\WinSCP 2"') ;WinSCP
    GUICtrlSetData ($progressbar1,13)
    EndIf
    $res = BitOr(GUICTRLRead($TreeView[0]), $GUI_CHECKED)
    MSgBox(0,"", $res)
    Case $nMsg = $Button4
    Exit
    EndSelect
    WEnd

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

    If ProcessExists("SciTE.exe") Then
    MsgBox(0, "Achtung!", "Bitte schließen Sie das Programm ""SciTE"" bevor sie mit dem Restore fortfahren.")
    EndIf

    [/autoit]