10
votes

Comment montrer une fenêtre qui agit comme un menu contextuel?

Lorsque la fenêtre A est montrée, je souhaite montrer une autre fenêtre de popup non-modale B, mais:

  1. Je ne veux pas que la fenêtre A soit inactive en raison de la fenêtre B devient la fenêtre avant;
  2. Je veux que lorsque la fenêtre B soit concentrée, je dépose une commande de boîte déroulante sur la fenêtre A avec un seul clic (généralement, vous devez cliquer deux fois, un pour déplacer la mise au point sur la fenêtre A et la seconde pour enlever la boîte déroulante );

    Comme vous pouvez le constater, la fenêtre B que je veux, c'est quelque chose comme une fenêtre contextuelle plus utilisable comme un menu contextuel (qui est moins obstacle à une fenêtre générale non modale lorsque vous souhaitez que vous soyez à l'écart en cliquant sur n'importe quel autre partie de la fenêtre mère).

    suis-je clair sur ma question? Merci.


0 commentaires

6 Réponses :


0
votes

Je peux l'utiliser pour ne pas perdre la mise au point: xxx

la deuxième partie que je n'ai pas très bien compris.


0 commentaires

2
votes

Afin d'empêcher une fenêtre de se concentrer sur la mise au point, vous devez spécifier le style ws_ex_noactivate style de fenêtre étendu (Windows 2000 et UP) ou gérer wm_mouseactivate et retourner et retourner Ma_noactivate .


1 commentaires

Merci Koro, je veux que la seconde se concentre, mais ne rend pas la barre de titre du formulaire de l'appelant devient inactive.




8
votes

3 commentaires

Sur la touche1Cliquez, je ne crée pas le formulaire, il suffit de le montrer (mais attribuez une variable de fermeture). Pourquoi je reçois une erreur AV après le deuxième clic? (Si je supprimai la procédure Wmactivate de Tform2, l'erreur AV disparaîtra)


@Sam - Vous accédez probablement au formulaire après le relâcher. Je ne peux pas dire à coup sûr ...


@Sertatac Akyuz Je ne le libère pas! Je ne l'ai pas créé, il suffit d'l'afficher.



-1
votes

J'ai trouvé un qui fait presque exactement ce que je veux: Tadvstickypopupmenu


6 commentaires

Je pense que cela ne répond pas vraiment à la question. Souhaitez-vous élaborer un peu comment cela atteint-il le "1" et "2" dans la question.


@Sertatac, peut-être que c'est difficile pour moi d'expliquer, mais je vais essayer;) D'abord, je peux utiliser n'importe quel contrôle comprenant un TPanel ou un TPANEL dans le Tadvstickypopupmenu, afin que je puisse l'utiliser comme conteneur contextuel pour mon TPANel (simuler une forme ), et cliquer sur le TPanel ne masque pas le menu, je peux donc simuler un formulaire de popup. Comment cette approche atteint-elle le "1" et "2" dans la question?


Lorsque vous contemplez le menu (avec un formulaire simulé dessus), vous vous sentirez Vous avez toujours envie de travailler sur la forme parent , cela signifie qu'il y a aucune commutation nécessaire entre la forme contextuelle et la forme parent. En changeant, je veux dire que le clic de souris supplémentaire doit concentrer le formulaire avant de pouvoir fonctionner sur les commandes sur le formulaire. Si vous le comparez à la liste déroulante Dropdownform et à la liste déroulante SPTBX mentionnée ci-dessus, vous trouverez la différence. Et si vous utilisez Gmail, essayez les étiquettes Pull Down Form formulaire, vous comprendrez ce que je veux dire.


Merci pour les explications. En regardant rapidement Tadvstickypopupmenu, je pensais que vous avez changé vos besoins en route et je suis allé pour une route différente, tandis que ma réponse ( Stackoverflow.com/Questtions/2178494/2192590#2192590 ) a effectivement rempli l'exigence de la question. Eh bien, peut-être que j'ai mal compris la question en premier lieu, donc si vous êtes en mesure de Modifier votre réponse de toute façon, permettez-moi de vous permettre d'annuler ma baisse. Merci encore.


Bonjour Sertac, je pense qu'en premier lieu, je n'ai pas bien décrit ma question, je pensais remplir mes besoins que je dois utiliser les formulaires contextuels, alors j'ai directement posé directement la question initiale, mais les explications en fait sont les exigences ultimes. .. Je peux sélectionner votre réponse comme réponse, mais votre approche empêchera-t-elle que le formulaire contextuel d'obtenir une entrée utilisateur? Vous savez que j'ai besoin d'utiliser un contrôle TList sur le formulaire contextuel pour permettre aux utilisateurs de choisir une valeur.


Soit cela fonctionne comme la façon dont vous vouliez ou non est pour vous de tester et de décider. Ensuite, vous pouvez --edit votre réponse afin que je puisse annuler mon vote en direct (FI Ajouter "Plus de détails dans les commentaires"), --Si la réponse mentionnée satisfait que vos besoins l'acceptent, ou -. il est. :-)



0
votes

J'ai trouvé la solution moi-même ici. Merci à tous!:

Gardez la fenêtre inactive en apparence même lorsqu'il est activé < / p>


0 commentaires