Skip to main content

ユーザー入力イベントのキャプチャ

アプリケーション内でユーザー入力イベントをキャプチャできます。そのためには、ユーザーイベントが発生した際に実行される関数ブロックを実装します。

注記

Kann auch veraltet seinユーザー入力による変数の変更をキャプチャするためのサンプルプロジェクト

サンプルプロジェクトは、視覚化内でのユーザー入力によってトリガーされた変数値の変化を記録します。このプロジェクトでは、メソッドの実装も確認できます。ValueChanged

変数の書き込みをキャプチャする

ユーザーが入力フィールドへの値の入力を完了すると、編集コントロールイベントが閉じられます。このイベントは、アプリケーション内で次のようにキャプチャできます。

  1. インターフェースを実装する関数ブロックを作成するVisuElems.IEditBoxInputHandler図書館からVisuElemBase

  2. インスタンスをグローバルイベントマネージャーに渡すVisuElems.Visu_Globals.g_VisuEventManagerメソッドを呼び出すことによってSetEditBoxEventHandler

7.

視覚化には2つの入力フィールドがあり、iInput_AそしてrInput_Bおよび 1 つのテキスト出力要素。

入力フィールドは、ユーザーがテキストを入力するためにクリックするように求められる長方形です。

テキスト出力要素は、テキスト変数の内容が入る長方形である。PLC_PRG.stInfoが印刷されます。テキスト変数には、ユーザーが入力フィールドのいずれかに最後に入力した内容と、追加された追加情報が含まれます。

_visu_img_hook_control_event.png

長方形の特性iInput_A

テキスト → テキスト

iInput_A: %i

テキスト変数 → テキスト変数

PLC_PRG.iInput_A

長方形の特性rInput_B

テキスト → テキスト

iInput_B: %i

テキスト変数 → テキスト変数

PLC_PRG.rInput_B

テキスト出力用の四角形のプロパティ

テキスト → テキスト

%s

テキスト変数 → テキスト変数

PLC_PRG.stInfo

の実装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                      

の実装POU

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

方法VariableWritten割り当てられた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'));                        


キーボードイベントのキャプチャ

ユーザーがキーを押して放すと、視覚エフェクト内でキーボードイベントが発生します。このイベントは、アプリケーション内で次のようにキャプチャできます。

  1. インターフェースを実装する関数ブロックを作成するVisuElems.IKeyEventHandler図書館からVisuElemBase

  2. インスタンスをグローバルイベントマネージャーに渡すVisuElems.Visu_Globals.g_VisuEventManagerメソッドを呼び出すことによってSetKeyEventHandler

8.

視覚化には1つのテキスト出力要素があります。テキスト出力要素は、テキスト変数の内容が入る四角形です。PLC_PRG.stInfoが出力されます。テキスト変数には、ユーザーが最後に押したキーに関する情報が含まれます。

テキスト出力用の四角形のプロパティ

テキスト → テキスト

%s

テキスト変数 → テキスト変数

PLC_PRG.stInfo

プログラムの実施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                        

機能ブロックの実装POU

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

方法の実装VariableWritten機能ブロックの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'));
                        


入力イベントによってトリガーされた変数値の変化を記録する

ユーザー入力によって変数の値を変更するすべての視覚化要素は、インターフェースを呼び出します。IValueChangedListenerこのインターフェースを使用すると、値の変更を記録し、プログラムで処理することができます。

注記

Kann auch veraltet seinユーザー入力による変数の変更をキャプチャするためのサンプルプロジェクト

サンプルプロジェクトは、視覚化内でのユーザー入力によってトリガーされた変数値の変化を記録します。このプロジェクトでは、メソッドの実装も確認できます。ValueChanged

  1. 関数ブロックを実装する(例:POU)インターフェースを実装するIValueChangedListener

    FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListener

    デバイスツリーでは、値が変更されましたメソッドは関数ブロックの下に挿入されます。

  2. プログラム内(例: PLC_PRG )、インターフェースを登録する IEC コードを実装します。

    VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)

    PLC_PRGすべての値の変更は、値が変更されました方法。

    これで、値の変更を記録して処理できるようになります。

入力オプションを持つ要素の入力をキャプチャする

ユーザーが入力に反応する要素(例えば、入力設定を持つ四角形)をクリックすると、イベントが発生します。このイベントは、アプリケーション内で次のようにキャプチャできます。

  1. インターフェースを実装する関数ブロックを作成するVisuElems.IInputOnElementEventHandler図書館からVisuElemBase

  2. インスタンスをグローバルイベントマネージャに渡すVisuElems.Visu_Globals.g_VisuEventManagerメソッドを呼び出すことによってSetInputOnElementEventHandler

9.

視覚化には入力に反応する四角形があります。例えば、変数の切り替えは次のように設定されています。OnMouseDown要素がマウスまたはタッチ入力によってクリックされると、イベントが発生します。HandleInputOnElementEventが発生します。

機能の実装VisuInit

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

機能ブロックの実装POU

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

方法の実装HandleInputOnElementEvent機能ブロックの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)
*)