Bonjour, voici mon problème je dispose de plusieurs sliders sur une même fenêtre disposés les uns en dessous des autres qui représentent des plages horaires. Lorsque l'on bouge l'un des curseurs d'un slider il est évident qu'il ne pourra pas être placé avant le curseur le précédant (car heure plus tardive). Je voulais savoir comment il était possible de gérer cela, de récupérer la valeur de chaque slider et savoir lequel a été bougé si jamais on se trompe en les bougeant ?Merci.
Cela te dit que la classe CSliderCtrl (Ni aucune des classes parentes de CSliderCtrl) ne possède de méthode SetColor, ce qui n'est pas faux.
Pour changer la couleur, il semble qu'il faille que tu travaille sur le DC (Device Context) de tes sliders, un peu comme dans ton code du jeudi 30 avril 2009 à 16:19:55 ci-dessus.
Eventuellement, tu peux poser la question dans un nouveau topic (Créer une nouvelle discussion avec le thème approprié), car il n'y a pas de système de up.
Hello,
Tu peux faire une fonction de vérification que tu pourras lancer après chaque action utilisateur...
Le contenu de la fonctin est comme tu as dit:
- récupération des valeurs des sliders
- comparaison
- ajustement au besoin ou message d'erreur
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
if(nb_slider-7>0)
largeur_dyna=nb_slider-7; // Variable permettant de redimensionner la largueur de la plupart des contrôles
else
largeur_dyna=0;
m_parametres= m_OK.GetParent();
/**************************************************************************
Création et Initialisation des Sliders
***************************************************************************/
void CDlg_Demo_Slider::OnOK()
{
// TODO: Add extra validation here
CDialog::OnOK();
}
void CDlg_Demo_Slider::affich_slider()
{
CString strTemp;
int j;
if (!(pSliderCtrl=(CSliderCtrl**)malloc(sizeof(CSliderCtrl*)*nb_slider))) // réservation mémoire
return;
for (j=0;j<nb_slider;j++)
{
RECT rect={20,20,20,20};
pSliderCtrl[j]=new CSliderCtrl();
(*pSliderCtrl[j]).Create(dwStyle|TBS_BOTTOM|TBS_HORZ ,rect, m_parametres,m_OK.GetDlgCtrlID()+(10000+j));
(*pSliderCtrl[j]).SetWindowPos(&m_OK,120,10+(j*20),175,20,SWP_NOZORDER);
//(*pSliderCtrl[j]).SetRange(1,20);
(*pSliderCtrl[j]).SetPos(j); //retrait de chq slider pour les différencier
Hello,
Il n'y a pas de fonctions de validation toute prête, cela dépend de ton besoin. C'est ce que j'ai expliqué au dessus:
- récupération des valeurs des sliders
- comparaison
- ajustement au besoin ou message d'erreur
Par exemple, si tu as 2 sliders, et que la valeur du 1er doit être inférieure à celle du 2e:
int iValeur1 = slider1.GetPos();
int iValeur2 = slider2.GetPos();
if (iValeur1 >= iValeur2)
{
MessageBox(NULL,"le slider 2 doit être supérieur au slider 1","Erreur",MB_OK);
}
@+
Buno
----------------------------------------
L'urgent est fait, l'impossible est en cours. Pour les miracles, prévoir un délai...
En fait les différents sliders correspondent à des plages horaires si un utilisateur bouge le curseur il change l'heure, il me faut récupérer cette heure sachant que par exemple le curseur 15 ne pourra pas être avant le curseur 1. Il y aura maximum 15 sliders. Voilà mon objectif principal mais comment faire ? Merci.
Bonjour je rajoute encore une autre question : Savez-vous comment modifier la valeur de l'info-bulle de chaque curseur (je ne veux pas des entiers mais un format hh:mm)? Merci. <!-- / message --><!-- / message -->
Globalement, juste avant d'afficher la bulle, un message TTN_NEEDTEXT est envoyé à ton application. Il faut ajouter le code ON_NOTIFY_EX ( ... ) pour intercepter ce message.
Ensuite, dans ce message, il faut que tu récupère la valeur du curseur concerné, que tu la formate, et que tu la mettes en place dans la structure NMTTDISPINFO.