Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

Pasar el clic del ratón al grupo principal

Este ejemplo muestra cómo un grupo de objetos puede pasar el clic de un ratón a un elemento principal que funciona en todos los objetos del grupo.

Objetivo y diseño

Suponga que desea que un solo clic de ratón sobre cualquier miembro de un grupo de objetos ejecute un callback de botón que afecte a todos los objetos del grupo.

  • Defina los objetos de gráficos que desea añadir al grupo.

  • Asigne un objeto hggroup como el elemento principal de los objetos de gráficos.

  • Defina la función que se deba ejecutar cuando se haga clic sobre cualquiera de los objetos. Asigne su identificador de función a la propiedad ButtonDownFcn del objeto hggroup.

  • Establezca la propiedad HitTest de cada objeto en el grupo en off de forma que el clic del ratón pase al elemento principal del objeto.

Jerarquía de objetos y propiedades clave

Este ejemplo emplea la siguiente jerarquía de objetos.

Código de MATLAB

Cree un archivo con dos funciones:

  • pickPatch: la función principal que crea los objetos de gráficos.

  • groupCB: la función local del callback de hggroup.

La función pickPatch crea tres objetos de parche y los asigna a un objeto hggroup. Establecer la propiedad HitTest de cada parche en desactivado dirige los clics del ratón al elemento principal.

function pickPatch
   figure
   x = [0 1 2];
   y = [0 1 0];
   hGroup = hggroup('ButtonDownFcn',@groupCB);
   patch(x,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
   patch(x+2,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
   patch(x+3,y,'b',...
      'Parent',hGroup,...
      'HitTest','off')
end

El callback de groupCB funciona en todos los objetos de hggroup. La función groupCB utiliza el argumento original del callback pasado al callback (src) para obtener los identificadores de los objetos de parches.

Al utilizar el argumento original del callback (que es el identificador del objeto hggroup) se elimina la necesidad de crear datos globales o pasar argumentos adicionales al callback.

Al hacer clic con el botón izquierdo sobre cualquier parche, cambia el color de la cara de los tres parches a un valor de color RGB aleatorio.

function groupCB(src,~)
   s = src.Children;
   set(s,'FaceColor',rand(1,3))
end

Para obtener información sobre las funciones de callback, consulte Definición de callback