Inputfeld mit DropDown verändert - gib falsche Werte

  • Hollo miteinander,

    ich hät da mal gern ein Problem !!!!

    Ich habe in eine GUI 2 Inputfelder mit DropDow definiert. Die Felder dienen zur Eingabe der Auflösung einer Grafik, die später erstellt werden soll - sie soll kleiner aber auch größer als des aktuelle Fesnter sein können. Als Startwert wird der jeweilige MaxWert des Fensters angezeigt z.B.1024x768. Diese Werte werden aus "@DesktopWidth" & "@DesktopHeight" ausgelesen und noch angepasst.
    Das zweite Radiofeld definiert die Seitenverhältnisse der Grafik. Bei Aktivierung einer Ratio außer "ohne" wird der Y-Bereich grau und dann automatisch nach X berechnet

    [autoit]


    ; Gruppe Grafikgröße in Pixel
    GUICtrlCreateGroup("Grafikgröße - waagerecht x senkrecht",440,4,200,62)
    $vInputBeiteGrafik=GUICtrlCreateInput($DisplayBreite, 470, 30, 60, 20)
    $vBeiteGrafikTMP=GUICtrlCreateUpdown($vInputBeiteGrafik)
    GUICtrlCreateLabel("X",537,31)
    $vInputHoeheGrafik=GUICtrlCreateInput($DisplayHoehe, 550, 30, 60, 20)
    $vHoeheGrafikTMP=GUICtrlCreateUpdown($vInputHoeheGrafik)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen

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

    ; Gruppe Seitenverhältnis
    GUICtrlCreateGroup("Seitenverhältnis der Grafik",440,70,200,39)
    $Ratio1 = GUICtrlCreateRadio("4 : 3", 450, 85, 50, 20) ; = 0.75 oder 1.33333
    $Ratio2 = GUICtrlCreateRadio("16 : 9", 520, 85, 50, 20) ; = 0.5625 oder 1.777778
    $Ratio3 = GUICtrlCreateRadio("ohne", 590, 85, 45, 20)
    GUICtrlSetState($Ratio3, $GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen

    [/autoit]


    Starte ich die Berechnung ohne Veränderung der Daten ist alles gut.

    Ändere ich aber über DropDown einen Wert, dann wird plötzlich aus 1024 -> 1.024. Es wird also 1 Komma 024 draus. Ich habe über "SetLimit" nachgelesen - glaube aber, daß das nicht weiter hilft. (Die Doku ist auch nicht sehr umfangreich...) Im Forum selbst habe ich zum Problem nichts gefunden.

    Wo ist nu mein geistiger Fehler ????
    In meiner GUI benutze ich noch ein Inputfeld mit DropDown mit dem Startwert 2 ... und das klickt ohne Probleme auf 3 ..4..5 usw.

    Ich lese aus "@DesktopWidth" den Wert 1024 aus, trage den in "GUICtrlCreateInput" ein und es sollte immer noch in Interger sein. Lese ich das ohne Änderung aus stimmt das auch. Ändere ich den Wert über DropDown, dann stimmt der Wert plötzlich nicht mehr - wie kommt das zustande ???

    Ich hoffe ihr könnt mir helfen.
    Vorab vielen Dank

    Wenn Du's eilig hast - geh langsam...

  • Es wäre sehr hilfreich wenn du den Code postest welcher diese Zahlen auswertet. Nur an dem was ich hier sehe, kann ich dir deine Frage nicht beantworten.

    Gruss Shadowigor

  • .. ich hoffte, der angegebene Code reicht zum Verständnis bzw. zur Problemerkennung.
    Hier aber nun die verschiedenen Auswertungen der Inputs....

    Hier die Änderungen in den Seitenverhältnissen (Ratio)....
    (der Cade ist noch nicht fertig, deshalb nur "4:3" - Ratio1 ausgeführt)

    [autoit]


    Func Verhaeltniss()
    $mMausXY=MouseGetPos()
    iF $mMausXY[0]>452 And $mMausXY[0]<635 And $mMausXY[1]>27 And $mMausXY[1]<100 Then
    $vRatio1=BitAND(GUICtrlRead($Ratio1), $GUI_CHECKED)
    $vRatio2=BitAND(GUICtrlRead($Ratio2), $GUI_CHECKED)
    $vRatio3=BitAND(GUICtrlRead($Ratio3), $GUI_CHECKED)
    Select
    Case $vRatio1=1
    GUICtrlSetStyle($vInputHoeheGrafik,$ES_READONLY)
    GUICtrlSetData($vInputHoeheGrafik,GUICtrlRead($vInputBeiteGrafik)*0.75))
    ;
    Case $vRatio2=1
    GUICtrlSetStyle($vInputHoeheGrafik,$ES_READONLY)
    ; Code folgt noch
    Case $vRatio3=1
    GUICtrlSetStyle($vInputHoeheGrafik,$GUI_SS_DEFAULT_INPUT)
    EndSelect
    EndIf
    if $mMausXY[0]>$DisplayBreite-110 And $mMausXY[0]<$DisplayBreite-110+100 And $mMausXY[1]>35 And $mMausXY[1]<140 Then
    OKButton ()
    EndIf
    EndFunc

    [/autoit]

    ... und hier nun das letztendliche Auslesen der "Inputs"...

    [autoit]


    Func EingabeAuslesen()
    $vXs=GUICtrlRead($vStartX) ;Startwert für X
    $vXe=GUICtrlRead($vEndX) ;Endwert für X
    $vYs=GUICtrlRead($vStartY) ;Startwert für Y
    $vYe=GUICtrlRead($vEndY) ;Endwert für Y
    $vmI=GUICtrlRead($vMaxIteration) ;MaxWert iteration
    $vmD=GUICtrlRead($vMaxDurchlauf) ;Anzahl der Dürchläufe
    $vZuum=GUICtrlRead($vZoom) ;Zoomfaktor auslesen
    $vBeiteGrafik=GUICtrlRead($vInputBeiteGrafik)
    $vHoeheGrafik=GUICtrlRead($vInputHoeheGrafik)
    $vPalette1=BitAND(GUICtrlRead($Palette1), $GUI_CHECKED)
    $vPalette2=BitAND(GUICtrlRead($Palette2), $GUI_CHECKED)
    $vPalette3=BitAND(GUICtrlRead($Palette3), $GUI_CHECKED)

    EndFunc

    [/autoit]

    Wenn Du's eilig hast - geh langsam...

  • Also ich verstehe noch nicht ganz welche Variable hier jetzt nicht stimmt. Woher weisst du, dass der Wert nicht stimmt? Und mach vielleicht noch Klammern rein bei den And's. Ich weis jetzt gerade nicht wir die Prioritäten dort sind, aber sicher ist sicher. Und welchen Zweck hat das ganze Zeug mit MousGetPos? Das sehe ich auch noch nicht ganz.

    Gruss Shadowigor

  • Entferne beim auslesen einfach den Punkt:

    Spoiler anzeigen
    [autoit]

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

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

    Global $DisplayBreite =@DesktopWidth, $DisplayHoehe = @DesktopHeight
    $Form1 = GUICreate("Form1", $DisplayBreite, $DisplayHoehe)
    GUICtrlCreateGroup("Grafikgröße - waagerecht x senkrecht",440,4,200,62)
    $vInputBeiteGrafik=GUICtrlCreateInput($DisplayBreite, 470, 30, 60, 20)
    $vBeiteGrafikTMP=GUICtrlCreateUpdown($vInputBeiteGrafik)
    GUICtrlCreateLabel("X",537,31)
    $vInputHoeheGrafik=GUICtrlCreateInput($DisplayHoehe, 550, 30, 60, 20)
    $vHoeheGrafikTMP=GUICtrlCreateUpdown($vInputHoeheGrafik)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen

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

    ; Gruppe Seitenverhältnis
    GUICtrlCreateGroup("Seitenverhältnis der Grafik",440,70,200,39)
    $Ratio1 = GUICtrlCreateRadio("4 : 3", 450, 85, 50, 20) ; = 0.75 oder 1.33333
    $Ratio2 = GUICtrlCreateRadio("16 : 9", 520, 85, 50, 20) ; = 0.5625 oder 1.777778
    $Ratio3 = GUICtrlCreateRadio("ohne", 590, 85, 45, 20)
    GUICtrlSetState($Ratio3, $GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessenGUISetState(@SW_SHOW)
    $idBtnCalc = GUICtrlCreateButton("be&rechnen",$DisplayBreite/2 + 50,$DisplayHoehe-50)
    GUISetState()

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idBtnCalc
    MsgBox(0,"Brite/Höhe",StringReplace(GUICtrlRead($vInputBeiteGrafik),".","") & "/" & StringReplace(GUICtrlRead($vInputHoeheGrafik),".",""))
    EndSwitch
    WEnd

    [/autoit]

    mfg autoBert

  • autoBert

    Ja, das funktioniert. Die Berechnung läuft nach meinen Vorstellungen. Diese Lösung erklärt aber das Verhalten der DropDown-Funktion nicht - sie bügelt nur aus. Soll heißen, es führt nicht zum Verständnis der Funktion selbst. Dennoch - danke für den Tip.

    Wenn Du's eilig hast - geh langsam...

    • Offizieller Beitrag

    Erklären kann ich das Verhalten (Bug?) auch nicht, aber ich würde es etwas anders lösen:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $DisplayBreite = @DesktopWidth, $DisplayHoehe = @DesktopHeight
    $Form1 = GUICreate("Form1", 600, 480)
    GUICtrlCreateGroup("Grafikgröße - waagerecht x senkrecht", 40, 4, 200, 62)
    $vInputBeiteGrafik = GUICtrlCreateInput($DisplayBreite, 70, 30, 60, 20)
    $vBeiteGrafikTMP = GUICtrlCreateUpdown($vInputBeiteGrafik)
    GUICtrlCreateLabel("X", 137, 31)
    $vInputHoeheGrafik = GUICtrlCreateInput($DisplayHoehe, 150, 30, 60, 20)
    $vHoeheGrafikTMP = GUICtrlCreateUpdown($vInputHoeheGrafik)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessen

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

    ; Gruppe Seitenverhältnis
    GUICtrlCreateGroup("Seitenverhältnis der Grafik", 40, 70, 200, 39)
    $Ratio1 = GUICtrlCreateRadio("4 : 3", 50, 85, 50, 20) ; = 0.75 oder 1.33333
    $Ratio2 = GUICtrlCreateRadio("16 : 9", 110, 85, 50, 20) ; = 0.5625 oder 1.777778
    $Ratio3 = GUICtrlCreateRadio("ohne", 170, 85, 45, 20)
    GUICtrlSetState($Ratio3, $GUI_CHECKED)
    GUICtrlCreateGroup("", -99, -99, 1, 1) ; Gruppe schliessenGUISetState(@SW_SHOW)
    $idBtnCalc = GUICtrlCreateButton("be&rechnen", 70, 130, 100, 25)
    GUISetState()
    GUIRegisterMsg($WM_COMMAND, "MY_WM_COMMAND")

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $idBtnCalc
    MsgBox(0, "Breite/Höhe", GUICtrlRead($vInputBeiteGrafik) & "/" & GUICtrlRead($vInputHoeheGrafik))
    EndSwitch
    WEnd

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

    Func MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
    $nNotifyCode = BitShift($wParam, 16)
    $nID = BitAND($wParam, 0x0000FFFF)
    $hCtrl = $lParam
    Switch $nID
    Case $vInputBeiteGrafik
    GUICtrlSetData($vInputBeiteGrafik, StringReplace(GUICtrlRead($vInputBeiteGrafik), '.', ''))
    Case $vInputHoeheGrafik
    GUICtrlSetData($vInputHoeheGrafik, StringReplace(GUICtrlRead($vInputHoeheGrafik), '.', ''))
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>MY_WM_COMMAND

    [/autoit]