DESSIN DE MENU

cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 - 12 avril 2003 à 21:45
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009 - 23 oct. 2008 à 17:00
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/12474-dessin-de-menu

FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
23 oct. 2008 à 17:00
Dernière précision pour conclure :


procedure TForm1.FormCreate(Sender: TObject);
Const
BACK_COLOR=$C8D0D4;
begin
{* StandardStyle or XPStyle *}
ActionManager.Style:=StandardStyle;
{* Couleur de fond *}
with ActionMainMenuBar.ColorMap do begin
UpdateColors;
Color:=BACK_COLOR;
MenuColor:=BACK_COLOR;
BtnSelectedColor:=BACK_COLOR;
end;
end;
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
23 oct. 2008 à 16:21
Mille excuses... il y a plus simple ! Le composant TStandardColorMap n'est pas nécessaire (cf. ci-dessous).

procedure TForm1.FormCreate(Sender: TObject);
Const
BACK_COLOR=$C8D0D4;
begin

with ActionMainMenuBar.ColorMap do begin
UpdateColors;
Color:=BACK_COLOR;
MenuColor:=BACK_COLOR;
BtnSelectedColor:=BACK_COLOR;
end;
end;

Moralité : ne rien écrire de mémoire sans vérifier.
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
23 oct. 2008 à 13:56
Ok, voici de façon résumée le moyen de modifier la couleur de fond d'un menu et des items.
Composants utilisés :
- TActionManager (ActionManager),
- TActionMainMenuBar (ActionMainMenuBar),
- TStandardColoMap (StandardColorMap).

procedure TForm1.FormCreate(Sender: TObject);
Const
BACK_COLOR=$C8D0D4;
begin
with StandardColorMap do begin
UpdateColors;
Color:=BACK_COLOR;
MenuColor:=BACK_COLOR;
BtnSelectedColor:=BACK_COLOR;
end;
ActionMainMenuBar.ColorMap:= StandardColorMap;
end;

Bibliographie :
http://dn.codegear.com/article/29028
http://homepages.borland.com/strefethen/info/ABExpressTutorial.htm
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
22 oct. 2008 à 21:51
@fenetres :
Cette attente risque fort de s'éterniser, non pas que le sujet ne m'intéresse pas mais simplement par manque de temps.
Désolé de ne pouvoir accéder à ta demande.
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
22 oct. 2008 à 14:40
Bonjour MD21,

Cela étant, à ne pas douter, notre administrateur CS (DelphiProg) serait très inspiré de nous donner des exemples d'utilisation du composant TActionManager (coloration, placage de texture, images etc.).

Dans cette attente, cordialement
md21 Messages postés 32 Date d'inscription mercredi 10 janvier 2007 Statut Membre Dernière intervention 1 septembre 2015 1
8 oct. 2008 à 10:48
Merci FENETRES,

j'ai essayé ta solution et elle fonctionne très bien, en la combinant avec le code de Bestiol, il ne reste plus que la ligne de bordure en dessous du menu (mais ce n'est pas très génant vu qu'elle est blanche). Il faudra que je vérifie ce que ça donne sous Vista ...
FENETRES Messages postés 196 Date d'inscription jeudi 15 juillet 2004 Statut Membre Dernière intervention 14 avril 2009
25 sept. 2008 à 12:21
Pour la couleur de la bande de menu, j'ai pensé à la solution ci-dessous :
---- Var -----------------------------------
MenuInfo:TMenuInfo;
BrushHandle: HBrush;
---- FormCreate ----------------------------
// Couleur de la barre de menu
BrushHandle:=CreateSolidBrush($C8D0D4);
FillChar(MenuInfo, SizeOf(MenuInfo), 0);
with MenuInfo do begin
cbSize:=SizeOf(MenuInfo);
hbrBack:=BrushHandle;
fMask:=MIM_BACKGROUND Or MIM_APPLYTOSUBMENUS;
end;
SetMenuInfo(MainMenu.Handle, MenuInfo);
---- FormDestroy ---------------------------
DeleteObject(BrushHandle);
--------------------------------------------
Vous pourrez constater que celle-ci n'est pas complètement satisfaisante puisqu'il reste la ligne de bordure du menu et que les items sélectionnés ne sont pas à la couleur spécifiée.
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
27 juin 2008 à 13:55
pas de quoi je t'en prie :)

Je te souhaite bon courage, si j'ai le temps je me pencherai peut-être dessus, qui sais...

Petit bonjour à Delphiprog au passage ^^
md21 Messages postés 32 Date d'inscription mercredi 10 janvier 2007 Statut Membre Dernière intervention 1 septembre 2015 1
27 juin 2008 à 13:40
vraiment, un grand merci pour ta réactivité, j'ai trainé à répondre car j'ai voulu essayer un peu, malheureusement pour l'instant c'est pas encore gagné mais je vais continuer.
Le problème c'est que je ne suis pas au top sur ce type de code et des exemples comme le tien m'ont déjà beaucoup aidé
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
23 juin 2008 à 14:17
Héhé, 5 ans plus tard... c'est toujours marrant de retomber sur ses sources :)

Je crois me souvenir du problème dont tu parles MD21, a priori je n'y avais pas trouvé de solution à l'époque mais ça doit bien être possible.

Ca fait longtemps que j'ai touché à tout ça donc ça vaut ce que ça vaut, mais regarde peut-être s'il n'y a pas une possibilité du côté de GetWindowRect sur le handle du menu ou quelque chose dans ce goût, qui te permettrait de récupérer les coordonnées de toute la bande et de la colorer avant de passer à la coloration des items, en passant par un DeviceContext et les API, ou avec un TCanvas...

(c'est possible que je sois complètement à côté de la plaque hein...)
md21 Messages postés 32 Date d'inscription mercredi 10 janvier 2007 Statut Membre Dernière intervention 1 septembre 2015 1
23 juin 2008 à 14:09
Bonjour,

effectivement sur une D6 standard pas de TActionManager

Cela dit le code fonctionne super bien, cependant la partie de la bande du menu (sur la droite) non utilisée par le menu ne change pas de couleur. Est-il possible d'agir également sur cette couleur ?

merci
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
26 mai 2003 à 17:43
mouarf, ok pour "bises" !!

Pour ton code sur le TreeView, tu n'as qu'à faire une source claire présentant un peu toutes les fonctionnalités, bien commentée si possible, et tu la publies sur le site !! C'est le meilleur moyen...

Bonne prog' !!
GILLESG2 Messages postés 2 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 26 mai 2003
26 mai 2003 à 15:56
oui moi aussi je préfère un poigné de main... c'est bien clair rire
bises c'était une façon de dire tchao
sinon si un jour vous avez besoin j'ai tout ce qui faut pour gerer un treeview (chargement d'un fichier texte, sauvegarde dans un fichier binaire, création des noeuds et création des data aux bouts des noeuds... tout ca en codé en non en utilisant les methodes et propriétés de ce composant ce qui est beaucoup plus complexe à faire)
c'est lourd à gerer mais ca marche bien...
alors si je peux en faire profiter...
bises enfin je veux dire tchao...
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
26 mai 2003 à 15:47
Salut !!

Il n'y a pas de quoi ! Je suis content que ça serve !
Et effectivement, tu vas pouvoir utiliser le TActionManager, beaucoup plus rapide à employer que le code que j'ai laissé ici !

Et, en passant, pour les salutations, en tant que gars, je préfères une bonne poignée de mains qu'une bise !! ;o)
Bonne prog' !
Bestiol.
GILLESG2 Messages postés 2 Date d'inscription lundi 26 mai 2003 Statut Membre Dernière intervention 26 mai 2003
26 mai 2003 à 13:46
Bonjour

Merci pour toutes ces précisions sur le composant Menu dans Delphi.
Je cherchais justement à changer sa couleur grise standard (parceque la fenetre générale de mon appli est bleue...)
donc à priori avec delphi pro 7 on peut le faire avec TActionManager ?
je vais pouvoir modifier l'affreuse bande grise en une belle bande bleue??
je vais essayer ca ce soir...
bises
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
12 avril 2003 à 23:46
Arf, je t'en prie, Delphiprog !!

Quant à ceux qui ont une version pro (ou mieux) de Delphi (6 et 7), et qui ne connaissent pas ce composant, je leur conseille vivement de jeter un coup d'oeil du côté de l'onglet "Supplément" (Comme ça, je répond "aux lecteurs de cette contribution" ! ;o) )... 'Pouvez pas être déçus !
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
12 avril 2003 à 23:36
Autant pour moi, je pensais que ce composant était livré à partir de D6 quelque soit la mouture.
Merci à toi Bestiol pour ces précisions utiles qui éviteront aux lecteurs de cette contribution de demander dans quel onglet de la palette on peut trouver ce fameux TActionManager.
cs_Bestiol Messages postés 833 Date d'inscription dimanche 6 janvier 2002 Statut Membre Dernière intervention 3 novembre 2005 1
12 avril 2003 à 22:10
Oui, Delphiprog... Je suis d'accord avec toi !!
Mais le tout le monde n'a pas la version pro de Delphi 6 ou 7 !!
Pasque dans les versions perso, ce composant n'est pas disponibles !

De plus, le but était ici de montrer comment faire ça en écrivant du code !!
[Libre à toi, Skiso, de faire un composant qui permet de gérer ça aussi bien que le TActionManager (bonne chance !) ]

Bonne prog' à tous !
cs_Delphiprog Messages postés 4297 Date d'inscription samedi 19 janvier 2002 Statut Membre Dernière intervention 9 janvier 2013 32
12 avril 2003 à 21:45
En utilisant le composant TActionManager, on parvient au même résultat mais sans écrire une seule ligne de code...à partir de Delphi 6 seulement.
Coloration, placage de texture, images sur le côté des menus, items les plus fréquemment utilisés, etc. Le tout sans écrire de code, mais là, je me répète.
Rejoignez-nous