GUIScrollBars_Ex Massenproduktions Problem (Bug?)

  • Erstmal mein Code:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIScrollbars_Ex.au3>
    #include <Array.au3>
    Opt("GUIOnEventMode", True)
    Global $hGUIEQItemInput[0], $hGUIEQItemSlider[0], $MainGui_Width = @DesktopWidth, $MainGui_Height = @DesktopHeight

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

    $hGUIEQ = GUICreate("EQTest", GUIx(105), GUIy(660))
    $hGUIEQContext = GUICtrlCreateContextMenu()
    $hGUIEQContextAdd = GUICtrlCreateMenuItem("Add Frequency", $hGUIEQContext)
    GUICtrlSetOnEvent(-1, "EQAddFreq")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState()
    _GUIScrollBars_Generate($hGUIEQ, 0, GUIy(5))
    for $i = 0 to 99 step +1
    EQAddFreq()
    Next
    While 1
    ;ConsoleWrite(_GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1]&@CRLF)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func EQAddFreq()
    _ArrayAdd($hGUIEQItemInput, GUICtrlCreateInput("0", GUIx(5), GUIy(5)+UBound($hGUIEQItemInput)*GUIy(50), GUIx(30), GUIy(40)))
    _ArrayAdd($hGUIEQItemSlider, GUICtrlCreateSlider(GUIx(5+30), GUIy(5)+UBound($hGUIEQItemInput)*GUIy(50), GUIx(60), GUIy(40), $TBS_HORZ))
    $ScrollHeight = GUIy(5+UBound($hGUIEQItemInput)*50)
    _GUIScrollBars_Generate($hGUIEQ, 0, $ScrollHeight)
    for $i = 0 to UBound($hGUIEQItemInput)-1 step +1
    GUICtrlSetPos($hGUIEQItemInput[$i], GUIx(5), _GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1]+GUIy(5+$i*50))
    GUICtrlSetPos($hGUIEQItemSlider[$i], GUIx(5+30+5), _GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1]+GUIy(5+$i*50))
    Next
    EndFunc
    #cs
    Func EQSortFreqs()
    Local $aHelpList [UBound($hGUIEQItemInput)][2]
    for $i = 0 to UBound($hGUIEQItemInput)-1 step +1
    $aHelpList[$i] = $hGUIEQItemInput[$i]
    EndFunc
    #ce
    Func GUIx($Number)
    return $MainGui_Width/1000*$Number
    EndFunc

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

    Func GUIy($Number)
    return $MainGui_Height/1000*$Number
    EndFunc

    [/autoit]


    Mein Problem: Wenn ich die 100 "Gruppen" erstelle, dann fangen diese an, mit zunehmender Zahl immer breiter zu werden, und erst am Ende haben sie dann die gewünschte Größe. (<- So war es am Anfang (siehe Bild1)) Und nun ist dieser Verlauf nicht mehr so deutlich sichtbar:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <GUIScrollbars_Ex.au3>
    #include <Array.au3>
    Opt("GUIOnEventMode", True)
    Global $hGUIEQItemInput[0], $hGUIEQItemSlider[0], $MainGui_Width = @DesktopWidth, $MainGui_Height = @DesktopHeight

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

    $hGUIEQ = GUICreate("EQTest", GUIx(105), GUIy(660))
    $hGUIEQContext = GUICtrlCreateContextMenu()
    $hGUIEQContextAdd = GUICtrlCreateMenuItem("Add Frequency", $hGUIEQContext)
    GUICtrlSetOnEvent(-1, "EQAddFreq")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")
    GUISetState()
    _GUIScrollBars_Generate($hGUIEQ, 0, GUIy(5))
    for $i = 0 to 99 step +1
    EQAddFreq()
    Next
    While 1
    ;ConsoleWrite(_GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1]&@CRLF)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc

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

    Func EQAddFreq()
    _ArrayAdd($hGUIEQItemInput, GUICtrlCreateInput("0", GUIx(5), GUIy(5)+UBound($hGUIEQItemInput)*GUIy(50), GUIx(30), GUIy(40)))
    _ArrayAdd($hGUIEQItemSlider, GUICtrlCreateSlider(GUIx(5+30), GUIy(5)+UBound($hGUIEQItemInput)*GUIy(50), GUIx(60), GUIy(40), $TBS_HORZ))
    $ScrollHeight = GUIy(5+UBound($hGUIEQItemInput)*50)
    _GUIScrollBars_Generate($hGUIEQ, 0, $ScrollHeight)
    for $i = 0 to UBound($hGUIEQItemInput)-1 step +1
    GUICtrlSetPos($hGUIEQItemInput[$i], GUIx(5), _GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1]+GUIy(5+$i*50), GUIx(30), GUIy(40))
    GUICtrlSetPos($hGUIEQItemSlider[$i], GUIx(5+30+5), _GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1]+GUIy(5+$i*50), GUIx(60), GUIy(40))
    Next
    EndFunc
    #cs
    Func EQSortFreqs()
    Local $aHelpList [UBound($hGUIEQItemInput)][2]
    for $i = 0 to UBound($hGUIEQItemInput)-1 step +1
    $aHelpList[$i] = $hGUIEQItemInput[$i]
    EndFunc
    #ce
    Func GUIx($Number)
    return $MainGui_Width/1000*$Number
    EndFunc

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

    Func GUIy($Number)
    return $MainGui_Height/1000*$Number
    EndFunc

    [/autoit]


    Allerdings immernoch vorhanden. (<- siehe Bild2)
    Meine Frage ist: Warum passiert das? Wie behebe ich meinen Fehler?

    Spoiler anzeigen

    Überraschung!


    MfG Donkey

    Einmal editiert, zuletzt von ProgrammingDonkey (6. März 2015 um 16:09)

  • Das Teilproblem das sich die Slider mit verschieben habe ich mit untenstehendem Code gelöst. Dafür habe ich die Schleife aus der Funktion EQAddFreq() in eine eigene Funktion ausgelagert.
    Kann sein das die Teillösung für die Komplettlösung des Problems nicht passt. Vielleicht hilft dir das hier aber schon weiter. Ich suche dann mal weiter.

    Die Lösung des Problems:

    Spoiler anzeigen
    [autoit]


    #include <GUIConstants.au3>
    #include <custom/GUIScrollbars_Ex.au3>
    #include <Array.au3>

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

    Opt("GUIOnEventMode", True)

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

    Global $hGUIEQItemInput[0], $hGUIEQItemSlider[0], $MainGui_Width = @DesktopWidth, $MainGui_Height = @DesktopHeight

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

    $hGUIEQ = GUICreate("EQTest", GUIx(105), GUIy(660))
    $hGUIEQContext = GUICtrlCreateContextMenu()
    $hGUIEQContextAdd = GUICtrlCreateMenuItem("Add Frequency", $hGUIEQContext)

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

    GUICtrlSetOnEvent(-1, "EQAddFreq")
    GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit")

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

    _GUIScrollBars_Generate($hGUIEQ, 0, GUIy(5))

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

    For $i = 0 To 99 Step +1
    EQAddFreq()
    Next

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

    PosItems( ); ########### Photon ##################

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

    ; GUISetState habe ich hier hin verlegt damit das Programm schneller
    ; startet und es nicht so komisch aussieht wenn die ganzen Steuerelemente erzeugt werden.
    GUISetState(); ########### Photon ##################

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

    While 1
    ; Das Sleep habe ich eingefügt damit die CPU nicht so ausgelastet wird.
    ; Mein Lüfter dankt es mir.
    Sleep( 3000 ); ########### Photon ##################
    ;ConsoleWrite(_GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1]&@CRLF)
    WEnd

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

    Func _Exit()
    Exit
    EndFunc ;==>_Exit

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

    Func EQAddFreq()
    _ArrayAdd($hGUIEQItemInput, GUICtrlCreateInput("0", GUIx( 5 ), GUIy( 5 ) + UBound( $hGUIEQItemInput ) * GUIy( 50 ), GUIx( 30 ), GUIy( 40 ) ) )
    _ArrayAdd($hGUIEQItemSlider, GUICtrlCreateSlider( GUIx( 5 + 30 ), GUIy( 5 ) + UBound( $hGUIEQItemInput ) * GUIy( 50 ), GUIx( 60 ), GUIy( 40 ), $TBS_HORZ) )

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

    $ScrollHeight = GUIy(5 + UBound($hGUIEQItemInput) * 50)

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

    _GUIScrollBars_Generate($hGUIEQ, 0, $ScrollHeight)

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

    ;For $i = 0 To UBound($hGUIEQItemInput) - 1 Step +1
    ; GUICtrlSetPos($hGUIEQItemInput[$i], GUIx(5), _GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1] + GUIy(5 + $i * 50), GUIx(30), GUIy(40))
    ; GUICtrlSetPos($hGUIEQItemSlider[$i], GUIx(5 + 30 + 5), _GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1] + GUIy(5 + $i * 50), GUIx(60), GUIy(40))
    ;Next
    EndFunc ;==>EQAddFreq

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

    Func PosItems( ); ########### Photon ##################
    For $i = 0 To UBound($hGUIEQItemInput) - 1 Step +1
    GUICtrlSetPos($hGUIEQItemInput[$i], GUIx(5), _GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1] + GUIy(5 + $i * 50), GUIx(30), GUIy(40))
    GUICtrlSetPos($hGUIEQItemSlider[$i], GUIx(5 + 30 + 5), _GUIScrollBars_Locate_Ctrl($hGUIEQ, 0, 0)[1] + GUIy(5 + $i * 50), GUIx(60), GUIy(40))
    Next
    EndFunc

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

    #cs
    Func EQSortFreqs()
    Local $aHelpList [UBound($hGUIEQItemInput)][2]
    for $i = 0 to UBound($hGUIEQItemInput)-1 step +1
    $aHelpList[$i] = $hGUIEQItemInput[$i]
    EndFunc
    #ce
    Func GUIx($Number)
    Return $MainGui_Width / 1000 * $Number
    EndFunc ;==>GUIx

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

    Func GUIy($Number)
    Return $MainGui_Height / 1000 * $Number
    EndFunc ;==>GUIy

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

    Ich hätte schwören können das die Inputboxen noch die falsche Größe hatten.
    Da war ich wohl eingenickt und hatte nen schlechten Traum.
    Ein Glück bin ich wieder wach.

    ~IRC: irc.afterworkchat.de #autoit

    5 Mal editiert, zuletzt von Photon (6. März 2015 um 18:14)