Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Wie geerbte Ereignisse verarbeiten ?? (https://www.delphipraxis.net/55945-wie-geerbte-ereignisse-verarbeiten.html)

SirThornberry 29. Okt 2005 17:39

Re: Wie geerbte Ereignisse verarbeiten ??
 
@DustSigns: Du hast geschrieben er soll "OnClientDisconnect" überschreiben. Und OnClientDisconnection ist nur das Event was man nicht überschreiben kann. Bei den meisten komponenten gibt es Methoden welche das Event ausführen und somit kann man diese Methoden überschreiben. Es gibt aber auch den Fall das die Methode welche das Event auslöst nicht dynamic ist und somit kann man diese teilweise auch nicht überschreiben. Es ist also ein Unterschied ob man ein Event überschreibt (was nicht geht) oder die Methode die das event auslöst. "OnClientDisconnect" ist also etwas anderes als ClientDisconnect

Khabarakh 29. Okt 2005 17:40

Re: Wie geerbte Ereignisse verarbeiten ??
 
Zitat:

Zitat von Dust Signs
@SirThornberry: und was war dann an meiner Aussage oben falsch? Genau das meinte ich ja...

Du hast gesagt, man müsse die Variable/Property überschreiben, aber das geht eben nur mit der Dispatcher-Methode. Für dich mag das das gleiche sein, aber für einen Anfänger :wink: ...

@Net7:
Zitat:

Zitat von SirThornberry
(ich glaube dir fehlen entscheidende Grundlagen in Delphi)

Passend dazu die Neuerscheinung des Tages: Luckies "Klassen in Delphi"

Net7 29. Okt 2005 17:54

Re: Wie geerbte Ereignisse verarbeiten ??
 
Zitat:

Zitat von SirThornberry
ahh, du musst die methode nicht neu schreiben. Wenn du die Funktion überschreibst wird diese aufgerufen (somit bekommst du Kenntnis das diese aufgerufen wurde). Um nun das auszuführen was in der alten methode ausgeführt wurde musst du die funktion nicht neu schreiben sondern rufst einfach mit inherited die alte methode auf! (ich glaube dir fehlen entscheidende Grundlagen in Delphi)

Delphi-Quellcode:
type
  TNet7Server = class(TServerSocket)
  protected
    procedure ClientDisconnect(Socket: TCustomWinSOcket); override;
  [...]

procedure TNet7Server.ClientDisconnect(Socket: TCustomWinSOcket);
begin
  //Hier Source plazieren der ausgeführt werden soll bevor event ausgelöst wird
  inherited ClientDisconnect(Socket); //Damit wird die alte ClientDisconnect-Methode aufgerufen welche unter anderem das OnClientDisconnect auslöst
  //Hier Source plazieren der ausgeführt werden soll nach dem event ausgelöst wurde
end;


Hmmm so habe ich es ja probiert, nur es funktioniert ja nicht, weil mir beim Compilieren der Fehler auftritt.. "Methode ClientDisconnect" nicht in Basisklasse gefunden.

Und ich konnte die richtige Basisklasse auch bis jetzt nicht ermitteln.

Ich helfe mir nun aus in der Anwendung damit die Daten zurückzuvermitteln
in die Komponente.

Delphi-Quellcode:

procedure TForm1.Net7Server1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
     

   
     Net7Server1.ClientDeleteList(Socket);

end;

deklariert in der kompo ist das so

Delphi-Quellcode:
.
.
public

procedure ClientDeleteList(DSocket: TCustomWinSocket);virtual;
.
.
.


Ich weiß das das absolut unelegant ist. Nur was soll ich machen... :wall:

Khabarakh 29. Okt 2005 18:42

Re: Wie geerbte Ereignisse verarbeiten ??
 
Oh, hab gerade in die Socket-Sourcen geschaut... erstens ist es anders und zweitens als man denkt :stupid: .
TServerSocket bezieht seine gesamten Client-Events von FServerSocket(TServerWinSocket). Du musst also von TServerWinSocket ableiten und dort ClientDisconnect überschreiben. Damit die neue Klasse auch verwendet wird, muss nun FServerSocket auch als diese instanziiert werden. Dazu fallen mir zwei Möglichkeiten ein:
1. Du leitest von TServerSocket ab und überschreibst den Constructor:
Delphi-Quellcode:
begin
  inherited;
  FServerSocket.Free;
  FServerSocket := TMyNewServerWinSocket.Create(INVALID_SOCKET);
end;
Finde ich allerdings nicht ganz so schön, besser ist IMO:
2. Leite von TCustomServerSocket ab, mit folgendem Constructor (Original: TServerSocket.Create):
Delphi-Quellcode:
begin
  inherited Create(AOwner);
  FServerSocket := TMyNewServerWinSocket.Create(INVALID_SOCKET); //<- Veränderung
  InitSocket(FServerSocket);
  FServerSocket.ThreadCacheSize := 10;
end;
Außerdem kopierst du den Interface-Teil von TServerSocket, was aber nicht viel ist (neue Implementierungen gibts auch nicht).

Das Ganze ist also doch nicht so trivial :zwinker: .

Net7 29. Okt 2005 19:07

Re: Wie geerbte Ereignisse verarbeiten ??
 
Zitat:

Zitat von Khabarakh
... hab gerade in die Socket-Sourcen geschaut...

Öhmmmm.... wie das denn, hast du dir das hikhak aus der DCU angetan??? :pale:


Tja wird mir wohl nix anderes übrig bleiben das so zumachen wie du vorschlägst. :roll:

Khabarakh 29. Okt 2005 19:25

Re: Wie geerbte Ereignisse verarbeiten ??
 
Zitat:

Zitat von Net7
Zitat:

Zitat von Khabarakh
... hab gerade in die Socket-Sourcen geschaut...

Öhmmmm.... wie das denn, hast du dir das hikhak aus der DCU angetan??? :pale:

Ich könnte einfach "Ja" sagen, aber eigentlich habe ich nur die Pas im "Source"-Ordner geöffnet :mrgreen: .

Net7 29. Okt 2005 19:30

Re: Wie geerbte Ereignisse verarbeiten ??
 
Zitat:

Zitat von Khabarakh
Ich könnte einfach "Ja" sagen, aber eigentlich habe ich nur die Pas im "Source"-Ordner geöffnet :mrgreen: .


Tja dann hast du mir eins vorraus, die gibs bei mir irgendwie nicht OnSource.. :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 Uhr.
Seite 3 von 3     123   

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