begin process at 2010 02 09 19:06:00
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

API

 > MENU EN POPUP AVEC IMAGES SANS PASSER PAR LE CRÉATEUR DE MENUS DE VB [MODULE DE CLASSE]

MENU EN POPUP AVEC IMAGES SANS PASSER PAR LE CRÉATEUR DE MENUS DE VB [MODULE DE CLASSE]


 Information sur la source

Note :
7,8 / 10 - par 5 personnes
7,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :API Classé sous :menu, popup, évènements, classe, afck Niveau :Débutant Date de création :24/07/2006 Date de mise à jour :22/12/2007 15:30:39 Vu / téléchargé :6 928 / 1 484

Auteur : PCPT

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


 Description

Cliquez pour voir la capture en taille normale
on a parfois besoin d'un menu en popup....
seulement si la fenêtre est skinnée (sans barre de titre), en passant par le créateur de menus de VB on se retrouve avec soit la barre de titre, soit la barre de menu au dessus de la skin. un peu très moche...

on peut toujours passer par une 2e form hidden mais ce n'est pas toujours évident pour renvoyer les évènements sur la bonne form.
ici une simple classe.
on crée les items (modifiables en cours), on appelle l'affichage du popup sur l'évènement désiré et la classe nous renvoie l'item cliqué.

comme d'hab ;)

Source

  • Option Explicit
  • Private WithEvents AfMenu As AfCls_PopupMenu
  • '
  • Private Sub Form_Load()
  • Set AfMenu = New AfCls_PopupMenu
  • AfMenu.ParentHandle = Me.hWnd
  • AfMenu.AddItem 101, "Ouvrir"
  • AfMenu.AddItem 102, "Enregistrer sous", False, False
  • AfMenu.AddSeparator
  • AfMenu.AddItem 103, "[X] Quitter"
  • ' OUBIEN
  • AfMenu.CreateEasyMenu "Ouvrir;Enregistrer sous;;[X] Quitter"
  • End Sub
  • '
  • Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  • If Button = vbRightButton Then AfMenu.DisplayMenu
  • End Sub
  • '
  • Private Sub Form_Unload(Cancel As Integer)
  • Set AfMenu = Nothing
  • End Sub
  • '
  • Private Sub AfMenu_Clicked(ByVal ID As Long, ByVal Caption As String, ByVal Checked As Boolean, ByVal Tag As Variant, ByVal IsChild As Boolean)
  • Debug.Print "MENU CLICKé : " & ID & " " & Caption & " " & Checked
  • End Sub
Option Explicit
Private WithEvents AfMenu As AfCls_PopupMenu
'
Private Sub Form_Load()
    Set AfMenu = New AfCls_PopupMenu
    AfMenu.ParentHandle = Me.hWnd
    AfMenu.AddItem 101, "Ouvrir"
    AfMenu.AddItem 102, "Enregistrer sous", False, False
    AfMenu.AddSeparator
    AfMenu.AddItem 103, "[X] Quitter"

'   OUBIEN
    AfMenu.CreateEasyMenu "Ouvrir;Enregistrer sous;;[X] Quitter"
End Sub
'
Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
    If Button = vbRightButton Then AfMenu.DisplayMenu
End Sub
'
Private Sub Form_Unload(Cancel As Integer)
    Set AfMenu = Nothing
End Sub
'
Private Sub AfMenu_Clicked(ByVal ID As Long, ByVal Caption As String, ByVal Checked As Boolean, ByVal Tag As Variant, ByVal IsChild As Boolean)
    Debug.Print "MENU CLICKé : " & ID & "   " & Caption & "   " & Checked
End Sub

 Conclusion

le but est uniquement un côté pratique. rien d'extraordiaire dans la création d'un popup mais çà peut toujours servir...

 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


 Historique

24 juillet 2006 01:49:48 :
zip
24 juillet 2006 04:01:00 :
retourne les propriétés checked et enabled d'un item sur demande
28 juillet 2006 09:31:42 :
quelques optimisations...
19 novembre 2006 00:02:29 :
remaniement complet, on peut maintenant créer autant de menus et de sous-menus que l'on veut, mettre des BMP ou GIF (préférés), récupérer les infos items comme on veut, etc etc.... voir capture, détails dans la source
16 mai 2007 00:37:59 :
correction bug remonté par 'Egyde', on ne pouvait pas désactiver un menu-parent. merci ;)
22 décembre 2007 15:30:40 :
donne le focus à l'appli (en cas d'attachement du menu à un systray)

 Sources du même auteur

Source avec Zip Source avec une capture PUBLIC SHARED SANS MODULE - VARIABLE SINGLETON : IDENTIFICAT...
Source avec Zip Source avec une capture RÉCUPÉRATION DES IMAGES SYSTÈME DEPUIS LEUR EXTENSION OU LEU...
Source avec Zip Source avec une capture FILE FOLDER LOCKER - BLOQUER (ET DÉBLOQUER) L'ACCÈS À CERTAI...
Source avec Zip Source avec une capture FOLDER HELPER - DOSSIERS SPECIAUX, MANIPULATION DE DOSSIERS,...
Source avec Zip Source avec une capture TEXTBOX AUTOCOMPLETE - ZONE DE TEXTE PRÉREMPLISSABLE LORS DE...

 Sources de la même categorie

Source avec Zip Source avec une capture Source .NET (Dotnet) FAIRE LA DIFFÉRENCE ENTRE UNE ADRESSE EMAIL QUI EXISTE D'UNE... par lesinfosdugeek
ENVOYER UN MESSAGE SUR SON COMPTE TWITTER par lesinfosdugeek
Source avec Zip Source avec une capture TROUVER LES CLÉS DE REGISTRE QUI CHANGENT par Flocreate
Source avec Zip IP_PUBLIQUE_INTERNETGETCONNECTEDSTATE par marco62118
Source avec Zip TOUTES LES RÉSOLUTIONS D'ÉCRAN ET TAILLE MAXI DE LA FORM AUD... par marco62118

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture MENU POPUP AVEC IMAGE par zork74
Source avec Zip Source avec une capture RECEVOIR L'ÉVÈNEMENT _MOUSEMOVE SUR DES CONTRÔLES QUI NE LE ... par PCPT
Source avec Zip Source avec une capture MESURER LA TAILLE D'UNE CHAÎNE EN PIXELS [MODULE DE CLASSE] par PCPT
Source avec Zip Source avec une capture PRESSE-PAPIER TEXTE POUR VBA [MODULE DE CLASSE] par PCPT
Source avec Zip Source avec une capture CONVERTIR BMP VERS JPG PAR API [MODULE DE CLASSE] par PCPT

Commentaires et avis

Commentaire de PCPT le 24/07/2006 19:54:55 administrateur CS

MDKK merci pour cette note "anonyme"...
c'est plus cher avec un commentaire?

Commentaire de diablamanshadow le 24/07/2006 20:58:23

ses pas mal comme source cependant perso quand je skin vu que ici tu en parle je skin de a à z je cree mes propres bouton , je code tt mon popupmenu mes propre menu etc etc etc donc ta source me sert pas trop mais je trouve sa pas mal du tout meme , meme si je n'utilise pas le meme system ^^
quelques roll over , des variable de stock de menu evidement je ne peux pas ajouter etc des menu "dynamiquement" comme toi mais bon je fais tt mon skin (je dit plutot design) sur mesure et en fonction de mon logiciel ^^

bon bah ta source est chouette je met un bon 8 car je trouve que celui qui utilise pas de border ses a la limite plus simple contrairement a ce que tu dit d'utiliser une autre form en hidden enfin chacun son opinion moi je trouve sa plus simple du moins si c'est pour garder le skin par defaut du menu "normale" ^^

ps: ses pas moi qui avais mis la note anonymement :p

Commentaire de Renfield le 27/07/2006 08:43:36 administrateur CS

pas besoin de ce PS, DiablamanShadow :

PCPT a bien précisé qu'il s'agit de MDKK...

Commentaire de diablamanshadow le 27/07/2006 23:51:46

desoler je n'avais pas vu ^^

Commentaire de Renfield le 28/07/2006 08:20:32 administrateur CS

Attention, PCPT, tu traine toujours un Item vide dans ton tableau
(tu pourrais par exemple, plutot maintenir un compteur du nombre d'items)

une petite utilisation de 'With' serait pas mal :
#     aMenu(Index).sCaption = Caption
#     aMenu(Index).bChecked = Checked
#     aMenu(Index).bEnabled = Enabled

dans ModifyItem, rien ne m'empeche de spécifier un index bidon

tu pourrais faire :
    Public Sub AddSeparator()
        AddItem STR_SEPARATOR, False, True
    End Sub

Commentaire de PCPT le 28/07/2006 09:17:43 administrateur CS

salut Rey,
l'item vide est voulu pour ne pas avoir à tester l'existance de l'item 0. il en gène en rien puisqu'on teste bien que la valeur saisie soit entre 1 et ubound.
et comme on ne renvoi jamais 0, l'item 1 à donc l'indice 1.

(sauf pour) ModifyItem, petit oubli...
AddSepar, en effet ^^ (pas d'erreur pour autant)

with pour 3, çà rajoute 2 lignes pour rien tu crois pas...
je mets à jour de suite

ps : c'est souriant tes messages commençant par "Attention", on croierait presque qu'il y a vraiment quelquechose de grave :D

Commentaire de Renfield le 28/07/2006 09:21:47 administrateur CS

nop, rien de grave, pas d'inquiétude ^^

With pour trois...
dans l'absolu oui, ca rajoute des lignes, mais ca évite de trop manipuler les tableaux... VB n'a a trouver l'item (et verifier que l'index ne depasse pas, etc) qu'une fois.

Commentaire de PCPT le 28/07/2006 09:32:15 administrateur CS

voilà chose faite ;)

Commentaire de drakkard le 11/10/2006 10:40:54

Bonne source, très claire,
rien à dire...
Dommage que l'on ne puisse pas avec cette méthode mettre les items en gras...

Commentaire de PCPT le 19/11/2006 00:05:32 administrateur CS

bon, finalement j'ai quand même retouché à cette source, j'suis pas trop déçu du résultat, voir capture ;)

drakkard -> pas mal d'options, mais pas de changement en rapport à la typo.
tu peux ajouter une image en entête de ligne par exemple

++

Commentaire de PCPT le 19/11/2006 00:11:30 administrateur CS

une petite erreur (capture)... rien d'important, simple faute de frappe (Caption de l'Item)

j'attends vos comms ;)
++

Commentaire de Egyde le 16/05/2007 00:11:30

Très bien tout ça!!

J'ai qd même trouvé un petit bug : les menus avec sous-menus ne sont pas désactivés par ModifyItem. Si tu veux par exemple désactiver l'item 104 de la feuille "Composé" (frm_sample), ça marche pas :

Private Sub Command1_Click()
    AfMenuMain.ModifyItem 104, , , False
    '<----- item 104 toujours actif
End Sub

Le problème semble venir de la création récursive des menus, qui ne doit pas être exécutée si le menu parent est "Disable" :

Public Sub Friend_RecursiveSubMenusMaker(ByRef ParentMenu As AfCls_PopupMenu)
....
'sous-menus?
  If aMenu(i).bEnabled = True Then ' <--- à rajouter
    If Not (ITB.oChild Is Nothing) Then
...
    End If
  End If
...
End Sub

++

Commentaire de PCPT le 16/05/2007 00:38:29 administrateur CS

bien vu ;)

If Not ITB.oChild Is Nothing And aMenu(i).bEnabled Then

mis à jour, merci

Commentaire de Exploreur le 16/05/2007 10:43:56

Salut PCPT,

Que dire...Que dire...Que ta source est cool et aussi que le le composant AfBtn est sympa...

A+
Exploreur

Commentaire de odureux le 13/08/2007 10:39:55

Pour info, il est possible de créer un menu contextuel avec le créateur de menus de VB6 sans qu'il y ait de barre de titre et sans que le menu apparaisse :
  - créer le menu comme d'habitude avec le créateur de menu
  - dans le créateur de menu, mettre le premier item du menu à invisible (décocher "visible") --> empêche que le menu apparaisse
  - le créateur de menu fait réapparaître la bordure et le titre : remettre borderstyle à vbBSNone et caption à ""
Et tout rentre dans l'ordre ;-)

Commentaire de PCPT le 13/08/2007 22:44:52 administrateur CS

très utile ton commentaire... sur une source où le but est justement d'éviter de passer par le créateur de VB.
qui plus est le but ici est uniquement le popup donc pas vraiment de rapport mais l'astuce peut toujours servir, qui sait.

++

Commentaire de odureux le 14/08/2007 14:38:02

Je ne commentais pas ton source mais sa description : "seulement si la fenêtre est skinnée (sans barre de titre), en passant par le créateur de menus de VB on se retrouve avec soit la barre de titre, soit la barre de menu au dessus de la skin. un peu très moche...
on peut toujours passer par une 2e form hidden (...)".
Et ça marche surtout pour faire un popup (à moins de vouloir faire un menu invisible ;-)

Commentaire de PCPT le 14/08/2007 16:51:05 administrateur CS

exact j'avais oublié mon comm ^^
cela dit on est alors obligé de supprimer le caption, or on peut en avoir besoin pour afficher la fenêtre dans la barre des tâches. bref en classe c'est toujours pratique non?
++ ;)

Commentaire de odureux le 14/08/2007 19:08:15

Je crois que si on remet le caption, alors on a à nouveau la barre de titre, donc on peut à nouveau utiliser le créateur de menu ;-p
De toutes façons, ta classe reste utile quand on ne peut pas créer le menu à la création : création dynamique au moment de l'exécution quand par exemple on ne sait pas le nom ou le nombre des items, ...

Commentaire de Ouneufe le 30/08/2007 17:25:39


Très bonne source, exactement ce que je recherchais. J'étais coincé car je ne pouvais utiliser convenablement le popupmenu classique avec feuille MDI+ feuilles filles.

Commentaire de candyraton le 09/01/2009 15:11:43

manquerait pas Set AfMenu = Nothing sur Frm_TitleBar.frm?

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

PopUp Menu [ par Yerffuaj ] Bonjour, je ne connais pas très bien VB mais je fais un stage sous VB6 et il faudrait que j'arrive à augmenter la taille de police des popup menu qui Menus popup dans un MDIChild [ par Sandro ] Hello... je vais essayer de faire court :-)J'ai un p'ti soft MDI. Dans une feuille Child, je veux faire apparaître un menu Popup. J'y ajoute donc un m Popup menu [ par baba ] Comment peut on faire pour ajouter des icones dans un menu (popup) en VB ?Merci Popup menu dans DBGrid ou équivalent [ par lolo ] Bonjour,je débute en VB6 et je voudrais faire un formulaire de visualisation/modification de données sur une table du style:MaTable: ID carac1 c popup menu dans listview ou treeview en VBA [ par reman ] Salut à tous,Je n'arrive pas à créer un popup sur un item d'une listview ou d'un treeview. Je débute, alors si quelqu'un pouvait m'aider en me donnant Popup menu qui ne disparait pas sous Win NT [ par clafouti ] J'ai le problème suivant : J'ai une icone dans le system tray (a coté de l'horloge). Lorsque je clique droit sur l'icone, je fait apparaître un popup Popup menu et fenetre sans border [ par PKist ] Lorsque je fais un menu, cela ajoute des border a ma fenetre de projet.comment créer un menu sans que cela n'ajoute de border ? Menu popup [ par rivierem ] Voila je voudrais creer un menu popup dynamiqueJ'arrive a le cree mais il ne s'affiche pas!!!Comment faire voila ma sourcePublic Sub charge_menu_ext Probème d'évènements avec un classe reprise dans un tableau (array) [ par doct ] Salut,je ne sais pas si je me fais bien comprendre, mais en gros, lorsque je déclare une classe de cette manière :dim withevents Cls() as Classe1ça ne fermer un popup menu [ par patrick ] Bonjour, Juste une petite question : j'aimerais fermer par programme un menu "popup" !merci d'avance, patrick Moirehttp:\\jeux.cartes.free.fr


Nos sponsors


Sondage...

Comparez les prix

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,749 sec (3)

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