Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-03-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Poder: 22
FGarcia Va por buen camino
No puedes usar mas de un OnRxChar puesto que solo tienes un punto de entrada al puerto serie. On RxChar revisa caracter a caracter lo que entra al puerto. Si necesitas que tu programa reaccione a un caracter o caracteres especiales deberas de programar una rutina para tratar cada uno de ellos.

Código Delphi [-]
procedure TForm1.ComPortRxChar(Sender: TObject; count:integer);
begin
   {AQUI EL COMPONENTE LEE LO QUE RECIBE POR EL PUERTO COM}
  ComPort.ReadStr(Str, Count);
 
   if Str = 'DELPHI' then
      ShowMessage('Bienvenido')
   else if Str = 01 then
      ShowMessage('OK')
   else if Str = 2 then
      UnProcedimiento
   else if Str = 3 then
      OtroProcedimiento
   else
      LoQueSea;
end;

Ahora bien si necesitas capturar alguna conjunto de caracteres o "paquetes" bien definidos entonces es mejor usar el ComDataPacket el cual te permitira colocar tantos como necesites para un solo puerto.

Código Delphi [-]
//Suponemos que necesitamos recibir una cadena que al final cierra con CR
 
//declaramos una constante
const Terminador = #13  //ASCII 13 o CR
 
//En la creacion del formulario declaramos
procedure TForm1.Create(Sender: TObject);
begin
   ComDataPacket.StopString := Terminador;
end;
 
//Este procedimiento se ejecutaria cada vez que aparezca CR
procedure TForm1.ComPortDataPacket(str: string; count: integer);
begin
   ShowMessage('Cadena Recibida: ' + Str);
end;

Si necesitas recibir el caracter 01 varias veces y bajo diversas circunstancias tal vez la mejor manera de tratarlo seria usando OnRxChar y llamar a un procedimiento que procese acorde a la circunstancia en que lo esperas. Esto es una sugerencia tal vez hay mejor manera; crear un Type por ejemplo llamado Modo y que tenga declarados los diversos modos que tu necesitas por ejemplo:

Código Delphi [-]
Type Modo = (Leer, Escribir, Borrar);
 
//Redeclarando el evento OnRxChar
procedure TForm1.ComPortRxChar(Sender: TObject; count:integer);
begin
   {AQUI EL COMPONENTE LEE LO QUE RECIBE POR EL PUERTO COM}
  ComPort.ReadStr(Str, Count);
 
   if Str = 'DELPHI' then
      ShowMessage('Bienvenido')
   else if Str = 01 then
      if Modo = Leer then
         ShowMessage('OK')
      else if Modo = Escribir then
          ProcedimientoEscribir
      else
          ProcedimientoBorrar
   else if Str = 2 then
      UnProcedimiento
   else if Str = 3 then
      OtroProcedimiento
   else
      LoQueSea;
end;
Responder Con Cita
  #2  
Antiguo 27-03-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Mas claro ni el agua,

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #3  
Antiguo 27-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Código Delphi [-]
procedure TForm1.ComPortRxChar(Sender: TObject; count:integer);
begin      
ComPort.ReadStr(Str, Count);    
if Str = 'DELPHI' then      
ShowMessage('Bienvenido')   
else if Str = 01 then   // <---aqui no esta comparando.   
  comport.WriteStr(#2#2) 
  else if Str = 2 then     
 UnProcedimiento   
else if Str = 3 then     
 OtroProcedimiento   
else    
  LoQueSea;
end;
Todo funciona bien hasta donde lo tengo comentado.
Me da un error si el 01 no lo pongo asi '01'
Un Saludo.

Última edición por JoseFco fecha: 27-03-2008 a las 22:33:14.
Responder Con Cita
  #4  
Antiguo 27-03-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
Cita:
Empezado por JoseFco Ver Mensaje
Código Delphi [-]
procedure TForm1.ComPortRxChar(Sender: TObject; count:integer);
begin      
ComPort.ReadStr(Str, Count);    
if Str = 'DELPHI' then      
ShowMessage('Bienvenido')   
else if Str = 01 then   // <---aqui no esta comparando.   
  comport.WriteStr(#2#2) 
  else if Str = 2 then     
 UnProcedimiento   
else if Str = 3 then     
 OtroProcedimiento   
else    
  LoQueSea;
end;
Todo funciona bien hasta donde lo tengo comentado.
Me da un error si el 01 no lo pongo asi '01'
Un Saludo.

Sera porque Str es un char y no un entero?

Trata con esto:

Código Delphi [-]
else if Str = #1 then   // <---aqui no esta comparando.   
  comport.WriteStr(#2#2) 
  else if Str = #2 then     
 UnProcedimiento   
else if Str = #3 then     
 OtroProcedimiento

o así si es un String:

Código Delphi [-]
else if Str = '01' then   // <---aqui no esta comparando.   
  comport.WriteStr(#2#2) 
  else if Str = '02' then     
 UnProcedimiento   
else if Str = '03' then     
 OtroProcedimiento

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #5  
Antiguo 27-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Hola egostar.
Este es el codigo en realidad.

Código Delphi [-]
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
  Str: String;
begin
 ComPort.ReadStr(Str, Count);
AddHexString(Str,Memo.Lines);
if length(Str)>= 8 then
 if Str = 'Hi-LOGIC' then
showmessage('¡OK! ¡ES ORIGINAL!')
 else if Str = '01' then
Comport.WriteStr(#2#2)
 else
showmessage('¡HORROR!, ¡ES PIRATA!');
end;




Creo que aqui esta el problema.Yo tengo esa rutina que al comenzar recibe
algo que me envia el chip y si es = continua el programa.Creo que aqui esta la cosa.
Dejame estudiar eso ultimo que mandastes.
Un Saludo.

Última edición por JoseFco fecha: 27-03-2008 a las 23:00:23.
Responder Con Cita
  #6  
Antiguo 28-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Tengo medio resuelto el problema.
Código Delphi [-]
Type Modo = (Leer, Escribir, Borrar);
 //Redeclarando el evento OnRxChar
procedure TForm1.ComPortRxChar(Sender: TObject; count:integer);
begin   {AQUI EL COMPONENTE LEE LO QUE RECIBE POR EL PUERTO COM}  
ComPort.ReadStr(Str, Count);   
 if Str = 'DELPHI' then    
  ShowMessage('Bienvenido')   
else if Str = 01 then      
if Modo = Leer then     
    ShowMessage('OK')     
 else if Modo = Escribir then      
   ProcedimientoEscribir     
else          ProcedimientoBorrar
   else if Str = 2 then  
    UnProcedimiento   
else if Str = 3 then     
 OtroProcedimiento  
 else     
 LoQueSea;
end;
Cambie mi codigo y ya puedo comparar el primer #1el problema es que tendre en esta rutina tres veces el retornodel uC con el byte (01) y es donde tendre que hacer uso de larutina que escribio FGarcia.Pero tengo una duda, como le digo alReadStr que Modo quiero que compare? Yo tengo un boton y manda al serial port (#4#1#0#1)recibo un #1 compara si es = entonces mando al serial port (#2#2)hasta aqui trabaja bien mi programita.El relajo entra cuando recibo [/color]el segundo #1 y no diferencia del primero mandandome otra vez los(#2#2) sindo que yo no quiero mandar eso despues de recibir el primer #1. No se si me explico? Un Saludo.

Última edición por JoseFco fecha: 28-03-2008 a las 00:42:05.
Responder Con Cita
  #7  
Antiguo 28-03-2008
JoseFco JoseFco is offline
Baneado
 
Registrado: dic 2007
Posts: 1.861
Poder: 0
JoseFco cantidad desconocida en este momento
Esto es lo que tengo hecho.
Código Delphi [-]
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
if not ComPort.Connected then
ComPort.Open;
comport.WriteStr(#2#0);
end;
procedure TForm1.ComPortRxChar(Sender: TObject; Count: Integer);
var
Str: String;
begin
 ComPort.ReadStr(Str, Count);
 if length(Str)>= 8 then
 ShowMessage('OK')
 else if Str = #1 then
 ComPort.WriteStr(#2#2)
 else
 ShowMessage('No puede comunicar');
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
 if not ComPort.Connected then
  ComPort.Open;
 comport.WriteStr(#4#1#0#1);
end;
end.

Todo esta bien hasta que tengo que comparar otra vez el #1.

Un Saludo.
Responder Con Cita
  #8  
Antiguo 28-03-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.572
Poder: 27
egostar Va camino a la fama
A ver si entendi lo que necesitas

Código Delphi [-]
var
  Form1: TForm1;
  Cuantos : Integer;

.......

procedure TForm1.ComPortRxChar(Sender: TObject; count:integer);
var
  Str: String;
begin
  ComPort.ReadStr(Str, Count);
  AddHexString(Str,Memo.Lines);
  if Str = 'Hi-LOGIC' then
     showmessage('¡OK! ¡ES ORIGINAL!')
  else begin
         if Str = '01' then begin
            case Cuantos of
                1: begin //Modo Leer;
                     Comport.WriteStr(#2#2)
                     //ProcedimientoLeer
                     Cuantos := 2;
                end
                2: begin //Modo Escribir
                     //ProcedimientoEscribir
                     Cuantos := 3;
                end
                3: begin //Modo Borrar
                     //ProcedimientoBorrar
                end;
             end;
         end;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
   if not ComPort.Connected then
      ComPort.Open;
   comport.WriteStr(#4#1#0#1);
   Cuantos := 1;
end;

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Cuantos Querys? Nomad Conexión con bases de datos 13 24-01-2008 18:41:51
Contar cuantos edits hay lbidi Varios 4 04-10-2007 21:23:36
cuantos querys???? kryna Conexión con bases de datos 5 09-05-2005 20:50:13
Cuantos son Colombianos???? sercornejov Humor 7 28-12-2004 16:49:56
Cuantos Campos eduarcol Tablas planas 4 23-02-2004 17:07:02


La franja horaria es GMT +2. Ahora son las 08:20:32.


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