0

私は EEGlab のeegplot機能 (vim スタイルのナビゲーションなど) を修正する作業を行っていWindowKeyPressFcnます。
しかし、何らかの理由でコールバックが呼び出されていません。私はしばらく問題をデバッグしてきましたが、少し迷っています。何が間違っているのかについての提案を探しています。残念ながら、eegplot関数は大きく、複雑で、やや複雑であり、簡単な例で問題を再現できませんでした。したがって、明らかに存在する関数ハンドルがある時点で使用されなくなる可能性がある理由について、一般的な提案を探していWindowKeyPressFcnます。

これまでに学んだことは次のとおりです。

  • デバッグ モードに移行するとeegplot(setup 関数 [eegplot の前半] の終了近くにブレークポイントを設定) WindowKeyPressFcn、少なくとも 1 回は実行できます。
  • ただし、関数はデバッグ中のある時点で呼び出されなくなります (一度だけ呼び出された後でも)。
  • デバッグなしで実行eegplotすると (つまり、終了して制御が返されるのを待ちます) WindowKeyPressFcn、キーを押して呼び出すことができません。関数ハンドルはWindowKeyPressFcnFigure のプロパティにまだ存在します。
  • キーWindowKeyPressFcnを押したときに が使用されていない場合でも、次のように呼び出すことができます。

    figh = gcf;
    fun = get(figh, 'WindowKeyPressFcn');
    ev.Key = 'rightarrow';
    ev.Character = ' ';
    ev.Modifier = [];
    feval(fun, figh, ev);
    

したがって、関数ハンドルはいわば「健全」ですが、キーが押されて Figure にフォーカスがある場合、何らかの理由で使用されなくなります。いつ、なぜこのようなことが起こり得るのでしょうか? この問題を理解するために確認する必要があることについてのアイデアはありますか?

更新:
WindowKeyPressFcn コールバックが一部のウィンドウ リスナーによってブロックされる場合があることがわかり、次の解決策を試しました。

hManager = uigetmodemanager(gcf);
set(hManager.WindowListenerHandles,'Enable','off');

動作しません - キーを押しても WindowKeyPressFcn は呼び出されません。:(

更新 2 :
動作しない別のこと:

chld = get(gcf, 'Children');
tp = get(chld, 'type');
chld = chld(strcmp(tp, 'uicontrol'));
set(chld, 'KeyPressFcn', @eegplot_readkey_new)

eegplot_readkey_newキープレスに反応するために使用する機能です)

更新 3 :
そして別の 1 つが動作していません:

addlistener(gcf, 'WindowKeyPress', @eegplot_readkey_new);
4

1 に答える 1