[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