Dialog - Slider aktualisieren



  • Muss ich mal nachschlagen.
    (Hab das Buch selber)



  • Starte in der OnInitDialog() einen Timer mit

    SetTimer(1,5000,NULL);
    

    1 ist einfach die ID des Timers, 5000 ist die Zeit in Millisekunden, in der der Timer eine Nachricht auslöst. Dann verbindest du die Nachricht WM_TIMER mit einer Funktion mithilfe des Klassenassistenten und schreibst dort den Code rein, der dann alle 5 sec (in diesem Beispiel) ausgeführt wird. So kannst du laufend Werte akutalisieren und anzeigen lassen.



  • NICHT GEFUNDEN 😞
    Mensch, nun gib doch mal n Link, wo das ist.
    Ich find das Ding nicht.
    Auch im meinem Buch lässt sich unter "Timer" im Stichwortverzeichnis nichts finden.



  • Tag 4, Seite 85.



  • Ansonsten gibts das auch noch in der FAQ hier...

    Devil



  • Ja, aber das bringt mich auch nicht weiter.
    Blöcke un Verbundanweisungen, sagst du Sascha?
    Warum?
    Habt ihr unter Umständen meine Frage falsch verstanden?
    MFG
    FatalError



  • Dan scheckst du halt jede 20 ns :p wo der zeiger grade is und ferig :p .



  • Genau sowas wollt ich eigetnlich auch schon machen!
    Und wie heißt der Befehl dazu (bestimmt im Klassen Assistent, oder?)?



  • mach genau das, was ich um 20:55 Uhr geschrieben habe. Für die Zeit wählst du einfach 100msec, dann hast du 10 Aktualisierungen pro Sekunde.



  • Oh Sorry
    Muss den Beitrag wol überlesen haben. 🙄
    Werde es morgen ausprbieren!!! 🙂

    MFG
    FatalError



  • Also mit dem Timer würd ich das nicht lösen...... !

    Warum schreibst du es nicht einfach in die Aktualisierungsmethode.
    Wenn du also an deinem Schieberegler regelst ne ? dann wird folgende Funktion aufgerufen WENN du diese Angelegt hast....

    Also bei den Schiebereglern gibt es die NAchricht NM_RELEASECAPTURE. Diese wird immer dann gesendet, wenn der Benutzer den Schieberegler bewegt hat und die Maustaste losgelassen hat.
    Um das Problem zu lösen, gehst du einfach in den Klassenassistenten und klickst auf Nachrichtenzuordnungstabellen, danach wähslt du einfach das Slide Objekt aus und es wird dir angezeigt welche Nachrichten zur verfügung stehen. Anschließend klickst du doppelt auf besagte Nachricht und nun wird eine Funktionn erstellt. Im normalfall sollte sie OnReleasedcaptureSlide heißen.
    In diese Funktion schreibst du deinen Code zur Berechnung der Zahl und setzt anschließend den errechneten Wert in dein Textfeld.

    Solltest du eine wirklich ständige Aktualisierung wünschen, so müsstest du auf die Nachricht NM_CUSTOMDRAW reagieren. Dies ist jedoch nicht zu empfehlen !

    See ya...



  • Mit nem Timer, so ein Schwachsinn! Schonmal was von UpdateData gehört? Der
    Regler müsste doch ne WM_HSCROLL Nachricht oder so was ähnliches haben, oder?
    Einfach nen Handler schreiben, dort neu berechnen, Membervariable vom
    Textfeld damit füttern und dann UpdateData!



  • Also Timer haben nun wirklich nichts mit Sliders zu tun.
    Man sollte den Slider auch nur abfragen wenn etwas damit passiert.

    Lösung:

    Klicke auf deinen Dialog und erstelle mit dem Assi eine Nachricht
    OnVScroll oder OnHScroll jenachdem wie deine Slider ausgerichtet ist.

    In der von Assi erstellten funktion z.B

    int pos = m_slider.GetPos();

    in pos steht jetzt beim bewegen des sliders immer die aktuelle position.

    Beachte aber das bei jedem bewegen eines scrollbars diese Message ausgelöst wird.



  • OK Leute
    Hab nun die Lösung van "DaDaywalker" (krasser Name 😉 ) in mein Programm eingebaut.
    Ich danke trotzdem allen, die mit diskutiert haben
    MFG
    FatalError



  • ... und dabei hat Unix-Tom doch so schön erklärt, wie es richtig zu implementieren ist



  • Na ja es funktioniert so auch allerdings ist das nicht der Sinn eines Sliders da man ja währed des verschiebens anzeigen sollte welchen Wert es hat.
    Aber so ist das ja oft.
    Man versucht eine Lösung zu finden die profesionell ist und sie wird verworfen.
    😡



  • @Mensch UNIX-Tom brauchst doch nicht gleich zu weinen. 😞

    Sicherlich hast du mit deinem Aspekt recht!

    Aber letztendlich ist es doch quatsch bei jedem Wert (in der Bewegung) diese Berechnung vorzunehmen.
    Dies geht doch sehr stark auf die Performance lässt man eine Milchmädchenrechnung von 1+1 außen vor.

    [ Dieser Beitrag wurde am 27.11.2002 um 15:35 Uhr von DaDaywalker editiert. ]

    [ Dieser Beitrag wurde am 27.11.2002 um 16:04 Uhr von DaDaywalker editiert. ]



  • Aber so weis der User nie genau wo er jetzt gerade ist...

    Devil



  • Tja vielleicht sollte man das Problem ganz anders lösen. Denn ich gebe euch gerne recht .1!!!!!!

    @FATALERROR du solltest falls du so nicht mit der Lösung zurfrieden bist mal posten welche Rechnung ausgeführt wird.

    Kann man es zum Beispiel so verstehen, das du schon Standardwerte benutzt z.B.
    1 - 100 und wenn der Benutzer zum Beispiel die 80 auswählt diese dann anschließend als z.B 0.8 dargestellt (in der Textbox) wird?

    Wenn du also testweise den Benutzer eine Zahl über den Slider auswählen lässt also von 1-100 dann solltest du UNIX-TOM seine Variante benutzen aber die Berechnung aussen vor lassen. Sollte der Benutzer dann den Slider loslassen also seinen Wert gefunden haben, so solltest du die Berechnung dann mit meiner Methode ausführen.

    Somit hättest du 2 Fliegen mit einer Klappe geschlagen und die Lösung wäre sauber.

    Resultat:

    Wenn Sich dein Problem wie oben angenommen äußert dann kombiniere doch beide Varianten:
    UnixTom seine um ständig den Wert anzuzeigen
    und meine um nach der Selektion des Users dieses Event abzufangen und die Berechnung auszuführen.

    Ich hoffe das löst dein Problem und dann ist auch UNIX-Tom nicht mehr traurig 😉



  • Keine Sorge ich hab von allen Beiträgen hier was gelernt ! 🙂
    Die Berechnung ist so kurz, dass sie mit deiner Methode genau hinhaut
    und auch nicht zu lange braucht.
    Außerdem, hab ich mein Programm jetzt voll auf deine Lösung eingestellt.
    Würde ich das jetzt wieder anders machen wollen, ... 😮


Anmelden zum Antworten