15.4.4 コールバック
コールバック関数はグラフィックスオブジェクトに関連付けることができ、特定のイベントが発生した後に呼び出されます。すべてのコールバック関数の基本構造は次のとおりです。
function mycallback (hsrc, evt) ... endfunction
ここでhsrc、はコールバックのソースへのハンドルであり、evt イベント固有のデータを提供します。
関数は、単純な Octave 関数への関数ハンドル、匿名関数、または Octave コマンドを表す文字列として提供できます。後者の構文は、文字列が評価されるときにのみ構文エラーが発生するため、推奨されません。関数ハンドルのセクションを参照してください。
これは、オブジェクトの作成時に、または後で関数に関連付けることができますset。たとえば、
plot (x, "DeleteFcn", @(h, e) disp ("Window Deleted"))
プロットが削除された瞬間にメッセージ "Window Deleted"が表示されます。
追加のユーザー引数をコールバック関数に渡すことができ、2 つのデフォルト引数の後に渡されます。例:
plot (x, "DeleteFcn", {@mycallback, "1"})
...
function mycallback (h, evt, arg1)
fprintf ("Closing plot %d\n", arg1);
endfunction
コールバック関数の 2 番目の引数はevt、Qt グラフィックス ツールキットでは部分的にしか実装されていません。
Mouse click events: evtクラスdouble値です。左クリックの場合は 1、中央クリックの場合は 2、右クリックの場合は 3 です。
Key press events: フィールド(文字列)、 (文字列)、(文字列のセル配列) evtを持つ構造体です。KeyCharacterModifier
Other events: evtクラスはdouble空の行列です。
すべてのグラフィックスオブジェクトで使用できる基本的なコールバック関数は、
CreateFcn: オブジェクトの作成時に呼び出されます。オブジェクトが何らかの方法で変更された場合は呼び出されないため、このコールバックはオブジェクトを定義する関数呼び出しでのみ定義する意味があります。関数CreateFcnで後で追加されたコールバックsetは実行されません。
DeleteFcn: オブジェクトが削除された瞬間に呼び出されます。
ButtonDownFcn: ポインタがこのオブジェクトの上にあるときにマウス ボタンが押されると呼び出されます。gnuplot インターフェイスはこのコールバックを実装していないことに注意してください。
drawnowデフォルトでは、、、、、または関数が使用されない限り、コールバック関数はキューに入れられます(イベント キューで次々に実行されます) 。実行中のコールバックがこれらの関数のいずれかを呼び出すとfigure、Octave はイベント キューをフラッシュし、その結果、実行中のコールバックが中断されます waitfor。 getframepause
interruptibleオブジェクトのプロパティを に設定することで、オブジェクトのコールバックが中断されないように指定することができます。この場合、Octave は中断するコールバック オブジェクトのプロパティ"off"に基づいて、何を行うかを決定します。 busyaction
queue (the default)
実行中のコールバックが返された後に、中断中のコールバックが実行されます。
cancel
中断したコールバックは破棄されます。
interruptible中断するコールバックがdeletefcn、または図resizefcnまたは である場合、このプロパティは効果がありませんcloserequestfcn。これらのコールバックは常に実行中のコールバックを中断します。
実行中のコールバックを保持するオブジェクトへのハンドルは、gcbo関数を使用して取得できます。 このオブジェクトの祖先図形へのハンドルは、gcbf関数を使用して取得できます。
: h = gcbo ()
: [h, fig] = gcbo ()
現在コールバックが実行されているオブジェクトへのハンドルを返します。
コールバックが実行されていない場合、この関数は空のマトリックスを返します。このハンドルはルート オブジェクト プロパティから取得されます"CallbackObject"。
2 番目の出力引数で呼び出されると、現在コールバックが実行されているオブジェクトを含む図のハンドルを返します。コールバックが実行されていない場合は、2 番目の出力も空のマトリックスに設定されます。
See also: gcbf, gco, gca, gcf, get, set.
: fig = gcbf ()
現在コールバックが実行されているオブジェクトを含む図へのハンドルを返します。
コールバックが実行されていない場合、この関数は空の行列を返します。この関数によって返されるハンドルは、の 2 番目の出力引数と同じですgcbo
See also: gcbo, gcf, gco, gca, get, set.
以下で説明する関数を使用して、プロパティにコールバックを同様に追加することもできますaddlistener 。