salut voici mon explication, peut être que Pierre te l'as envoyé en
perso : si je ne fais pas attention, je répond toujours en perso .
# on vérifie que la fenêtre a pour classe ThunderRT6TextBox et que son
ControlID est égal à 9.
if fo.windowClassName == "ThunderRT6TextBox" and
fo.windowControlID == 9 :
on envoie la touche alt +c, mais on aurait pu écrire
gesture.fromName("Alt+C").send()
keyboardHandler.KeyboardInputGesture.fromName("alt+c").send()
NVDA prononce la valeur de l'bjet focus (fo)
ui.message(fo.value)
else : # cas très peu probable
# on envoie la touche qui a appelé ce script
gesture.send()
Le 30/05/2023 à 14:20, Nael Sayegh a écrit :
Bonjour Pierre-Louis,
Merci beaucoup pour votre rééponse.
Je ne comprends cette partie du code:
if fo.windowClassName == "ThunderRT6TextBox" and fo.windowControlID == 9 :
keyboardHandler.KeyboardInputGesture.fromName("alt+c").send()
ui.message(fo.value)
else : # cas très peu probable
gesture.send()
Pourriez-vous me l'expliquer plus en détail?
Cordialement
Monsieur Nael Sayegh
https://www.nael-accessvision.com/
Chaîne youtube: nael accessvision
https://www.youtube.com/c/naelaccessvision
Le 30/05/2023 à 11:46, Pierre-Louis R@RPTools a écrit :
Bonjour Nael et tous,
Pour une extension qui ne doit scripter qu'un seul contrôle, je trouve la solution de Cyrille et Yannick un peu lourde.
Mais il est bon de savoir l'utiliser pour de plus grosses applications.
J'ai modifié ton script result comme suit :
en début de fichier, eccrire :
import controlTypes
et dans ta classe AppModule, coller la méthode ci-dessous :
@scriptHandler.script(gesture="kb:enter", description="Calsci: Donne le résultat d'un
calcul", category="Calsci")
def script_Enter(self, gesture):
fo = api.getFocusObject()
# si le focus n'est pas sur une zone d'édition
if hasattr(fo, "role") and fo.role !=
controlTypes.Role.EDITABLETEXT :
return gesture.send() # on doit renvoyer le geste
if fo.windowClassName == "ThunderRT6TextBox" and
fo.windowControlID == 9 :
keyboardHandler.KeyboardInputGesture.fromName("alt+c").send()
ui.message(fo.value)
else : # cas très peu probable
gesture.send()
J'ai testé et cela fonctionne.
Cordialement, Pierre-Louis
Le 30-05-23 à 10:52, yannick a écrit :
salut comme l'a dit Cyril, tu devras utiliser la méthode chooseNVDAObjectOverlayClasses pour surcharger une classe.
voici un exemple joint à ce mail et collé ci-dessous.
ça manque clairement d'explication, mais dit nous les points qui te posent problème.
import appModuleHandler
import controlTypes
from NVDAObjects.IAccessible import IAccessible
import scriptHandler
import ui
class AppModule(appModuleHandler.AppModule):
def chooseNVDAObjectOverlayClasses(self, obj, clsList):
if obj.role == controlTypes.Role.EDITABLETEXT:
clsList.insert(0, Edit)
class Edit(IAccessible):
@scriptHandler.script(gesture="kb:enter")
def script_test(self, gesture):
ui.message("oui")
Le 30/05/2023 à 09:15, Nael Sayegh a écrit :
Bonjour à tous,
Pour mon extension Calsci, je cherche à faire appliquer le raccourci entré seulement sur la zone d'édition.
Je pense que pour faire ça, je dois indiquer dans mon code un objet particulier pour que le raccourci s'active.
Comment peut-on utiliser les objets de NVDA en python?
Merci d'avance pour vos réponses.