「App:Library:LVGL:docs:Overview:Events」の版間の差分
60行目: | 60行目: | ||
lv_obj_add_event_cb(obj, my_event_cb_3, LV_EVENT_ALL, NULL); /*No filtering, receive all events*/ | lv_obj_add_event_cb(obj, my_event_cb_3, LV_EVENT_ALL, NULL); /*No filtering, receive all events*/ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | Even the same event callback can be used on an object with different <code style="color: #bb0000;">user_data</code>. For example: | + | Even the same event callback can be used on an object with different <code style="color: #bb0000;">user_data</code>. |
+ | |||
+ | For example: | ||
<syntaxhighlight lang="C++" style="border:1px dashed gray;"> | <syntaxhighlight lang="C++" style="border:1px dashed gray;"> | ||
lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num1); | lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num1); | ||
82行目: | 84行目: | ||
} | } | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | この例では、<code style="color: #bb0000;">LV_EVENT_CLICKED</code> は、クリックイベントだけが<code style="color: #bb0000;">my_event_cb</code>を呼び出すことを意味します。 | |
− | + | すべてのオプションについては、イベントコードのリストを参照してください。 | |
− | <code style="color: #bb0000;">LV_EVENT_ALL</code> | + | <code style="color: #bb0000;">LV_EVENT_ALL</code>は、すべてのイベントを受信するために使用することができます。 |
− | |||
− | + | <code style="color: #bb0000;">lv_obj_add_event_cb</code>の最後のパラメータは、イベントで利用可能な任意のカスタムデータへのポインタです。 | |
+ | これについては、後で詳しく説明します。 | ||
− | + | このように、オブジェクトにはさらにイベントを追加することができます。 | |
<syntaxhighlight lang="C++" style="border:1px dashed gray;"> | <syntaxhighlight lang="C++" style="border:1px dashed gray;"> | ||
lv_obj_add_event_cb(obj, my_event_cb_1, LV_EVENT_CLICKED, NULL); | lv_obj_add_event_cb(obj, my_event_cb_1, LV_EVENT_CLICKED, NULL); | ||
100行目: | 102行目: | ||
lv_obj_add_event_cb(obj, my_event_cb_3, LV_EVENT_ALL, NULL); /*No filtering, receive all events*/ | lv_obj_add_event_cb(obj, my_event_cb_3, LV_EVENT_ALL, NULL); /*No filtering, receive all events*/ | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | 同じイベントコールバックでも、<code style="color: #bb0000;">user_data</code>が異なるオブジェクトに対して使用することができます。 | |
+ | |||
+ | 例えば | ||
<syntaxhighlight lang="C++" style="border:1px dashed gray;"> | <syntaxhighlight lang="C++" style="border:1px dashed gray;"> | ||
lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num1); | lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num1); | ||
lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num2); | lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num2); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | + | イベントは、追加された順番に呼び出されます。 | |
− | + | 他のオブジェクトも同じイベントコールバックを使用することができます。 | |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
117行目: | 121行目: | ||
|- | |- | ||
| | | | ||
− | Events can be removed from an object with the <code style="color: #bb0000;">lv_obj_remove_event_cb(obj, event_cb)</code> function or <code style="color: #bb0000;">lv_obj_remove_event_dsc(obj, event_dsc)</code>. <code style="color: #bb0000;">event_dsc</code> is a pointer returned by <code style="color: #bb0000;">lv_obj_add_event_cb</code>. | + | Events can be removed from an object with the <code style="color: #bb0000;">lv_obj_remove_event_cb(obj, event_cb)</code> function or <code style="color: #bb0000;">lv_obj_remove_event_dsc(obj, event_dsc)</code>. |
− | | | + | |
+ | <code style="color: #bb0000;">event_dsc</code> is a pointer returned by <code style="color: #bb0000;">lv_obj_add_event_cb</code>. | ||
+ | |イベントは、<code style="color: #bb0000;">lv_obj_remove_event_cb(obj, event_cb)</code> 関数または <code style="color: #bb0000;">lv_obj_remove_event_dsc(obj, event_dsc)</code>. でオブジェクトから削除できる。 | ||
+ | <code style="color: #bb0000;">event_dsc</code>は<code style="color: #bb0000;">lv_obj_add_event_cb</code>が返すポインタです。 | ||
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
144行目: | 151行目: | ||
The following event codes exist: | The following event codes exist: | ||
− | | | + | |イベントコードは、以下のカテゴリーに分類されます。 |
− | * | + | * 入力デバイスイベント |
− | * | + | * 描画イベント |
− | * | + | * その他のイベント |
− | * | + | * 特殊イベント |
− | * | + | * カスタムイベント |
− | + | すべてのオブジェクト(ボタン/ラベル/スライダーなど)は、そのタイプに関係なく、Input device、Drawing、Otherの各イベントを受け取ります。 | |
− | + | しかし、特別なイベントは、特定のウィジェットタイプに固有のものです。いつ送信されるかは、ウィジェットのドキュメントを参照してください。 | |
− | + | カスタムイベントはユーザが追加するもので、LVGLから送信されることはありません。 | |
− | + | 以下のイベントコードが存在する。 | |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
187行目: | 194行目: | ||
* <code style="color: #bb0000;">LV_EVENT_HIT_TEST</code> Perform advanced hit-testing. Use <code style="color: #bb0000;">lv_hit_test_info_t * a = lv_event_get_hit_test_info(e)</code> and check if <code style="color: #bb0000;">a->point</code> can click the object or not. If not set <code style="color: #bb0000;">a->res = false</code> | * <code style="color: #bb0000;">LV_EVENT_HIT_TEST</code> Perform advanced hit-testing. Use <code style="color: #bb0000;">lv_hit_test_info_t * a = lv_event_get_hit_test_info(e)</code> and check if <code style="color: #bb0000;">a->point</code> can click the object or not. If not set <code style="color: #bb0000;">a->res = false</code> | ||
| | | | ||
− | *<code style="color: #bb0000;">LV_EVENT_PRESSED</code> | + | *<code style="color: #bb0000;">LV_EVENT_PRESSED</code> オブジェクトが押された。 |
− | *<code style="color: #bb0000;">LV_EVENT_PRESSING</code> | + | *<code style="color: #bb0000;">LV_EVENT_PRESSING</code> オブジェクトが押されている (押されている間、連続して呼び出される) |
− | *<code style="color: #bb0000;">LV_EVENT_PRESS_LOST</code> | + | *<code style="color: #bb0000;">LV_EVENT_PRESS_LOST</code> オブジェクトが押されているが、カーソルや指をオブジェクトからスライドさせている状態 |
− | *<code style="color: #bb0000;">LV_EVENT_SHORT_CLICKED</code> | + | *<code style="color: #bb0000;">LV_EVENT_SHORT_CLICKED</code> オブジェクトが短時間押され、その後離された。スクロールしている場合は呼び出されない |
− | *<code style="color: #bb0000;">LV_EVENT_LONG_PRESSED</code> | + | *<code style="color: #bb0000;">LV_EVENT_LONG_PRESSED</code> 入力デバイスドライバで指定された<code style="color: #bb0000;">long_press_time</code> 以上、オブジェクトが押された状態。スクロールしている場合は呼び出されない。 |
− | *<code style="color: #bb0000;">LV_EVENT_LONG_PRESSED_REPEAT</code> | + | *<code style="color: #bb0000;">LV_EVENT_LONG_PRESSED_REPEAT</code> :<code style="color: #bb0000;">long_press_time</code> の後に <code style="color: #bb0000;">long_press_repeat_time</code> ms毎に呼び出される。スクロールしている間は呼び出されない。 |
− | *<code style="color: #bb0000;">LV_EVENT_CLICKED</code> | + | *<code style="color: #bb0000;">LV_EVENT_CLICKED</code> オブジェクトがスクロールしなかった場合、リリース時に呼び出されます (長押しに関係なく)。 |
− | *<code style="color: #bb0000;">LV_EVENT_RELEASED</code> | + | *<code style="color: #bb0000;">LV_EVENT_RELEASED</code> オブジェクトが解放されたときに毎回呼び出されます。 |
− | *<code style="color: #bb0000;">LV_EVENT_SCROLL_BEGIN</code> | + | *<code style="color: #bb0000;">LV_EVENT_SCROLL_BEGIN</code> スクロールが開始されます。イベントパラメータは<code style="color: #bb0000;">NULL</code> か、必要に応じて変更可能なスクロールアニメーション記述子を持つ<code style="color: #bb0000;">lv_anim_t *</code> です。descriptor that can be modified if required. |
− | *<code style="color: #bb0000;">LV_EVENT_SCROLL_END</code> | + | *<code style="color: #bb0000;">LV_EVENT_SCROLL_END</code> スクロールが終了します。 |
− | *<code style="color: #bb0000;">LV_EVENT_SCROLL</code> | + | *<code style="color: #bb0000;">LV_EVENT_SCROLL</code> オブジェクトがスクロールされました。 |
− | *<code style="color: #bb0000;">LV_EVENT_GESTURE</code> | + | *<code style="color: #bb0000;">LV_EVENT_GESTURE</code> ジェスチャが検出されました。<code style="color: #bb0000;">lv_indev_get_gesture_dir(lv_indev_get_act());</code>でジェスチャーを取得します。 |
− | *<code style="color: #bb0000;">LV_EVENT_KEY</code> | + | *<code style="color: #bb0000;">LV_EVENT_KEY</code> キーがオブジェクトに送信される。キーは<code style="color: #bb0000;">lv_indev_get_key(lv_indev_get_act());</code>で取得する。 |
− | *<code style="color: #bb0000;">LV_EVENT_FOCUSED</code> | + | *<code style="color: #bb0000;">LV_EVENT_FOCUSED</code> オブジェクトがフォーカスされた。 |
− | *<code style="color: #bb0000;">LV_EVENT_DEFOCUSED</code> | + | *<code style="color: #bb0000;">LV_EVENT_DEFOCUSED</code> オブジェクトがフォーカスされていない. |
− | *<code style="color: #bb0000;">LV_EVENT_LEAVE</code> | + | *<code style="color: #bb0000;">LV_EVENT_LEAVE</code> オブジェクトはフォーカスされていないが、選択されている。 |
− | *<code style="color: #bb0000;">LV_EVENT_HIT_TEST</code> | + | *<code style="color: #bb0000;">LV_EVENT_HIT_TEST</code> 高度なヒットテストを実行します。 <code style="color: #bb0000;">lv_hit_test_info_t * a = lv_event_get_hit_test_info(e)</code> を使って<code style="color: #bb0000;">a->point</code> がオブジェクトをクリックできるかどうかをチェックします。クリックできない場合は<code style="color: #bb0000;">a->res = false</code>をセットする。 |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
227行目: | 234行目: | ||
In <code style="color: #bb0000;">LV_EVENT_DRAW_...</code> events it's not allowed to adjust the widgets' properties. E.g. you can not call <code style="color: #bb0000;">lv_obj_set_width()</code>. In other words only <code style="color: #bb0000;">get</code> functions can be called. | In <code style="color: #bb0000;">LV_EVENT_DRAW_...</code> events it's not allowed to adjust the widgets' properties. E.g. you can not call <code style="color: #bb0000;">lv_obj_set_width()</code>. In other words only <code style="color: #bb0000;">get</code> functions can be called. | ||
| | | | ||
− | *<code style="color: #bb0000;">LV_EVENT_COVER_CHECK</code> | + | *<code style="color: #bb0000;">LV_EVENT_COVER_CHECK</code> オブジェクトが領域を完全に覆っているかどうかをチェックする。イベントパラメータは <code style="color: #bb0000;">lv_cover_check_info_t *</code>です。 |
− | *<code style="color: #bb0000;">LV_EVENT_REFR_EXT_DRAW_SIZE</code> | + | *<code style="color: #bb0000;">LV_EVENT_REFR_EXT_DRAW_SIZE</code> オブジェクトの周りに必要な余分な描画領域を取得します (例:シャドウ). イベントパラメータは <code style="color: #bb0000;">lv_coord_t *</code> で、サイズを格納する。より大きな値で上書きするだけです。 |
− | *<code style="color: #bb0000;">LV_EVENT_DRAW_MAIN_BEGIN</code> | + | *<code style="color: #bb0000;">LV_EVENT_DRAW_MAIN_BEGIN</code> メイン描画フェーズを開始します。 |
− | *<code style="color: #bb0000;">LV_EVENT_DRAW_MAIN</code> | + | *<code style="color: #bb0000;">LV_EVENT_DRAW_MAIN</code> メイン描画を実行します。 |
− | *<code style="color: #bb0000;">LV_EVENT_DRAW_MAIN_END</code> | + | *<code style="color: #bb0000;">LV_EVENT_DRAW_MAIN_END</code> 主描画フェーズの終了 |
− | *<code style="color: #bb0000;">LV_EVENT_DRAW_POST_BEGIN</code> | + | *<code style="color: #bb0000;">LV_EVENT_DRAW_POST_BEGIN</code> ポスト描画フェーズの開始(すべての子の描画が終了したとき) |
− | *<code style="color: #bb0000;">LV_EVENT_DRAW_POST</code> | + | *<code style="color: #bb0000;">LV_EVENT_DRAW_POST</code> ポスト描画フェーズを実行します (すべての子供が描画されたとき) |
− | *<code style="color: #bb0000;">LV_EVENT_DRAW_POST_END</code> | + | *<code style="color: #bb0000;">LV_EVENT_DRAW_POST_END</code> ポスト描画フェーズを終了する(すべての子プロセスが描画された場合)。 |
− | *<code style="color: #bb0000;">LV_EVENT_DRAW_PART_BEGIN</code> | + | *<code style="color: #bb0000;">LV_EVENT_DRAW_PART_BEGIN</code> パーツの描画を開始します。イベントパラメータは <code style="color: #bb0000;">lv_obj_draw_dsc_t *</code>です。詳しくはこちらで。 |
− | *<code style="color: #bb0000;">LV_EVENT_DRAW_PART_END</code> | + | *<code style="color: #bb0000;">LV_EVENT_DRAW_PART_END</code> パーツの描画を終了します。イベントパラメータは <code style="color: #bb0000;">lv_obj_draw_dsc_t *</code>詳細はこちら。 |
− | In <code style="color: #bb0000;">LV_EVENT_DRAW_...</code> | + | In <code style="color: #bb0000;">LV_EVENT_DRAW_...</code>イベントでは、ウィジェットのプロパティを調整することはできません。例えば、 <code style="color: #bb0000;">lv_obj_set_width()</code>. を呼び出すことはできません。つまり、<code style="color: #bb0000;">get</code> 関数のみが呼び出せます。 |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
262行目: | 269行目: | ||
* <code style="color: #bb0000;">LV_EVENT_SCREEN_UNLOADED</code> A screen was unloaded, called when all animations are finished | * <code style="color: #bb0000;">LV_EVENT_SCREEN_UNLOADED</code> A screen was unloaded, called when all animations are finished | ||
| | | | ||
− | *<code style="color: #bb0000;">LV_EVENT_DELETE</code> | + | *<code style="color: #bb0000;">LV_EVENT_DELETE</code> オブジェクトが削除された |
− | *<code style="color: #bb0000;">LV_EVENT_CHILD_CHANGED</code> | + | *<code style="color: #bb0000;">LV_EVENT_CHILD_CHANGED</code> 子が削除/追加されました。 |
− | *<code style="color: #bb0000;">LV_EVENT_CHILD_CREATED</code> | + | *<code style="color: #bb0000;">LV_EVENT_CHILD_CREATED</code> 子が作成されました。常にすべての親にバブルアップされます。 |
− | *<code style="color: #bb0000;">LV_EVENT_CHILD_DELETED</code> | + | *<code style="color: #bb0000;">LV_EVENT_CHILD_DELETED</code> 子が削除された、常にすべての親にバブルアップされる |
− | *<code style="color: #bb0000;">LV_EVENT_SIZE_CHANGED</code> | + | *<code style="color: #bb0000;">LV_EVENT_SIZE_CHANGED</code> オブジェクトの座標/サイズが変更されました。 |
− | *<code style="color: #bb0000;">LV_EVENT_STYLE_CHANGED</code> | + | *<code style="color: #bb0000;">LV_EVENT_STYLE_CHANGED</code> オブジェクトのスタイルが変更された |
− | *<code style="color: #bb0000;">LV_EVENT_BASE_DIR_CHANGED</code> | + | *<code style="color: #bb0000;">LV_EVENT_BASE_DIR_CHANGED</code> ベースディレクトリが変更されました。 |
− | *<code style="color: #bb0000;">LV_EVENT_GET_SELF_SIZE</code> | + | *<code style="color: #bb0000;">LV_EVENT_GET_SELF_SIZE</code> ウィジェットの内部サイズの取得 |
− | *<code style="color: #bb0000;">LV_EVENT_SCREEN_UNLOAD_START</code> | + | *<code style="color: #bb0000;">LV_EVENT_SCREEN_UNLOAD_START</code> 画面のアンロードが開始された、lv_scr_load/lv_scr_load_animが呼ばれるとすぐに起動される |
− | *<code style="color: #bb0000;">LV_EVENT_SCREEN_LOAD_START</code> | + | *<code style="color: #bb0000;">LV_EVENT_SCREEN_LOAD_START</code> スクリーンのロードを開始し、スクリーンチェンジのディレイが切れたときに発行されます。 |
− | *<code style="color: #bb0000;">LV_EVENT_SCREEN_LOADED</code> | + | *<code style="color: #bb0000;">LV_EVENT_SCREEN_LOADED</code> スクリーンがロードされた、すべてのアニメーションが終了したときに呼び出される |
− | *<code style="color: #bb0000;">LV_EVENT_SCREEN_UNLOADED</code> | + | *<code style="color: #bb0000;">LV_EVENT_SCREEN_UNLOADED</code> スクリーンがアンロードされた、すべてのアニメーションが終了したときに呼び出されます。 |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
290行目: | 297行目: | ||
* <code style="color: #bb0000;">LV_EVENT_CANCEL</code> A process has been canceled | * <code style="color: #bb0000;">LV_EVENT_CANCEL</code> A process has been canceled | ||
| | | | ||
− | *<code style="color: #bb0000;">LV_EVENT_VALUE_CHANGED</code> | + | *<code style="color: #bb0000;">LV_EVENT_VALUE_CHANGED</code> オブジェクトの値が変更された(スライダーが移動した)。 |
− | *<code style="color: #bb0000;">LV_EVENT_INSERT</code> | + | *<code style="color: #bb0000;">LV_EVENT_INSERT</code> オブジェクトにテキストが挿入された。イベントデータが <code style="color: #bb0000;">char *</code> で挿入されています。 |
− | *<code style="color: #bb0000;">LV_EVENT_REFRESH</code> | + | *<code style="color: #bb0000;">LV_EVENT_REFRESH</code>オブジェクトに何かが更新されたことを通知する(ユーザーに対して)。 |
− | *<code style="color: #bb0000;">LV_EVENT_READY</code> | + | *<code style="color: #bb0000;">LV_EVENT_READY</code> 処理が終了した。 |
− | *<code style="color: #bb0000;">LV_EVENT_CANCEL</code> | + | *<code style="color: #bb0000;">LV_EVENT_CANCEL</code> 処理がキャンセルされた。 |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
308行目: | 315行目: | ||
They can be sent to any object with <code style="color: #bb0000;">lv_event_send(obj, MY_EVENT_1, &some_data)</code> | They can be sent to any object with <code style="color: #bb0000;">lv_event_send(obj, MY_EVENT_1, &some_data)</code> | ||
− | | | + | |カスタムイベントコードは、<code style="color: #bb0000;">uint32_t MY_EVENT_1 = lv_event_register_id();</code>で登録することができます。 |
− | + | 任意のオブジェクトに<code style="color: #bb0000;">lv_event_send(obj, MY_EVENT_1, &some_data)</code>で送ることができる。 | |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
329行目: | 336行目: | ||
lv_event_send(mbox, LV_EVENT_VALUE_CHANGED, &btn_id); | lv_event_send(mbox, LV_EVENT_VALUE_CHANGED, &btn_id); | ||
</syntaxhighlight> | </syntaxhighlight> | ||
− | | | + | |手動でオブジェクトにイベントを送るには、<code style="color: #bb0000;">lv_event_send(obj, <EVENT_CODE> &some_data)</code>.を使ってください。 |
− | + | 例えば、ボタンを押したように見えるメッセージボックスを手動で閉じることができます(もっと簡単な方法もありますが)。 | |
<syntaxhighlight lang="C++" style="border:1px dashed gray;"> | <syntaxhighlight lang="C++" style="border:1px dashed gray;"> | ||
/*Simulate the press of the first button (indexes start from zero)*/ | /*Simulate the press of the first button (indexes start from zero)*/ | ||
353行目: | 360行目: | ||
* enable a button if some conditions are met (e.g. the correct PIN is entered) | * enable a button if some conditions are met (e.g. the correct PIN is entered) | ||
* add/remove styles to/from an object if a limit is exceeded, etc | * add/remove styles to/from an object if a limit is exceeded, etc | ||
− | |<code style="color: #bb0000;">LV_EVENT_REFRESH</code> | + | |<code style="color: #bb0000;">LV_EVENT_REFRESH</code> は特別なイベントで、オブジェクトの更新をユーザに通知するように設計されているからです。いくつかの例を挙げます。 |
− | * | + | * 1つ以上の変数(例えば、現在の時刻)に応じてテキストを更新するようラベルに通知する。 |
− | * | + | * 言語が変更されたときにラベルを更新する |
− | * | + | * ある条件が満たされたらボタンを有効にする (例: 正しい PIN が入力された場合) |
− | * | + | * 制限を超えたら、オブジェクトにスタイルを追加/削除する、など。 |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
376行目: | 383行目: | ||
* <code style="color: #bb0000;">lv_event_get_user_data(e)</code> get the pointer passed as the last parameter of <code style="color: #bb0000;">lv_obj_add_event_cb</code>. | * <code style="color: #bb0000;">lv_event_get_user_data(e)</code> get the pointer passed as the last parameter of <code style="color: #bb0000;">lv_obj_add_event_cb</code>. | ||
* <code style="color: #bb0000;">lv_event_get_param(e)</code> get the parameter passed as the last parameter of <code style="color: #bb0000;">lv_event_send</code> | * <code style="color: #bb0000;">lv_event_get_param(e)</code> get the parameter passed as the last parameter of <code style="color: #bb0000;">lv_event_send</code> | ||
− | |<code style="color: #bb0000;">lv_event_t</code> | + | |<code style="color: #bb0000;">lv_event_t</code> は、イベントコールバックに渡される唯一のパラメータで、イベントに関するすべてのデータを含んでいます。そこから以下の値を得ることができる。 |
− | *<code style="color: #bb0000;">lv_event_get_code(e)</code> | + | *<code style="color: #bb0000;">lv_event_get_code(e)</code> イベントコードを取得します。 |
− | *<code style="color: #bb0000;">lv_event_get_current_target(e)</code> | + | *<code style="color: #bb0000;">lv_event_get_current_target(e)</code> イベントが送信されたオブジェクトを取得します。すなわち、そのイベントハンドラが呼び出されているオブジェクト。 |
− | *<code style="color: #bb0000;">lv_event_get_target(e)</code> | + | *<code style="color: #bb0000;">lv_event_get_target(e)</code> イベントが最初にトリガーされたオブジェクトを取得します (以下のイベントとは異なります)。 (イベントバブリングが有効な場合、 <code style="color: #bb0000;">lv_event_get_target</code>とは異なります)。 |
− | *<code style="color: #bb0000;">lv_event_get_user_data(e)</code> | + | *<code style="color: #bb0000;">lv_event_get_user_data(e)</code> は、<code style="color: #bb0000;">lv_obj_add_event_cb</code>の最後のパラメータとして渡されたポインタを取得します。 . |
− | *<code style="color: #bb0000;">lv_event_get_param(e)</code> | + | *<code style="color: #bb0000;">lv_event_get_param(e)</code> は、<code style="color: #bb0000;">lv_event_send</code>の最後のパラメータとして渡されたパラメータを取得します。get the parameter passed as the last parameter of |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] | ||
393行目: | 400行目: | ||
|- | |- | ||
| | | | ||
− | If <code style="color: #bb0000;">lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE)</code> is enabled all events will be sent to an object's parent too. If the parent also has <code style="color: #bb0000;">LV_OBJ_FLAG_EVENT_BUBBLE</code> enabled the event will be sent to its parent and so on. | + | If <code style="color: #bb0000;">lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE)</code> is enabled all events will be sent to an object's parent too. |
+ | |||
+ | |||
+ | If the parent also has <code style="color: #bb0000;">LV_OBJ_FLAG_EVENT_BUBBLE</code> enabled the event will be sent to its parent and so on. | ||
+ | |||
+ | |||
+ | The ''target'' parameter of the event is always the current target object, not the original object. | ||
+ | |||
+ | |||
+ | To get the original target call <code style="color: #bb0000;">lv_event_get_original_target(e)</code> in the event handler. | ||
+ | |If <code style="color: #bb0000;">lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE)</code> が有効な場合、すべてのイベントはオブジェクトの親にも送信されます。 | ||
+ | |||
+ | |||
+ | 親も <code style="color: #bb0000;">LV_OBJ_FLAG_EVENT_BUBBLE</code> を有効にしている場合、イベントはその親に送られ、以下同様となります。 | ||
+ | |||
+ | |||
+ | イベントのターゲットパラメータは、常に現在のターゲットオブジェクトであり、元のオブジェクトではありません。 | ||
− | |||
− | |||
− | + | 元のターゲットを取得するには、イベントハンドラで<code style="color: #bb0000;">lv_event_get_original_target(e)</code>を呼び出します。 | |
|} | |} | ||
:[[App:Library:LVGL:docs:Overview|戻る : Previous]] | :[[App:Library:LVGL:docs:Overview|戻る : Previous]] |
2022年6月30日 (木) 23:50時点における版
https://docs.lvgl.io/8.2/overview/style.html
Events
英文 | 自動翻訳 |
---|---|
Events are triggered in LVGL when something happens which might be interesting to the user, e.g. when an object
|
LVGLでは、ユーザが興味を持ちそうなことが起こったときに、イベントが発生します。
|
Add events to the object
英文 | 自動翻訳 |
---|---|
The user can assign callback functions to an object to see its events. In practice, it looks like this: lv_obj_t * btn = lv_btn_create(lv_scr_act());
lv_obj_add_event_cb(btn, my_event_cb, LV_EVENT_CLICKED, NULL); /*Assign an event callback*/
...
static void my_event_cb(lv_event_t * event)
{
printf("Clicked\n");
}
In the example See the list of event codes for all the options.
It will be described later in more detail. More events can be added to an object, like this: lv_obj_add_event_cb(obj, my_event_cb_1, LV_EVENT_CLICKED, NULL);
lv_obj_add_event_cb(obj, my_event_cb_2, LV_EVENT_PRESSED, NULL);
lv_obj_add_event_cb(obj, my_event_cb_3, LV_EVENT_ALL, NULL); /*No filtering, receive all events*/
Even the same event callback can be used on an object with different For example: lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num1);
lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num2);
The events will be called in the order as they were added. Other objects can use the same event callback. |
ユーザーは、オブジェクトにコールバック関数を割り当てて、そのイベントを確認することができます。
実際には、以下のような感じです。 lv_obj_t * btn = lv_btn_create(lv_scr_act());
lv_obj_add_event_cb(btn, my_event_cb, LV_EVENT_CLICKED, NULL); /*Assign an event callback*/
...
static void my_event_cb(lv_event_t * event)
{
printf("Clicked\n");
}
この例では、 すべてのオプションについては、イベントコードのリストを参照してください。
これについては、後で詳しく説明します。 このように、オブジェクトにはさらにイベントを追加することができます。 lv_obj_add_event_cb(obj, my_event_cb_1, LV_EVENT_CLICKED, NULL);
lv_obj_add_event_cb(obj, my_event_cb_2, LV_EVENT_PRESSED, NULL);
lv_obj_add_event_cb(obj, my_event_cb_3, LV_EVENT_ALL, NULL); /*No filtering, receive all events*/
同じイベントコールバックでも、 例えば lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num1);
lv_obj_add_event_cb(obj, increment_on_click, LV_EVENT_CLICKED, &num2);
イベントは、追加された順番に呼び出されます。 他のオブジェクトも同じイベントコールバックを使用することができます。 |
Remove event(s) from an object
英文 | 自動翻訳 |
---|---|
Events can be removed from an object with the
|
イベントは、lv_obj_remove_event_cb(obj, event_cb) 関数または lv_obj_remove_event_dsc(obj, event_dsc) . でオブジェクトから削除できる。
|
Event codes
英文 | 自動翻訳 |
---|---|
The event codes can be grouped into these categories:
All objects (such as Buttons/Labels/Sliders etc.) regardless their type receive the Input device, Drawing and Other events. However, the Special events are specific to a particular widget type. See the widgets' documentation to learn when they are sent, Custom events are added by the user and are never sent by LVGL. The following event codes exist: |
イベントコードは、以下のカテゴリーに分類されます。
すべてのオブジェクト(ボタン/ラベル/スライダーなど)は、そのタイプに関係なく、Input device、Drawing、Otherの各イベントを受け取ります。 しかし、特別なイベントは、特定のウィジェットタイプに固有のものです。いつ送信されるかは、ウィジェットのドキュメントを参照してください。 カスタムイベントはユーザが追加するもので、LVGLから送信されることはありません。 以下のイベントコードが存在する。 |
Input device events
英文 | 自動翻訳 |
---|---|
|
|
Drawing events
英文 | 自動翻訳 |
---|---|
In |
In |
Other events
英文 | 自動翻訳 |
---|---|
|
|
Special events
英文 | 自動翻訳 |
---|---|
|
|
Custom events
英文 | 自動翻訳 |
---|---|
Any custom event codes can be registered by They can be sent to any object with |
カスタムイベントコードは、uint32_t MY_EVENT_1 = lv_event_register_id(); で登録することができます。
任意のオブジェクトに |
Sending events
英文 | 自動翻訳 |
---|---|
To manually send events to an object, use For example, this can be used to manually close a message box by simulating a button press (although there are simpler ways to do this): /*Simulate the press of the first button (indexes start from zero)*/
uint32_t btn_id = 0;
lv_event_send(mbox, LV_EVENT_VALUE_CHANGED, &btn_id);
|
手動でオブジェクトにイベントを送るには、lv_event_send(obj, <EVENT_CODE> &some_data) .を使ってください。
例えば、ボタンを押したように見えるメッセージボックスを手動で閉じることができます(もっと簡単な方法もありますが)。 /*Simulate the press of the first button (indexes start from zero)*/
uint32_t btn_id = 0;
lv_event_send(mbox, LV_EVENT_VALUE_CHANGED, &btn_id);
|
Refresh event
英文 | 自動翻訳 |
---|---|
|
LV_EVENT_REFRESH は特別なイベントで、オブジェクトの更新をユーザに通知するように設計されているからです。いくつかの例を挙げます。
|
Fields of lv_event_t
英文 | 自動翻訳 |
---|---|
|
lv_event_t は、イベントコールバックに渡される唯一のパラメータで、イベントに関するすべてのデータを含んでいます。そこから以下の値を得ることができる。
|
Event bubbling
英文 | 自動翻訳 |
---|---|
If
|
If lv_obj_add_flag(obj, LV_OBJ_FLAG_EVENT_BUBBLE) が有効な場合、すべてのイベントはオブジェクトの親にも送信されます。
|
Examples
英文 | 自動翻訳 |
---|---|
Button click event |
|
Handle multiple events |
|
Event bubbling |