cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 27 févr. 2006 à 15:07
Il faut que tu mettes la propriété OwnerDraw à true dans ton contextmenu, ensuite dans l'évenement MeasureItem tu mets genre :
e.ItemWidth = 75 ;
e.ItemHeight = 30 ;
Ensuite pour afficher des texts tu fais :
e.Graphics.DrawString(
s1 ,
System::Drawing::Font("Verdana",7,FontStyle::Bold,GraphicsUnit::Millimeter),
new SolidBrush(Color.Red), rcText,sf);
Ca peut être une méthode, je pense pas qu'on puisse faire autrement mais pas sur.
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 28 févr. 2006 à 07:17
Merci pour cette information, Cela fonctionne presque . Sauf que le texte ne reste pas affiché. J'ai également un probleme pour la localisation du drawstring (rcText je pense), je l'ai mis a cursor.position (pour le premier menuitem cela semble fonctionner) mais je ne sais pas comment donner une position générale qui permettrait a chaque menu item d'etre dessiné correctement. Il doit y avoir egalement un truc pour fixer le dessin du texte du menuitem, comment faire? On ne peut donc pas changer la couleur du fond?
Sinon une question plus générale sur ce forum, apparemment je n'arrive pas a retrouver cette question(/discussion) en recherchant avec le mot clé contextmenu eet je n'ai toujours que deux pages(ou sont presents les discussion se rapportant a un sujet) maximum. AI-je mal configuré quelque chose?
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 28 févr. 2006 à 12:52
D'abord merci
Ok cette fois-ci le message est persistant...
J'avais essayé drawitem (j'avais mis drawstring dedans mais apparemment il n'etait j'amais appelé (j'ai mis un messagebox dedans et jamais il n'apparaissait), je ne sais pas pourquoi).
J'ai juste deux petits trucs avant de "valider" ta reponse.
Si je mets ds Drawstring "e.Font" pour la taille je n'obtiens pas la taille que j'ai choisi dans measureitem. J'ai juste la taille normale (d'origine).
Dans measureItem a la place de SystemFonts.menufont , j'ai mis ce que je voulais comme font.
Si je refait le drawstring avec le meme font dans drawitem,cela fonctionne (tout en gardant e.Bounds). Je ne comprends pas trop pourquoi e.Bounds semble correct alors que e.FOnt non.
POur modifier la couleur du fond j'ai essayer un fillrectangle (ca met bien la couleur mais pas partout cad pas sur le "tour" du rectangle) mais quand on passe le curseur dessus on n'a plus la couleur qui change.
ensuite si on enleve e.drawbackground() , il nous manque egalement la couleur quand le curseur passe dessus . Cette derniere fonction sert-elle juste a permettre au menuitem de changer de couleur quand le curseur passe dessus?
Voila, c'etait quelques questions parce que jene comprends pas bien l'enchainement des evenements dans ces fonctions....
Merci
cs_emmanuel9
Messages postés903Date d'inscriptionmercredi 23 février 2005StatutMembreDernière intervention16 juin 20102 28 févr. 2006 à 13:15
ben e.Font ca represente la police de ton contextMenu mais tu peux utiliser une autre Police, tu remplace e.Font par la police que tu veux exemple : new Font("Veranda" ,10)
Mettons tu veux dessiner "bonjour", tu fais :
e.Graphics.DrawString( "Bonjour" , System.Drawing.Font("Verdana",7,FontStyle.Bold,GraphicsUnit.Millimeter), new SolidBrush(Color.Red), 5,5);
Je dessine "bonjour" au coordonné 5,5, la couleur est le rouge et la police est Verdana de taille 7 en gras.
e->bound te retourne un rectangle qui represente la zone en cours en faite. En faite le mieux c'est que tu te serve comme modèle de cet exemple : (je ne serais pas répondre à toutes t'es question)
tu télécharge la sources et tu modifi des trucs pour voir ce qui a changer, le truc à savoir c'est qu'il a abonné chaque MenuItem de son MainMenu au même événement DrawItem et MeasureItem pour éviter d'avoir à le faire 50 fois et qu'il se sert de ca :
pour les differenciers. Mais de toute manière lui il met des images dans son menu et ce n'est pas ce que tu veux faire. Voila regarder le code vire ce qui te sert pas et modifie des paramètres et fais des tests pour voir ce qui change et comprends comment cela marche.
cudenetf
Messages postés448Date d'inscriptionmardi 20 septembre 2005StatutMembreDernière intervention26 juillet 20122 28 févr. 2006 à 15:49
Ok merci encore
j'ai reussi a faire changer la couleur quand la souris passe dessus mais le fond n'est toujours pas uniforme...en fait on ne paint que le "background" du menuitem et pas du contextmenu lui meme , c'est a dire que si je peint un menuitem en rouge dans le context box, il restera un liseraie gris clair (celui du contextmenu) autour et si j'ajoute un "element" menuitem (-) pour faire un separateur et que je laisse "windows" le dessiner il sera en gris, par contre, si je mets la propriete ownerdraw de cet element a true et bien je n'obtiens que le signe - et pas de séparateur (et puis si la taille du texte est importante ca me fait un espace vertical assez enorme dont je n'ai pas vraiment besoin.
Sinon si je veux montrer ce contextbox lors d'un evnt click (meme gauche). J'ai fait un contextmenu.Show("controlsource",new Point(0,0));
Ce contextmenu apparait tres brievement et disparait ensuite.
Par contre si je mets un messageBox avant il reste...
Je ne comprends pas
Comment faire pour qu'il soit persistant meme sans messagebox?
J'aimerais egalement savoir comment le placer au niveau du curseur.
Avec la methode.Show , on l'associe au controle source et le positionnement semble se faire par rapport a celui-ci.
Une methode pourrait etre de faire cursor.position-positiondu control-position du control qui le contient,etc.... mais ca me semble un peu lourd
Existe-t-il une methode simple et efficace?