Skip to main content

Capture des événements d'entrée utilisateur

Vous pouvez capturer les événements d'entrée utilisateur dans l'application. Pour ce faire, vous pouvez implémenter un bloc fonctionnel qui s'exécute lorsque des événements utilisateur se produisent.

Avis

Kann auch veraltet seinExemple de projet pour capturer les modifications de variables via la saisie de l'utilisateur

L'exemple de projet enregistre les modifications de valeurs de variables déclenchées par la saisie de l'utilisateur dans la visualisation. Ce projet présente également l'implémentation de la méthode. ValueChanged.

Capture de l'écriture des variables

Lorsque l'utilisateur termine la saisie d'une valeur (dans un champ de saisie), un événement de contrôle d'édition est fermé. Vous pouvez capturer cet événement dans l'application comme suit :

  1. Créer un bloc fonctionnel qui implémente l'interface VisuElems.IEditBoxInputHandler de la bibliothèque VisuElemBase.

  2. Transmettre l'instance au gestionnaire d'événements global VisuElems.Visu_Globals.g_VisuEventManager en appelant la méthode SetEditBoxEventHandler.

Exemple 7. Exemple

Une visualisation comporte deux champs de saisie pour iInput_A et rInput_B et un élément de sortie de texte.

Les champs de saisie sont des rectangles sur lesquels l'utilisateur est invité à cliquer pour saisir du texte.

L'élément de sortie de texte est un rectangle où se trouve le contenu de la variable de texte PLC_PRG.stInfo sont imprimés. La variable texte contient la dernière saisie effectuée par l'utilisateur dans l'un des champs de saisie, ainsi que les informations supplémentaires ajoutées.

_visu_img_hook_control_event.png

Propriétés du rectangle iInput_A

Textes → Texte

iInput_A: %i

Variables de texte → Variable de texte

PLC_PRG.iInput_A

Propriétés du rectangle rInput_B

Textes → Texte

iInput_B: %i

Variables de texte → Variable de texte

PLC_PRG.rInput_B

Propriétés du rectangle pour la sortie texte

Textes → Texte

%s

Variables de texte → Variable de texte

PLC_PRG.stInfo

Mise en œuvre de PLC_PRG

PROGRAM PLC_PRG
VAR_INPUT
    iInput_A:INT;  (* Used in the visualization as user input variable*)
    rInput_B:REAL; (* Used in the visualization as user input variable*)
    stInfo : STRING;  (* Informs about the user input via the edit control field;
                        String gets composed by method 'VariableWritten;
                        Result is displayed in the lower rectangle of the visualization *)
END_VAR
VAR
    inst : POU;
    bFirst : BOOL := TRUE;
END_VAR

IF bFirst THEN
    bFirst := FALSE;
    VisuElems.Visu_Globals.g_VisuEventManager.SetEditBoxEventHandler(inst);
    (* Call of method VariableWritten *)
END_IF                      

Mise en œuvre de POU

FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IEditBoxInputHandler
(* no further declarations, no implementation code *)                        

Méthode VariableWritten affecté à POU

METHOD VariableWritten : BOOL
(* provides some information always when an edit control field is closed in the visualization, that is a variable gets written by user input in one of the upper rectangles *)
VAR_INPUT
    pVar : POINTER TO BYTE;
    varType : VisuElems.Visu_Types;
    iMaxSize : INT;
    pClient : POINTER TO VisuElems.VisuStructClientData;
END_VAR

// String stInfo, which will be displayed in the lower rectangle, is composed here
PLC_PRG.stInfo := 'Variable written; type: ';
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, INT_TO_STRING(varType));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', adr: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, DWORD_TO_STRING(pVar));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', by: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, SEL(pClient^.globaldata.clienttype = VisuElems.Visu_ClientType.Targetvisualization,'other visu', 'targetvisu'));                        


Capture des événements du clavier

Lorsque l'utilisateur appuie et relâche la touche, un événement clavier est généré dans la visualisation. Vous pouvez capturer cet événement dans l'application comme suit :

  1. Créer un bloc fonctionnel qui implémente l'interface VisuElems.IKeyEventHandler de la bibliothèque VisuElemBase.

  2. Transmettre l'instance au gestionnaire d'événements global VisuElems.Visu_Globals.g_VisuEventManager en appelant la méthode SetKeyEventHandler.

Exemple 8. Exemple

Une visualisation comporte un élément de sortie texte. Cet élément est un rectangle contenant le contenu de la variable texte. PLC_PRG.stInfo sont imprimés. La variable texte contient des informations sur la dernière touche appuyée par l'utilisateur.

Propriétés du rectangle pour la sortie texte

Textes → Texte

%s

Variables de texte → Variable de texte

PLC_PRG.stInfo

Mise en œuvre du programme PLC_PRG

PROGRAM PLC_PRG
VAR_INPUT
    stInfo : STRING;
END_VAR
VAR
    inst : POU;
    bFirst : BOOL := TRUE;
END_VAR

IF bFirst THEN
    bFirst := FALSE;
    VisuElems.Visu_Globals.g_VisuEventManager.SetKeyEventHandler(inst);
END_IF                        

Implémentation du bloc fonctionnel POU

FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IKeyEventHandler
(* no further declarations, no implementation code *)
                        

Mise en œuvre de la méthode VariableWritten du bloc fonctionnel POU

/// This method will be called after a key event is released.
/// RETURN:
/// TRUE - When the handler has handled this event and it should not be handled by someone else
/// FALSE - When the event is not handled by this handler
METHOD HandleKeyEvent : BOOL
VAR_INPUT
    /// Event type. The value is true if a key-up event was released.
bKeyUpEvent : BOOL;
    /// Key code
dwKey : DWORD;
    /// Modifier. Possible values:
    /// VISU_KEYMOD_SHIFT : DWORD := 1;
    /// VISU_KEYMOD_ALT : DWORD := 2;
    /// VISU_KEYMOD_CTRL : DWORD := 4;
dwModifiers : DWORD;
    /// Pointer to the client structure were the event was released
    pClient : POINTER TO VisuStructClientData;
END_VAR
VAR
END_VAR

PLC_PRG.stInfo := 'KeyEvent up: ';
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, BOOL_TO_STRING(bKeyUpEvent));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', key: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, DWORD_TO_STRING(dwKey));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', modifier: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, DWORD_TO_STRING(dwModifiers));
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, ', by: ');
PLC_PRG.stInfo := CONCAT(PLC_PRG.stInfo, SEL(pClient^.globaldata.clienttype =
    VisuElems.Visu_ClientType.Targetvisualization,'other visu', 'targetvisu'));
                        


Enregistrement des modifications de valeur des variables déclenchées par des événements d'entrée

Tous les éléments de visualisation qui modifient la valeur d'une variable par saisie utilisateur appellent l'interface IValueChangedListener. Avec cette interface, les changements de valeur peuvent être enregistrés puis traités par programmation.

Avis

Kann auch veraltet seinExemple de projet pour capturer les modifications de variables via la saisie de l'utilisateur

L'exemple de projet enregistre les modifications de valeurs de variables déclenchées par la saisie de l'utilisateur dans la visualisation. Ce projet présente également l'implémentation de la méthode. ValueChanged.

  1. Implémenter un bloc fonctionnel (exemple : POU ) qui implémente l'interface IValueChangedListener.

    FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListener

    Dans l'arborescence des périphériques, le Valeur modifiée la méthode est insérée sous le bloc de fonction.

  2. Dans un programme (exemple : PLC_PRG), implémenter le code IEC qui enregistre l'interface.

    VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)

    PLC_PRG obtient toutes les modifications de valeur au moyen de Valeur modifiée méthode.

    Vous pouvez désormais enregistrer et traiter les modifications de valeur.

Capture des entrées sur les éléments avec des options d'entrée

Lorsqu'un utilisateur clique sur un élément réagissant à une saisie (par exemple, un rectangle avec une configuration de saisie), un événement est déclenché. Vous pouvez capturer cet événement dans l'application comme suit :

  1. Créer un bloc fonctionnel qui implémente l'interface VisuElems.IInputOnElementEventHandler de la bibliothèque VisuElemBase.

  2. Transmettre l'instance au gestionnaire d'événements global VisuElems.Visu_Globals.g_VisuEventManager en appelant la méthode SetInputOnElementEventHandler.

Exemple 9. Exemple

Une visualisation comporte un rectangle qui réagit aux entrées. Par exemple, le basculement d'une variable a été configuré avec OnMouseDown. Lorsque l'élément est cliqué par une souris ou une entrée tactile, un événement HandleInputOnElementEvent est soulevé.

Implémentation de la fonction VisuInit

FUNCTION VisuInit : BOOL
// Set the input on element event handler
VisuElems.VisuElemBase.g_VisuEventManager.SetInputOnElementEventHandler(PLC_PRG.evInputOnElementEventHandler);                        

Implémentation du bloc fonctionnel POU

FUNCTION_BLOCK POU IMPLEMENTS VisuElems.VisuElemBase.IInputOnElementEventHandler
(* no further declarations, no implementation code *)                      

Mise en œuvre de la méthode HandleInputOnElementEvent du bloc fonctionnel POU

(* This method will be called when an input on a visualization element was executed.
RETURN:
TRUE - When the handler has handled this event and it should not be handled by someone else
FALSE - When the event is not handled by this handler*)

METHOD HandleInputOnElementEvent : BOOL
    VAR_INPUT
    event    : VisuElems.VisuStructInputOnElementEvent;
END_VAR
IF event.eType = VisuElems.VisuEnumInputOnElementType.MouseDown THEN
    SysProcessExecuteCommand('python D:\Beep.py', 0);
END_IF                      
(*
Content Beep.py:

import winsound
freq=500
duration=200
winsound.Beep(freq,duration)
*)