Ir al contenido


Foto

Reloaded: Asignar evento a un componente creado en tiempo de ejecucion


  • Por favor identifícate para responder
2 respuestas en este tema

#1 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 11 septiembre 2014 - 07:43

El titulo es a consideracion de que ya hay un hilo con ese nombre, sin embargo no se me aclaran las dudas  ^o|

Estoy haciendo pruebas con un componenet llamado nrComm que es un componente para capturar datos seriales. Funciona Ok sin embargo no puedo usarlo en un modulo de datos solo en un form asi que he decido crearlo en tiempo de ejecucion dentro de un DataModule.

Declaro en la unit del datamodule:



delphi
  1. unit UdmNrComm;
  2.  
  3. interface
  4.  
  5. uses
  6.   System.SysUtils, System.Classes, nrclasses, nrcomm;
  7.  
  8. type
  9.   TdmNrComm = class(TDataModule)
  10.     procedure DataModuleCreate(Sender: TObject);
  11.     procedure OnAfterReceive(Com: TObject; Buffer: Pointer;
  12.       Received: Cardinal);
  13.   private
  14.     { Private declarations }
  15.   public
  16.     { Public declarations }
  17.   end;
  18.  
  19. var
  20.   dmNrComm: TdmNrComm;
  21.   ComPort: TnrComm;
  22.  
  23. implementation
  24.  
  25. uses
  26.   UfrmStart;
  27.  
  28. {%CLASSGROUP 'System.Classes.TPersistent'}
  29.  
  30. {$R *.dfm}



Creo el componente



delphi
  1. procedure TdmNrComm.DataModuleCreate(Sender: TObject);
  2. begin
  3.   ComPort := TnrComm.Create(nil);
  4.   ComPort.BaudRate := 9600;
  5.   ComPort.ComPortNo := 6;
  6.   ComPort.Parity := pNone;
  7.   ComPort.StopBits := sbOne;
  8.   ComPort.ByteSize := 8;
  9.   ComPort.EnumPorts := epFullPresent;
  10.   ComPort.BufferInSize := 8000;
  11.   ComPort.BufferOutSize := 8000;
  12.   ComPort.StreamProtocol := spNone;
  13.   ComPort.OnAfterReceive := OnAfterReceive;
  14.   ComPort.Active := True;
  15.  
  16. end;



Trato de usar el procedimiento



delphi
  1. procedure TdmNrComm.ComPortAfterReceive(Com: TObject; Buffer: Pointer;
  2.   Received: Cardinal);
  3. var i:integer;
  4.     ch:AnsiChar;
  5. begin
  6.   //LO QUE TENGA QUE HACER
  7.  
  8. end;



Recibo un aviso:

'TdmNrComm' does not contain a member named 'ComPortAfterReceive' at line 34(34:21)


Pienso que es una tontería pero no le encuentro..  :

Agradezco como siempre su atención!!
  • 0

#2 genriquez

genriquez

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 539 mensajes
  • LocationCali, Colombia

Escrito 13 septiembre 2014 - 12:27

Hola, puede que sea solo problema de escritura, pero veo que la asignación que haces al evento, es diferente al evento que estas monitoreando.

creas el evento
    OnAfterReceive(.....

Pero estas monitoreando el evento



delphi
  1. procedure TdmNrComm.ComPortAfterReceive(Com: TObject; Buffer: Pointer;
  2.   Received: Cardinal);
  3. var i:integer;
  4.     ch:AnsiChar;
  5. begin
  6.   //LO QUE TENGA QUE HACER
  7.  
  8. end;



Realmente debes implementar el método  OnAfterReceive nada más.

saludos.
  • 0

#3 FGarcia

FGarcia

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 687 mensajes
  • LocationMéxico

Escrito 13 septiembre 2014 - 01:20

Gracias! De hecho ya esta corregido y si ese era el problema. Me quedan otras cosas por resolver sobre este mismo tema pero otras ocupaciones no me dejan avanzar. Ya estaré molestando.
  • 0




IP.Board spam blocked by CleanTalk.