Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Ereignis überschreiben / eigenes Ereignis


RFZ - Mo 30.12.02 14:28
Titel: Ereignis überschreiben / eigenes Ereignis
Moin,
da ich die TNMHTTP Komponente hasse, will ich mir ne eigene machen, abgeleitet von TClientSocket.
Ich kenn mich da nicht viel aus, wie man eigene Prozeduren hinzufügt weiss ich, mehr nicht :)
Jetzt will ich das OnRead Ereignis irgendwie so bearbeiten, dass es der Eigenschaft Header und Body die empfangenen Strings zuweist, und dann mein eigenes Ereignis OnSuccess auslöst. OnRead kann öfter durchlaufen bevor OnSucces ausgelöst werden soll, da die Server die Website in 2 Teilen senden, OnSuccess könnte dann ähnlich wie OnDisconnect sein, ich hoffe ihr versteht was ich meine :)
Also, wie überschreibe ich OnRead, und wie erstelle ich mein eigenes Ereignis?
Danke, und gutn Rutsch!

cu RFZ


Dev4u.ch - Mo 30.12.02 15:07

also als Alternative zu der TNMHTTP gäbe es noch indy..

hier die URL
http://www.nevrona.com/indy/

gruss


Tino - Mo 30.12.02 15:08

Hallo,

Deine Frage ist also
RFZ hat folgendes geschrieben:
wie überschreibe ich OnRead, und wie erstelle ich mein eigenes Ereignis?

Zum ersten:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
procedure OnRead ({Parameter});  override;

{...}

procedure tMyComp.OnRead ({Parameter});  
begin
  inherited;

  {...}
end;


Zum zweiten:

Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
Type
  tOnMyEvent = Procedure ({Parameter}) of object;

  tMyComp = Class (tClientSocket)
    private
      fOnMyEvent: tOnMyEvent;
    published
      property OnMyEvent: tOnMyEvent read fOnMyEvent write fOnMyEvent;
  End;

Und wenn Du das Event nun Aufrufen möchtest:

Quelltext
1:
2:
If Assigned (fOnMyEvent) then
  fOnMyEvent ({Parameter});

Gruß
TINO


RFZ - Mo 30.12.02 15:09

Ich will aber ne eigene :P
Soll ja auch nen Lerneffekt haben.

cu RFZ


RFZ - Mo 30.12.02 15:15

@Tino
So?

Quelltext
1:
procedure OnRead(Sender: TObject; Socket: TCustomWinSocket); override;                    


[Fehler] HTTPClient.pas(25): Eine statische Methode kann nicht überschrieben werden

Scheint nicht zu funktionieren... Ausserdem dachte ich muss man bei OnDings die Prozedur Dings überschreiben... bei OnClick ist's jedenfalls Click...

cu RFZ


Tino - Mo 30.12.02 18:10

Hi,

handelt es sich bei OnRead um ein Event (also um eine Eigenschaft) oder um eine Methode? Letzendlich kannst du natürlich nur eine Methode überschreiben und diese muss dann auch als Virtual definiert sein. Ein Event kannst Du nicht überschreiben.

RFZ hat folgendes geschrieben:
Ausserdem dachte ich muss man bei OnDings die Prozedur Dings überschreiben... bei OnClick ist's jedenfalls Click...

Das muss nicht immer so sein. Letztendlich kannst Du nun mal kein Event überschreiben. Damit Du dennoch auf so ein Event in Deiner abgeleiteten Klasse reagieren kannst gibt es meistens eine Methode die (fast) nichts anderes macht als zum Beispiel das OnClick Event aufzurufen. Diese Methode ist meistens als Virtual definiert damit man diese dann in abgeleiteten Klassen überschreiben kann.

Gruß
TINO


Udontknow - Mo 30.12.02 18:31

Hi!

Nur so neben bei: Ein Event ist doch meist nach aussen als Property ansprechbar? Properties wiederum können überschrieben werden...

Cu,
Udontknow