Auteur de questions
Plus d'évènements clavier sur une fenêtre

Discussion générale
-
Bonjour,
C'est un peu compliqué, mais je vais essayer d'expliquer.
J'utilise une form sans bordure. Sur cette form, il un pseudo entête, un menu et un panel accueillant de la vidéo. Par dessus cette form, il existe deux autres forms filles afin d'afficher par dessus la vidéo, le nom de la video et le volume sonore.
Cela donne ceci :
La form principale a bien la propriété KeyPreview à true, mais aucun événements de clavier n'est déclenchés.
Avec Spy++, je vois que la form fenêtre principale ou les fenêtres filles ne reçoivent pas de message lors de l'appui du clavier. Seule les trois labels "réduire"("_"), "agrandir(le carré) et "fermer"("X") recoivent des des WM_GETTEXT. Ces trois labels sont dans un panel qui elle-même est dans un panel
J'ai déjà essayé plusieurs solutions(Message
Filter,ProcessCmdFilter,...).
Que puis faire pour que cela marche ?
NB : On évitera la solution des menutoolstrip cachés avec des raccourcis clavier
- Modifié rvs7557 samedi 25 mai 2013 11:36
- Type modifié Aurel Bera mercredi 19 juin 2013 08:32 Discussion
samedi 25 mai 2013 11:32
Toutes les réponses
-
Bonjour,
Quand vous dite une Form qui contient d'autres Form filles, vous parlez des fenêtres parent/enfant MDI ?
Si oui, avez-vous essayé de testé et de supprimer le contrôle qui contient la vidéo ? Est-ce que dans ce cas le message de la form principale est bien intercepté ?
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0samedi 25 mai 2013 13:34Modérateur -
Non, les forms fille ne sont pas MDI.
Elles correspondent au volume en bas et au nom en haut du panel contenant la vidéo sur la capture d'écran.
Elles sont "Layered" et "Transparent".
Elles sont créées dans la form principal avec la propriété Owner à this.
samedi 25 mai 2013 15:32 -
Bonjour,
Les événements clavier ne sont pas déclenchées sur la fenêtre parent (Owner) qui contient les fenêtres filles si la fenêtre fille a le focus.
Si vous souhaitez propager l'événement, interceptez l'événement KeyXXXXXXX dans vos fenêtres filles et appelez une méthode dans la fenêtre Owner qui déclenche à nouveau l'événement dans la fenêtre parent.
Pour appelez une méthode dans la fenêtre Owner d'une fenêtre fille :
private void FormFille_KeyPress(object sender, KeyPressEventArgs e) { ((FenêtreMaître)this.Owner).DéclencherKeyPress(e); }
Dans la FenêtreMaître :
public void DéclencherKeyPress(KeyPressEventArgs e) { this.OnKeyPress(e); }
En espérant que cela répond à votre besoin...
Cordialement
Gilles TOURREAU - MVP C#
Architecte logiciel/Consultant/Formateur Freelance
Blog : http://gilles.tourreau.fr
- MCPD : Enterprise Developper / Windows Developper 3.5 / ASP .NET 3.5/4.0
- MCITP : SQL Server 2008 Developper
- MCTS : ADO .NET 3.5 / SQL Server 2008 Developper / Windows Forms 3.5 / ASP .NET 3.5/4.0dimanche 26 mai 2013 21:57Modérateur -
Bonjour,
Est-ce que vous avez testé les solutions proposées ? Merci de partager avec nous les résultats, afin que d'autres personnes avec le même problème puissent profiter de cette solution.
Cordialement,
Aurel
lundi 27 mai 2013 07:52 -
Bonjour,
Pouvons-nous considérer que vous avez résolu votre problème avec les scénarios proposés ? Dans l'affirmative, pourriez-vous partager avec nous la solution, afin que d'autres personnes avec le même problème puissent profiter de cette solution ?
Désormais, nous marquons les solutions proposées. N'hésitez pas à revenir et supprimer la réponse marquée si la solution n’est pas correcte. Merci !
Cordialement,
mercredi 29 mai 2013 08:03 -
Je suis désolé de ne pas avoir pu répondre plus tôt, mais comme je le précise dans le premier poste:
"Avec Spy++, je vois que la form fenêtre principale ou les fenêtres filles ne reçoivent pas de message lors de l'appui du clavier".
J'avais déjà fait des test de propagation précédemment à la surveillance par Spy++.
De plus, les fenêtres filles sont censées être "transparent" au "Click" et au "KeyPress".
Cordialementvendredi 31 mai 2013 06:33 -
Bonjour
Quelle technologie utilisez-vous?
Je soupçonne que c'est C++ mais code manage ou non manage?
Aussi, vous utilisez des contrôles tiers?
Essayez quand-même la solution de Gilles TOURREAU d’intercepter l’OnKey au niveau de fenêtre fille (éventuellement avec un changement de transparence au niveau de Click et KeyPress).
Cordialement
- Modifié Aurel Bera vendredi 31 mai 2013 08:57
vendredi 31 mai 2013 08:57 -
Bonjour,
J'essaierais demain de retirer la "transparence" et de propager le KeyPress.
Pour répondre a ton soupçon, c'est en VB.NET.
J'ai traduit le code C# de ce billet. Mais cherchant un peu on peut voir que c'est déjà du C++ managé traduit en C# (ici). Donc vous avez en partie raison. J'ai juste changé la création du bitmap. A partir d'un fichier depuis le code original, en GDI+ dans mon code.
Le panel contenant la vidéo est un panel personnalisé afin de gérer en interne les évènement souris. Pour plus d'info, voir ma réponse sur CodeProject. Cela fonctionne parfaitement.
Cordialement,
Hervé.
- Modifié rvs7557 vendredi 31 mai 2013 18:17
vendredi 31 mai 2013 18:09 -
Bonjour
Avez-vous des nouvelles pour nous?
Merci
Cordialement,
mardi 4 juin 2013 07:40 -
Toujours rien.
J'ai même supprimé la création des fenêtres filles et je n'ai toujours rien !
Il n'y a que les labels qui sont dans la barre de titre qui reçoivent des messages lors de la frappe au clavier (test par Spy++).
Le menu reçoit bien le Alt-F4 que j'ai mis.
Les évènements souris fonctionne correctement sur la form.
Le keyPreview a bien été mis à true.
Je ne sais plus quoi faire :-(
mardi 4 juin 2013 14:46 -
Pouvez-vous nous faire un petit projet de teste?
Le minimum nécessaire, ajoutez une archive sur SkyDrive (même login que pour les forums).
Aurelmercredi 5 juin 2013 13:15