2010-07-14 15 views
1

Je développe une application dans Cocoa qui permet aux utilisateurs de dessiner sur n'importe quelle fenêtre dans OS X. Les dessins se déplacent avec la fenêtre correspondante lorsqu'ils sont déplacés sur l'écran. Pour compléter ce lien entre les dessins et les fenêtres (et leur contenu) ci-dessous, je voudrais attraper des événements de défilement de la fenêtre afin de réagir sur le positionnement/la visibilité des dessins.Toute possibilité d'obtenir une notification si une autre application reçoit un événement de défilement?

Un exemple:

L'utilisateur ouvre Safari et navigue sur le web. Sur un site Web spécifique, il trace un cercle autour d'un lien et prend des notes écrites à la main (tout cela est considéré comme un dessin, entré par une tablette à stylet). Ensuite, il déplace la fenêtre, les dessins sont également déplacés afin qu'ils restent en haut du lien sur le site. Puis il/elle commence à faire défiler le site Web et l'emplacement du lien change (se déplace jusqu'à ce qu'il soit en dehors de la fenêtre d'affichage).

Maintenant, je voudrais attraper cet événement et également déplacer le calque avec les dessins pour les garder au-dessus du lien. Lorsque le lien n'est plus visible, j'éteins la visibilité du dessin et le rallume lorsque le défilement ramène le lien dans la fenêtre d'affichage. Je sais que c'est une tâche assez difficile et pouvoir intercepter de tels événements à partir d'une autre application peut aussi être considéré comme un défaut de sécurité du système d'exploitation, mais peut-être quelqu'un est-il assez bon pour me donner un indice ...

Les classes Cocoa Accessibility peuvent être utiles mais jusqu'à présent je n'ai pas trouvé la solution.

Merci pour votre aide.

Oh, et si ce n'est pas difficile à vous, peut-être vous pouvez me dire comment être averti lorsque les commutateurs Safari onglets;)

kkthxbai

Répondre

2

Je ne sais pas si vous pouvez surveiller les événements de défilement. Cependant, il est beaucoup plus facile de surveiller la position du lien avec l'API Accessibility. Il suffit de maintenir une référence à ce lien et constamment l'interroger pour sa position, si la position change, vous savez quoi faire.

Vous pouvez également essayer d'utiliser AXObserverAddNotification, mais pour autant que je sache, il n'y a aucune notification que vous pouvez surveiller pour les changements de position.

Si vous ne l'avez pas encore découvert, l'inspecteur de l'accessibilité peut vous aider à identifier les éléments que vous pouvez obtenir à l'aide de l'API Accessibility et le navigateur d'interface utilisateur de pfiddlesoft vous permet d'enregistrer des notifications.