Mouse Button Press distinction

조회 수: 12 (최근 30일)
Khalid Mahmood
Khalid Mahmood 2021년 4월 15일
답변: Jixiong Su 2023년 11월 1일
SelectionType property of figure tells which mouse button was pressed along with modifier (ctrl or shift).
Normal: Left Mouse Button.
extend: i) Shift+LeftMouseButton OR ii) Middle Mouse Button OR iii) Both Left and Right Buttons
alt: i) CTRL+LeftMouseButton OR ii) Right Mouse button
open: Double Click Any Mouse Button.
1: Why CTRL+LeftMouseButton and CTRL+RightMouseButton return same code in mouse events? Its only in Matlab.
2: I want to distinguish between CTRL+LeftMouseButton and CTRL+RightMouseButton. How to do this?
  댓글 수: 2
Khalid Mahmood
Khalid Mahmood 2021년 4월 15일
I used WindowKeyPressFcn and WindowKeyRelease fcn in parallel to WindowButtonDownFcn and I am able to distinguish all combinations of modifiers and mouse buttons.
In WindowKeyPressFcn(src,evt) I just set a flag (ModifierPresent=true) and ModifierName=evt.Key.
In WindowKeyReleaseFcn(src,evt) I just set a flag (ModifierPresent=false) and ModifierName=' '.
In WindowButtonDownFcn I query(src,'SelectionType') and check if(ModifierPresent) then ModifierName tells which modifier is used...
Is there any simple way?
Khalid Mahmood
Khalid Mahmood 2021년 4월 17일
편집: Khalid Mahmood 2021년 4월 19일
Ooooch,
  1. I forgot that my pupose was to distinguish between CTRL+LeftClick and CTRL+RightClick. Which still remains the issue
  2. I was able to use evt.Key for Keyboard keys and Modifiers (evt.Modifier) using WindowKeyPress/Release functions, which can't be done using WindowButtonDown/Up functions for all keys
Can anybody help me to distinguish between CTRL+Left Mouse Button Click and Ctrl+ Right Mouse Button Click. My code is attached

댓글을 달려면 로그인하십시오.

답변 (2개)

Sufia Tanveer
Sufia Tanveer 2021년 4월 19일
I have tested your code. Your code is great work. Matlab developers have somehow missed that distinction of modifier + right mouse button. I have searched help and found you are 💯% correct. What I can say is, it may have not been rectified by developers. That's why nobody else has given you answer.
  댓글 수: 1
Khalid Mahmood
Khalid Mahmood 2021년 4월 19일
I accept your answer, but I am waiting for some senior programmer or matlab staff members to answer to be precise

댓글을 달려면 로그인하십시오.


Jixiong Su
Jixiong Su 2023년 11월 1일
distinguish between Ctrl+click and click
fig = uifigure();
Error using matlab.internal.lang.capability.Capability.require
This functionality is not available on remote platforms.

Error in matlab.ui.internal.uifigureImpl (line 32)
Capability.require(Capability.WebWindow);

Error in uifigure (line 34)
window = matlab.ui.internal.uifigureImpl(varargin{:});
fig.WindowButtonDownFcn = @figureClickCallback;
fig.KeyPressFcn = @figureKeyPressCallback;
fig.KeyReleaseFcn = @figureKeyReleaseCallback;
fig.UserData.CtrlPressed = false;
function figureClickCallback(src, ~)
if strcmp(src.SelectionType, 'alt') && src.UserData.CtrlPressed
% Ctrl + Left Click
disp('Ctrl + Left Click');
elseif strcmp(src.SelectionType, 'normal')
% Left Click
disp('Left Click');
% Right Click
elseif strcmp(src.SelectionType, 'alt')
disp('Right Click');
end
end
function figureKeyPressCallback(src, event)
if strcmp(event.Key, 'control')
src.UserData.CtrlPressed = true;
end
end
function figureKeyReleaseCallback(src, event)
if strcmp(event.Key, 'control')
src.UserData.CtrlPressed = false;
end
end

카테고리

Help CenterFile Exchange에서 Interactive Control and Callbacks에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by