Slider



  • Ich möchte einen Slider erstellen, der mir nebendran anzeigt, welchen Wert ich gerade gewählt habe (Sliderbuddy) und zwar so, dass dieser Wert sofort in einer Variable gespeichert wird mit der ohne weitere Benutzereingabe weitere Befehle durchgeführt werden. Ich denke da an eine Sichbarmachung von Fenstern direkt während der Slider bewegt wird.
    Danke schon mal im Voraus.



  • Leite dir einfach eine Klasse ab und reagier darauf wenn die Slider Position sich ändert...





  • Oder wenn Du englisch kannst:
    Eine sehr schöne Seite nur über Slider:
    http://www.functionx.com/visualc/controls/slider.htm

    Zu dem, was Du vorhast:
    Verbinde mit dem Slider einfach eine Variable und das Event NM_CUSTOMDRAW (im Zweifelsfall: Einfach auf den Slider Doppelklicken in der Resourcenansicht) und aktualisiere in dieser Funktion die Anzeige (also UpdateData(FALSE) nicht vergessen am Ende!)

    Ich hab hier zufällig sowas rumliegen...
    ...nur so als Beispiele:

    Variante 1:
    Mit Kontrollvarialben:

    void CirgendeinDlg::OnNMCustomdrawSliderXstart(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	CString str;
    	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
    	// Bewegung des x-Start Sliders
    	*pResult = 0;
            // m_sl_xstart ist die mit dem Slider verknüpfte Kontrollvariable
    	str.Format(L"Position des Ausschnitts: %i", m_sl_xstart.GetPos());  
            // m_label_position ist die mit einem static Text verknüpfte Variable
    	m_label_position.SetWindowTextW(str);
    	UpdateData(FALSE);
    }
    

    Variante2:
    Mit Integer Variablen:

    void CirgendeinDlg::slxwinkel(NMHDR *pNMHDR, LRESULT *pResult)
    {
    	LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);
    	*pResult = 0;
    	UpdateData(TRUE);
            // i_show_wink ist die mit einer Textbox verknüfte Integer Variable,   
             //i_sl_xwink die mit dem Slider verknüpfte Integer Variable
    	i_show_xwink = ((i_sl_xwink * 180) / 100);
    	UpdateData(FALSE);
    }
    


  • Der Thread ist zwar schon alt. Für alle, die wie ich durch die Suche hier gelandet sind und ihren Slider vielleicht nicht hinkriegen, möchte ich aber noch erwähnen, dass der Ereignishandler OnCustomDraw natürlich nur aufgerufen wird, wenn man vorher (z.B. in SetRange) auch bReDraw auf true gesetzt hat.

    Das mag zwar logisch sein, wenn man erstmal darüber nachdenkt, ich bin jedoch zunächst darüber gestolpert und gehe jetzt einfach mal davon aus, dass dies auch anderen passiert, besonders C++-Anfängern.

    OnCustomDraw ist der richtige Weg, alle möglichen Zustandsänderungen der Trackbar (Slider) mitzubekommen und darauf zu reagieren. OnReleasedCapture wird nur ausgelöst, wenn man den Slider mit der Maus verschiebt und dann loslässt. Weder kann man mit diesem Event eine aktuelle Anzeige während des Verschiebens realisieren, noch werden Tastatureingaben bemerkt.

    Gruß Matze


Anmelden zum Antworten