Ver Mensaje Individual
  #5  
Antiguo 27-03-2008
[FGarcia] FGarcia is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Cordoba, Veracruz, México
Posts: 1.123
Reputación: 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