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
Supongamos que desea que un solo clic de ratón de cualquier miembro de un grupo de objetos ejecute un callback del botón que afecte a todos los objetos del grupo.
Defina los objetos de gráficas que desea añadir al grupo.
Asigne un objeto
hggroup
como el elemento principal de los objetos de gráficas.Defina la función a ejecutar cuando se haga clic sobre cualquiera de los objetos. Asigne la administración de dicha función a la propiedad
ButtonDownFcn
del objetohggroup
.Establezca la propiedad
HitTest
de cada objeto en el grupo enoff
de forma que el clic del ratón pase al elemento principal del objeto.
Jerarquía del objeto 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 gráficos.groupCB
: la función local del callback dehggroup
.
La función pickPatch
crea tres objetos de parche y los asigna a un objeto de hggroup
. Establecer la propiedad HitTest
de cada parche en desactivado dirige los clic 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 del 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 principal 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 Create Callbacks for Graphics Objects