Einzelnen Beitrag anzeigen

Benutzerbild von Chemiker
Chemiker

Registriert seit: 14. Aug 2005
1.858 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Event in einer Class programmieren

  Alt 5. Okt 2008, 17:20
Hallo taaktaak, Luckie,

vielen Dank für eure Hilfe. Ich bin aber noch nicht weiter gekommen.

Das Event ist schon vorhanden in der Komponente: TApdDataPacket.

In der Hilfe wird das Event so angegeben:

Zitat:
TApdDataPacket.OnStringPacket

property OnStringPacket : TStringPacketNotifyEvent

TStringPacketNotifyEvent = procedure(

Sender : TObject; Data : string) of object;

Defines an event handler that is called when a complete data packet is available.

Data is the actual data in the packet. The data packet is only available for the duration of the event.
Note that a null character (#0) in the collected data may terminate the Data string prematurely. This is due to the way that Delphi and C++Builder implement huge strings. If you are expecting null characters in the collected data, use the OnPacket event instead.
Meine Class sieht jetzt so aus:

Delphi-Quellcode:
TMyDataEvent = procedure(Sender: TObject; Data:String) of Object;


  THPLComPortClass= Class(TComponent)
  private
    FComPort : TApdCustomComPort;
    FStringPackete : TApdDataPacket; // ---- in dieser Komponente ist das Event
                                                                      // schon vorhanden.

    FOnData : TMyDataEvent; // Event

    function GetOeffnen: Boolean;
    procedure SetOeffnen(const Value: Boolean);
    function GetZuweisen: TApdCustomComPort;
    procedure SetZuweisen(const Value: TApdCustomComPort);
  protected

  published
     property OnData : TMyDataEvent read FOnData write FOnData; // Event
  public
    Constructor Create(AOwner : TComponent); override;
    destructor Destroy; override;

    property Oeffnen: Boolean Read GetOeffnen Write SetOeffnen;
    property zuweisen: TApdCustomComPort Read GetZuweisen Write SetZuweisen;
  End;
Im Testprogramm weise ich das Event so zu:

Delphi-Quellcode:
type
  TfrmComPortPacket = class(TForm)
    btnCOMOeffnen: TButton;
    btnCOMSchliessen: TButton;
    Memo1: TMemo;
    procedure btnCOMOeffnenClick(Sender: TObject);
    procedure btnCOMSchliessenClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
    CP: THPLComPortClass;
    Procedure MyString (Sender: TObject; Data: String);
  end;


procedure TfrmComPortPacket.FormCreate(Sender: TObject);
begin
  CP:= THPLComPortClass.Create(Self);
  CP.OnData:= MyString;
end;
So wird das Event aufgerufen:

Delphi-Quellcode:
Procedure TfrmComPortPacket.MyString (Sender: TObject; Data: String);
begin
  Memo1.Lines.Add(Data);
end;
Das Programm lässt sich ausführen, aber das Ereignis wird nicht aufgerufen.

An welcher Stelle muss der Aufruf:

if Assigned(FOnData) then FOnData(Self,'mein string'); angegeben werden.


Bis bald Chemiker
wer gesund ist hat 1000 wünsche wer krank ist nur einen.
  Mit Zitat antworten Zitat