Main Content

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 ejesPickablePartsHiltTestResultado 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 propiedad HitTest 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.