begin process at 2010 02 10 10:18:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > DESSIN DE MENU

DESSIN DE MENU


 Information sur la source

Note :
10 / 10 - par 2 personnes
10,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Débutant Date de création :12/04/2003 Date de mise à jour :12/04/2003 16:55:17 Vu / téléchargé :11 049 / 612

Auteur : Bestiol

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (19)
Ajouter un commentaire et/ou une note


 Description

Ceci est en réponse à Skiso...
Voici un petit prog' montrant comment dessiner soi-même un menu...
Il faut mettre la propriété OwnerDraw du Menu à True, puis utiliser l'événement OnDrawItem ou OnAdvancedDrawItem des items de chaque menus...
Franchement, c'est bien casse-pieds à faire !!! C'est long, pasqu'il faut vérifier chaque état de l'item quand il est dessiné...
Mais ça permet quand même de faire un truc sympa !

Je vous laisse découvrir l'application !

Source

  • Tout est dans le ZIP
Tout est dans le ZIP

 Conclusion

Je pas programmé toutes les solutions possibles... Il en reste plein, mais ce n'est qu'un exemple, qui permet de reproduire un menu normal !
Pour tous les étas possibles, voir l'aide sur TOwnerDrawState

Sinon, je n'ai pas commenté le source... Je pense pas qu'il y en ai besoin, vu la complexité du code !!
Mais si vous avez toutefois une question, vous n'avez qu'à utiliser les commentaires !! ;o)

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

Source avec Zip COLORATION SYNTAXIQUE AVEC TPARSER !!
Source avec Zip PETITE SCENE EN OPENGL
Source avec Zip DÉCOUPAGE DE FICHIER WAV
Source avec Zip UTILISER UN NUMÉRO DE SÉRIE
Source avec Zip CONCATENATION DE FICHIERS WAV

 Sources de la même categorie

Source avec Zip Source avec une capture LOGICIEL DE DIAGNOSTIC AUTOMOBILE KWP2000 par Oniria
Source avec Zip Source avec une capture RÉGLE TRANSPARENTE POUR MESURER UN OBJET ECRAN par dubois77
Source avec Zip Source avec une capture LE BOOK DU PAUVRE par dubois77
Source avec Zip Source avec une capture CAHIER 90 PAGES par dubois77
Source avec Zip Source avec une capture TABLEAU DE BOUTONS DYNAMIQUES (AGENDA) par dubois77

Commentaires et avis

Commentaire de Delphiprog le 12/04/2003 21:45:34 administrateur CS

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.

Commentaire de Bestiol le 12/04/2003 22:10:05

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 !

Commentaire de Delphiprog le 12/04/2003 23:36:20 administrateur CS

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.

Commentaire de Bestiol le 12/04/2003 23:46:36

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 !

Commentaire de GILLESG2 le 26/05/2003 13:46:07

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

Commentaire de Bestiol le 26/05/2003 15:47: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.

Commentaire de GILLESG2 le 26/05/2003 15:56:11

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...

Commentaire de Bestiol le 26/05/2003 17:43:10

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' !!

Commentaire de md21 le 23/06/2008 14:09:37

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

Commentaire de Bestiol le 23/06/2008 14:17:46

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...)

Commentaire de md21 le 27/06/2008 13:40:57

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é

Commentaire de Bestiol le 27/06/2008 13:55:31

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 ^^

Commentaire de FENETRES le 25/09/2008 12:21:44

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.

Commentaire de md21 le 08/10/2008 10:48:42

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 ...

Commentaire de FENETRES le 22/10/2008 14:40:25

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

Commentaire de Delphiprog le 22/10/2008 21:51:13 administrateur CS

@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.

Commentaire de FENETRES le 23/10/2008 13:56:07

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

Commentaire de FENETRES le 23/10/2008 16:21:44

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.

Commentaire de FENETRES le 23/10/2008 17:00:40


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;

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,608 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales