Changer de first responder en déplaçant la souris
Arty
Membre
Bonjour,
j'ai un problème un peu particulier, et j'espère que vous allez pouvoir m'aider. J'ai une vue principale dans mon application qui est le first responder et qui le reste quoi qu'il arrive (autrement dit elle implémente
Je fais ça parce que je veux que ma vue intercepte tous les événements (clavier, molette de souris, etc). Ca marchait bien au début parce que je n'avais que cette vue 8--). Mais au fure et à mesure j'ai eu besoin de rajouter des fenêtres flotantes qui contiennent des éléments d'interface, et en particulier j'ai une NSScrollView. Le problème, c'est que comme ma vue reste first responder tout le temps, la fenêtre flottante ne devient jamais la key window (ou la main?), et du coup un certain nombre de choses ne fonctionnent pas correctement dans ma scroll view. En particulier par moyen de faire défiler les lignes avec les flèches haut/bas ou la molette de la souris (c'est la vue qui reçoit les NSEvent concernés)
Je me demandais donc s'il était possible de rendre ma fenêtre flottante first responder uniquement quand la souris est au-dessus (du coup je peux utiliser la molette et le clavier), et quand la souris sors de la fenêtre c'est la vue principale qui redevient first responder! Vous pensez que ça peut le faire? ??? Il me semble que le Terminal propose ça: suivant au-dessus de quelle fenêtre est la souris, c'est une des fenêtres qui est active.
Merci d'avance,
-- Arthur;
j'ai un problème un peu particulier, et j'espère que vous allez pouvoir m'aider. J'ai une vue principale dans mon application qui est le first responder et qui le reste quoi qu'il arrive (autrement dit elle implémente
- (BOOL)resignFirstResponder<br />{<br /> return NO;<br />}
Je fais ça parce que je veux que ma vue intercepte tous les événements (clavier, molette de souris, etc). Ca marchait bien au début parce que je n'avais que cette vue 8--). Mais au fure et à mesure j'ai eu besoin de rajouter des fenêtres flotantes qui contiennent des éléments d'interface, et en particulier j'ai une NSScrollView. Le problème, c'est que comme ma vue reste first responder tout le temps, la fenêtre flottante ne devient jamais la key window (ou la main?), et du coup un certain nombre de choses ne fonctionnent pas correctement dans ma scroll view. En particulier par moyen de faire défiler les lignes avec les flèches haut/bas ou la molette de la souris (c'est la vue qui reçoit les NSEvent concernés)
Je me demandais donc s'il était possible de rendre ma fenêtre flottante first responder uniquement quand la souris est au-dessus (du coup je peux utiliser la molette et le clavier), et quand la souris sors de la fenêtre c'est la vue principale qui redevient first responder! Vous pensez que ça peut le faire? ??? Il me semble que le Terminal propose ça: suivant au-dessus de quelle fenêtre est la souris, c'est une des fenêtres qui est active.
Merci d'avance,
-- Arthur;
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Et puis bienvenue sur OC ! Es tu au courant de ton devoir de nouveau ?? ???
Salut Arthur! Alors les US?
Merci pour le lien. Je vais lire ce post avec attention!
Je dois offrire une tournée générale, c'est ça??? Aller... à la bonne vôtre!!!
:kicking: :kicking:
:kicking: Woooohoooo
Salut Mala!!
Les US c'était génial! San Francisco est une super belle ville... Je regrette pas le moins du monde de pas m'être inscrit à la WWDC et d'avoir visiter la ville pendant une semaine à la place En plus la conf où j'étais la semaine d'avant était super intéressante 8--)
Bon et sinon ça avance MadeWithBoxes???
Pour ce que tu veux faire, il est plus simple de créer une sous-classe à la fenêtre contenant ton NSView, et de surcharger la méthode sendEvent:. Ainsi, tu peux intercepter tous les événements appartenant à cette fenêtre avant qu'ils ne soient dispatchés aux différents NSViews.
Ainsi, tu n'auras plus de problème de key-windows, et de plus, tu seras sûr de recevoir les événements, quelque soit le NSView qui a le focus dans la fenêtre.
.
Bein pendant que tu prenais des vacances, d'autres continuaient à bosser. :kicking:
Ca avance mais c'est pas encore terminé. Je vais essayé de vous faire un petit topo d'ici quelques jours.