Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   componentes tpapro (celulares GSM) (https://www.clubdelphi.com/foros/showthread.php?t=23387)

tutuk 15-07-2005 03:16:57

componentes tpapro (celulares GSM)
 
hola como estan?

el problema es el siguiente :

utilizo los componentes tpapro para hacer una aplicacion que reciba mensajes SMS, los procese y los conteste al celular desde el que fue enviado.

ultilizo delphi 6 - winxp

cuando ejecuto el programa en mi pc todo marcha bien pero cuando instalo en otro pc al no .
explico mas o menos como funciona :

con un timer chequeo cada 3 segundos si hay un mensaje nuevo recibido en el telefono (lo tengo conectado al puerto usb), si llega uno lo desarmo al mensaje y asi obtengo el remitente y el cuerpo del mensaje

Código Delphi [-]
 procedure TForm1.comTriggerAvail(CP: TObject; Count: Word);
 var
   I : Word;
   C : Char;
   S : String;
   linea:tstringlist;
 begin
   S := '';
   for I := 1 to count do begin
     C := com.GetChar;  {C de carga con un caracter enviado por el puerto COM}
     S := S + C; {se almacenan en S solo los caracteres que deseo}
       {De esta manera me queda en S una cadena a mi gusto}
   end;
   linea:=tstringlist.Create;
   linea.CommaText :=s;
   if chescuchar.Checked =True then
   begin
     if linea[0]='+CMGL:' then
     begin
       {agrego el mensaje a los recibidos}
       table1.Append;
       table1.FieldByName('fecha').value:=date;
       table1.FieldByName('hora').value:=time;
       table1.FieldByName('nmens').value:=strtoint(linea[1]);
       table1.FieldByName('remitente').value:=linea[3];
       table1.FieldByName('mensaje').value:=linea[4];
       table1.Post;
       if table2.FindKey([strtoint(linea[4])]) then
       begin
         memo1.Lines.Add('Encontrado ... '+linea[4]+' = ' + table2.fieldbyname('datos').value);
         tel.SMSAddress:=linea[3];
         tel.SMSMessage:=linea[4]+'='+table2.fieldbyname('datos').value;
         tel.SendMessage;
       end
       else
       begin
         memo1.Lines.Add(linea[4]+'=No Encotrado');
         tel.SMSAddress:=linea[3];
         tel.SMSMessage:=linea[4]+'=No Encotrado';
         tel.SendMessage;
       end;
     end;
   end;
 end;
pero en otro pc parece ser que cuando chequeo el mensaje la respuesta del puerto no es "rapida" o algo asi porque me toma una x cantidad de caracteres y no todo completo. en mi pc anda todo bien.

hay alguna forma de hacer esperar a recibir la cadena completa.

espero haberme hecho entender

gracias por su tiempo

islu 15-07-2005 12:00:25

Yo ahe utilizado estas librerias en varias ocasiones, y no se si tendrás el mismo problema que tuve yo en una ocasión, pero los sintomas son similares. En mi caso fue con una pístola de EAN, leyendo EAN128 ( bastante largos ), lo que hice fue, simplemente esperar el ASCII #13 ( o #10 ), es decir :

Código Delphi [-]
 {...}
 Completo : boolean; //->Completo es una variable global a la clase
 Status : string; //->Variable global también
 {...}
 
 procedure TFormEjemplo.PuertoTriggerAvail(CP: TObject; Count: Word);
 var
   i : integer;
   c : char;
 begin
   for i := 0 to Count - 1 do
   begin
     c := Puerto.GetChar;
     if( (c > #47) and (c < #91) ) then
       Status := Status + c;
 
     if( c = #13 ) then Completo := true;
   end;
 
   if( Completo ) then
   begin
     Completo := false;
     {...}
     {}
     {...}
     Status := '';
   end;
 end;
No se si tendrás algún carácter que te indique el fin, o que el SMS esta completo. Puedes provar con una cadena, o algo por el estilo.

Yo solo encontré esta solución, y ahora esta funcionando perfectamente casi 2 años....

Espero haberte ayudado....

tutuk 18-07-2005 06:24:05

gracias intentare por ahi a ver que pasa


La franja horaria es GMT +2. Ahora son las 17:55:05.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi