外部インタフェース/API | ![]() ![]() |
ActiveXイベントは、コントローラが興味があることが発生したことをcomtainerに通知したいときに呼び出されます。たとえば、多くのコントロールは、ユーザがコントロール上でシングルクリックしたときにイベントをトリガします。MATLABでは、コントロールが作成されるとき、actxcontrol
コマンドの最後の引数として、またはイベントハンドラを含むセル配列としてオプションでコールバック(イベントハンドラ関数 としても知られています)を与えます。
h = actxcontrol (progid [, position [, handle ... [, callback | {event1 eventhandler1; event2 eventhandler2; ...}]]])
イベントハンドラ関数(callback
)は、コントロールがイベントをトリガするときにコールされます。イベントハンドラ関数は、つぎの形式で、可変数の引数を受け取るM-ファンクションでなければなりません。
function event (varargin) if (str2num(vararg{1}) == -600) disp ('Click Event Fired'); end
この関数に渡されるすべての引数は、MATLAB文字列です。イベントハンドラの第一引数は、イベントハンドラをコールさせるイベント数を表わす文字列です。残りの引数は、イベントと共にコントロールによって渡される値です。これらの値は、用いられるイベントとコントロールにより異なります。呼び出しをコントロールするイベントのリストと対応するイベント数とパラメータは、コントロールのドキュメントから得る必要があります。MATLABでイベントを利用するには、イベントハンドラでそれらを使うために、コントロールがイベントに対して使う数値を見つける必要があります。
セル配列形式で使われるイベントハンドラは、コールバック形式で使われるものとわずかに異なります。セル配列形式の第一引数は、オブジェクト自身を参照します。第二引数はイベントの数で、コールバック形式と異なり、数値を表わす文字列ではありません (その後の引数は、イベントにより異なります)
つぎのイベントハンドラの例myclick.m
, my2click.m
, mymoused.m
は、actxcontrolの例題に対応します。
function myclick(varargin) disp('Single click function') function my2click(varargin) disp('Double click function') function mymoused(varargin) disp('You have reached the mouse down function') disp('The X position is: ') varargin(5) disp('The Y position is: ') varargin(6)
セル配列の組を使って、モニターしたいすべてのイベントに対して同じイベントハンドラを使うことができます。応答時間は、コールバック形式を使うよりも良くなります。
h = actxcontrol('SELECTOR.SelectorCtrl.1', [0 0 200 200], f, ... {'Click' 'allevents'; 'DblClick' 'allevents'; ... 'MouseDown' 'allevents'})
function allevents(varargin) if (varargin{2} = -600) disp ('Single Click Event Fired') elseif (varargin{2} = -601) disp ('Double Click Event Fired') elseif (varargin{2} = -605) disp ('Mousedown Event Fired') end
![]() | set | Additional ActiveXクライアントの情報 | ![]() |