cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 2005
-
20 mai 2003 à 10:01
cs_alll
Messages postés11Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention 7 février 2008
-
11 févr. 2008 à 21:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.
cs_alll
Messages postés11Date d'inscriptionmardi 9 novembre 2004StatutMembreDernière intervention 7 février 2008 11 févr. 2008 à 21:25
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
cs_jpt
Messages postés7Date d'inscriptionsamedi 12 octobre 2002StatutMembreDernière intervention25 août 2007 25 oct. 2007 à 22:08
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,
cs_jpt
Messages postés7Date d'inscriptionsamedi 12 octobre 2002StatutMembreDernière intervention25 août 2007 23 oct. 2007 à 21:00
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)...
cs_bgK
Messages postés131Date d'inscriptionvendredi 7 juin 2002StatutMembreDernière intervention19 janvier 2004 16 sept. 2007 à 13:49
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
cs_jpt
Messages postés7Date d'inscriptionsamedi 12 octobre 2002StatutMembreDernière intervention25 août 2007 11 sept. 2007 à 10:37
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,
cs_Shagshag
Messages postés2Date d'inscriptiondimanche 2 mai 2004StatutMembreDernière intervention18 mai 2005 18 mai 2005 à 10:14
Salut, j'ai fait un petit changement car ça plantait chez moi (XP) quand on survole un séparateur de menu avec la souris.
ligne 248 de l'unité ContextMenu :
[If Msg.WParamLo < MaxMenuItemId then] devient [If (Msg.WParamLo > 0) and (Msg.WParamLo < MaxMenuItemId) then]
Merci pour ce code.
cs_Bestiol
Messages postés833Date d'inscriptiondimanche 6 janvier 2002StatutMembreDernière intervention 3 novembre 20051 20 mai 2003 à 10:01
Arf, encore un bon code sur l'intégration au shell !! ;o)
11 févr. 2008 à 21:25
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
25 oct. 2007 à 22:08
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,
23 oct. 2007 à 21:00
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)...
16 sept. 2007 à 13:49
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
11 sept. 2007 à 10:37
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,
18 mai 2005 à 10:14
ligne 248 de l'unité ContextMenu :
[If Msg.WParamLo < MaxMenuItemId then] devient [If (Msg.WParamLo > 0) and (Msg.WParamLo < MaxMenuItemId) then]
Merci pour ce code.
20 mai 2003 à 10:01
Bonne prog' !