| Nouvelles commandes pour le MAIN_MENU_POP | |
|
|
Auteur | Message |
---|
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 1:07 | |
| Bonjour, Cette demande s'adresse à Jack. Je n'ai pas pour habitude de te déranger car je sais que ton temps est compté. Je crois d'ailleurs que c'est seulement la seconde fois que je te demande de nouvelles commandes. Cette fois, il s'agit de MAIN_MENU_POP, le menu contextuel. Je me suis aperçu dans PanExpress qu'un clic droit faisait apparaître le MAIN_MENU_POP même s'il est sur d'autres objets eux_même rattachés au FORM de base. Tu peux par exemple afficher le MAIN_MENU_POP alors que l'on se trouve sur un PANEL qui représente une fenêtre d'option. J'aimerai donc le 'limité' avec des commandes telles que HIDE/SHOW ou ACTIVE/INACTIVE afin d'éviter cet affichage parasite. Je ne sais pas si cela est possible ou alors pourvoir le rattaché à un objet en particulier. Pour PanExpress ce serai par exemple l'objet SYNEDIT. J'espère que tu vois le principe. Sinon fait un test avec le clic droit dans PanExpress sur les différents éléments et tu comprendra... Merci d'avance Jack.
Dernière édition par Minibug le Sam 15 Juin 2019 - 10:13, édité 1 fois | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 1:25 | |
| Tiens, c'est bizarre... la commande MAIN_MENU_POP n'est pas reconnue chez moi: Serait-ce un problème de version ? Tu dis: - Citation :
- ... ou alors pourvoir le rattaché à un objet en particulier.
La doc explique que le MAIN_MENU_POP se rapporte à une FORM entière. Par défaut, c'est la form 0, et si l'on veut l'avoir sur une autre form, il faut faire un COMMAND_TARGAT_IS avant. Il ne peut y avoir qu'un seuk MAIN_MENU_POP par form, et il est donc impossible d'en faire un pour des objets spécifiques. Seule solution pour cela; créer son propre menu "maison" et l'afficher sur un évènement ON_KEY_DOWN en testant le code pour le bouton droit... | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 1:43 | |
| c'est bizarre ton histoire ! Voila chez moi : | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 1:50 | |
| Bon, j'ai compris ma bêtise... lorsqu'on écrit "main_memu_pop", il ne connaît pas, bien sûr ! Il fallait "main_menu_pop", et ça marche comme tu le décris (et comme c'est dit dans la doc !): - Code:
-
' test_main_menu_pop.bas
edit 1 : top 1,10 : left 1,10 memo 2 : top 2,10 : left 2,150 main_menu_pop 10 sub_menu 11 : parent 11,10 : caption 11,"Fichiers"
end | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 1:52 | |
| | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 4:04 | |
| J'ai mis une nouvelle version de KGF.dll sur mon site internet (pas sur le WebDav !). Il y a une nouvelle fonction, pas encore documentée, qui va résoudre ton problème: - Code:
-
res% = dll_call2("PopupMenuTarget",object_internal(main_menu_popup%),handle(cible%)) Cette fonction restraint le ménu popup strictement à l'objet dont le handle est spéficié en secon paramètre. Exemple: Le ménu popup n'apparaît QUE sur la form 0, pas lors d'un clic sur autre chose: - Code:
-
' test_main_menu_pop.bas
dim res%
edit 1 : top 1,10 : left 1,10 memo 2 : top 2,10 : left 2,150 main_menu_pop 10 sub_menu 11 : parent 11,10 : caption 11,"Fichiers"
dll_on "KGF.dll" res% = dll_call2("PopupMenuTarget",object_internal(10),handle(0)) message "res%="+str$(res%)
end
C'est ce que tu veux, non ? D'ailleurs, des appels successifs à cette fonction avec un autre handle en second paramètre déplacent la cible du ménu popup selon les besoins. Et un appel avec zéro en second paramètre désactive complètement de ménu popup. EDITOups... je le reprends - il y a encore un problème. EDITBon, ça marche maintenant ! | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 10:10 | |
| Merci Klaus J'ai testé en changeant la valeur de l'objet par celle du MEMO que j'ai lui même fait évolué en SYNEDIT. Et cela fonctionne parfaitement, car en fait c' est pour l'utiliser uniquement sur la partie éditeur de PanExpress. Mais le problème c'est que ne souhaite pas utiliser de DLL pour rendre mon programme compatible avec les différents système : MAC, LINUX, etc. J'ai déjà 2 appels DLL dans mon programme que je souhaiterai supprimer... Mais bon, je vais garder ta solution en attendant que Jack puisse se pencher sur le problème. En tout cas si toi tu as trouvé une solution, Jack doit pouvoir en faire de même sur Panoramic. Car c'est vrai que dans l'état actuel de la fonction MAIN_MENU_POP n'est pas très pratique. Mais c'est une objet récent et Jack le fera sûrement évoluer... Un grand merci Klaus ! | |
|
| |
Klaus
Nombre de messages : 12331 Age : 75 Localisation : Ile de France Date d'inscription : 29/12/2009
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 10:22 | |
| Bon, dans ce cas, voici comment j'ai codé cela: - Code:
-
... type Klaus = class public class procedure OnPopupMenu(Sender: TObject); end;
implementation
{ Cet routine évènement peut être appelée par un TPopupMenu juste avant son affichage à l'écran. La propriété TAG est utilisée pour mémoriser le handle d'un objet sur lequel de TPopupMenu est autorisé. Si TAG=0 ==> toujours afficher TPopupMenu Si TAG=-1 ==> jamais afficher le TPopupMenu Si TAG=handle ==> afficher le TPopupMenu uniquement si le curseur est sur cet objet } class procedure Klaus.OnPopupMenu(Sender: TObject); var aName: array [0..255] of Char; hnd: HWND; pt: TPoint; begin GetCursorPos(Pt); hnd := WindowFromPoint(Pt); GetClassName(hnd, aName, 256); if TPopupMenu(Sender).Tag<>0 then begin if TPopupMenu(Sender).Tag<>hnd then begin SendMessage(TPopupMenu(Sender).WindowHandle, WM_CANCELMODE, 0, 0 ); keybd_event( VK_ESCAPE, Mapvirtualkey( VK_ESCAPE, 0 ), 0, 0); keybd_event( VK_ESCAPE, Mapvirtualkey( VK_ESCAPE, 0 ),KEYEVENTF_KEYUP, 0); end; end; end;
// paramétrer le fonctionnement d'un TPopupMenu de Panoramic function PopupMenuTarget(Popup: TControl; target: HWND): integer; stdcall; export; var oldaddress: integer; begin result := -1; try TPopupMenu(Popup).OnPopup := Klaus.OnPopupMenu; TPopupMenu(Popup).Tag := target; result := 0; except end; end; exports PopupMenuTarget; L'idée, c'est de mémoriser dans le ménu PopUp le handle de l'objet sur lequel il est autorisé. Et avant chaque apparition,, on vérifie si le menu est autorisé ou pas, et éventuellement on lui balance un ESCAPE pour le fermer aussitôt. | |
|
| |
silverman
Nombre de messages : 970 Age : 52 Localisation : Picardie Date d'inscription : 18/03/2015
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 11:46 | |
| @minibug Afin de ne pas polluer cette demande d'amélioration, j'ai posté une possible solution iciJ'ai fait aussi une autre demande pour cet objet il y a qq temps déjà, là | |
|
| |
Minibug
Nombre de messages : 4570 Age : 58 Localisation : Vienne (86) Date d'inscription : 09/02/2012
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP Sam 15 Juin 2019 - 12:57 | |
| Merci Silverman. Je t'ai répondu sur l'autre post ! | |
|
| |
Contenu sponsorisé
| Sujet: Re: Nouvelles commandes pour le MAIN_MENU_POP | |
| |
|
| |
| Nouvelles commandes pour le MAIN_MENU_POP | |
|