2010-05-04 11 views

Répondre

1

Je ne sais pas comment faire, mais le composant TAdvStickyPopupMenu (logiciel TMS) peut le faire.

+0

La fenêtre surgit d'une icône de la barre d'état. Je ne sais pas comment utiliser le TAdvStickyPopupMenu avec le composant de plateau – user332443

+0

Voici comment cela fonctionne: d'abord vous devez payer une petite fortune pour le logiciel TMS. Ce que vous ne voulez probablement pas faire. Fin de l'histoire. – stevenvh

2

Facile un, désactiver l'élément. < g>


Blague à part, pas une tâche facile. Si vous voulez que le menu contextuel agisse comme un formulaire le plus haut (c'est-à-dire que vous pouvez interagir avec les éléments et les contrôles de votre formulaire sans désactiver le menu), oubliez-le, cela ne peut pas être fait menu. Mais si votre exigence est exactement comme indiqué dans votre question (cliquez sur un élément, et le menu n'est pas fermé - cliquez à l'extérieur et il est fermé), avec un peu de travail, ce serait possible.


Votre objectif serait de subclass la fenêtre dans laquelle votre sous-menu se situera pour remplacer certains messages. Tout d'abord, dérivez une nouvelle classe à partir de 'TPopupList' et remplacez-la par 'WndProc'. Voici un example faisant ceci. Si vous avez l'intention d'empêcher la fermeture du menu en sélectionnant les éléments racine, dans WndProc de PopupList, vous manipulez WM_ENTERIDLE et obtenez le handle de fenêtre du menu contextuel à partir de lParam du message et sous-classez la fenêtre du menu contextuel. Si vous avez seulement l'intention d'empêcher la fermeture du menu en sélectionnant les éléments du sous-menu, alors dans WndProc de PopupList vous regarderez les messages WM_INITMENUPOPUP où wParam n'est "pas" le handle du PopupMenu lui-même, cela signifierait un sous-menu est sur le point d'être montré. Seulement alors vous manipulez WM_ENTERIDLE et obtenez le handle de fenêtre dans lequel réside le sous-menu et sous-classez cette fenêtre. Après le sous-classement de la fenêtre dans laquelle se trouve le menu contextuel ou le sous-menu contextuel, vous interceptez un message MN_BUTTONDOWN non documenté ($ 01ED) et évitez toute autre manipulation (n'appelez pas la procédure de fenêtre d'origine). Probablement vous voudriez également empêcher la fermeture du menu avec le clavier; vous surveilleriez les messages WM_KEYDOWN (Entrée) et WM_CHAR (accélérateur).

Eh bien, il faudrait un peu de travail, je suppose.

Questions connexes