[Lazarus-es] Refresh no funciona

Maxi maximiliano.duarte en gmail.com
Jue Ago 6 20:18:31 CEST 2015


Lo de la cola no es desprolijo, yo lo hice hace tiempo, un lista FIFO,
acotada a cierto numero de entradas. Lo desprolijo es que no tiene
sentido procesar algo que ya no sirve.
Antes de poner a cerrar el puerto usa un flag que te indique si ya
esta listo para el nuevo dato, mientras tanto haces flush.

procedure TForm1.LazSerial1RxData(Sender: TObject);
begin
  if yaMostre then
  Begin
     yaMostre:=False;
     Edit1.Text:= trim(LazSerial1.ReadData);
     MostrarDatos;
     Application.ProcessMessages;
     yaMostre:=True;
  end
  else
     LazSerial1.SynSer.Flush;
end;

El día 6 de agosto de 2015, 14:06, francisco prieto
<fajprieto en gmail.com> escribió:
> ok, esa es otra solucion valida entonces.
>
> recibo el paquete.
> cierro el puerto.
> analizo el paquete.
> actualizo la pantalla
> abro el puerto.
>
> Me gusta, gracias.
>
> Pruebo y te cuento.
>
> Pancho
> Córdoba
> Argentina
>
> El 6 de agosto de 2015, 14:02, Maxi <maximiliano.duarte en gmail.com> escribió:
>>
>> Como te dije en principio, es un tema de tiempos.
>> 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.
>> Para eso deberias descartar cualquier paquete hasta que no hayas
>> procesado todo. Podes hacer flush mientras procesas.
>> No le encuentro en las funciones como ignorar sin cerrar el puerto
>>
>> El 6 de agosto de 2015, 9:54, francisco prieto <fajprieto en gmail.com>
>> escribió:
>> >
>> > Creo que estoy mas cerca, aunque ahora da otro error...
>> >
>> > Les cuento los cambios que hice...
>> >
>> > 1) Agregue la propiedad publica lcLectura a la clase TMiHilo
>> >
>> >     TMiHilo = class(TThread)
>> >     private
>> >       fStatusText: string;
>> >       procedure MostrarPeso;
>> >     protected
>> >       procedure Execute; override;
>> >     public
>> >       lcLectura:string;
>> >       constructor Create(CreaSuspendido: boolean);
>> >     end;
>> >
>> > 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.
>> >
>> > procedure TfrmPesaje.UpdPeso(cLectura:String);
>> > var
>> >   MiHilo : TMiHilo;
>> > begin
>> >      //creamos el hilo, pero no lo iniciamos
>> >      MiHilo := TMiHilo.Create(True); // Con el parametro true no se
>> > inicia automaticamente
>> >      if Assigned(MiHilo.FatalException) then
>> >         raise MiHilo.FatalException;
>> >      //si no hay ninguna excepción lo iniciamos
>> >      MiHilo.lcLectura:=cLectura;
>> >      MiHilo.Start;
>> > end;
>> >
>> > 3) Modifique el contenido de MostrarPeso en MiHilo, para que contenga
>> > todo el analisis de la trama y lo muestre por pantalla.
>> >
>> > procedure TMiHilo.MostrarPeso;
>> > var
>> >   lcTramas:TStringList;
>> >
>> > lnNeto,lnNegativo,lnFueraRango,lnFueraEqui,lnTeclaAd,lnCantTramas:integer;
>> >   lcEstadoA,lcEstadoB,lcEstadoC,lcPeso,lcTara,lcDecimales:string;
>> >   lnPesoTara,lnPesoTot:real;
>> >   lnPesoComa:integer;
>> > begin
>> >   lcEstadoA:='';
>> >   lcEstadoB:='';
>> >   lcEstadoC:='';
>> >   lcPeso:='';
>> >   lcTara:='';
>> >   lcTramas:= TStringList.Create;
>> >   Split('|', lcLectura, lcTramas);
>> >
>> >   lnCantTramas:=lcTramas.count;
>> >   if lnCantTramas=5 then
>> >      begin
>> >        lcEstadoA:=lcTramas.Strings[1];
>> >        lcEstadoB:=lcTramas.Strings[2];
>> >        lcEstadoC:=lcTramas.Strings[3];
>> >        lcPeso:=copy(lcTramas.Strings[4],1,6);
>> >        lcTara:=copy(lcTramas.Strings[4],7,6);
>> >        {Analisis Estado A}
>> >        lcEstadoA:=HextoBin(lcEstadoA);
>> >        lcDecimales:=copy(lcEstadoA,6,3);
>> >        case lcDecimales of
>> >             '010':lnPesoComa:=0;
>> >             '011':lnPesoComa:=1;
>> >             '100':lnPesoComa:=2;
>> >             '101':lnPesoComa:=3;
>> >             '110':lnPesoComa:=4;
>> >        else
>> >             lnPesoComa:=0;
>> >        end;
>> >        {Analisis Estado B}
>> >        lcEstadoB:=HextoBin(lcEstadoB);
>> >        lnNeto:=StrToInt(copy(lcEstadoB,8,1));
>> >        lnNegativo:=StrToInt(copy(lcEstadoB,7,1));
>> >        lnFueraRango:=StrToInt(copy(lcEstadoB,6,1));
>> >        lnFueraEqui:=StrToInt(copy(lcEstadoB,5,1));
>> >        {Analisis Estado C}
>> >        lcEstadoC:=HextoBin(lcEstadoC);
>> >        lnTeclaAd:=StrToInt(copy(lcEstadoB,5,1));
>> >        {Calculos Finales}
>> >        lnPesoTara:=StrToInt(lcTara)/(Exp(LN(10)*lnPesoComa));
>> >        lnPesoTot:=StrToInt(lcPeso)/(Exp(LN(10)*lnPesoComa));
>> >        if lnNegativo=1 then
>> >           lnPesoTot:=lnPesoTot*(-1);
>> >        frmPesaje.txtPesoAct.Text:=FloatToStr(lnPesoTot);
>> >        frmPesaje.txtPesoAct.Refresh;
>> >    end;
>> > end;
>> >
>> > Todo eso compila fantastico pero al ejecutar da el siguiente error:
>> >
>> > Thread creation error: Espacio de almacenamiento insuficiente para
>> > procesar este comando
>> >
>> > constructor TMiHilo.Create(CreaSuspendido: boolean);
>> > begin
>> >   FreeOnTerminate := True;
>> >   inherited Create(CreaSuspendido); <== aca da el error
>> > end;
>> >
>> > Espero sus comentario, y de paso invenstigo.
>> >
>> > Saludos,
>> >
>> > Pancho
>> > Córdoba
>> > Argentina
>> >
>> > El 6 de agosto de 2015, 8:02, francisco prieto <fajprieto en gmail.com>
>> > escribió:
>> >>
>> >> 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.
>> >>
>> >> Ademas subi el procedimiento que funciona
>> >> TfrmCheck.olePuertoRxData(Sender: TObject); y el que no....
>> >>
>> >> 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...
>> >>
>> >> en cambio, si analizo la cadena, son tantas las lecturas que entran por
>> >> olePuertoRxData que no logra refrescar.
>> >>
>> >> 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...
>> >>
>> >> Lo que creo que solucionaría el problema es...
>> >>
>> >> recibir la data de olePuertoRxData en un hilo por separado cada vez...
>> >> procesar el hilo
>> >> y cada proceso que actualice la pantalla...
>> >>
>> >> Eso es lo que voy a intentar el dia de hoy...
>> >>
>> >> Los mantengo al tanto, pues esto se esta transformando en un error muy
>> >> interesante de estudiar.
>> >>
>> >> Saludos,
>> >>
>> >> Pancho
>> >> Córdoba
>> >> Argentina
>> >>
>> >>
>> >>
>> >> El 5 de agosto de 2015, 20:54, Martin Gomez <mmgomez en gmail.com>
>> >> escribió:
>> >>>
>> >>> Con el Sincronize(UpdPeso) tampoco? Eso debería aislarte del
>> >>> multithreading interno de LazSerial (si es que tiene)
>> >>>
>> >>> 2015-08-05 13:54 GMT-03:00 francisco prieto <fajprieto en gmail.com>:
>> >>>>
>> >>>> En primer lugar gracias a todos por responder...
>> >>>>
>> >>>> En segundo lugar el proceso monitorea con LazSerial el peso en una
>> >>>> balanza que escupe muy rapido cada lectura.
>> >>>>
>> >>>> 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...
>> >>>>
>> >>>> El siguiente es el codigo que funciona contra el ListBox.
>> >>>>
>> >>>> procedure TfrmCheck.olePuertoRxData(Sender: TObject);
>> >>>> var
>> >>>>   lcLecturaReal,lcLetra:string;
>> >>>>   i:integer;
>> >>>> begin
>> >>>>      lcLecturaReal:=  olePuerto.ReadData;
>> >>>>        for i := 1 to Length(lcLecturaReal) do
>> >>>>           begin
>> >>>>              lcLetra:=InttoHex(Ord(lcLecturaReal[i]),2);
>> >>>>              lcLecturaHex := lcLecturaHex + lcLetra+ ' ';
>> >>>>              case lcLetra of
>> >>>>                   '30'..'39':
>> >>>>                   begin
>> >>>>                        lcLetra:=RightStr(lcLetra,1);
>> >>>>                        lcLecturaTotal := lcLecturaTotal + lcLetra;
>> >>>>                   end;
>> >>>>                   '0D':
>> >>>>                   begin
>> >>>>                      lcLecturaTotal := lcLecturaTotal + 'CR';
>> >>>>                      if (cboBalanza.KeyValue=1) then
>> >>>>                         begin
>> >>>>                           lcLecturaTotal := lcLecturaTotal +'LF';
>> >>>>                           if chkAuditaCom.Checked=True then
>> >>>>                             UpdLog(lcLecturaTotal);
>> >>>>                           lstTrama.Items.Add(lcLecturaTotal);
>> >>>>                           lcLecturaTotal:='';
>> >>>>                         end;
>> >>>>                   end;
>> >>>>                   '0A':
>> >>>>                   begin
>> >>>>                        lcLecturaTotal := lcLecturaTotal +'LF';
>> >>>>                        if chkAuditaCom.Checked=True then
>> >>>>                          UpdLog(lcLecturaTotal);
>> >>>>                        lstTrama.Items.Add(lcLecturaTotal);
>> >>>>                        lcLecturaTotal:='';
>> >>>>                   end;
>> >>>>              else
>> >>>>                 begin
>> >>>>                      if (lcLetra='02') and (Length(lcLecturaTotal)>0)
>> >>>> then
>> >>>>                        begin
>> >>>>                          if chkAuditaCom.Checked=True then
>> >>>>                            UpdLog(lcLecturaTotal);
>> >>>>                          lstTrama.Items.Add(lcLecturaTotal);
>> >>>>                          lcLecturaTotal:='';
>> >>>>                        end;
>> >>>>                      if (lcLetra='02') then
>> >>>>                         lcLetra:='STX'
>> >>>>                      else
>> >>>>                         lcLetra:='|'+lcLetra+'|';
>> >>>>                      lcLecturaTotal := lcLecturaTotal + lcLetra;
>> >>>>                 end;
>> >>>>              end;
>> >>>>           end;
>> >>>>          if chkAuditaCom.Checked=True then
>> >>>>             UpdLog(lcLecturaHex);
>> >>>>          edtRecepcion.Lines.Add(lcLecturaHex);
>> >>>> end;
>> >>>>
>> >>>> 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...
>> >>>>
>> >>>> Ahora bien ese mismo metodo lo repeti en la pantalla que debe
>> >>>> analizar la trama y cambia a esto otro
>> >>>>
>> >>>> procedure TfrmPesaje.olePuertoRxData(Sender: TObject);
>> >>>> var
>> >>>>   lcLecturaReal,lcLecturaHex,lcLecturaTotal,lcLetra:string;
>> >>>>   i:integer;
>> >>>> begin
>> >>>>   lcLecturaHex:='';
>> >>>>   lcLecturaTotal:='';
>> >>>>   lcLecturaReal:=  olePuerto.ReadData;
>> >>>>     for i := 1 to Length(lcLecturaReal) do
>> >>>>        begin
>> >>>>           lcLetra:=InttoHex(Ord(lcLecturaReal[i]),2);
>> >>>>           lcLecturaHex := lcLecturaHex + lcLetra+ ' ';
>> >>>>           case lcLetra of
>> >>>>                '30'..'39':
>> >>>>                begin
>> >>>>                     lcLetra:=RightStr(lcLetra,1);
>> >>>>                     lcLecturaTotal := lcLecturaTotal + lcLetra;
>> >>>>                end;
>> >>>>                '0D':
>> >>>>                begin
>> >>>>                   lcLecturaTotal := lcLecturaTotal + 'CR';
>> >>>>                   if (cboBalanza.KeyValue=1) then
>> >>>>                      begin
>> >>>>                        lcLecturaTotal := lcLecturaTotal +'LF';
>> >>>>                        if llAuditaCom=True then
>> >>>>                          UpdLog(lcLecturaTotal);
>> >>>>                        UpdPeso(lcLecturaTotal);
>> >>>>                        lcLecturaTotal:='';
>> >>>>                      end;
>> >>>>                end;
>> >>>>                '0A':
>> >>>>                begin
>> >>>>                     lcLecturaTotal := lcLecturaTotal +'LF';
>> >>>>                     if llAuditaCom=True then
>> >>>>                       UpdLog(lcLecturaTotal);
>> >>>>                     UpdPeso(lcLecturaTotal);
>> >>>>                     lcLecturaTotal:='';
>> >>>>                end;
>> >>>>           else
>> >>>>              begin
>> >>>>                   if (lcLetra='02') and (Length(lcLecturaTotal)>0)
>> >>>> then
>> >>>>                     begin
>> >>>>                       if llAuditaCom=True then
>> >>>>                         UpdLog(lcLecturaTotal);
>> >>>>                       UpdPeso(lcLecturaTotal);
>> >>>>                       lcLecturaTotal:='';
>> >>>>                     end;
>> >>>>                   if (lcLetra='02') then
>> >>>>                      lcLetra:='STX'
>> >>>>                   else
>> >>>>                      lcLetra:='|'+lcLetra+'|';
>> >>>>                   lcLecturaTotal := lcLecturaTotal + lcLetra;
>> >>>>              end;
>> >>>>           end;
>> >>>>        end;
>> >>>>       if llAuditaCom=True then
>> >>>>          UpdLog(lcLecturaHex);
>> >>>> end;
>> >>>>
>> >>>> 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
>> >>>>
>> >>>> Y UpdPeso funciona sin inconveniente, cuyo codigo es el siguiente:
>> >>>>
>> >>>>
>> >>>> procedure TfrmPesaje.UpdPeso(cLectura:String);
>> >>>> var
>> >>>>   lcTramas:TStringList;
>> >>>>
>> >>>> lnIndice,lnNeto,lnNegativo,lnFueraRango,lnFueraEqui,lnTeclaAd,lnCantTramas:integer;
>> >>>>
>> >>>> lcEstadoA,lcEstadoB,lcEstadoC,lcPeso,lcTara,lcDecimales,lcLectura:string;
>> >>>> begin
>> >>>>   lcEstadoA:='';
>> >>>>   lcEstadoB:='';
>> >>>>   lcEstadoC:='';
>> >>>>   lcPeso:='';
>> >>>>   lcTara:='';
>> >>>>   lcTramas:= TStringList.Create;
>> >>>>   Split('|', cLectura, lcTramas);
>> >>>>   lnCantTramas:=lcTramas.count;
>> >>>>   if lnCantTramas=5 then
>> >>>>      begin
>> >>>>        lcEstadoA:=lcTramas.Strings[1];
>> >>>>        lcEstadoB:=lcTramas.Strings[2];
>> >>>>        lcEstadoC:=lcTramas.Strings[3];
>> >>>>        lcPeso:=copy(lcTramas.Strings[4],1,6);
>> >>>>        lcTara:=copy(lcTramas.Strings[4],7,6);
>> >>>>        {Analisis Estado A}
>> >>>>        lcEstadoA:=HextoBin(lcEstadoA);
>> >>>>        lcDecimales:=copy(lcEstadoA,6,3);
>> >>>>        case lcDecimales of
>> >>>>             '010':lnPesoComa:=0;
>> >>>>             '011':lnPesoComa:=1;
>> >>>>             '100':lnPesoComa:=2;
>> >>>>             '101':lnPesoComa:=3;
>> >>>>             '110':lnPesoComa:=4;
>> >>>>        else
>> >>>>             lnPesoComa:=0;
>> >>>>        end;
>> >>>>        {Analisis Estado B}
>> >>>>        lcEstadoB:=HextoBin(lcEstadoB);
>> >>>>        lnNeto:=StrToInt(copy(lcEstadoB,8,1));
>> >>>>        lnNegativo:=StrToInt(copy(lcEstadoB,7,1));
>> >>>>        lnFueraRango:=StrToInt(copy(lcEstadoB,6,1));
>> >>>>        lnFueraEqui:=StrToInt(copy(lcEstadoB,5,1));
>> >>>>        {Analisis Estado C}
>> >>>>        lcEstadoC:=HextoBin(lcEstadoC);
>> >>>>        lnTeclaAd:=StrToInt(copy(lcEstadoB,5,1));
>> >>>>        {Calculos Finales}
>> >>>>        lnPesoTara:=StrToInt(lcTara)/(Exp(LN(10)*lnPesoComa));
>> >>>>        lnPesoTot:=StrToInt(lcPeso)/(Exp(LN(10)*lnPesoComa));
>> >>>>        if lnNegativo=1 then
>> >>>>           lnPesoTot:=lnPesoTot*(-1);
>> >>>>       end;
>> >>>> end;
>> >>>>
>> >>>> El valor que quiero mostrar se almacena en la propiedad del
>> >>>> formulario lnPesoTot,
>> >>>>
>> >>>> Entiendo que con este link
>> >>>> http://wiki.freepascal.org/Multithreaded_Application_Tutorial/es
>> >>>> debería  implementar un hilo con el procedimiento UpdPeso, o quizas
>> >>>> un hilo que sea llamado desde el procedimiento UpdPeso.
>> >>>>
>> >>>> Hasta ahora por mas que lo estudio no logro entender como se hace
>> >>>> eso, porque entiendo que mi caso es este...
>> >>>>
>> >>>> Type
>> >>>>     TForm1 = class(TForm)
>> >>>>       Button1: TButton;
>> >>>>       Label1: TLabel;
>> >>>>       procedure FormCreate(Sender: TObject);
>> >>>>       procedure FormDestroy(Sender: TObject);
>> >>>>     private
>> >>>>       { private declarations }
>> >>>>       MyThread: TMyThread;
>> >>>>       procedure ShowStatus(Status: string);
>> >>>>     public
>> >>>>       { public declarations }
>> >>>>     end;
>> >>>>
>> >>>>   procedure TForm1.FormCreate(Sender: TObject);
>> >>>>   begin
>> >>>>     inherited;
>> >>>>     MyThread := TMyThread.Create(true);
>> >>>>     MyThread.OnShowStatus := @ShowStatus;
>> >>>>   end;
>> >>>>
>> >>>>   procedure TForm1.FormDestroy(Sender: TObject);
>> >>>>   begin
>> >>>>     MyThread.Terminate;
>> >>>>     MyThread.Free;
>> >>>>     inherited;
>> >>>>   end;
>> >>>>
>> >>>>   procedure TForm1.Button1Click(Sender: TObject);
>> >>>>   begin
>> >>>>    MyThread.Resume;
>> >>>>   end;
>> >>>>
>> >>>>   procedure TForm1.ShowStatus(Status: string);
>> >>>>   begin
>> >>>>     Label1.Caption := Status;
>> >>>>   end;
>> >>>>
>> >>>> Pero no se si Deberia reemplazar ShowStatus por UpdPeso y
>> >>>> MyThread.Resume colocarlo en el lugar en que coloco UpdPeso...
>> >>>>
>> >>>> Voy a probar asi, ya que ningun otro consejo me dio resultado.
>> >>>>
>> >>>> Saludos y los mantengo al tanto.
>> >>>>
>> >>>> Pancho
>> >>>>
>> >>>> Córdoba
>> >>>>
>> >>>> Argentina
>> >>>>
>> >>>>
>> >>>>
>> >>>> El 5 de agosto de 2015, 13:04, Daniel Sánchez
>> >>>> <resetsoftware en gmail.com> escribió:
>> >>>>>
>> >>>>> 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.
>> >>>>>
>> >>>>> Saludos
>> >>>>>
>> >>>>> El 4 de agosto de 2015, 11:30, francisco prieto
>> >>>>> <fajprieto en gmail.com> escribió:
>> >>>>>>
>> >>>>>> Tengo el siguiente código
>> >>>>>>
>> >>>>>> procedure TfrmPesaje.UpdPeso(cLectura:String);
>> >>>>>> var
>> >>>>>>   lcTramas:TStringList;
>> >>>>>>
>> >>>>>> lnIndice,lnNeto,lnNegativo,lnFueraRango,lnFueraEqui,lnTeclaAd,lnCantTramas:integer;
>> >>>>>>
>> >>>>>> lcEstadoA,lcEstadoB,lcEstadoC,lcPeso,lcTara,lcDecimales,lcLectura:string;
>> >>>>>> begin
>> >>>>>>   lcEstadoA:='';
>> >>>>>>   lcEstadoB:='';
>> >>>>>>   lcEstadoC:='';
>> >>>>>>   lcPeso:='';
>> >>>>>>   lcTara:='';
>> >>>>>>   lcTramas:= TStringList.Create;
>> >>>>>>   Split('|', cLectura, lcTramas);
>> >>>>>>   lnCantTramas:=lcTramas.count;
>> >>>>>>   if lnCantTramas=5 then
>> >>>>>>      begin
>> >>>>>>        lcEstadoA:=lcTramas.Strings[1];
>> >>>>>>        lcEstadoB:=lcTramas.Strings[2];
>> >>>>>>        lcEstadoC:=lcTramas.Strings[3];
>> >>>>>>        lcPeso:=copy(lcTramas.Strings[4],1,6);
>> >>>>>>        lcTara:=copy(lcTramas.Strings[4],7,6);
>> >>>>>>        {Analisis Estado A}
>> >>>>>>        lcEstadoA:=HextoBin(lcEstadoA);
>> >>>>>>        lcDecimales:=copy(lcEstadoA,6,3);
>> >>>>>>        case lcDecimales of
>> >>>>>>             '010':lnPesoComa:=0;
>> >>>>>>             '011':lnPesoComa:=1;
>> >>>>>>             '100':lnPesoComa:=2;
>> >>>>>>             '101':lnPesoComa:=3;
>> >>>>>>             '110':lnPesoComa:=4;
>> >>>>>>        else
>> >>>>>>             lnPesoComa:=0;
>> >>>>>>        end;
>> >>>>>>        {Analisis Estado B}
>> >>>>>>        lcEstadoB:=HextoBin(lcEstadoB);
>> >>>>>>        lnNeto:=StrToInt(copy(lcEstadoB,8,1));
>> >>>>>>        lnNegativo:=StrToInt(copy(lcEstadoB,7,1));
>> >>>>>>        lnFueraRango:=StrToInt(copy(lcEstadoB,6,1));
>> >>>>>>        lnFueraEqui:=StrToInt(copy(lcEstadoB,5,1));
>> >>>>>>        {Analisis Estado C}
>> >>>>>>        lcEstadoC:=HextoBin(lcEstadoC);
>> >>>>>>        lnTeclaAd:=StrToInt(copy(lcEstadoB,5,1));
>> >>>>>>        {Calculos Finales}
>> >>>>>>        lnPesoTara:=StrToInt(lcTara)/(Exp(LN(10)*lnPesoComa));
>> >>>>>>        lnPesoTot:=StrToInt(lcPeso)/(Exp(LN(10)*lnPesoComa));
>> >>>>>>        if lnNegativo=1 then
>> >>>>>>           lnPesoTot:=lnPesoTot*(-1);
>> >>>>>>        {Actualizo campo de Peso Actual}
>> >>>>>>        txtPesoAct.Text:=FloatToStr(lnPesoTot);
>> >>>>>>        txtPesoAct.Refresh;
>> >>>>>>        application.ProcessMessages;
>> >>>>>>      end;
>> >>>>>>
>> >>>>>> Que se ejecuta por cada lectura del puerto serie.
>> >>>>>>
>> >>>>>> txtPesoAct es una caja de texto en la cual pongo el peso de la
>> >>>>>> balanza.
>> >>>>>>
>> >>>>>> Si solo hago el Refresh no se refresca el control...
>> >>>>>> Si le agrego application.ProcessMessages tampoco se refresca el
>> >>>>>> control.
>> >>>>>>
>> >>>>>> El control solo se refresca cuando hago un showmessage desde otro
>> >>>>>> control.
>> >>>>>>
>> >>>>>> Tengo otra pantalla que tiene un codigo similar pero el que recibe
>> >>>>>> la info es una lista, en ese caso funciona sin inconvenientes...
>> >>>>>>
>> >>>>>> Espero sus comentarios.
>> >>>>>>
>> >>>>>> Pancho
>> >>>>>> Córdoba
>> >>>>>> Argentina
>> >>>>>>
>> >>>>>> --
>> >>>>>> Has recibido este mensaje porque estás suscrito al grupo
>> >>>>>> "comunidad-hispana-freepascal" de Grupos de Google.
>> >>>>>> Para anular la suscripción a este grupo y dejar de recibir sus
>> >>>>>> mensajes, envía un correo electrónico a
>> >>>>>> freepascalhispano+unsubscribe en googlegroups.com.
>> >>>>>> Para ver esta conversación en el sitio web, visita
>> >>>>>> https://groups.google.com/d/msgid/freepascalhispano/CAB6XyW1o82vA9sBAtO0LW48Q6qk84jBD9PJFrWXyNJk_datp1w%40mail.gmail.com.
>> >>>>>> Para acceder a más opciones, visita
>> >>>>>> https://groups.google.com/d/optout.
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>>
>> >>>>> --
>> >>>>> Daniel Sánchez Escobar
>> >>>>> Investigación y Desarrollo
>> >>>>> Reset Software & Sistemas
>> >>>>> Móvil +051-949398047 RPM #948615385
>> >>>>> Trujillo - Perú
>> >>>>>
>> >>>>> P  Sugerimos no imprimir este e-mail a menos que sea absolutamente
>> >>>>> necesario. Protejamos el medio ambiente.
>> >>>>>
>> >>>>> --
>> >>>>> Has recibido este mensaje porque estás suscrito al grupo
>> >>>>> "comunidad-hispana-freepascal" de Grupos de Google.
>> >>>>> Para anular la suscripción a este grupo y dejar de recibir sus
>> >>>>> mensajes, envía un correo electrónico a
>> >>>>> freepascalhispano+unsubscribe en googlegroups.com.
>> >>>>> Para ver esta conversación en el sitio web, visita
>> >>>>> https://groups.google.com/d/msgid/freepascalhispano/CA%2BEDH_V%3DY2gOs66FZKPtHzCW6rhuyW-29z2rkosiMR5eB0r3-Q%40mail.gmail.com.
>> >>>>>
>> >>>>> Para acceder a más opciones, visita
>> >>>>> https://groups.google.com/d/optout.
>> >>>>
>> >>>>
>> >>>>
>> >>>> _______________________________________________
>> >>>> Lazarus-es mailing list
>> >>>> Lazarus-es en lists.lazarus.freepascal.org
>> >>>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>> >>>>
>> >>>
>> >>>
>> >>>
>> >>> --
>> >>> 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.
>> >>> Linus Torvalds
>> >>>
>> >>> _______________________________________________
>> >>> Lazarus-es mailing list
>> >>> Lazarus-es en lists.lazarus.freepascal.org
>> >>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>> >>>
>> >>
>> >
>> >
>> > _______________________________________________
>> > Lazarus-es mailing list
>> > Lazarus-es en lists.lazarus.freepascal.org
>> > http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>> >
>>
>>
>>
>> --
>> El que pregunta aprende, y el que contesta aprende a responder.
>>
>> No a la obsolecencia programada:
>>
>> http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml
>>
>> Linux User #495070
>> http://domonetic.com/blog
>>
>>
>>
>> --
>> El que pregunta aprende, y el que contesta aprende a responder.
>>
>> No a la obsolecencia programada:
>>
>> http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml
>>
>> Linux User #495070
>> http://domonetic.com/blog
>>
>> _______________________________________________
>> Lazarus-es mailing list
>> Lazarus-es en lists.lazarus.freepascal.org
>> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>
>
>
> _______________________________________________
> Lazarus-es mailing list
> Lazarus-es en lists.lazarus.freepascal.org
> http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus-es
>



-- 
El que pregunta aprende, y el que contesta aprende a responder.

No a la obsolecencia programada:
http://www.rtve.es/noticias/20110104/productos-consumo-duran-cada-vez-menos/392498.shtml

Linux User #495070
http://domonetic.com/blog




More information about the Lazarus-es mailing list