LabWindows/CVI

cancel
Showing results for 
Search instead for 
Did you mean: 

PROBLEMA URGENTE PARA ACABAR EL PROYECTO

Solved!
Go to solution

Muy buenas:

 

Tengo un problema en el programa que he hecho ayudandome de distintos programas ya creados y me gustaria saber como puedo cambiar el valor al PANEL_STRING_LENGTH de mi programa porque aunque lo he cambiado en la extensión .uir al final siempre me coloca un valor de 10 y me gustaria que aumentara a uno de 11. Gracias y adjunto el programa.

Download All
0 Kudos
Message 1 of 8
(4,612 Views)
Solution
Accepted by topic author mikelmoyano

Hola, si quieres cambiar valor a un control, simplemente debes pasarle el valor correcto; de ninguna manera debes pasar operaciones en el controlID. Esto es: en tu codigo aparece la línea

            SetCtrlVal (panel, PANEL_STRING_LENGTH+1, barcodeResult->size );

que es incorrecta. Debes ponerle:

            SetCtrlVal (panel, PANEL_STRING_LENGTH , barcodeResult->size  + 1);


No puedo testear tu proyecto porque no tengo instalado el vision, pero puedo controlar que PANEL_STRING_LENGTH+1 es el identificativo del control PANEL_CHANNEL2 en tu panel; esto es, con tu instrucción estás pasando el valor a un control diferente al que quieres; si controlas el valor restituido por tu función (poniendo error = SetCtrlVal...) verás que recibes un código de error.

 

Esto es un elemento muy básico del CVI: el nombre de un control es un identificativo dentro del panel que le acoge, y es traducido en una variable de tipo int (puedes comprobarlo mirando al include asociado a tu archivo uir). En tu caso, PANEL_STRING_LENGHT tiene valor 7; si pones PANEL_STRING_LENGHT+1, pasas al SetCtrlVal el ID 8, que corresponde a un diferente control en tu panel.

Message Edited by Roberto Bozzolo on 04-30-2009 04:33 PM


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
0 Kudos
Message 2 of 8
(4,604 Views)

Muy Buenas Roberto:

 

Y antes de nada muchas gracias por toda la ayuda prestada, pero en la ultima cuestion que publique en el foro no era realmente lo que yo queria sino que yo pensaba que el STRING_LENGTH afentaba al TEXTBOX, esto es que al poner el valor 11 en el STRING_LENGTH en el TEXTBOX aparecian los 11 ultimos numeros del codigo de barras porque los 2 primeros ya aparecen en los paneles CC_1 y CC_2, pero al llevar a cabo tus explicaciones me ha dado cuenta de que eso no es asi, entonces realmente lo que necesito es que en el TEXTBOX aparezcan los 11 ultimos numeros del codigo de barras.

 

Y por ultimo tengo un pequeño error, que es mas que nada para que me quede bonito el proyecto, el problema es que yo tengo un interruptor que hace las veces de parada de emergencia, entonces mientras el proceso esta en marcha yo pulso la parada de emergencia y me sale una ventana diciendome lo siguiente:

 

"!!!! EMERGENCIA ¡¡¡¡\n\
SE HA ACTIVADO LA PARADA DE EMERGENCIA.\n\
PARA DESACTIVARLA PONGALA A LA DERECHA.\n"

 

Y al desactivar la parada de emergencia lo que me ocurre es que me aparece en pantalla la ventana de DECODE_BARCODE_WINDOW y me gustaria o desactivar las 2 ventanas, esta y la ventana de BARCODE_WINDOW, o que apareciesen las dos porque el hecho de que aparezca solo una queda raro. De verdad que muchas gracias y un saludo.

0 Kudos
Message 3 of 8
(4,563 Views)

Mikel, no hay manera de hacer lo que quieres en el textbox, ya que los límites (atributos ATTR_MAX_ENTRY_LENGHT y ATTR_MAX_ENTRY_CHARS) solamente se refieren a la posibilidad de imitir texto por parte del usuario (el SetCtrlVal no está afectado por estos atributos). Por esta razón solamente puedes cortar la cadena antes de pasarla al control; una posibilidad es usar el comando StringCopyMax (), aunque hay otras manera de hacerlo tambén.

 

Por lo que se refiere a los paneles, supongo que estás usando un MessaPopup para emitir tu mensaje;  no hay instrucciones dentro de este comando para que automaticamente se visualize otro panel después de pulsar al botón de salida, por lo que debe haber algo en tu código que lo hace; debes averiguar qué pasa después de tu aviso: puedes pones una interrupción (Breakpoint - F9) y ejecutar el código paso a paso con la tecla F8, para ver en qué punto se está emitiendo el nuevo panel (puede ser que en algun momento vayas pasando una variable incorrecta al DisplayPanel u algo así). De esta manera podrás averiguar las condiciones en aquel momento y corregir lo que se necesita para que el programa corra bien.



Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Message 4 of 8
(4,551 Views)

Muchas gracias por la ayuda Roberto:

 

Hay alguna manera de poder agrandar la ventana de BARCODE_WINDOW por que lo que quiero es que a la hora de ejecutar el programa no aparezca nada por detras de la pantalla de ejecucion, o por lo menos que lo que se vea sea minimo, un estilo a la ejecucion de un programa en una pantalla tactil. Gracias y recibe un cordial saludo.

0 Kudos
Message 5 of 8
(4,492 Views)
En vez de DisplayPanel puedes usar SetPanelAttribute (panelHandle, ATTR_WINDOW_ZOOM, VAL_MAXIMIZE). Adicionalmente, es mejor que la barra de Windows sea escondida y no quede en primer plano, así que tu panel ocupe todo el video.


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Message 6 of 8
(4,490 Views)

Muy buenas Roberto:

 

Primeramente darte las gracias y pedirte perdon por ser un poco pesado, y en segundo lugar comentarte que al colocar la instruccion que me has dicho me funciona muy bien y me gusta mucho como me queda pero tengo un problemilla, y es que al activar el proceso las vnetanas BARCODE_WINDOW y DECODE_BARCODE_WINDOW se colocan por delante de la pantalla .uir, y ya te digo que me gusta mucho como queda, pero el problema es que al pulsar PAUSE estas dos mismas ventanas, BARCODE_WINDOW y DECODE_BARCODE_WINDOW, pasan a la parte de atras y no tengo ninguna forma de hacerlas volver hacia adelante para que se puedan ver. Entonces mi idea es hacer con alguna instruccion, que al finalizar el proceso donde yo pulso el boton de PAUSE se borren estas dos ventanas para que al pulsar otra vez el boton de START vuelvan a aparecer por delante, o sino la otra solucion que se me ha ocurrido es que al finalizar el proceso de PAUSE con alguna instruccion vuelvan a la parte de adelante para que se puedan visualizar. Y mi duda es si tu sabes alguna instruccion para realizar alguno de estos dos pasos o si sabes para los dos mejor, asi podre probar como es cada uno, o por el contrario si se te ocurre algo mejor dimelo porque estoy abierto a cualquier sugerencia. Gracias. 
 

0 Kudos
Message 7 of 8
(4,470 Views)

Con referencia a la posición relativa de los paneles en el video tienes dos posibilidades:

  1. Al cerrar un panel puedes quitarlo de la memoria (DiscardPanel) de manera que si quieres verlo nuevamente debes cargarlo (LoadPanel), poner en los controles los valores que se necesiten y visualizarlo con DisplayPanel u InstallPopup
  2. De otra manera, un panel puede ser escondido (HidePanel) sin quitarlo de la memoria: de esta manera los controles mantienes su valor y para verlo nuevamente debes tan solo usar al DisplayPanel u al InstallPopup. Para que esto método funcione, debes mantener el panelHandle en una variable global para que se pueda manejarlo nuevamente después de esconderlo. Igualmente, debes acordarte de cancelar el panel (DiscardPanel) cuando sales de tu programa, para que no queden recursos sin cancelar


Proud to use LW/CVI from 3.1 on.

My contributions to the Developer Community
________________________________________
If I have helped you, why not giving me a kudos?
Message 8 of 8
(4,448 Views)