Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Auf Event einer Komponente reagieren (https://www.delphipraxis.net/108001-auf-event-einer-komponente-reagieren.html)

aegidos 6. Feb 2008 08:56


Auf Event einer Komponente reagieren
 
Hallo,
Ich verwende eine Komponente welche empfangene Nachrichten über TCPIP auswertet und dann Events abfeuert wenn diese assigned sind. Jedoch weiß ich nicht wie man an einem Event eine Methode aus einer anderen Unit anmeldet. Ich komme von C# und kenne das daher nur von delegates und Handlern. Wie mache ich also der Komponente welche nicht von mir implementiert ist klar, dass sie meine procedure startet?

die Komponente besitzt ein:
Delphi-Quellcode:
published    property OnError : TErrorMessage read FOnError write FOnError;
und ein switch case
Delphi-Quellcode:
...............
ERROR:
      begin
        if assigned(FKonsolenMemo) then
          FKonsolenMemo.Lines.Add('## TLogComponent: ERROR');

        if sl.Strings[1] = 'details' then
        begin
          if assigned(FOnError) then
            FOnError(self, sl.Strings[1], sl.Strings[3], sl.Strings[4], sl.Strings[5]);
        end
        else
        begin
          if assigned(FOnAppError) then
            FOnAppError(self, sl.Strings[1], sl.Strings[3], sl.Strings[4], sl.Strings[5]);
        end;
      end;
...
Meine Unit hat nun eine Methode welche genau dem OnError in der Schnittstelle gleichkommt. Schnittstelle von Komponente:
Delphi-Quellcode:
  TAppErrorMessage = procedure(Sender: TObject; te_id, err_id, prio, text : string
    ) of object;
Meine Unit:
Delphi-Quellcode:
   procedure LogComponentAppError(Sender: TObject; te_id, err_id, prio,
      text: String);
Implementiert.

Was ich nun möchte: Wenn in der verwendeten Komponente ein ERROR auftritt möchte ich das der FOnError-Event abgefeuert wird. Wie melde ich in meiner Unit die von mir geschriebene Prozedur am Event der Komponente an sodass meine Funktion bei einem eingehenden Fehler gerufen wird???
Vielen Dank schonmal!

dataspider 6. Feb 2008 09:14

Re: Auf Event einer Komponente reagieren
 
Hi,

Delphi-Quellcode:
Komponentenreferenz.OnError := LogComponentAppError;
Frank

DeddyH 6. Feb 2008 09:14

Re: Auf Event einer Komponente reagieren
 
Deine Prozedur darf keine einfache Prozedur, sondern muss eine Methode sein. Anschließend genügt eine einfache Zuweisung.
Delphi-Quellcode:
type DeineClass = class
  ...
  procedure LogComponentAppError(Sender: TObject; te_id, err_id, prio,
      text: String);
  ...
end;

...
procedure DeineClass.LogComponentAppError(Sender: TObject; te_id, err_id, prio,
      text: String);
begin
 //Code
end;
Nun kannst Du diese Methode dem Handler der Komponente zuweisen.
Delphi-Quellcode:
Komponente.OnError := LogComponentAppError;
Hth

aegidos 6. Feb 2008 09:23

Re: Auf Event einer Komponente reagieren
 
Danke,
Das ging ja einfacher als ich es erwartet hatte.
Nun ist mir geholfen und der Thread kann schon geschlossen werden ;-)
:bounce2: ich freu mich.
1000 Dank für die so schnelle Hilfe


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:39 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz