Retour au sommaire

 

La fonction FocusChangedEvent

 

 

 

Table des matières

  1. Rappel de la définition d’une fonction évènementielle ;
  2.  Présentation ;
  3.  Un exemple

3.1        Introduction ;

3.2         Le CONTROL ID ;

3.3         Les fonctions GetControlID & GetControlNam ;

3.4         Le mode Home Row ;

3.5         Le code.

 

Rappel de la définition d’une fonction évènementielle

 

Le déclenchement de l’exécution d’une fonction évènementielle n’est pas réalisé par le programmeur.

En effet, habituellement, les fonctions classiques sont exécutées lorsque leur nom est écrit dans un script ou dans une autre fonction, cette technique est d’ailleurs appelé « appel de fonction ».

La fonction évènementielle, quant à elle, est associée à un évènement, elle est exécutée à chaque fois que l’évènement qui lui est associé survient.

Si une fonction évènementielle contient des paramètres, ces paramètres seront automatiquement renseignés par le programme…

 

Présentation

 

La fonction « FocusChangedEvent » est une fonction de type « évènementielle », elle est automatiquement exécutée à chaque fois qu’il y a une nouvelle prise de focus dans un contrôle.

Une prise de focus a généralement lieue lorsqu’une nouvelle fenêtre apparaît à l’écran, ou lorsque l’utilisateur se déplace dans une fenêtre à partir d’un raccourci clavier ou bien sûr, avec TAB et MAJ +TAB.

 

Par exemple, dans un explorateur de documents, si vous êtes sur le bouton « Annuler » et que vous faites tabulation, vous devriez atterrir sur le bouton « Enregistrer ».

Analyse de la situation :

  1. Le bouton « Annuler » perd le focus ;
  2.  Le bouton « Enregistrer » prend le focus.

 

Le focus correspond donc au curseur PC qui est piloté par le clavier…

 

La syntaxe :

Void Function FocusChangedEvent (handle FocusWindow, handle PrevWindow)

; Ici, le code du traitement de la fonction

EndFunction

 

La description :

Void signifie que cette fonction ne retourne aucune donnée.

Les variables FocusWindow et PrevWindow sont des variables intégrées qui contiennent automatiquement les poignées suivantes :

PrevWindow contient la poignée du contrôle précédent.

FocusWindow contient la poignée du contrôle courant.

 

Une « Poignée » est l’identifiant d’un contrôle, cette donnée est exploitée par le système.

 

Vous pouvez donc exploiter ces deux variables à l’intérieure de la fonction pour déterminer le contrôle de la fenêtre qui contient le focus.

 

Mais attention, lorsque vous créez une fonction « FocusChangedEvent » dans le fichier source d’une application, la fonction du même nom, située dans le fichier « DEFAULT.JSS », ne sera pas exécutée.

 

Si seule la perte de la lecture automatique du contrôle qui vient de prendre le focus vous manque, vous avez toujours la possibilité d’utiliser un script de lecture du contrôle courant à l’intérieure de la fonction !

PerformScript SayWindowPromptAndText();

(Il s’agit du script qui est exécuté lorsque vous réalisez le raccourci clavier Insère +tabulation.)

 

Toutefois, il existe une seconde astuce bien plus « classe » !

En effet, dans une fonction évènementielle, il suffit de réaliser un appel de la fonction d’elle-même, pour que l’exécution de la fonction évènementielle du fichier default soit déclenchée.

Il n’y a donc aucune notion de récursivité…

Ainsi, vous pouvez considérer que le traitement prévu pour cette fonction dans le fichier default sera quand même pris en compte… Il vous suffira de rajouter votre propre code en guise de traitement complémentaire.

 

Par exemple :

Void Function FocusChangedEvent (handle FocusWindow, handle PrevWindow)

; Exécution de la fonction du fichier default

FocusChangedEvent (FocusWindow,PrevWindow)

; Votre traitement

Bla bla bla, bla bla bla…

EndFunction

 


Un exemple :

 

Introduction

 

Nous allons réaliser un exercice qui permet de gagner du temps dans la boîte de dialogue « Enregistrer sous » du bloc notes.

Dans cet explorateur de documents, 2 boutons de type menu sont situés entre la zone de liste déroulante intitulée « Enregistrer dans », et la liste qui lui est associée, située 3 tabulations plus à droite.

Ce que je propose ici, c’est de créer une fonction « FocusChangedEvent » dans le fichier scripts du bloc notes.

Pourquoi ?

Eh bien, lorsqu’il y aura prise de focus sur le premier bouton menu, on devra expédier le focus sur la liste située 2 tabulation à droite. Et inversement, lorsqu’il y aura prise de focus sur le deuxième bouton menu, il faudra expédier le focus sur la zone de liste déroulante « Enregistrer dans », qui est située 2 MAJ +TAB à gauche.

Ainsi, en circulant dans cette boîte de dialogue avec TAB et MAJ +TAB, on ne sera plus encombré par ces 2 boutons qui ne servent à rien…

 

Cependant, pour connaître le contrôle qui a la prise de focus, le traitement de la fonction ne va pas considérer la poignée, mais plutôt le contrôle ID dont voici quelques explications.

 

La propriété « contrôle ID » d’un « « contrôle » correspond à un identifiant numérique défini par JAWS à l’ouverture de la fenêtre réelle.

Vous souhaitez en savoir davantage ?

Le CONTROL ID

 

Une fenêtre est composée d’un ensemble de commandes appelées « contrôle ».

Les « contrôles » sont hiérarchiquement organisés présentant une arborescence dont l’objet principal est la fenêtre réelle.

 

Obtenir la propriété « CONTROL ID » d’un contrôle permet, entre autre, de pouvoir atteindre rapidement le contrôle à partir de la fonction de déplacement « SetFocus ».

 

Toutefois, l’exploitation de la propriété « CONTROL ID » dans le traitement de la fonction évènementielle « FocusChangedEvent » apporte des avantages incontestables.

 

Vous pouvez par exemple prévoir un ensemble de traitements selon l’endroit de la fenêtre qui vient de prendre le focus…

 

Mais avant tout, comment connaître la propriété « CTRL ID » d’un contrôle ?

 

Plusieurs solutions.

 

Les fonctions GetControlID & GetControlName

 

La première solution, c’est d’utiliser des fonctions qui retournent les propriétés demandées.

 

La fonction « GetControlID » retourne un « entier » qui correspond à la propriété « CONTROL ID ».

Comme la fonction « GetControlID » nécessite un paramètre qui spécifie la « poignée » du contrôle pour lequel nous attendons la propriété « CONTROL ID », nous devons impérativement lui passer en paramètre la fonction « GetFocus », qui, justement, et ça tombe plutôt bien, retourne la « poignée » du contrôle courant, celui qui a la prise de focus.

 

La « poignée », quant à elle, est l’identifiant utilisé par le système d’exploitation, c’est votre WINDOWS. Au fait, une poignée, en anglais c’est « Handle ».

 

Voici donc une ligne de code qui permet d’obtenir et de lire la propriété « CONTROL ID » du contrôle courant, celui qui a la prise de focus :

SayInteger (GetControlID (GetFocus()))

 

La fonction « GetControlName » quant à elle, retourne un « String » qui correspond au nom du contrôle courant et ne nécessite aucun paramètre.

SayString (GetControlName ())

 


Le mode HOME ROW

 

Pour obtenir un grand nombre d’informations portant sur les fenêtres et les contrôles, vous pouvez utiliser votre clavier dans un mode de circulation appelé le mode HOME ROW.

Durant un certain nombre de versions de JAWS, le raccourci clavierInsère +Espace activait ou désactiver ce mode.

Mais depuis quelques versions, le raccourci clavier a changé et est devenu très difficile à mémoriser, ou tout simplement fastidieux à réaliser…

C’est la raison pour laquelle je vous propose de modifier le raccourci depuis le gestionnaire de clavier !

1.Affichez la liste des utilitaires de JAWS en réalisant le raccourci clavier Insère +F2 ;

2.Dans la liste des utilitaires, placez-vous sur « Gestionnaire de clavier » et pressez la touche « Entrée » ;

3.Vous arrivez dans la liste des fichiers scriptés, positionnez-vous sur « Default » et pressez la touche « tabulation » ;

4.Vous arrivez dans la liste des scripts du fichier « default », recherchez le script « HomeRowToggle » ;

5.Validez la commande du menu déroulant : ALT, Action, Changer le raccourci.

6.Une boîte de dialogue apparaît à l’écran, réalisez le nouveau raccourci clavier, je vous propose WINDOWS +Espace ;

7.Faites tabulation jusqu’au bouton « Ok » et pressez la touche « Entrée » ;

8.Une confirmation vous est alors demandée, vous êtes sur le bouton « Ok », pressez la touche « Entrée » ;

9.Vous êtes de retour dans le « gestionnaire de clavier », quittez-le en réalisant le raccourci clavier ALT +F4.

 

Désormais, pour activer le mode Home Row, réalisez le raccourci clavier WINDOWS +Espace, puis, pour le désactiver, réalisez une nouvelle fois ce raccourci.

 

Dès lors que vous avez activez ce mode, vous pouvez vous déplacer à travers les fenêtres et les contrôles de votre applications en utilisant les touches de circulations suivantes :

·  Tabulation, fenêtre suivante à un même niveau hiérarchique ;

·  MAJ +TAB, fenêtre précédente à un même niveau hiérarchique ;

·  F2, Première fenêtre enfant ;

·  MAJ +F2, fenêtre parent.

 

En circulant dans l’arborescence des fenêtres, au lieu d’entendre les informations des fenêtres de façon ordinaire, vous pouvez sélectionner vous-mêmes les informations que vous souhaitez entendre, par exemple, la classe, le type, le sous type etc.

Le type de l’information à entendre sera appelé, le mode OUTPUT.

 

On sélectionne le mode OUTPUT que l’on désire entendre en pressant autant de fois que nécessaire la touche de fonction F3.

Ensuite, vous pouvez vous déplacer. Par exemple, si vous souhaitez entendre les classes de fenêtres dans votre boîte de dialogue « Police » à l’intérieur de WORD, veuillez procéder comme suit :

 

Ouvrez WORD, activez le mode HOME ROW en réalisant le raccourci clavier WINDOWS +Espace, puis activez la fenêtre « Police » en réalisant le raccourci clavier CTRL +D.

Choisissez le mode OUTPUT « Classe » en pressant autant de fois que nécessaire la touche F3.

D’ailleurs, vous pouvez sélectionner le mode OUTPUT en marche arrière en réalisant le raccourci clavier MAJ +F3.

Maintenant, déplacez-vous avec TAB et MAJ +TAB.

A chaque fois que vous arriverez sur une fenêtre, JAWS ne vous dira plus le nom et l’état de cette dernière, mais sa classe.

Vous pouvez faire répéter cette information en pressant la touche F1. Pour que JAWS vous épelle cette information, pressez 2 fois rapidement la touche F1 le mode épellation ne fonctionne pas sur les informations de type intégrale.)

 

Maintenant, nous allons réaliser un script qui nous permet d’atteindre le bouton « Ouvrir » de la boîte de dialogue « Ouvrir » du bloc notes.

Lancez le bloc notes.

Activez la boîte de dialogue « Ouvrir » en réalisant le raccourci clavier CTRL +O.

Faites tabulation jusqu’au bouton intitulé « Ouvrir ».

Activez le mode Home Row en réalisant le raccourci clavier WINDOWS +Espace.

Pour obtenir le Contrôle ID de la fenêtre courante, donc du bouton, choisissez le mode OUTPUT intitulé « Configuration » avec la touche F3.

 Ensuite, écoutez le contrôle ID en pressant la touche F1.

Normalement, le contrôle ID est 1.

Désactivez le mode Home Row en réalisant une nouvelle fois le raccourci clavier WINDOWS +Espace.

Remarque :

·  Vous auriez pu obtenir cette information en faisant afficher une fenêtre d’informations de la fenêtre courante, en réalisant le raccourci clavier Insère CTRL +F1.


Le code

 

Bon, pour commencer, quelles données nous faut-il connaître ?

C’est simple !

  1. Le CONTROL ID du premier bouton ;
  2.  Le CONTROL ID du second bouton.

 

Pour le premier, c’est 1088, et pour le second, c’et 1184.

 

Void Function FocusChangedEvent (handle FocusWindow, handle PrevWindow)

; Vérifie si la prise de focus a eu lieu sur l'un des 2 boutons

If GetControlID (GetFocus ()) == 1184 Then

 ; Atteindre la zone de liste déroulante "Enregistrer sous"

 {SHIFT+TAB}

 {SHIFT+TAB}

EndIf

If GetControlID (GetFocus ()) == 1088 Then

 ; Atteindre le contenu du dossier ouvert

 {TAB}

{TAB}

EndIf

; Exécution de la fonction évènementielle FocusChangedEvent du fichier default

FocusChangedEvent (FocusWindow,PrevWindow)

 

EndFunction

 

Philippe BOULANGER