Dialog - Slider aktualisieren



  • Ich habe folgendes Problem.
    Ich habe in meinem Dialogfeld einen Schieberegler und ein Textfeld.
    Wenn an dem Regler gezogen wird, soll sich die Zahl im Textfeld nach einer kleinen Umrechnung ändern.
    Das Problem ist hierbei, das ich es bisher nur geschafft habe, dass die Rechenoperation per Knopfdruck ausgeführt wird.
    Es soll sich die Zahl aber ständig aktualisieren.
    Wo muss ich meinen Code hinschreiben, damit ich dies bewirken kann?
    MFG
    FatalError

    [ Dieser Beitrag wurde am 11.12.2002 um 13:00 Uhr von Unix-Tom editiert. ]



  • Such mal nach Timer.

    Devil



  • ????
    Wo?
    In der Visual C++ Hilfe?
    Da finde ich so an die 440 Einträge!
    Was meinst du damit?

    MFG
    FatalEror



  • www.mut.de
    In der Leseecke kannste dich in Visual C++ in 21 Tagen einlesen, da
    gibts auch ein kapitel über timer.

    Devil



  • 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.
    😡


Anmelden zum Antworten