Tengo el siguiente problema. Tengo una interfaz gráfica con varios componentes. Entre ellos tengo un edit y un axes.
Lo que estoy tratando de hacer es controlar que lo único que se escriba en el edit sean números. Lo hago con una función y funciona bien. Una vez que el edit pierde el foco o se presiona ENTER si el dato entrado es un numero se realiza una función y sino se muestra un msgbox (modal).
Ahora, quiero aclarar que tengo una función llamada mousedraw, que se encarga de permitir al usuario dibujar con el mouse en el axes. Utilizando los eventos: buttondownfcn, windowbuttonmotionfcn y windowbuttonupfcn.
Aquí el código:
Código
function mousedraw(handles) A=handles.axesToDrawOn; % axesToDrawOn es el handle al axes function start_pencil(src,eventdata, handles) x=coords(1,1,1); y=coords(1,2,1); global lineCoords; newPoint = [coords(1,1,1) coords(1,2,1)]; lineCoords = newPoint; r=line(x, y, 'color', [0 .5 1], 'LineWidth', 2, 'hittest', 'off'); %Poniendo hittset off nos permite dibujar una linea que comience encima de una linea que ya este dibujada function continue_pencil(src,eventdata,r) %src es ahora el handle del figure, y no del axes, por lo tanto necesitamos usar gca. x=coords(1,1,1); y=coords(1,2,1); global lineCoords; newPoint = [coords(1,1,1) coords(1,2,1)]; D = [lineCoords; newPoint]; lineCoords = D; %obtener las coordenadas de la linea existente y agregarle las nuevas newx=[lastx x]; newy=[lasty y]; function done_pencil(src,evendata) %Desactiva la función e movimiento global lineCoords
Mi problema es que si la manera en que el edit perdió el foco es haciendo un click sobre el axes, como que se queda colgado el evento buttondownfcn, pues se reconoce que lo entrado no es válido (osea, no es un número), se muestra el errordlg, pero al hacer click en aceptar, pues como que se ejecuto el evento y se comenzó a dibujar desde que se hizo click en el axes para hacer al edit perder el foco, y entonces esta dibujando con el mouse levantado, sin hacer click.
Espero que me haya explicado bien, sino que alguien me diga y explico mejor.
Gracias de antemano.
PD: El callback del edit es el siguiente:
Código
function xMinEdit_Callback(hObject, eventdata, handles) if(isnan(IsNumber(Val))) else handles.xMin=NewVal; end guidata(hObject, handles); if (isempty(num)==0) else end end
Salu2s