@JohnColbyが提供する答えはGETLINE.m機能ファイルを編集して、あなたの問題を解決します。基本的には、ダブルクリックが実行されたかどうかをチェックするすべての行をコメントアウトします。この情報は、'SelectionType'
Figureプロパティを照会することによって取得されます。あなたが私に似ているとあなたは組み込み関数に変更を加える嫌う場合
あるいは、既存のすべての機能を変更関与しない、次の解決策を検討してください。ここでは、我々はそれを使用する方法の例です:
h = addlistener(handle(gcf), 'WindowButtonDownFcn', 'PostSet', @changedWBDFcn);
[x,y] = getline();
delete(h)
plot(x,y, 'Color','r')
アイデアは'WindowButtonDownFcn'
フィギュアプロパティが変更トリガますイベントリスナーを作成することです。以前に設定したコールバック関数の直前に呼び出される関数を挿入するために使用します(実際には、コールバックを最後のものを呼び出す独自の関数に置き換えます)。
これにより、コールがダブルクリックによってトリガされたかどうかをチェックするセクションを挿入し、そのようなイベントをスキップすることができます。 getlineのは最初の2例を区別するためにflag
変数のように使用、その後のクリックで呼び出されるNextButtonDown
を設定最初のクリック、上FirstButtonDown
を呼び出すため
これは、二回行わなければなりませんでした。
上記イベントリスナー関数のコード:
function changedWBDFcn(src,ev,flag)
hFig = ev.AffectedObject; %# figure handle
currFcn = ev.NewValue; %# current callback function
delete(src); %# delete event listener
if nargin < 3, flag = false; end %# determine flag
%# hijack WindowButtonDownFcn function
set(hFig, 'WindowButtonDownFcn',{@wbdFcn,currFcn,flag})
%# callback function
function wbdFcn(o,e,currFcn,flag)
%# skip anything but single-clicks
if ~strcmpi(get(hFig,'SelectionType'),'normal')
return
end
%# evaluate previous callback function
hgfeval(currFcn) %# getline('FirstButtonDown'),getline('NextButtonDown')
%# repeat process after first click
if flag
addlistener(handle(hFig), 'WindowButtonDownFcn', ...
'PostSet', {@changedWBDFcn,true});
end
end
end
こんにちは、あなたの助けに感謝します、しかし、私は少し違っそれをしなければならなかった(と思う)、私は「のSelectionType例をコメントアウトするために必要な'は' open 'ではなく' normal 'であり、すなわち325> 328行と288> 290行であった。しかし、これは今働くので、ありがとう! – Tom