Afficher le menu contextuel d'un fichier

Soyez le premier à donner votre avis sur cette source.

Vue 6 059 fois - Téléchargée 685 fois

Description

Tout est dans le titre : Affiche le menu contextuel d'un fichier. Mais il peut aussi afficher le menu contextuel des éléments spéciaux de Windows (poste de travail, ...)

Le fichier zip ci-joint contient une classe et un exemple montrant l'utilisation de cette classe.

Conclusion :


J'ai mis pas mal de commentaires, mais si vous voulez des explications supplémentaires, demandez-moi.

Les commentaires sont les bienvenus.
Si vous voyez des erreurs ou des trucs qui ne vont pas, signalez le moi ...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
11
Date d'inscription
mardi 9 novembre 2004
Statut
Membre
Dernière intervention
7 février 2008

bonjour a tous
tres chouette source pour moi qui debute en dlephi j'ai trouver un source tres bien commenter pour m'y retrouver sa c'est au poil felicitation

je me suis eclater a creer un editeur filelistbox et un access au menu contextuel de windows, pour ne pas avoir d'erreur au passage sur les separateur avec la sourie j'ai supprimer
{procedure Handle_WMMENUSELECT(var Msg : TMessage); message WM_MENUSELECT;}
appel de procedure
var
rep, dd: string;
ContextMenu: TShellContextMenu;
fich: Boolean;
begin
rep := ExtractFilePath(Paramstr(0));
ContextMenu := TShellContextMenu.Create(Self, Self.Handle);
fich := ContextMenu.Init(filelistbox1.FileName);

ContextMenu.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
encore un grand bravos et merci a vous de la part de personne comme moi qui debut en delphi
Messages postés
7
Date d'inscription
samedi 12 octobre 2002
Statut
Membre
Dernière intervention
25 août 2007

Bon, voilà, en supprimant complètement la procédure TShellContextMenu.Handle_WMMENUSELECT(var Msg : TMessage); (la dernière de l'unité ContextMenu), ça ne plante plus.
Et comme je ne sais pas à quoi elle sert (à part afficher un truc dans le lblContextText sur Form1), ben, zap !

Et maintenant, tout fonctionne bien, menu contextuel et ses sous-menus (if any).
Mes 2 cts,
Messages postés
7
Date d'inscription
samedi 12 octobre 2002
Statut
Membre
Dernière intervention
25 août 2007

Salut tout le monde.
Je viens de constater avec stupeur et retardement que malgré la correction de Shagshag, ça plante quand même lors du passage sur un séparateur ou si l'on veut passer sur un sous-menu ! (opération de pointeur incorrecte...)
Je suis sous w2k-sp4 et D7 perso.
Je vais chercher, mais je ne sais pas du tout si je vais trouver (ça dépasse un peu mes compétences)...
Messages postés
131
Date d'inscription
vendredi 7 juin 2002
Statut
Membre
Dernière intervention
19 janvier 2004

Salut,
Shagshag et jpt : merci à vous. Je viens de mettre à jour la source pour prendre en compte vos remarques. Par contre, c'est non testé, faute d'installation de Delphi sous la main ;)
Je suis heureux de voir que ma source rend encore service 4 ans après !

bgK
Messages postés
7
Date d'inscription
samedi 12 octobre 2002
Statut
Membre
Dernière intervention
25 août 2007

Salut,
il y a une 'tite fuite mémoire (merci Memcheck !) dans la dernière procédure (GetMem sans FreeMem).
Je l'ai modifiée ainsi (en y incluant la modif du post précédent) :
If (Msg.WParamLo > 0) and (Msg.WParamLo < MaxMenuItemId) then
begin // Si ok récupère le texte adapté puis déclenche
GetMem(Texte, 255); // l'évènement OnItemSelect
if not ( ICM3.GetCommandString(Msg.WParamLo - MinMenuItemId, GCS_HELPTEXTA, nil, Texte, 255) = NOERROR ) then
Texte := '';

If Assigned(FOnItemSelect) then FOnItemSelect(Self, Texte);

FreeMem(Texte); // jpt, 9/2007
end;

// If Assigned(FOnItemSelect) then FOnItemSelect(Self, Texte); // jpt, 9/2007

Merci pour tout ce code,
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.