[Lazarus-es] Refresh no funciona

Maxi maximiliano.duarte en gmail.com
Jue Ago 6 20:39:50 CEST 2015


ya te lo resolvi con banderas y un timer le puse cada 100ms y refresca
decentemente. Probalo


procedure TForm1.LazSerial1RxData(Sender: TObject);
begin
  if fmostre then
  Begin
       fmostre:=false;
       fdato:= LazSerial1.ReadData;
  end;
end;

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  Edit1.Text:=fdato;
  Application.ProcessMessages;
  fmostre:=true;
end;

El día 6 de agosto de 2015, 15:18, Maxi <maximiliano.duarte en gmail.com> escribió:
> 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



-- 
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