<div dir="ltr">Como te dije en principio, es un tema de tiempos.<div>Para eso existe el handshak cuando el receptor no está disponible avisa para que no mande mas datos. Pero en estos bichos generalmente tira datos sin esperar acuse.</div><div>Para eso deberias descartar cualquier paquete hasta que no hayas procesado todo. Podes hacer flush mientras procesas.</div><div>No le encuentro en las funciones como ignorar sin cerrar el puerto</div></div><div class="gmail_extra"><br><div class="gmail_quote">El 6 de agosto de 2015, 9: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><div><div><div><div><div><div><div>Creo que estoy mas cerca, aunque ahora da otro error...<br><br></div>Les cuento los cambios que hice...<br><br></div>1) Agregue la propiedad publica lcLectura a la clase TMiHilo<span class=""><br><br>    TMiHilo = class(TThread)<br>    private<br>      fStatusText: string;<br>      procedure MostrarPeso;<br>    protected<br>      procedure Execute; override;<br>    public<br></span>      lcLectura:string;<br>      constructor Create(CreaSuspendido: boolean);<br>    end;<br><br></div>2) Modifique el contenido de UpdPeso, ahora solo crea el hilo y le pasa la lectura recibida de la balanza... esa que como les comente en la otra pantalla la muestro en una lista.<br><br>procedure TfrmPesaje.UpdPeso(cLectura:String);<br>var<br>  MiHilo : TMiHilo;<br>begin<span class=""><br>     //creamos el hilo, pero no lo iniciamos<br>     MiHilo := TMiHilo.Create(True); // Con el parametro true no se inicia automaticamente<br>     if Assigned(MiHilo.FatalException) then<br>        raise MiHilo.FatalException;<br>     //si no hay ninguna excepción lo iniciamos<br></span>     MiHilo.lcLectura:=cLectura;<br>     MiHilo.Start;<br>end;        <br><br></div>3) Modifique el contenido de MostrarPeso en MiHilo, para que contenga todo el analisis de la trama y lo muestre por pantalla.<br><br>procedure TMiHilo.MostrarPeso;<br>var<br>  lcTramas:TStringList;<br>  lnNeto,lnNegativo,lnFueraRango,lnFueraEqui,lnTeclaAd,lnCantTramas:integer;<br>  lcEstadoA,lcEstadoB,lcEstadoC,lcPeso,lcTara,lcDecimales:string;<br>  lnPesoTara,lnPesoTot:real;<br>  lnPesoComa:integer;<span class=""><br>begin<br>  lcEstadoA:='';<br>  lcEstadoB:='';<br>  lcEstadoC:='';<br>  lcPeso:='';<br>  lcTara:='';<br>  lcTramas:= TStringList.Create;<br></span>  Split('|', lcLectura, lcTramas);<div><div class="h5"><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>       frmPesaje.txtPesoAct.Text:=FloatToStr(lnPesoTot);<br>       frmPesaje.txtPesoAct.Refresh;<br>   end;<br>end;<br><br></div>Todo eso compila fantastico pero al ejecutar da el siguiente error:<br><br>Thread creation error: Espacio de almacenamiento insuficiente para procesar este comando<span class=""><br><br>constructor TMiHilo.Create(CreaSuspendido: boolean);<br>begin<br>  FreeOnTerminate := True;<br></span>  inherited Create(CreaSuspendido); <== aca da el error<br>end;<br><br></div>Espero sus comentario, y de paso invenstigo.<br><br></div>Saludos,<br><br></div>Pancho<br></div>Córdoba<br></div>Argentina<br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">El 6 de agosto de 2015, 8:02, 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>Maxi, eso seguramente funciona, pero eso no me sirve porque la cadena que envía la balanza hay que analizarla, pues no solo trae el peso, trae otros estados que me son de utilidad.<br><br></div><div>Ademas subi el procedimiento que funciona  TfrmCheck.olePuertoRxData(Sender: TObject); y el que no....<br><br></div><div>y la diferencia entre ambos es justamente esa..., es decir en el caso que funciona, lectura a lectura lo voy tirando en una lista en pantalla y al refresco le da el cuero y eso que mi maquina es un avión con acoplado...<br><br></div><div>en cambio, si analizo la cadena, son tantas las lecturas que entran por olePuertoRxData que no logra refrescar.<br><br></div><div>En VFP existe algo denominado AutoYield para estos casos que va procesando en la medida que puede cada una de las peticiones y también existe el DoEvents, aquí veo que existe algo parecido denominado application.ProcessMessages pero tampoco funciona...<br><br></div><div>Lo que creo que solucionaría el problema es...<br><br></div><div>recibir la data de olePuertoRxData en un hilo por separado cada vez...<br></div><div>procesar el hilo<br></div><div>y cada proceso que actualice la pantalla...<br><br></div><div>Eso es lo que voy a intentar el dia de hoy...<br><br></div><div>Los mantengo al tanto, pues esto se esta transformando en un error muy interesante de estudiar.<br><br></div><div>Saludos,<br><br></div><div>Pancho<br></div><div>Córdoba<br></div><div>Argentina<br></div><div><br></div><br></div><div><div><div class="gmail_extra"><br><div class="gmail_quote">El 5 de agosto de 2015, 20:54, Martin Gomez <span dir="ltr"><<a href="mailto:mmgomez@gmail.com" target="_blank">mmgomez@gmail.com</a>></span> escribió:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span><div dir="ltr"><div class="gmail_default" style="font-family:tahoma,sans-serif">Con el Sincronize(UpdPeso) tampoco? Eso debería aislarte del multithreading interno de LazSerial (si es que tiene)</div></div></span><div class="gmail_extra"><br><div class="gmail_quote"><div><div>2015-08-05 13:54 GMT-03:00 francisco prieto <span dir="ltr"><<a href="mailto:fajprieto@gmail.com" target="_blank">fajprieto@gmail.com</a>></span>:<br></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div><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><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><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><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><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><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></div></div><span>_______________________________________________<br>
Lazarus-es mailing list<br>
<a href="mailto:Lazarus-es@lists.lazarus.freepascal.org" target="_blank">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></span></blockquote></div><br><br clear="all"><div><br></div>-- <br><div><div dir="ltr"><span style="font-size:small;font-family:tahoma,sans-serif"><div style="display:inline">​</div></span><span><font style="font-size:small" face="tahoma, sans-serif">Most good programmers do programming not because they expect to get paid or get adulation by the public, but because it is fun to program.<div style="display:inline">​ ​</div></font><i style="font-size:small;font-family:tahoma,sans-serif">Linus Torvalds</i><br></span></div></div>
</div>
<br>_______________________________________________<br>
Lazarus-es mailing list<br>
<a href="mailto:Lazarus-es@lists.lazarus.freepascal.org" target="_blank">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></div>
</div></div></blockquote></div><br></div>
</div></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>