<div dir="ltr">Primero proba algo mas simple para descartar tiempos.<div>Un simple edit y ver si refresca solo</div><div><br></div><div><span style="font-size:12.8000001907349px">edit.text:=  olePuerto.ReadData;</span></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8000001907349px"><br></span></div><div><span style="font-size:12.8000001907349px">Como anecdota ten en cuenta que hay veces que se fracciona el buffer y van llegando mas datos despues de que se dispara el evento, me paso que en transmisiones quedaba 1 byte que llegaba despues. </span></div><div><span style="font-size:12.8000001907349px">Entonces despues de leer los bytes que esperaba recien procesaba. </span><span style="font-size:12.8000001907349px">Se soluciona muchas veces ajustando el buffer a lo esperado.</span></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 5 de agosto de 2015, 13:54, francisco prieto <span dir="ltr"><<a href="mailto:fajprieto@gmail.com" target="_blank">fajprieto@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div><div>En primer lugar gracias a todos por responder...<br><br></div>En segundo lugar el proceso monitorea con LazSerial el peso en una balanza que escupe muy rapido cada lectura.<br><br></div>En tercer lugar como dije hice el proceso de comunicacion utilizando el evento OnRxData y si envio la data que recibo a un ListBox funciona sin inconvenientes...<br></div><div><br></div><div>El siguiente es el codigo que funciona contra el ListBox.<br><br>procedure TfrmCheck.olePuertoRxData(Sender: TObject);<br>var<br>  lcLecturaReal,lcLetra:string;<br>  i:integer;<br>begin<br>     lcLecturaReal:=  olePuerto.ReadData;<br>       for i := 1 to Length(lcLecturaReal) do<br>          begin<br>             lcLetra:=InttoHex(Ord(lcLecturaReal[i]),2);<br>             lcLecturaHex := lcLecturaHex + lcLetra+ ' ';<br>             case lcLetra of<br>                  '30'..'39':<br>                  begin<br>                       lcLetra:=RightStr(lcLetra,1);<br>                       lcLecturaTotal := lcLecturaTotal + lcLetra;<br>                  end;<br>                  '0D':<br>                  begin<br>                     lcLecturaTotal := lcLecturaTotal + 'CR';<br>                     if (cboBalanza.KeyValue=1) then<br>                        begin<br>                          lcLecturaTotal := lcLecturaTotal +'LF';<br>                          if chkAuditaCom.Checked=True then<br>                            UpdLog(lcLecturaTotal);<br>                          lstTrama.Items.Add(lcLecturaTotal);<br>                          lcLecturaTotal:='';<br>                        end;<br>                  end;<br>                  '0A':<br>                  begin<br>                       lcLecturaTotal := lcLecturaTotal +'LF';<br>                       if chkAuditaCom.Checked=True then<br>                         UpdLog(lcLecturaTotal);<br>                       lstTrama.Items.Add(lcLecturaTotal);<br>                       lcLecturaTotal:='';<br>                  end;<br>             else<br>                begin<br>                     if (lcLetra='02') and (Length(lcLecturaTotal)>0) then<br>                       begin<br>                         if chkAuditaCom.Checked=True then<br>                           UpdLog(lcLecturaTotal);<br>                         lstTrama.Items.Add(lcLecturaTotal);<br>                         lcLecturaTotal:='';<br>                       end;<br>                     if (lcLetra='02') then<br>                        lcLetra:='STX'<br>                     else<br>                        lcLetra:='|'+lcLetra+'|';<br>                     lcLecturaTotal := lcLecturaTotal + lcLetra;<br>                end;<br>             end;<br>          end;<br>         if chkAuditaCom.Checked=True then<br>            UpdLog(lcLecturaHex);<br>         edtRecepcion.Lines.Add(lcLecturaHex);<br>end;<br><br></div><div>Es mas si revisan hay un listbox y un memo recibiendo la info al mismo tiempo... pero claro la info en esta instancia no se analiza porque es un simple programa de comunicacion para comprobar que la comunicacion funciona...<br><br></div><div>Ahora bien ese mismo metodo lo repeti en la pantalla que debe analizar la trama y cambia a esto otro<br><br>procedure TfrmPesaje.olePuertoRxData(Sender: TObject);<br>var<br>  lcLecturaReal,lcLecturaHex,lcLecturaTotal,lcLetra:string;<br>  i:integer;<br>begin<br>  lcLecturaHex:='';<br>  lcLecturaTotal:='';<br>  lcLecturaReal:=  olePuerto.ReadData;<br>    for i := 1 to Length(lcLecturaReal) do<br>       begin<br>          lcLetra:=InttoHex(Ord(lcLecturaReal[i]),2);<br>          lcLecturaHex := lcLecturaHex + lcLetra+ ' ';<br>          case lcLetra of<br>               '30'..'39':<br>               begin<br>                    lcLetra:=RightStr(lcLetra,1);<br>                    lcLecturaTotal := lcLecturaTotal + lcLetra;<br>               end;<br>               '0D':<br>               begin<br>                  lcLecturaTotal := lcLecturaTotal + 'CR';<br>                  if (cboBalanza.KeyValue=1) then<br>                     begin<br>                       lcLecturaTotal := lcLecturaTotal +'LF';<br>                       if llAuditaCom=True then<br>                         UpdLog(lcLecturaTotal);<br>                       UpdPeso(lcLecturaTotal);<br>                       lcLecturaTotal:='';<br>                     end;<br>               end;<br>               '0A':<br>               begin<br>                    lcLecturaTotal := lcLecturaTotal +'LF';<br>                    if llAuditaCom=True then<br>                      UpdLog(lcLecturaTotal);<br>                    UpdPeso(lcLecturaTotal);<br>                    lcLecturaTotal:='';<br>               end;<br>          else<br>             begin<br>                  if (lcLetra='02') and (Length(lcLecturaTotal)>0) then<br>                    begin<br>                      if llAuditaCom=True then<br>                        UpdLog(lcLecturaTotal);<br>                      UpdPeso(lcLecturaTotal);<br>                      lcLecturaTotal:='';<br>                    end;<br>                  if (lcLetra='02') then<br>                     lcLetra:='STX'<br>                  else<br>                     lcLetra:='|'+lcLetra+'|';<br>                  lcLecturaTotal := lcLecturaTotal + lcLetra;<br>             end;<br>          end;<br>       end;<br>      if llAuditaCom=True then<br>         UpdLog(lcLecturaHex);<br>end;<br><br></div><div>Si revisan el cambio es minimo ya que en vez de agregar la lectura al ListBox o al Memo, envio la lectura como argumento al UpdPeso<br><br></div><div>Y UpdPeso funciona sin inconveniente, cuyo codigo es el siguiente:<div><div class="h5"><br><br>procedure TfrmPesaje.UpdPeso(cLectura:String);<br>var<br>  lcTramas:TStringList;<br>  lnIndice,lnNeto,lnNegativo,lnFueraRango,lnFueraEqui,lnTeclaAd,lnCantTramas:integer;<br>  lcEstadoA,lcEstadoB,lcEstadoC,lcPeso,lcTara,lcDecimales,lcLectura:string;<br>begin<br>  lcEstadoA:='';<br>  lcEstadoB:='';<br>  lcEstadoC:='';<br>  lcPeso:='';<br>  lcTara:='';<br>  lcTramas:= TStringList.Create;<br>  Split('|', cLectura, lcTramas);<br>  lnCantTramas:=lcTramas.count;<br>  if lnCantTramas=5 then<br>     begin<br>       lcEstadoA:=lcTramas.Strings[1];<br>       lcEstadoB:=lcTramas.Strings[2];<br>       lcEstadoC:=lcTramas.Strings[3];<br>       lcPeso:=copy(lcTramas.Strings[4],1,6);<br>       lcTara:=copy(lcTramas.Strings[4],7,6);<br>       {Analisis Estado A}<br>       lcEstadoA:=HextoBin(lcEstadoA);<br>       lcDecimales:=copy(lcEstadoA,6,3);<br>       case lcDecimales of<br>            '010':lnPesoComa:=0;<br>            '011':lnPesoComa:=1;<br>            '100':lnPesoComa:=2;<br>            '101':lnPesoComa:=3;<br>            '110':lnPesoComa:=4;<br>       else<br>            lnPesoComa:=0;<br>       end;<br>       {Analisis Estado B}<br>       lcEstadoB:=HextoBin(lcEstadoB);<br>       lnNeto:=StrToInt(copy(lcEstadoB,8,1));<br>       lnNegativo:=StrToInt(copy(lcEstadoB,7,1));<br>       lnFueraRango:=StrToInt(copy(lcEstadoB,6,1));<br>       lnFueraEqui:=StrToInt(copy(lcEstadoB,5,1));<br>       {Analisis Estado C}<br>       lcEstadoC:=HextoBin(lcEstadoC);<br>       lnTeclaAd:=StrToInt(copy(lcEstadoB,5,1));<br>       {Calculos Finales}<br>       lnPesoTara:=StrToInt(lcTara)/(Exp(LN(10)*lnPesoComa));<br>       lnPesoTot:=StrToInt(lcPeso)/(Exp(LN(10)*lnPesoComa));<br>       if lnNegativo=1 then<br>          lnPesoTot:=lnPesoTot*(-1);<br></div></div>      end;<br>end;<br><br></div><div>El valor que quiero mostrar se almacena en la propiedad del formulario lnPesoTot,<br><br></div><div>Entiendo que con este link <a href="http://wiki.freepascal.org/Multithreaded_Application_Tutorial/es" target="_blank">http://wiki.freepascal.org/Multithreaded_Application_Tutorial/es</a><br></div><div>debería  implementar un hilo con el procedimiento UpdPeso, o quizas un hilo que sea llamado desde el procedimiento UpdPeso.<br><br></div><div>Hasta ahora por mas que lo estudio no logro entender como se hace eso, porque entiendo que mi caso es este...<br><br><pre dir="ltr"><pre><span>Type</span>
    TForm1 <span>=</span> <span>class</span><span>(</span>TForm<span>)</span>
      Button1<span>:</span> TButton<span>;</span>
      Label1<span>:</span> TLabel<span>;</span>
      <span>procedure</span> FormCreate<span>(</span>Sender<span>:</span> <span>TObject</span><span>)</span><span>;</span>
      <span>procedure</span> FormDestroy<span>(</span>Sender<span>:</span> <span>TObject</span><span>)</span><span>;</span>
    <span>private</span>
      <span>{ private declarations }</span>
      MyThread<span>:</span> TMyThread<span>;</span> 
      <span>procedure</span> ShowStatus<span>(</span>Status<span>:</span> <span>string</span><span>)</span><span>;</span>
    <span>public</span>
      <span>{ public declarations }</span>
    <span>end</span><span>;</span>
 
  <span>procedure</span> TForm1<span>.</span><span>FormCreate</span><span>(</span>Sender<span>:</span> <span>TObject</span><span>)</span><span>;</span>
  <span>begin</span>
    <span>inherited</span><span>;</span>
    MyThread <span>:</span><span>=</span> TMyThread<span>.</span><span>Create</span><span>(</span><span>true</span><span>)</span><span>;</span>
    MyThread<span>.</span><span>OnShowStatus</span> <span>:</span><span>=</span> <span>@</span>ShowStatus<span>;</span>
  <span>end</span><span>;</span>
 
  <span>procedure</span> TForm1<span>.</span><span>FormDestroy</span><span>(</span>Sender<span>:</span> <span>TObject</span><span>)</span><span>;</span>
  <span>begin</span>
    MyThread<span>.</span><span>Terminate</span><span>;</span>
    MyThread<span>.</span><span>Free</span><span>;</span>
    <span>inherited</span><span>;</span>
  <span>end</span><span>;</span>
 
  <span>procedure</span> TForm1<span>.</span><span>Button1Click</span><span>(</span>Sender<span>:</span> <span>TObject</span><span>)</span><span>;</span>
  <span>begin</span>
   MyThread<span>.</span><span>Resume</span><span>;</span>
  <span>end</span><span>;</span>
 
  <span>procedure</span> TForm1<span>.</span><span>ShowStatus</span><span>(</span>Status<span>:</span> <span>string</span><span>)</span><span>;</span>
  <span>begin</span>
    Label1<span>.</span><span>Caption</span> <span>:</span><span>=</span> Status<span>;</span>
  <span>end</span><span>;<br><span style="font-family:arial,helvetica,sans-serif"><br></span></span></pre><pre><span><span style="font-family:arial,helvetica,sans-serif">Pero no se si Deberia reemplazar ShowStatus por UpdPeso y MyThread.Resume colocarlo en el lugar en que coloco UpdPeso...<br><br></span></span></pre><pre><span><span style="font-family:arial,helvetica,sans-serif">Voy a probar asi, ya que ningun otro consejo me dio resultado.<br><br></span></span></pre><pre><span><span style="font-family:arial,helvetica,sans-serif">Saludos y los mantengo al tanto.<br><br></span></span></pre><pre><span><span style="font-family:arial,helvetica,sans-serif">Pancho<br></span></span></pre><pre><span><span style="font-family:arial,helvetica,sans-serif">Córdoba<br></span></span></pre><pre><span><span style="font-family:arial,helvetica,sans-serif">Argentina<br></span></span></pre></pre><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">El 5 de agosto de 2015, 13:04, Daniel Sánchez <span dir="ltr"><<a href="mailto:resetsoftware@gmail.com" target="_blank">resetsoftware@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Lo que comentas es al parecer que cuando pierde el foco el formulario en tu caso llamando a showmessage y vuelve es cuando se muestra el dato, en todo caso haz un deactivate/activate en tu formulario para que dispare el evento refresh del mismo o en todo caso invoca el refresh del formulario. Otra cosa después de actualizar tu text y te posicionas en el con el mouse o el teclado sigue sin mostrar tus datos nuevos o sigue mostrando los datos anteriores.<div><br></div><div>Saludos</div></div><div class="gmail_extra"><br><div class="gmail_quote"><div><div class="h5"><div><div>El 4 de agosto de 2015, 11:30, francisco prieto <span dir="ltr"><<a href="mailto:fajprieto@gmail.com" target="_blank">fajprieto@gmail.com</a>></span> escribió:<br></div></div></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div><div><div dir="ltr"><div><div><div><div><div><div><div><div><div><div>Tengo el siguiente código<br><br>procedure TfrmPesaje.UpdPeso(cLectura:String);<br>var<br>  lcTramas:TStringList;<br>  lnIndice,lnNeto,lnNegativo,lnFueraRango,lnFueraEqui,lnTeclaAd,lnCantTramas:integer;<br>  lcEstadoA,lcEstadoB,lcEstadoC,lcPeso,lcTara,lcDecimales,lcLectura:string;<br>begin<br>  lcEstadoA:='';<br>  lcEstadoB:='';<br>  lcEstadoC:='';<br>  lcPeso:='';<br>  lcTara:='';<br>  lcTramas:= TStringList.Create;<br>  Split('|', cLectura, lcTramas);<br>  lnCantTramas:=lcTramas.count;<br>  if lnCantTramas=5 then<br>     begin<br>       lcEstadoA:=lcTramas.Strings[1];<br>       lcEstadoB:=lcTramas.Strings[2];<br>       lcEstadoC:=lcTramas.Strings[3];<br>       lcPeso:=copy(lcTramas.Strings[4],1,6);<br>       lcTara:=copy(lcTramas.Strings[4],7,6);<br>       {Analisis Estado A}<br>       lcEstadoA:=HextoBin(lcEstadoA);<br>       lcDecimales:=copy(lcEstadoA,6,3);<br>       case lcDecimales of<br>            '010':lnPesoComa:=0;<br>            '011':lnPesoComa:=1;<br>            '100':lnPesoComa:=2;<br>            '101':lnPesoComa:=3;<br>            '110':lnPesoComa:=4;<br>       else<br>            lnPesoComa:=0;<br>       end;<br>       {Analisis Estado B}<br>       lcEstadoB:=HextoBin(lcEstadoB);<br>       lnNeto:=StrToInt(copy(lcEstadoB,8,1));<br>       lnNegativo:=StrToInt(copy(lcEstadoB,7,1));<br>       lnFueraRango:=StrToInt(copy(lcEstadoB,6,1));<br>       lnFueraEqui:=StrToInt(copy(lcEstadoB,5,1));<br>       {Analisis Estado C}<br>       lcEstadoC:=HextoBin(lcEstadoC);<br>       lnTeclaAd:=StrToInt(copy(lcEstadoB,5,1));<br>       {Calculos Finales}<br>       lnPesoTara:=StrToInt(lcTara)/(Exp(LN(10)*lnPesoComa));<br>       lnPesoTot:=StrToInt(lcPeso)/(Exp(LN(10)*lnPesoComa));<br>       if lnNegativo=1 then<br>          lnPesoTot:=lnPesoTot*(-1);<br>       {Actualizo campo de Peso Actual}<br>       txtPesoAct.Text:=FloatToStr(lnPesoTot);<br>       txtPesoAct.Refresh;<br>       application.ProcessMessages;<br>     end;  <br><br></div>Que se ejecuta por cada lectura del puerto serie.<br><br></div>txtPesoAct es una caja de texto en la cual pongo el peso de la balanza.<br><br></div>Si solo hago el Refresh no se refresca el control...<br></div>Si le agrego application.ProcessMessages tampoco se refresca el control.<br><br></div>El control solo se refresca cuando hago un showmessage desde otro control.<br><br></div>Tengo otra pantalla que tiene un codigo similar pero el que recibe la info es una lista, en ese caso funciona sin inconvenientes...<br><br></div>Espero sus comentarios.<br><br></div>Pancho<br></div>Córdoba<br></div>Argentina<span><font color="#888888"><br></font></span></div></div></div></div></div><span><font color="#888888">

<p></p>

-- <br><span>
Has recibido este mensaje porque estás suscrito al grupo "comunidad-hispana-freepascal" de Grupos de Google.<br>
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a <a href="mailto:freepascalhispano+unsubscribe@googlegroups.com" target="_blank">freepascalhispano+unsubscribe@googlegroups.com</a>.<br></span>
Para ver esta conversación en el sitio web, visita <a href="https://groups.google.com/d/msgid/freepascalhispano/CAB6XyW1o82vA9sBAtO0LW48Q6qk84jBD9PJFrWXyNJk_datp1w%40mail.gmail.com?utm_medium=email&utm_source=footer" target="_blank">https://groups.google.com/d/msgid/freepascalhispano/CAB6XyW1o82vA9sBAtO0LW48Q6qk84jBD9PJFrWXyNJk_datp1w%40mail.gmail.com</a>.<span><br>
Para acceder a más opciones, visita <a href="https://groups.google.com/d/optout" target="_blank">https://groups.google.com/d/optout</a>.<br>
</span></font></span></blockquote></div><br><br clear="all"><span class="HOEnZb"><font color="#888888"><div><br></div>-- <br><div><div dir="ltr"><div><div dir="ltr">Daniel Sánchez Escobar<br>Investigación y Desarrollo<br>Reset Software & Sistemas<br>Móvil +051-949398047 RPM #948615385<br>Trujillo - Perú<div><br></div><div><span style="text-align:center;font-size:20pt;line-height:30.6666641235352px;font-family:Webdings;color:rgb(0,127,0)" lang="ES">P</span><span style="text-align:center;font-size:11pt;line-height:16.8666667938232px;font-family:Calibri,sans-serif;color:rgb(0,127,0)" lang="ES">  </span><span style="text-align:center"></span><span style="text-align:center;font-size:8pt;line-height:12.2666673660278px;font-family:Calibri,sans-serif;color:rgb(0,127,0)" lang="ES">Sugerimos no imprimir este e-mail a menos que sea absolutamente necesario. Protejamos el medio ambiente.</span><br></div></div></div></div></div>
</font></span></div><span class="HOEnZb"><font color="#888888"><span>

<p></p>

-- <br>
Has recibido este mensaje porque estás suscrito al grupo "comunidad-hispana-freepascal" de Grupos de Google.<br>
Para anular la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a <a href="mailto:freepascalhispano+unsubscribe@googlegroups.com" target="_blank">freepascalhispano+unsubscribe@googlegroups.com</a>.<br></span>
Para ver esta conversación en el sitio web, visita <a href="https://groups.google.com/d/msgid/freepascalhispano/CA%2BEDH_V%3DY2gOs66FZKPtHzCW6rhuyW-29z2rkosiMR5eB0r3-Q%40mail.gmail.com?utm_medium=email&utm_source=footer" target="_blank">https://groups.google.com/d/msgid/freepascalhispano/CA%2BEDH_V%3DY2gOs66FZKPtHzCW6rhuyW-29z2rkosiMR5eB0r3-Q%40mail.gmail.com</a>.<div><div><br>
Para acceder a más opciones, visita <a href="https://groups.google.com/d/optout" target="_blank">https://groups.google.com/d/optout</a>.<br>
</div></div></font></span></blockquote></div><br></div>
<br>_______________________________________________<br>
Lazarus-es mailing list<br>
<a href="mailto:Lazarus-es@lists.lazarus.freepascal.org">Lazarus-es@lists.lazarus.freepascal.org</a><br>
<a href="http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es" rel="noreferrer" target="_blank">http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature">El que pregunta aprende, y el que contesta aprende a responder.<br><br>No a la obsolecencia programada: <a href="http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml" target="_blank">http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml</a><br><br>Linux User #495070<br><a href="http://domonetic.com/blog" target="_blank">http://domonetic.com/blog</a></div>
</div>