Captura de los clics del ratón
Propiedades que controlan las respuestas a los clics del ratón
Existen dos propiedades que determinan si los objetos responden a los clics del ratón y cómo lo hacen:
PickableParts
: determina si un objeto captura los clics del ratón.HitTest
: determina si el objeto puede responder al clic del ratón que captura o pasa el clic a su antecesor más próximo.
Los objetos pasan el clic a través de la jerarquía del objeto hasta llegar a un objeto que pueda responder.
Programación de una respuesta a un clic del ratón
Cuando un objeto captura y responde a un clic del ratón, el objeto:
Ejecuta su función de botón como respuesta a un clic con el botón principal del ratón; si el objeto define un callback para la función
ButtonDownFcn
, MATLAB® ejecuta este callback.Muestra el menú contextual en respuesta a un clic en el botón secundario del ratón. Si el objeto definió un menú contextual mediante la propiedad
ContextMenu
, MATLAB recurre a este menú contextual.
Nota
Las figuras no tienen una propiedad PickableParts
. Las figuras ejecutan las funciones de callback del botón independientemente de la configuración de su propiedad HitTest
.
Nota
Si la propiedad PickableParts
de los ejes está establecida en 'none'
, los elementos secundarios de los ejes no pueden captar los clics del ratón. En este caso, la figura capta todos los clics del ratón.
Combinaciones de los valores PickablePart/HitTest
Utilice las propiedades PickableParts
y HitTest
para implementar los siguientes comportamientos:
El objeto sobre el que se hizo clic capta el clic del ratón y responde con un callback del botón o un menú contextual.
El objeto sobre el que se hizo clic capta el clic del ratón y lo pasa a uno de sus antecesores, que pueden responder con un callback del botón o con un menú contextual.
El objeto sobre el que se hizo clic no lo capta. Los objetos detrás del objeto sobre el que se ha hecho clic pueden captar el clic del ratón.
En esta tabla se resume la respuesta al clic de un ratón según los valores de la propiedad.
PickableParts de los ejes | PickableParts | HiltTest | Resultado de hacer clic con el ratón |
---|---|---|---|
visible/todo | visible (valor predeterminado) | activado (valor predeterminado) | Hacer clic en las partes visibles de un objeto ejecuta el callback del botón o recurre a un menú contextual |
visible/todo | todo | activado | Hacer clic en cualquier parte del objeto, incluso si no es visible, hace al objeto actual y ejecuta el callback del botón o recurre a un menú contextual |
visible/todo/nada | nada | activado/desactivado | Hacer clic en el objeto nunca lo hace el objeto actual y nunca puede ejecutar el callback del botón o recurrir a un menú contextual |
nada | visible/todo/nada | activado/desactivado | Hacer clic en cualquier elemento secundario de los ejes nunca ejecuta el callback del botón ni recurre a un menú contextual |
MATLAB busca antecesores utilizando la propiedad Parent
de cada objeto hasta que encuentra un antecesor compatible o alcanza la figura.
Elevar el clic del ratón en la jerarquía
Tenga en cuenta la siguiente jerarquía de objetos y sus configuraciones de propiedades PickableParts
y HitTest
.
Este código crea la jerarquía:
function pickHit f = figure; ax = axes; p = patch(rand(1,3),rand(1,3),'g'); l = line([1 0],[0 1]); set(f,'ButtonDownFcn',@(~,~)disp('figure'),... 'HitTest','off') set(ax,'ButtonDownFcn',@(~,~)disp('axes'),... 'HitTest','off') set(p,'ButtonDownFcn',@(~,~)disp('patch'),... 'PickableParts','all','FaceColor','none') set(l,'ButtonDownFcn',@(~,~)disp('line'),... 'HitTest','off') end
Haga clic en la línea
Haga clic con el botón principal en la línea:
La línea pasa a ser un objeto actual pero no ejecuta su callback de
ButtonDownFcn
porque su propiedadHitTest
estáoff
.La línea pasa el golpe al antecesor más cercano (los ejes principales) pero los ejes no pueden ejecutar su callback de
ButtonDownFcn
de modo que los ejes pasan el golpe a la figura.La figura puede ejecutar su callback, así que MATLAB muestra
figure
en la ventana de comandos.
Haga clic en el parche
El parche FaceColor
es none
. Sin embargo, el parche PickableParts
es all
, de forma que puede seleccionar el parche al hacer clic en el borde y la cara vacía.
La propiedad HitTest
del parche está on
de forma que el parche puede ser el objeto actual. Cuando el parche se convierte en el objeto actual, ejecuta el callback del botón.