2011-04-27 14 views
5

Estoy tratando de programmatically crear un evento de clic en MATLAB que imitará al usuario al hacer clic en un objeto GUI. La función de devolución de llamada para el objeto es una subfunción, por lo que no puedo llamarlo directamente. Sin embargo, estoy en condiciones de obtener la propiedad de devolución de llamada desde el objeto, que termina siendo una matriz de 3 por 1 célula con el siguiente contenido:¿Cómo puedo imitar un clic de usuario para invocar una función de devolución de llamada para un objeto GUI?

@uiBlockFn/callback_til [ 188.0011] [1x1 struct] 

¿Cómo puedo invocar esta función de devolución de llamada en el código tales que imita lo que sucedería cuando un usuario hace clic en el objeto GUI?

+0

en lugar de utilizar una función parcial para la devolución de llamada, podría ponerlo en un/función privada que se puede llamar desde otro archivo? – Alex

+0

Eso sería más conveniente, pero no puedo. El autor solo me dio la función como p-code y no m-code. Y por lo que entiendo, esa función depende de varias otras subfunciones. – Anny

+0

¿En qué forma tiene la devolución de llamada? ¿Tiene un identificador de función o un nombre de cadena para la devolución de llamada? ¿Puedes obtener la función de devolución de llamada desde el objeto GUI? – gnovice

Respuesta

7

Digamos que usted tiene un objeto gráfico con mango hObject, y usted tiene la devolución de llamada para el objeto de esta manera:

callbackCell = get(hObject,'Callback'); 

Como usted ha mencionado, la serie de células callbackCell que se obtiene termina siendo un elemento 3 matriz de celdas con function handle en la primera celda y otros datos en las otras dos celdas. Cuando el callback for an object is defined as a cell array (como en su caso), el identificador de la función de devolución de llamada (o el nombre de cadena) se almacena en la primera celda y los argumentos de entrada adicionales que desea pasar a la función de devolución de llamada están en las celdas restantes.

Sin embargo, cuando se invoca esta devolución de llamada cuando se activa el objeto, MATLAB insertará automáticamente 2 argumentos adicionales al principio de la lista de argumentos de entrada. Estos son:

  • hObject: El identificador del objeto cuya devolución de llamada se está realizando.
  • eventData: Una estructura de datos relacionada con el evento activado por el usuario, que a menudo es simplemente la matriz vacía [] (excepto en a few cases).

Por lo tanto, si se quiere imitar la acción del objeto que está siendo activada por el usuario, que se desea invocar la función de devolución de llamada de la siguiente manera (suponiendo que no hay datos de eventos necesarios):

callbackCell{1}(hObject,[],callbackCell{2:end}); 
+0

Excelente, funciona perfectamente. ¡Gracias! – Anny

Cuestiones relacionadas