neue frage zu progressbar

  • Da bin ich wieder
    und zwar geht es darum dass, ich eine ladedruckanzeige machen wollte.
    problem ist nur das ich einen ladedruck von -0,5 bar im stand habe dieser steikt aber(wenn ich mehr gas gebe)
    maximal liegt er bei 2,5 bar

    so also habe ich mir das hier gemacht

    Spoiler anzeigen
    [autoit]


    $POINTER2 = 0xEAE78C ;OBD offset
    $bar1 = 0x9587C ;Turbolader offset von OBD

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

    $PROC = Processlist("OBD.exe")
    $DLLINFO1 = _MEMORYOPEN($PROC[1][1])

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

    $bar = _FINDNEWADDRESS($POINTER2, $bar1)
    $bar1 = _MEMORYREAD($bar, $DLLINFO1)
    GUICtrlSetData($Progress1 ,$bar1);bar now

    [/autoit]


    leider bleibt die progressbar immer nur oben und ändert sich nicht

    Einmal editiert, zuletzt von Detroit49 (11. Oktober 2010 um 22:57)

  • eine Progressbar stellt immer Werte zwischen 0 - 100 dar.

    D.h. Du musst Deinen Wertebereich dem Anzeigebereich anpassen.
    In deinem Fall musst Du natürlich auch wie bei den anderen Werten diesen ständig abfragen.

    Mit der Formel:

    [autoit]

    GUICtrlSetData($progress_turbolader, ($bar1+0.5)/3*100)

    [/autoit]

    wobei $bar1 den Wert des >Turboladers darstellt im Wertebereich -0.5 bis 2.5
    Achtung autoit kann nur mit Dezimalzahlen rechnen die mit einem Punkt dargestellt werden.

    Wenn Dein Wert im Speicher 0,5 hergibt, dann musst Du umwandeln mimt StringReplace($bar1, ",", ".")

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • aahh ok also mit andere worten heisst das wenn mein wert sich nach oben doch noch verschieben sollte musst ich es mit stringreplace " anpassen " damit die progressbar auch richtig anzeigen kann ?!?!


    ahhh ok sry habe mich verlesen ^^

    aber eine frage hätte ich noch wieso 0.5/3*100? bin ich nicht dann schon bei 1.5 bar voll ?

  • ich fürchte, wir reden aneinander vorbei...

    Zitat

    maximal liegt er bei 2,5 bar


    wenn der Wert wirklich 2,5 lautet, dann musst Du diesen umwandeln in 2.5!!!
    Außerdem kann eine Progressbar nichts mit negativen Zahlen anfangen.
    Daher musst Du den Wertebereich deiner Variablen: $bar1 --> von -0.5 - 2.5
    transponieren mit einer Formel auf --> 0 - 100.
    Diese Werte kannst Du dann mit GuiCtrlSetData(..... setzen in der Progressbar

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • ja ich hatte mich verlesen gehabt deswegen die überflüssige frage von mir :pinch:


    ich habe das jetzt mal so hier gemacht

    [autoit]

    GuiCtrlSetData($Progress1,$bar1/$barmax*100)

    [/autoit]

    weil ich habe einen maximalwert in meinem steuergerät gefunden
    also müsste dies hier doch auch gehen ?!?!

    dann würde er von 0.1 -2.5 bar gehen :whistling:

    und ich habe kein , sonder doch einen . in meinem speicher :rofl:

  • wenn Du auch den -0.5bar Ladedruck anzeigen willst, dann musst Du wie gesagt den Wertebereich transponieren.
    Beispiel:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstantsEx.au3>
    #include <ProgressConstants.au3>

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

    Opt('MustDeclareVars', 1)

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

    Local $progressbar1, $button, $wait, $s, $msg, $m, $slider, $label, $r
    Local $data = -0.4 ;hier steht der aktuelle Wert drin

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

    GUICreate("My GUI Progressbar", 330, 100, 100, 200)
    $slider = GUICtrlCreateSlider(40,40,200,20)
    GUICtrlSetLimit(-1,30, 0)
    $label = GUICtrlCreateLabel('',250,10,80,20)
    GUICtrlSetFont(-1,12,600)
    $progressbar1 = GUICtrlCreateProgress(40, 10, 200, 20)
    GUICtrlSetColor(-1, 32250)
    GUICtrlSetLimit(-1, 30)
    GUICtrlSetData($label,'-0.5' & ' bar')

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

    GUISetState()

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $slider
    $r = Round(GUICtrlRead($slider)/30*100/33 -0.5,1)
    If Not StringInStr($r,".") Then $r = $r & '.0'
    GUICtrlSetData($label,$r & ' bar')
    GUICtrlSetData($progressbar1, (GUICtrlRead($slider))/30*100)
    EndSelect
    WEnd

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

    MfG Schnuffel

    "Sarkasmus ist die niedrigste Form des Witzes, aber die höchste Form der Intelligenz."
    Val McDermid

    ein paar Infos ...

    Wer mehr als "nur" Hilfe benötigt, kann sich gern im Forum "Programmieranfragen" an uns wenden. Wir helfen in allen Fällen, die die Forenregeln zulassen.

    Für schnelle Hilfe benötigen wir ein ! lauffähiges ! Script, dass wir als Demonstration des Problems testen können. Wer von uns erwartet ein Teilscript erstmal lauffähig zu bekommen, der hat
    1. keine wirkliche Not
    2. keinen Respekt vor Menschen die ihm in ihrer Freizeit Ihre Hilfe anbieten
    3. oder ist einfach nur faul und meint wir coden das für ihn

    In solchen Fällen erlaube ich mir, die Anfrage einfach zu ignorieren. ;)

  • naja wollen nicht weil bei -0.5 bar habe ich keine leistung wichtig sind mir die positiven bar´s

    und ich habe es gefunden wie es geht

    [autoit]

    GUICtrlSetData($Progress1,Round(($barmax / $bar1) * 100,0))

    [/autoit]


    da ist ja nicht leer werden soll sonder voll habe ich den max wert links und den kleinsten rechts

    bin mal fahren und gucken ob es geht
    und vielen vielen dank für deine hilfe !!!!!


    EDIT : :rock: es geht :rofl::rofl::rofl: ich freu mich wie nen kleines kind
    danke danke danke danke danke

    Einmal editiert, zuletzt von Detroit49 (11. Oktober 2010 um 22:57)