ユーザー入力イベントのキャプチャ
アプリケーション内でユーザー入力イベントをキャプチャできます。そのためには、ユーザーイベントが発生した際に実行される関数ブロックを実装します。
注記
ユーザー入力による変数の変更をキャプチャするためのサンプルプロジェクト
サンプルプロジェクトは、視覚化内でのユーザー入力によってトリガーされた変数値の変化を記録します。このプロジェクトでは、メソッドの実装も確認できます。ValueChanged。
変数の書き込みをキャプチャする
ユーザーが入力フィールドへの値の入力を完了すると、編集コントロールイベントが閉じられます。このイベントは、アプリケーション内で次のようにキャプチャできます。
インターフェースを実装する関数ブロックを作成する
VisuElems.IEditBoxInputHandler図書館からVisuElemBase。インスタンスをグローバルイベントマネージャーに渡す
VisuElems.Visu_Globals.g_VisuEventManagerメソッドを呼び出すことによってSetEditBoxEventHandler。
視覚化には2つの入力フィールドがあり、iInput_AそしてrInput_Bおよび 1 つのテキスト出力要素。
入力フィールドは、ユーザーがテキストを入力するためにクリックするように求められる長方形です。
テキスト出力要素は、テキスト変数の内容が入る長方形である。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')); キーボードイベントのキャプチャ
ユーザーがキーを押して放すと、視覚エフェクト内でキーボードイベントが発生します。このイベントは、アプリケーション内で次のようにキャプチャできます。
インターフェースを実装する関数ブロックを作成する
VisuElems.IKeyEventHandler図書館からVisuElemBase。インスタンスをグローバルイベントマネージャーに渡す
VisuElems.Visu_Globals.g_VisuEventManagerメソッドを呼び出すことによってSetKeyEventHandler。
視覚化には1つのテキスト出力要素があります。テキスト出力要素は、テキスト変数の内容が入る四角形です。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このインターフェースを使用すると、値の変更を記録し、プログラムで処理することができます。
注記
ユーザー入力による変数の変更をキャプチャするためのサンプルプロジェクト
サンプルプロジェクトは、視覚化内でのユーザー入力によってトリガーされた変数値の変化を記録します。このプロジェクトでは、メソッドの実装も確認できます。ValueChanged。
関数ブロックを実装する(例:
POU)インターフェースを実装するIValueChangedListener。FUNCTION_BLOCK POU IMPLEMENTS VisuElems.IValueChangedListenerデバイスツリーでは、値が変更されましたメソッドは関数ブロックの下に挿入されます。
プログラム内(例: PLC_PRG )、インターフェースを登録する IEC コードを実装します。
VisuElems.g_itfValueChangedListenerManager.AddValueChangedListener(itfValueChangedListener)PLC_PRGすべての値の変更は、値が変更されました方法。
これで、値の変更を記録して処理できるようになります。
入力オプションを持つ要素の入力をキャプチャする
ユーザーが入力に反応する要素(例えば、入力設定を持つ四角形)をクリックすると、イベントが発生します。このイベントは、アプリケーション内で次のようにキャプチャできます。
インターフェースを実装する関数ブロックを作成する
VisuElems.IInputOnElementEventHandler図書館からVisuElemBase。インスタンスをグローバルイベントマネージャに渡す
VisuElems.Visu_Globals.g_VisuEventManagerメソッドを呼び出すことによってSetInputOnElementEventHandler。
視覚化には入力に反応する四角形があります。例えば、変数の切り替えは次のように設定されています。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) *)