[Lazarus-es] Refresh no funciona

francisco prieto fajprieto en gmail.com
Jue Ago 6 19:06:45 CEST 2015


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
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://lists.lazarus-ide.org/pipermail/lazarus-es/attachments/20150806/7b2684e6/attachment-0002.html>


More information about the Lazarus-es mailing list