Avoid deleting of datatip when clicking on marker

1 回表示 (過去 30 日間)
Sebastian Hölz
Sebastian Hölz 2024 年 6 月 6 日
回答済み: Sebastian Hölz 2024 年 6 月 12 日
When creating a datatip DT, it is deleted when I click on the marker without moving the DT.
Example:
figure
h = plot(rand(100,1));
DT = datatip(h,'DataIndex',22);
Now, clicking on the marker of the DT without moving this, will delete the DT when releasing the mouse-button. Important: I still want to be able to move the DT, it should just not be deleted when clicking on it without moving it.
Is there a simple way of preventing this from happening? I implemented a solution using listeners and undocumented stuff, but I was wondering if there is a simple solution that I'm just missing.

採用された回答

Sebastian Hölz
Sebastian Hölz 2024 年 6 月 12 日
OK, here my solution which allows to move the DT, allows deleting the DT via contextmenu and restores it when being deleted by clicking on the DT. I don't quite like the fact that I cannot avoid the DT from being destroyed and have to restore it. Also, checking the stack to allow for deleting when being called by the contexmenu is a hack which might not work sometimes in the future. So, if anyone finds a more documented solution, I would be glad to hear it.
function DataTip_test
figure
h = plot(rand(100,1));
DT = datatip(h,'DataIndex',22);
addlistener(DT, 'ObjectBeingDestroyed',@RestoreDT);
% ==========================
function RestoreDT(varargin)
% Allow deleting when parent line is being deleted
if strcmp(h.BeingDeleted,'on'); return; end
% Allow deleting, if triggered by context menu
db = dbstack;
if strcmp(db(end).file,'createContextMenu.p'); return; end
% Otherwise, restore datatip
DT = datatip(h, 'DataIndex',DT.DataIndex);
addlistener(DT, 'ObjectBeingDestroyed',@RestoreDT);
end
end

その他の回答 (1 件)

Matlab Pro
Matlab Pro 2024 年 6 月 6 日
Just set the 'PickableParts' = 'none'
DT = datatip(h,'DataIndex',22,'PickableParts','none');
  1 件のコメント
Sebastian Hölz
Sebastian Hölz 2024 年 6 月 7 日
編集済み: Sebastian Hölz 2024 年 6 月 10 日
My original question was not quite complete. I still want to be able to drag the DT to a different position. It should just not be deleted when I click on it without dragging it. Thus, the above answer does not solve my problem.
Sorry for not being precise enough, I have updated the original question to mention this.

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCreating, Deleting, and Querying Graphics Objects についてさらに検索

Translated by