Ir al contenido


Foto

[RESUELTO] No se actualiza el estado de componentes incrustados en StatusBar


  • Por favor identifícate para responder
13 respuestas en este tema

#1 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 febrero 2010 - 09:00

Hola

Pues si, estoy incrustando un panel con algunos componentes que me muestran el estado de las señales de puertos seriales, mi problema es que se quedan encendidas (cuando llegan datos al puerto) y no cambian su estado a apagadas (cuando se cierra la comunicación o cuando deja de enviar datos al puerto)

¿ Alguien ha hecho algo similar o ha tenido el mismo problema ?

Les adjunto unas imagenes de lo que les estoy explicando.

Salud OS

PD, Estoy usando este truco que me encontré.

Archivos adjuntos


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 16 febrero 2010 - 09:13

Hola Eliseo,
Desconozco como estarás operando el puerto serie... creería que estás usando el componente Apro (o algo así) que tanto se ha mencionado.

¿Por casualidad no tendrás alguna variable de control, o flag y te olvidaste de cambiar o actualizar de valor en algún proceso o rutina? Se que lo que digo puede sonar tonto pero es posible...

Al no tener idea de como llevas la programación pues no te sabría decir.

Saludos,
  • 0

#3 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 febrero 2010 - 09:18

Hola Eliseo,
Desconozco como estarás operando el puerto serie... creería que estás usando el componente Apro (o algo así) que tanto se ha mencionado.

¿Por casualidad no tendrás alguna variable de control, o flag y te olvidaste de cambiar o actualizar de valor en algún proceso o rutina? Se que lo que digo puede sonar tonto pero es posible...

Al no tener idea de como llevas la programación pues no te sabría decir.

Saludos,


Efectivamente, uso el Apro, los "leds" que ves que se ponen en rojo operan en base a las señales que le llegan del componente apdComPort, no hay que hacer nada, esto lo hago sin problema fuera del StatusBar y las señales cambian correctamente.

Pienso que algo de lo que se hace al incrustarlo en el Statusbar es lo que les está cambiando su modo de operar.

Yo solo hago esto en la programación



delphi
  1.   InicializaCOM; // Asigno los parámetros de comunicación en el puerto seleccionado.
  2.   ApdSLController1.Monitoring := true; // Activo el monitoreo de señales



Eso es todo lo que se tiene que hacer. Muchas gracias por leerme a estas horas :)

Salud OS
  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 16 febrero 2010 - 09:25

Hola Eliseo, de suerte me agarras... aquí son las 12:23 am, siento cansancio pero desde hace días que me está costando dormir por más sueño que tenga :s.

Nunca he usado el componente... si tiene esa propiedad Monitoring, intuyo que debe tener algún evento del tipo "OnMonitoring" o algo parecido... ¿Podemos ver lo que tienes en ese evento que desconozco :D?

Por cierto, si es como dices que quizá se deba al inscrustado... me gustaría saber que tienes programado en el evento OnDrawPanel.

Intuyo que una combinación entre el hipotético OnMonitoring/OnDrawPanel está escondido el bicho.

Saludos,
  • 0

#5 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 febrero 2010 - 09:34

Este es el código para incrustar el panel, el componente de monitoreo no tiene eventos :)



delphi
  1. procedure TfrmSTarw.StatusBar1DrawPanel(StatusBar: TStatusBar;
  2.   Panel: TStatusPanel; const Rect: TRect);
  3. begin
  4.   if Panel = StatusBar.Panels[2] then
  5.   with Panel2 do
  6.   begin
  7.     Top := Rect.Top;
  8.     Left := Rect.Left;
  9.     Width := Rect.Right - Rect.Left - 4;
  10.     Height := Rect.Bottom - Rect.Top;
  11.   end;
  12. end;
  13.  
  14. procedure TfrmSTarw.FormCreate(Sender: TObject);
  15. var
  16.   PanelStyle: integer;
  17. begin
  18.   StatusBar1.Panels[2].Style := psOwnerDraw;
  19.   Panel2.Parent := StatusBar1;
  20.   PanelStyle := GetWindowLong(Panel2.Handle,GWL_EXSTYLE);
  21.   PanelStyle := PanelStyle - WS_EX_STATICEDGE;
  22.   SetWindowLong(Panel2.Handle,GWL_EXSTYLE,PanelStyle);
  23.  
  24.   .......
  25. end;



Salud OS
  • 0

#6 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 16 febrero 2010 - 09:49

Ummm... no veo alguna línea de código que sugiera que se cambie el color *-)....

¿En que parte o como es que le haces cambiar el color de los paneles? Porque quiero pensar que inicialmente están de verde, y si cambiaron al color rojo (o a la inversa, inicialmente rojo y luego a verde)... es porque hay algún procedimiento/rutina que lo hace...

Allí está el asunto amigo ;)

Saludos,
  • 0

#7 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 febrero 2010 - 10:02

Voy a darle una buena revisada a todo el code a ver si encuentro algo, ya te diré que pasó y si pude solucionarlo.

Muchas gracias amigo Marcelo.

Salud OS
  • 0

#8 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 16 febrero 2010 - 11:52

Bueno, pues ya logre resolver este asunto, pues nada, me fuí a despejar un rato y recordé que no estaba realizando la lectura del buffer del puerto, así que era obvio que no iba a funcionar como debe ser. :)

Les dejo la imagen tal y como debería de funcionar.

Mea Culpa. :$

Salud OS

Archivos adjuntos


  • 0

#9 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 17 febrero 2010 - 07:43

Hola Egostar

Me gustaria saber que componente usas para los cuadritos de colores y que eventos debo atrapar del apdcomport para detectar los cambios y cambiar el color.  En mi caso me da igual que sea en el status bar, porque lo puedo poner en un panel dentro del form

gracias

  • 0

#10 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 17 febrero 2010 - 09:10

Me alegro que lo hayas solucionado :)

Luk2009, los cuadritos de colores que puso eliseo no es más que unos TPanels ;)

Sobre la segunda parte de la pregunta no sabría responder... no uso el dichoso componente. :D

Saludos,
  • 0

#11 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 17 febrero 2010 - 10:55

Me alegro que lo hayas solucionado :)

Luk2009, los cuadritos de colores que puso eliseo no es más que unos TPanels ;)


Los 'cuadritos' son los componentes llamados TApdStatusLight que vienen en la carpeta de los APro y estos están ligados al componente TApdSLController, en mi caso solo usé 4 que representan las señalizaciones seriales de RX (recepción), CTS (Clear to Send), DCD (Data Carrier Detect) y DSR (Data Set Ready), hay otras señalizaciones más que son BRAKELight, ERRORLight, RINGLight y TDXLight (éste último lo utilizo para comunicaciones bidireccionales, en este caso solo es de recepción por eso no lo he incluido) de tal suerte que puedes utilizar hasta 8 señalizaciones para monitorear los puertos.

Lo que hice fue 'meter' en un TPanel todos estos componentes y sus etiquetas para no incrustar uno por uno de los componentes al StatusBar ahorrandome mucho código...... :D :D :D

Una vez que están asignados los 'leds' al TApdSLController solo hay que activarlo con la línea que escribí mas arriba...



delphi
  1. ApdSLController1.Monitoring := true; // Activo el monitoreo de señales



Salud OS
  • 0

#12 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 17 febrero 2010 - 11:04

Les muestro las pantallas de como se realiza en tiempo de diseño lo que acabo de comentar.

Una es la asignación de leds en el componente de monitoreo y la otra es el antes y después de como se diseñó el panel de luces.

Salud OS

Archivos adjuntos


  • 0

#13 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.040 mensajes
  • LocationSanto Domingo

Escrito 17 febrero 2010 - 12:32

Egostar me imagino que debo poner

ApdSLController1.Monitoring := true; // Activo el monitoreo de señales 

en el oncreate del form?


  • 0

#14 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.448 mensajes
  • LocationMéxico

Escrito 17 febrero 2010 - 12:40

Egostar me imagino que debo poner

ApdSLController1.Monitoring := true; // Activo el monitoreo de señales 

en el oncreate del form?



Si, lo puedes poner ahí, aunque yo suelo usar el evento OnShow casi siempre, solo es un estilo personal ;).

Salud OS
  • 0




IP.Board spam blocked by CleanTalk.