Un petit pb avec Visual Studio

Un petit pb avec Visual Studio - C++ - Programmation

Marsh Posté le 24-04-2002 à 12:04:42    

J'ai crée un bouton, lorsque je clique dessus une colorDialog s'ouvre, pour cela, j'ai fait:
 
DialogResult buttonClicked=colorDialog.ShowDialog();
 
Maintenant, je veux recuperer la couleur choisie par l'utilisateur, donc j'ai fait :
 
string color0=(colorDialog.Color).Name;
 
Le pb est que la valeur que je recupere dans color0 n'est pas toujours du meme type, bien sure, c'est toujours une string mais des fois c'est la valeur hexa qui correspond a la couleur et des fois c'est le nom de la couleur (genre "black", "green", etc...).
Je ne sais pas comment faire pour recuperer toujours le meme type de valeur.. est-ce un bug de Visual Studio? ou est ce que ca vient de mon code?
 
Merci pour votre aide :hello:

Reply

Marsh Posté le 24-04-2002 à 12:04:42   

Reply

Marsh Posté le 24-04-2002 à 13:50:14    

Je supposes que tu travail en Visual C++ ...
(Visual Studio n'est pas un langage !)
Bien que ne sachant pas ce que tu utilises, je trouve normal que la propriete Name d'une couleur te renvoit, quand c'est possible, le nom de cette couleur ...
une couleur n'est habituellement pas stockee sous la forme d'une chaine de caractere, mais sous une forme numerique ...
va dans l'aide de ta color dialog, regarde de quel type est Color et trouve une description de ce type ...
il devrait y avoir un champ donnant sa valeur ...
si tu veux tout de meme manipuler la couleur sous forme hexa, alors initialise ta chaine a partir de cette valeur a l'aide d'une fonction appropriee ... (sprintf(chaine, "%X", valeur)...)


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 24-04-2002 à 14:00:36    

La réponse est peut-être "claire" comme "gris, rouge, vert" quand la couleur est "pure". Quand c'est un mélange, c'est le code "long" qui est retourné.
 
Au lieu de .name, il faudrait peut-être trouver un autre attribut comme .color (ou qq chose comme ça, je dis ça pour exemple) qui donnerait toujours la valeur numérique de la couleur et jamais son nom (arbitraire).

Reply

Marsh Posté le 24-04-2002 à 14:40:29    

Le pb en fait c'est que je fais du C# (pas C++... et je sais bien que VS n'est pas un langage :) ) et j'ai bien regardé mais il y a aucune proprieté qui retourne la valeur numerique de la couleur.
 
Par contre, je crois que je vais utiliser une autre méthode... je vais essayer de recuperer les proprietes R , G et B de la couleur, ensuite les convertir en hexa, puis en string et ensuite les concatener... j'espere que ca va marcher.
 
Merci de votre aide  :jap:

Reply

Marsh Posté le 24-04-2002 à 15:14:10    

Si c'est "homogène", RGB((colorDialog.Color).Name) devrait donner le résultat (??). Sans se casser la tête :).
 
A vérifier, sinon, c'est une histoire de louf. Expliciter une valeur et ne pas l'admettre en paramètre, ça serait Krosoftien.

Reply

Marsh Posté le 24-04-2002 à 15:54:06    

Non , ca ne fonctionne pas  :??: ...  
 
Par contre, je suis en train d'essayer ma methode et je trouve pas de fonction qui convertisse une valeur en hexadecimal. Il y a une fonction Hex(int valeur) qui renvoie une string qui contient la valeur en hexa. Mais malheureusement cette fonction ne fonctionne qu'en VB  :( ...
 
Donc si qqu'un a une idee ou sait comment faire en C++ , parce qu'a mon avis ca doit etre pareil, n'hesitez pas!
 
Merci bcp

Reply

Marsh Posté le 24-04-2002 à 16:32:48    

sprintf(szChne, "%x", valeur); a priori.  
Faut voir les indicateurs du %x si on veut forcer le nombre de zéros de la chaîne résultante.

Reply

Marsh Posté le 24-04-2002 à 16:39:12    

Désolé pour le RGB() ! Vu qu'il y a trois paramètres, ça pouvait pas aller. J'avais le nez dans mes éprouvettes :sarcastic:. J'y retourne.
 
Ca aurait plutôt été atol((colorDialog.Color).Name), au cas où une valeur numérique est attribuée aux noms retournés (je rêve sans doute !)

Reply

Marsh Posté le 25-04-2002 à 10:19:20    

PFF... J'arrive toujours pas a trouver une methode (en c# ou c++) qui convertisse un int (decimal) en hexa... Quelqu'un aurait une idee?
 
Merci!

Reply

Marsh Posté le 25-04-2002 à 15:20:02    

sprintf (1ère réponse HelloWorld) marche pas sous C# ?

Reply

Marsh Posté le 25-04-2002 à 15:20:02   

Reply

Marsh Posté le 25-04-2002 à 17:53:12    

nope ! ...
 
Merci quand meme...

Reply

Marsh Posté le 25-04-2002 à 18:59:43    

y'a pas stdio.h en C# ? ou du moins en C++ ?
sinon, "a la C++", c'est avec cout.
Je m'en souvien plus trop ...
c'est un truc du genre cout << hex << atol((colorDialog.Color).Name);


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
Reply

Marsh Posté le 26-04-2002 à 09:39:12    

Ben ... ca devrait etre possible mais je sais pas comment l'appeler. En tout cas, je pense qu'en c++ on peut utiliser stdio.h.  
 
Sinon, juste pour info, comme je trouvais pas comment convertir en hexa, j'ai trouvé une autre methode pour gerer les couleurs.
Il y a une proprieté de la classe Color qui s'appelle IsKnownColor(). Si cette proprieté est a true, je sais que je recupere le nom de la couleur sinon, je recupere la valeur en hexa.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed