miércoles, 7 de mayo de 2014

Personalizar un msgbox


Para comenzar, un msgbox es un elemento gráfico utilizado para enviar mensajes al usuario, por ejemplo una sugerencia, un mensaje de advertencia o error. La sintaxis más simple para crear un msgbox es la siguiente:

msgbox('Mensaje','Título de la ventana');

Con la sintaxis anterior se muestra un msgbox con características ordinarias y establecidas por defecto, como el que se muestra enseguida:



La función msgbox no cuenta con argumentos de entrada que sirvan para especificar una apariencia diferente del cuadro de diálogo mostrado. Pero existe la posibilidad de personalizar un msgbox accediendo mediante referencias (handles) a sus componentes gráficos elementales.

Modificando el color de la ventana

Es evidente que la ventana gráfica de un msgbox es un elemento figure y por tanto pueden modificarse sus propiedades como tal; para ello debe utilizarse el handle del msgbox como argumento de la función set, véase el ejemplo mostrado enseguida:

h=msgbox('MATLAB TYP','V1');
set(h,'color','g'); % Establece color verde para la ventana



Modificando el tamaño, estilo y tipo de fuente.

Para configurar las propiedades del mensaje que se muestra debemos acceder a la referencia del edit text que lo contiene; utilizando la función allchild se obtienen todos los elementos gráficos "hijos" del objeto pasado como argumento, por ejemplo para el msgbox en cuestión:

h=msgbox('MATLAB TYP','V1');
ch = allchild(h);

La función allchild nos devuelve simplemente las referencias o handles de los objetos pero no indica el tipo de los mismos, para identificar el tipo de objeto gráfico puede utilizarse la función get como sigue:

>> get(ch,'type')

ans = 

    'axes'
    'uicontrol'

El objeto uicontrol es el botón mostrado en el msgbox, y el axes es el elemento que contiene al edit text que nos interesa; para obtener el handle del edit text podemos utilizar la función get como se muestra enseguida:

txt=get(ch(1),'children')

Con la  linea anterior se obtiene y guarda en la variable txt el handle del objeto "hijo" del axes, que en este caso es el edit text. Ahora, una vez que se dispone de la referencia, pueden modificarse las propiedades del edit text de forma ordinaria con la función set, en nuestro caso modificaremos específicamente la propiedad tamaño (FontSize), estilo (FontWeight) y tipo (FontName), véase el ejemplo siguiente:

h=msgbox('MATLAB TYP','V1');
ch = allchild(h);
txt = get(ch(1),'children');
set(txt,'FontSize',12,'FontName','Berlin Sans FB','FontWeight','bold');




Modificando el texto mostrado en el botón

El botón de un msgbox muestra por defecto un "OK", pero claro, es posible modificarlo y adaptarlo a las necesidades del usuario. Se mencionó con anterioridad que una de las referencia obtenidas y guardadas en la variable ch pertenecía al botón, entonces, para modificar el mensaje utilizamos esa referencia en la función set y configuramos la propiedad String como se muestra a continuación:

h=msgbox('MATLAB TYP','V1');
ch = allchild(h);
set(ch(2),'String','Cerrar');






1 comentario:

  1. Buen día, es posible crear un msgbox cuyo contenido sea variable dependo del valor de una variable; de la misma manera seria posible hacer lo mismo en un imread, es decir que lea con una sola línea cualquier imagen (el nombre de las imágenes son números)
    algo como esto:
    msgbox (variable);
    fot = imread('#.jpg'); %carga la foto que se mostrara
    imshow(fot); %muestra la foto

    ResponderBorrar