el 12-08-2008 11:39 PM
Hola,
tengo la siguiente pregunta. Realicé un progama en el que utilizo un botón RING y un Control NUMERIC. Lo que tiene que hacer mi programa es que cuando muevo el botón RING, tiene que cambiar los valores del Control NUMERIC, y cuando cambio los valores en NUMERIC, tambien debe cambiar la posición del boton RING según el valor que reciba.
En el primer caso resulta todo bien, osea al mover el botón Ring, los valores de NUMERIC tambien cambian.
El segundo caso es el problema, cuando le doy algún valor manualmente ó cambio los valores de NUMERIC con sus respectivas flechas de subir ó bajar, el botón RING no cambia de posición, a pesar que sí toma los valores que asume de NUMERIC. Este es el código:
if ((event == EVENT_VAL_CHANGED)&&(ON==1))
{
GetCtrlVal (panelHandle, PANEL_VOLTAGE2, &volt);
SetCtrlVal (panelHandle, PANEL_RINGKNOB, volt);
}
talvez alguien me pueda explicar de cómo resuelvo este problema.
Gracias de antemano por toda respuesta.
Saludos.
Abel
el 12-09-2008 04:00 AM
Hola Abel,
el ring no puede tomar todos los valores del numeric, en efecto puede tomar sólo los valores que hayan sido cargados mediante la función Label/Value Pairs. En efecto, si escribes en el numeric uno de los valores exactos que aparecen en el ring, este debería cambiar; igualmente cambia si te pones en el numeric con un valor cercano a uno de ellos y actuas en las flechas hasta alcanzar el valor exacto.
Se podría obrar de tal manera que el ring tome el valor más cercano al del numeric: por ejemplo, si el ring asume valores 0 - 100 - 200... podrías poner en la callback del numeric esta línea:
SetCtrlVal (panel, PANEL_RING, RoundRealToNearestInteger (val / 100.0) * 100.0); de esta manera el ring siempre tomará la centena más cercana al valor del numeric (esto asume que ambos controles manejen valores double).
Mira al ejemplo que te pongo.
Saludos
el 12-09-2008 05:55 AM
Hola Roberto,
gracias por la pronta respuesta.
Lo que no mencioné, es que cuando en el Control NUMERIC doy los valores manualmente y enseguida <RETURN>, en ese caso si cambia la posición del botón RING. Pero cuando utilizo las flechas, ahí no cambia nada. Algún colega me mencionó que el problema puede estar en los Eventos, osea que por ejemplo no debería llamar a este Evento: (event == EVENT_VAL_CHANGED) sinó a (event == EVENT_COMMIT).
Aqui te envío todo mi programa, para que lo veas.
Nuevamente gracias.
Abel
PS. no sé cómo se añade un archivo en este mensaje, por eso te envié mi programa directo a tu correo electrónico.
el 12-09-2008 06:27 AM
Hola Abel,
cuando tratas con valores en doble precisión debes tener en cuenta la aprosimación que el sistema hace en tratarlos. En tu caso, por ejemplo, mientras que si escribes "6.4" el valor queda exacto, si bajas con las flechas desde 6.5 hasta 6.4 el valor que vas a leer podría ser 6.39999999974... asy que el pasar este valor al ring el proceso fallece.
He modificado tu función SetVoltagePS2 de esta manera:
GetCtrlVal (panelHandle, PANEL_VOLTAGE2, &volt);
SetCtrlVal (panelHandle, PANEL_NUMERIC, volt);
volt = RoundRealToNearestInteger (volt * 100.0) / 100.0;
err = SetCtrlVal (panelHandle, PANEL_RINGKNOB, volt);
logrando ver las variaciones en el ring control mientras maniobras el numeric.
Por lo de añadir archivos, debes buscar la etiqueta "Añadir archivos adjuntos" debajo del campo de etiquetas y allí podrás añadir lo que quieras (hay un límite en el tipo de archivos que se pueden añadir: no todas las extensiones son aceptadas; mira en la ayuda en línea para un elenco de tipos de archivos aceptados).
el 12-09-2008 07:26 AM
Hola Roberto,
ahora si funciona super bien. Lo único que me faltaría es la comunicación con el aparato de la foto a travez del GPIB, pero eso ya lo tengo listo; asi que gracias por tu ayuda.
Saludos.
Abel
el 12-09-2008 07:34 AM
Hola Roberto,
algo que me olvidé preguntar; solo es una cuestión de estética: Me dí cuenta que cuando muevo un botón RING ó cuando me encuentro en el Control NUMERIC, estos siempre aparecen enmarcados con una línea negra. Me imagino que esto fué diseñado asi, para que uno sepa donde se encuentra en ese momento. Existe la posibilidad de volver ese marco en transparente?
Abel
12-09-2008 07:53 AM - editado 12-09-2008 07:54 AM
el 12-09-2008 08:10 AM
Hola Roberto,
no me arrepiento de haber preguntado, es justamente lo que quería. Muchas gracias.
Abel