Événements

From Apache OpenOffice Wiki
Jump to: navigation, search
doc OOo


Book.png



Les boîtes de dialogue et formulaires de Apache OpenOffice sont basés sur un modèle de programmation orienté événement dans lequel vous pouvez assigner des gestionnaires d'événements aux éléments de contrôle. Un gestionnaire d'événement exécute une procédure prédéfinie lorsqu'une action spécifique se produit. Grâce à la gestion d'événements, vous pouvez également éditer des documents ou des bases de données ouvertes et accéder à d'autres éléments de contrôle.


Les éléments de contrôle de Apache OpenOffice reconnaissent divers types d'événements pouvant être déclenchés dans différentes situations. Ces types d'événements peuvent être répartis en quatre groupes :

  • Contrôle de la souris : événements correspondant à des actions effectuées à l'aide de la souris (des mouvements simples ou un clic à un emplacement particulier de l'écran, par exemple).
  • Contrôle du clavier : événements déclenchés par des séquences de touches.
  • Modification du focus : événements exécutés par Apache OpenOffice lorsque des éléments de contrôle sont activés ou désactivés.
  • Événements propres à l'élément de contrôle : événements liés à certains éléments de contrôle.

Lorsque vous utilisez des événements, assurez-vous de créer la boîte de dialogue associée dans l'environnement de développement Apache OpenOffice et qu'elle contient les éléments de contrôle ou documents nécessaires (si les événements s'appliquent à un formulaire).

Environnement de développement OpenOffice.org Basic

La figure ci-dessus présente l'environnement de développement Apache OpenOffice Basic avec une fenêtre de boîte de dialogue contenant deux zones de liste. Vous pouvez déplacer les données d'une liste à l'autre en utilisant les boutons entre les deux zones de liste.

Pour afficher la mise en page à l'écran, vous devez créer les procédures Apache OpenOffice Basic associées afin qu'elles puissent être appelées par les gestionnaires d'événements. Vous pouvez utiliser ces procédures dans tous les modules, mais il est préférable d'en limiter l'utilisation à deux modules. Pour simplifier la lecture du code, il est recommandé d'attribuer des noms significatifs à ces procédures. Le passage direct à une procédure générale du programme depuis une macro peut produire un code peu clair. Ainsi, afin de simplifier la maintenance et le dépannage du code, créez plutôt une autre procédure servant de point d'entrée pour la gestion d'événements, même si elle n'exécute qu'un seul appel vers la procédure cible.

Le code de l'exemple suivant déplace une entrée de la zone de liste de gauche vers celle de droite dans une boîte de dialogue.

Sub cmdSelect_Initiated
 
   Dim objList As Object
 
   lstEntries = Dlg.getControl("lstEntries")
   lstSelection = Dlg.getControl("lstSelection")
 
   If lstEntries.SelectedItem > 0 Then
     lstSelection.AddItem(lstEntries.SelectedItem, 0)
     lstEntries.removeItems(lstEntries.SelectItemPos, 1)
   Else
     Beep
   End If
 
End Sub

Si cette procédure a été créée dans Apache OpenOffice Basic, vous pouvez l'assigner à un événement requis à l'aide de la fenêtre des propriétés de l'éditeur de boîte de dialogue.

Boîte dialogue Assignation de macro

La boîte de dialogue d'assignation répertorie toutes les procédures de Apache OpenOffice Basic. Pour assigner une procédure à un événement, sélectionnez la procédure et cliquez sur Assigner.

Paramètres

L'occurrence d'un événement particulier ne suffit pas toujours pour obtenir une réponse appropriée. D'autres informations peuvent s'avérer nécessaires. Par exemple, pour traiter un clic de souris, vous aurez certainement besoin de connaître la position du curseur à l'écran lors de l'appui sur le bouton.

Dans Apache OpenOffice Basic, vous pouvez utiliser des paramètres d'objet pour fournir à une procédure des informations supplémentaires concernant un événement, par exemple :

Sub ProcessEvent(Event As Object)
 
End Sub

La structure et les propriétés de l'objet Event dépendent du type d'événement qui déclenche l'appel de procédure.

Quel que soit le type d'événement, tous les objets donnent accès à l'élément de contrôle correspondant et à son modèle. Il est possible d'atteindre l'élément de contrôle à l'aide de Event.Source et son modèle à l'aide de Event.Source.Model.

Vous pouvez utiliser ces propriétés pour déclencher un événement au sein d'un gestionnaire d'événements.

Événements de la souris

Apache OpenOffice Basic reconnaît les événements de souris suivants :

Mouse moved
l'utilisateur déplace la souris.
Mouse moved while key pressed
l'utilisateur déplace la souris tout en maintenant une touche enfoncée.
Mouse button pressed
l'utilisateur appuie sur un bouton de la souris.
Mouse button released
l'utilisateur relâche un bouton de la souris.
Mouse outside
l'utilisateur déplace la souris en dehors de la fenêtre active.

La structure des objets Event associés est définie dans la structure com.sun.star.awt.MouseEvent qui fournit les informations suivantes :

Buttons (short)
le bouton est enfoncé (une ou plusieurs constantes correspondant à com.sun.star.awt.MouseButton).
X (long)
coordonnée X de la souris, mesurée en pixels à partir de l'angle supérieur gauche de l'élément de contrôle.
Y (long)
coordonnée Y de la souris, mesurée en pixels à partir de l'angle supérieur gauche de l'élément de contrôle.
ClickCount (long)
nombre de clics associés à l'événement de la souris (si Apache OpenOffice peut répondre assez vite, ClickCount est également égal à 1 pour un double-clic, car un seul événement est déclenché).

Les constantes définies dans com.sun.star.awt.MouseButton pour les boutons de la souris sont les suivantes :

LEFT
bouton gauche de la souris.
RIGHT
bouton droit de la souris.
MIDDLE
bouton du milieu de la souris.

Le résultat de l'exemple suivant permet de déterminer la position de la souris, ainsi que le bouton de souris qui a été enfoncé :

Sub MouseUp(Event As Object)
 
   Dim Msg As String
 
   Msg = "Keys: "
   If Event.Buttons AND com.sun.star.awt.MouseButton.LEFT Then
     Msg = Msg & "LEFT "
   End If
 
   If Event.Buttons AND com.sun.star.awt.MouseButton.RIGHT Then
     Msg = Msg & "RIGHT "
   End If
 
   If Event.Buttons AND com.sun.star.awt.MouseButton.MIDDLE Then
     Msg = Msg & "MIDDLE "
   End If
 
   Msg = Msg & Chr(13) & "Position: "
   Msg = Msg & Event.X & "/" & Event.Y
   MsgBox Msg
 
End Sub
Documentation note.png Les événements VBA Click et Doubleclick ne sont pas disponibles dans Apache OpenOffice Basic. Vous pouvez utiliser l'événement Apache OpenOffice Basic MouseUp à la place de l'événement click et imiter l'événement Doubleclick en modifiant la logique de l'application.

Événements du clavier

Les événements de clavier suivants sont disponibles dans Apache OpenOffice Basic :

Key pressed
l'utilisateur appuie sur une touche.
Key released
l'utilisateur relâche une touche.

Les deux événements sont associés à des actions de touches logiques et non à des actions physiques. Si l'utilisateur appuie sur plusieurs touches afin d'obtenir un seul caractère (par exemple, pour ajouter un accent à un caractère), Apache OpenOffice Basic ne crée qu'un événement.

Une action unique sur une touche de modification, comme la touche MAJ ou ALT, ne crée pas d'événement indépendant.

Les informations relatives à une touche enfoncée sont indiquées par l'objet Event fourni par Apache OpenOffice Basic à la procédure pour la gestion des événements. Il contient les propriétés suivantes :

KeyCode (short)
code de la touche enfoncée (les valeurs par défaut correspondent à com.sun.star.awt.Key).
KeyChar (String)
caractère saisi (en tenant compte des touches de modification).

L'exemple suivant détermine à l'aide de la propriété KeyCode si l'utilisateur a appuyé sur la touche Entrée, sur la touche de tabulation ou sur l'une des autres touches de contrôle. Si l'utilisateur appuie sur l'une de ces touches, l'exemple retourne le nom de la touche ; dans le cas contraire, il retourne le caractère tapé :

Sub KeyPressed(Event As Object)
 
   Dim Msg As String
 
   Select Case Event.KeyCode
   Case com.sun.star.awt.Key.RETURN
     Msg = "Return pressed"
   Case com.sun.star.awt.Key.TAB
     Msg = "Tab pressed"
   Case com.sun.star.awt.Key.DELETE
     Msg = "Delete pressed"
   Case com.sun.star.awt.Key.ESCAPE
     Msg = "Escape pressed"
   Case com.sun.star.awt.Key.DOWN
     Msg = "Down pressed"
   Case com.sun.star.awt.Key.UP
     Msg = "Up pressed"
   Case com.sun.star.awt.Key.LEFT
     Msg = "Left pressed"
   Case com.sun.star.awt.Key.RIGHT
     Msg = "Right pressed"
   Case Else
     Msg = "Character " & Event.KeyChar & " entered"
   End Select
   MsgBox Msg
 
End Sub

Vous trouverez de plus amples informations sur les autres constantes du clavier dans la référence de l'API, dans le groupe de constantes com.sun.star.awt.Key.

Événements du focus

Les événements du focus indiquent si un élément de contrôle reçoit ou perd le focus. Par exemple, vous pouvez utiliser ces événements pour déterminer si un utilisateur a terminé le traitement d'un élément de contrôle de telle sorte que vous puissiez mettre à jour d'autres éléments d'une boîte de dialogue. Les événements de focus suivants sont disponibles :

When receiving focus
l'élément reçoit le focus.
When losing focus
l'élément perd le focus.

Les objets Event des événements de focus sont structurés de la façon suivante :

FocusFlags (short)
raison du changement de focus (la valeur par défaut correspond à com.sun.star.awt.FocusChangeReason).
NextFocus (Object)
objet recevant le focus (seulement pour l'événement When losing focus).
Temporary (Boolean)
le focus est temporairement perdu.

Événements propres à l'élément de contrôle

Outre les événements ci-dessus, pris en charge par tous les éléments de contrôle, il existe également des événements spécifiques, définis uniquement pour certains éléments de contrôle. Les plus importants sont les suivants :

When Item Changed
la valeur d'un élément de contrôle change.
Item Status Changed
le statut d'un élément de contrôle change.
Text modified
le texte d'un élément de contrôle change.
When initiating
action pouvant être exécutée lorsque l'élément de contrôle est déclenché (par exemple, lorsque l'utilisateur appuie sur un bouton).

Lorsque vous utilisez des événements, notez que certains d'entre eux, comme When initiating, peuvent être déclenchés chaque fois que vous cliquez sur certains éléments de contrôle (par exemple, sur des boutons radio). Aucune action n'est exécutée pour déterminer si le statut de l'élément de contrôle a réellement été modifié. Pour éviter ce type d'"événement aveugle", enregistrez l'ancienne valeur de l'élément de contrôle dans une variable globale et vérifiez si la valeur est modifiée au moment de l'exécution d'un événement.

Les propriétés de l'événement Item Status Changed sont les suivantes :

Selected (long)
entrée actuellement sélectionnée.
Highlighted (long)
entrée actuellement mise en évidence.
ItemId (long)
ID de l'entrée.
Content on this page is licensed under the Public Documentation License (PDL).
Personal tools