Anfängerschwierigkeiten (Checkbox, Button etc.)

  • Hallo!

    Ich bin dabei, mir einen kleinen Rechner zu basteln, um Belichtungszeiten umzurechnen. Allerdings mehr deshalb, um einfach wieder einmal ein kleines bisschen in Autoit arbeiten zu können ;)

    Doch irgendwie ist da ein Fehler drin. Nach einfüllen der Felder soll dieser bei einem Klick auf Fertig das umrechnen. Also ich hätte gerne, dass das Script überprüft ob die Checkbox aktiviert ist und bei einem Klick auf den Fertig Button im Code "weitergeht" die Berechnungen durchführt und am Ende die msgbox ausgibt. Wenn erwünscht, sollte eben ein bestimmter Faktor dazu gerechnet werden, falls die Checkbox aktiviert ist. Doch irgendwie fehlt da was. Kann mir evtl. jemand helfen? Den Faktor habe ich noch nicht bei den Berechnungen eingebaut, das sollte aber kein Problem sein ;) Ich glaube, das bekomme ich hin ;)

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=C:\Users\Jo\Desktop\Form1.kxf
    $Form1_1 = GUICreate("Form1", 421, 187, 200, 171)
    $basis = GUICtrlCreateInput("", 240, 12, 121, 21)
    $BasisText = GUICtrlCreateLabel("Basis Belichtungszeit in Sekunden", 56, 16, 166, 17)
    $faktor = GUICtrlCreateInput("", 240, 68, 121, 21)
    $ISOText = GUICtrlCreateLabel("Welche ISO-Zahl wurde verwendet?", 56, 72, 177, 17)
    $Filtertext = GUICtrlCreateLabel("Soll der Filter eingesetzt werden?", 56, 120, 159, 17)
    $filter = GUICtrlCreateCheckbox("Ja", 240, 118, 97, 17)
    $Fertig = GUICtrlCreateButton("Fertig", 154, 152, 113, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $Fertig
    Exit

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

    EndSwitch
    WEnd

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

    If (GUICtrlRead($filter) ) = $GUI_CHECKED Then
    $mitfilter = 3
    Else
    $mitfilter = 0
    EndIf
    If $faktor = 200 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 2)
    EndIf

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

    If $faktor = 400 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 4)
    EndIf
    If $faktor = 800 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 8)
    EndIf

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

    If $faktor = 1600 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 16)
    EndIf

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

    If $faktor = 3200 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 32)
    EndIf

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

    If $faktor = 6400 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 64)
    EndIf

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

    If $faktor = 12800 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 128)
    EndIf

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

    4 Mal editiert, zuletzt von _GAWS_ (29. März 2013 um 20:53) aus folgendem Grund: Probleme mit der Formatierung

  • Könntest du das Skript bitte nocheinmal posten, am besten mit FF? ;)
    Dein Browser hat die Formatierung komplett zerrissen.

    Mfg

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski

    • Offizieller Beitrag

    Zum einen sollte man den Status der Checkbox mit

    [autoit]

    If BitAnd(GUICtrlRead($Checkbox),$GUI_CHECKED) Then ...

    [/autoit]


    auslesen.
    Zum anderen enthält die Variable $faktor die ID der Inputbox. Den dort eingetragenen Wert bekommst Du mit

    [autoit]

    GUICtrlRead($faktor)

    [/autoit]

    Und noch ein Hinweis zu dem Quelltext: Bitte bei längeren Codeabschnitten zusätzlich den Spoiler verwenden.

  • Wie wäre es wenn du die ganzen if then Abfragungen

    in eine externe Select Anweisung (die in der While-Schleife liegt) packst

    dann sollte es Funktionieren

    Spoiler anzeigen
    [autoit]

    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #Region ### START Koda GUI section ### Form=C:\Users\Jo\Desktop\Form1.kxf
    $Form1_1 = GUICreate("Form1", 421, 187, 200, 171)
    $basis = GUICtrlCreateInput("", 240, 12, 121, 21)
    $BasisText = GUICtrlCreateLabel("Basis Belichtungszeit in Sekunden", 56, 16, 166, 17)
    $faktor = GUICtrlCreateInput("", 240, 68, 121, 21)
    $ISOText = GUICtrlCreateLabel("Welche ISO-Zahl wurde verwendet?", 56, 72, 177, 17)
    $Filtertext = GUICtrlCreateLabel("Soll der Filter eingesetzt werden?", 56, 120, 159, 17)
    $filter = GUICtrlCreateCheckbox("Ja", 240, 118, 97, 17)
    $Fertig = GUICtrlCreateButton("Fertig", 154, 152, 113, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Fertig
    Exit
    Select
    If BitAnd(GUICtrlRead($Checkbox),$GUI_CHECKED) Then
    $mitfilter = 3
    Else
    $mitfilter = 0
    EndIf
    If $faktor = 200 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 2)
    EndIf
    If $faktor = 400 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 4)
    EndIf
    If $faktor = 800 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 8)
    EndIf
    If $faktor = 1600 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 16)
    EndIf
    If $faktor = 3200 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 32)
    EndIf
    If $faktor = 6400 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 64)
    EndIf
    If $faktor = 12800 Then
    MsgBox ("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet:" & $basis * 128)
    EndIf
    EndSelect
    EndSwitch
    WEnd

    [/autoit]
  • Wie wärs so:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>

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

    #region ### START Koda GUI section ### Form=C:\Users\Jo\Desktop\Form1.kxf
    $Form1_1 = GUICreate("Form1", 421, 187, 200, 171)
    $basis = GUICtrlCreateInput("", 240, 12, 121, 21)
    $BasisText = GUICtrlCreateLabel("Basis Belichtungszeit in Sekunden", 56, 16, 166, 17)
    $faktor = GUICtrlCreateCombo("200", 240, 68, 121, 21) ; der Einfachheit halber ComboBox
    GUICtrlSetData(-1, "400|800|1600|3200|6400|12800", "200") ; hiermit wird die ComboBox befüllt
    $ISOText = GUICtrlCreateLabel("Welche ISO-Zahl wurde verwendet?", 56, 72, 177, 17)
    $Filtertext = GUICtrlCreateLabel("Soll der Filter eingesetzt werden?", 56, 120, 159, 17)
    $filter = GUICtrlCreateCheckbox("Ja", 240, 118, 97, 17)
    $Fertig = GUICtrlCreateButton("Fertig", 154, 152, 113, 25)
    GUISetState(@SW_SHOW)
    #endregion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Fertig
    _Auswertung() ; Funktion die durch Buttonklick aufgerufen wird
    EndSwitch
    WEnd

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

    Func _Auswertung()
    If BitAND(GUICtrlRead($filter), $GUI_CHECKED) Then ; Wenn Checkbox geckecked
    MsgBox("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet: " & GUICtrlRead($basis) * GUICtrlRead($faktor) / 100)
    Else ; Sonst
    MsgBox("0", "Ergebniss", "Ihr gewünschtes Ergebniss lautet: " & GUICtrlRead($basis))
    EndIf
    EndFunc ;==>_Auswertung

    [/autoit]
    UNPLEASANT SPOILER

    You just lost the game!

  • Vielen Dank für die echt super Antworten!

    Habe mich vorerst für die Methode von "shadow667" entschieden - mMn sehr elegant gelöst!

    Vielen Dank!

    LG _GAWS_

  • ... sollte auch funktionieren ;)

    [autoit]


    Func _Auswertung()
    Local $result = GUICtrlRead($basis)
    If BitAND(GUICtrlRead($filter), $GUI_CHECKED) Then $result = GUICtrlRead($basis) * GUICtrlRead($faktor) / 100
    MsgBox("0", "Ergebnis", "Ihr gewünschtes Ergebnis lautet: " & $result)
    EndFunc ;==>_Auswertung

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

    ;i Mit der Anpassung wird "GUICtrlRead($basis)" nur einmal gelesen!
    Func _Auswertung()
    Local $result = GUICtrlRead($basis)
    If BitAND(GUICtrlRead($filter), $GUI_CHECKED) Then $result *= GUICtrlRead($faktor) / 100
    MsgBox("0", "Ergebnis", "Ihr gewünschtes Ergebnis lautet: " & $result)
    EndFunc ;==>_Auswertung
    ; Ende

    [/autoit]