Checkboxes prüfen und dadurch eingaben berechnen?

  • Hi an alle...


    Habe ein Problem...

    Ich habe eine GUI mit mehreren Checkboxes erstellt diese Checkboxes sollen nun "geprüft" werden ob sie gecheckt sind oder nicht...

    jede checkbox sieht ca. so aus:

    [autoit]

    $int4 = GUICtrlCreateCheckbox("Skype", 315,110)

    [/autoit]


    So ... jetzt soll wenn diese Checkbox geklickt wird bei diesem Teil:

    [autoit]

    GUICtrlCreateLabel ("Benötigter Speicher:",10,400,100)
    $speicher = GUICtrlCreateLabel ("0,0 GB",10,420,100)

    [/autoit]


    (also eine aufzählung von dem gebrauchten speicher des Programms)
    soll hier + gerechnet werden...

    also welche variablen oder angaben brauch ich noch um diese "anzeige" richtig zu machen?

    wenn der haken weggenommen wird soll natürlich auch der Speichergebrauch wieder abgezogen werden...

    wie fange ich das am besten an...?
    hoffe ihr könnt mir helfen :)

    Zitat

    Neues Problem siehe unten! :)

    MFG: Blacky911

    Kleiner AutoIt Lehrling :)

    3 Mal editiert, zuletzt von blackdeath911 (15. Juni 2009 um 21:03)

  • Die Label kannstu mit GuiCtrlSetState($label, $GUI_SHOW) bzw. GuiCtrlSetState($label, $GUI_HIDE) anzeigen und verstecken...
    Doch das mit dem Speicherplatz berechnen kannste vergessen, das geht nicht!
    Du kannst höchstens die Größe der Setup-Datei ausrechnen (FileGetSize)

  • Nein die Speichergröße habe ich schon in Variablen vorliegen...

    er soll sozusagen beim klicken auf eine Checkbox die Variablen addieren...

    wie mache ich das? das er sie dann dort anzeigt?

    MFG: Blacky911

    Kleiner AutoIt Lehrling :)

  • Hallo blackdeath911,

    Nimm doch einfach die Func FileGetSize('DeinInstallerFileName') um den jeweiligen Plattenplatz zu ermitteln:

    Spoiler anzeigen
    [autoit]


    While 1
    $msg = GUIGetMsg()
    Switch $msg
    Case -3
    Exit
    Case $exit
    Exit
    Case $ok
    $iZuBelegen = 0
    If GUICtrlRead($1) = $GUI_CHECKED Then
    GUICtrlSetData($1Stat,"Wird installiert ICQ 6.5")
    $iZuBelegen = $iZuBelegen + FileGetSize(ISQ65.Exe)
    ;hier Insatllationsroutine aufrufen runwait
    sleep (3000)
    GUICtrlSetData($1Stat,"wurde installiert ICQ 6.5")
    EndIf
    If GUICtrlRead($2) = $GUI_CHECKED Then
    GUICtrlSetData($2Stat,"Wird installiert FireFox")
    $iZuBelegen = $iZuBelegen + FileGetSize(FireFox.Exe)
    ;hier Insatllationsroutine aufrufen
    sleep (3000)
    GUICtrlSetData($2Stat,"wurde installier FireFox")
    EndIf
    If GUICtrlRead($3) = $GUI_CHECKED Then
    GUICtrlSetData($3Stat,"Wird installiert DivX")
    $iZuBelegen = $iZuBelegen + FileGetSize(DivX.Exe)
    ;hier Insatllationsroutine aufrufen
    sleep (3000)
    GUICtrlSetData($3Stat,"wurde installiert DivX")
    EndIf
    If GUICtrlRead($4) = $GUI_CHECKED Then
    GUICtrlSetData($4Stat,"Wird installiert JAVA")
    $iZuBelegen = $iZuBelegen + FileGetSize(JAVA.Exe)
    ;hier Insatllationsroutine aufrufen
    sleep (3000)
    GUICtrlSetData($4Stat,"wurde installiert JAVA")
    EndIf
    GUIDelete($hGui)
    EXitLoop
    EndSwitch
    WEnd
    EndFunc

    [/autoit]


    ist noch aus dem alten Thread, da du ja sofort nach dem Drücken auf den Fertig-Button anfängst brauchst du immer nur aufzu addieren, für eine evtl. ProgressAnzeige merkst du dir am Anfang wieviel Platz auf der Platte frei war, danach schaust du immer wieder wieviel noch frei ist, die Differenz ist der absolute Wert des Fortschritts, diesen rechnest du dann mit Hilfe des insgsamt benötigten Platzbedarfs in eine %-Zahl um und gibst sie aus z.B. Label (oder auch anders wenn du möchtest),

    mfg (Auto)Bert

  • Nein ^^

    hab schon wieder was umgescriptet :)

    ich habe jetzt dieses Label und das soll sich verändern WÄHREND man auswählen kann...
    habe es jetzt so geschriben:

    [autoit]


    ;beispielzahlen
    Global $speicher = 0
    Global $divx = 0.9
    [...]
    ;das steht in der While 1
    IF GUICtrlread (5,$GUI_CHECKED) Then
    $speicher = $speicher + $divx
    GUICtrlSetData (61,$speicher & " GB")
    EndIf
    ;wenn man die GUI startet rechnet er sinnlose zahlen und aktualisiert sie durchgängig...
    [...]

    [/autoit]

    wie kann/muss ich das abändern?

    MFG: Blacky911

    Kleiner AutoIt Lehrling :)

  • So habe mal was weiter rumprobiert...


    jetzt sieht es so aus:

    [autoit]

    While 1
    [...]
    $rechnung = GUICtrlRead (5)
    IF $rechnung = $GUI_CHECKED Then
    $speicher = $speicher + $divx
    GUICtrlSetData (61,$speicher & " GB")
    EndIf
    [...]
    Wend

    [/autoit]

    aber sobalt es gecheckt ist rechnet er ununterbrochen +$divx
    wie kann man es nur ein einziges mal + rechnen lassen? bzw. wieder abziehen lassen wenn sie UNCHECKED ist?

    MFG: Blacky911

    Kleiner AutoIt Lehrling :)

  • Leichter wärs wenn du dein ganzes Script posten könntest!
    Grundsätzlich würde ich das so machen ->

    [autoit]

    While 1
    $msg = GuiGetMsg()
    Switch $msg
    Case $DeineCheckBox
    If GuiCtrlRead($DeineCheckBox) = $GUI_CHECKED Then
    $speicher = $speicher + $divx
    GUICtrlSetData (61,$speicher & " GB")
    EndIf
    EndSwitch
    Wend

    [/autoit]
  • danke das habe ich gesucht...

    das script wollte ich euch nicht antuen :D hat schon 1300 Zeilen :)

    haben es auch grade schon mit

    [autoit]

    IF $rTuneup = 1 Then
    IF GUICtrlRead (5) = $GUI_CHECKED Then
    $speicher = $speicher + $stuneup
    GUICtrlSetData (61,$speicher & " GB")
    $rTuneup = 2
    EndIf
    EndIf
    IF $rTuneup = 2 Then
    IF GUICtrlRead (5) = $GUI_UNCHECKED THEN
    $speicher = $speicher - $stuneup
    $rTuneup = 1
    GUICtrlSetData (61,$speicher & " GB")
    EndIf
    EndIf

    [/autoit]

    aber deine lösung ist definitiv eleganter :)

    MFG: Blacky911

    Kleiner AutoIt Lehrling :)

  • So...

    ich habe wieder Probleme....


    Wenn ich alles so eintrage dann geht es solange man auf die Checkboxes klickt...

    nur habe ich jetzt auch Buttons gemacht die alles auf einmal CHECKEN und auch Buttons um eine EMPROHLENE AUSWAHL zu treffen...

    nur jetzt mein Problem... wie schreibe ich die speicherberechnung in diese Buttons rein? jeweils das

    [autoit]

    Case $sys1
    IF GUICtrlRead(5) = $GUI_CHECKED Then
    $speicher = $speicher + $stuneup
    GUICtrlSetData (61,$speicher & " MB")
    EndIf
    IF GUICtrlRead(5) = $GUI_UNCHECKED Then
    $speicher = $speicher - $stuneup
    GUICtrlSetData (61,$speicher & " MB")
    EndIf

    [/autoit]


    von jedem was durch den Button gecheckt wird auch in das button case einfügen?

    und mein 2. Problem ist:
    Wenn ich diese funktion für mehrere Checkboxes schreibe addiert er wunderbar die zahlen ... nur manchmal beim Unchecken kommen sinnlose mehrfachkommastellen raus... die nirgends im script stehen und garnicht berechnet weden könnten...

    kann mir da wer rat geben?

    MFG: Blacky911

    Kleiner AutoIt Lehrling :)

  • So es tut mir leid das ich jetzt 3 Posts untereinander habe...

    Habe das Problem halb gelöst :) es lag an den kommazahlen...

    er konnte nicht 47.3 wieder richtig von einer anderen zahl abziehen...
    irgendwie komisch aber naja... muss ich die MB zahlen halt aufrunden

    Ich lasse es nochmal offen eine weile fals hier noch jemand weiß warum er mit kommazahlen nicht richtig rechnen konnte...
    mein script sah so aus (zumindest die stellen die betroffen sind)

    [autoit]

    Global $stuneup = 46.8,$rtuneup = 1
    Global $scmccodec = 4.7,$rcmccodec = 1
    Global $svistacodec = 10.1,$rvistacodec = 1
    [...]
    While 1
    [...]
    IF $rtuneup = 1 Then
    IF GUICtrlRead (5) = $GUI_CHECKED Then
    $speicher = $speicher + $stuneup
    GUICtrlSetData (62,$speicher & " MB")
    $rTuneup = 2
    EndIf
    EndIf
    IF $rTuneup = 2 Then
    IF GUICtrlRead (5) = $GUI_UNCHECKED THEN
    $speicher = $speicher - $stuneup
    $rTuneup = 1
    GUICtrlSetData (62,$speicher & " MB")
    EndIf
    EndIf
    ;nächstes Case VISTA CODECPACK
    IF $rvistacodec = 1 Then
    IF GUICtrlRead (6) = $GUI_CHECKED Then
    $speicher = $speicher + $svistacodec
    GUICtrlSetData (62,$speicher & " MB")
    $rvistacodec = 2
    EndIf
    EndIf
    IF $rvistacodec = 2 Then
    IF GUICtrlRead (6) = $GUI_UNCHECKED THEN
    $speicher = $speicher - $svistacodec
    $rvistacodec = 1
    GUICtrlSetData (62,$speicher & " MB")
    EndIf
    EndIf
    ;nächstes Case COMBINED MEDIA COMMUNITY CODEC PACK
    IF $rcmccodec = 1 Then
    IF GUICtrlRead (7) = $GUI_CHECKED Then
    $speicher = $speicher + $scmccodec
    GUICtrlSetData (62,$speicher & " MB")
    $rcmccodec = 2
    EndIf
    EndIf
    IF $rcmccodec = 2 Then
    IF GUICtrlRead (7) = $GUI_UNCHECKED THEN
    $speicher = $speicher - $scmccodec
    $rcmccodec = 1
    GUICtrlSetData (62,$speicher & " MB")
    EndIf
    EndIf
    [...]
    Wend
    [...]

    [/autoit]


    MFG: Blacky911

    Kleiner AutoIt Lehrling :)

  • Nein ohne Beispielscript kann ich dir nicht 100% helfen!

    Versuchs mit:
    -> INT, ROUND, CEILING, FLOOR

    Edit: Oh letzten Post übersehen... naja du hast n bisschen dazugelernt.. jetzt sollte das Beispielscript nur noch ausführbar sein!

    Einmal editiert, zuletzt von ChaosKeks (15. Juni 2009 um 22:07)

  • So habe alle bugs entfernt... und das die GUI ausgebaut das die abfrage der MB größen auch bei Buttonklicks wie "alle markieren" funktioniert...

    ist es normal das das script nur für die GUI dann schon über 4000 zeilen groß ist?

    MFG: Blacky911

    Kleiner AutoIt Lehrling :)

    • Offizieller Beitrag

    Ob das Normal ist? Eher nicht. Da du ja niemanden eine Chance gibst, dir beim kürzen zu helfen, wirst du alleine sehen müssen wie du es optimieren kannst . Und du mußt nicht 3 mal hintereinander posten, für was kann man seine Post´s eigentlich bearbeiten ? Damit es niemand benutzt?