![]() |
Re: Wie geerbte Ereignisse verarbeiten ??
wie? du schreibst in der originalen Klasse herum?? Mach das bloß nicht!! Der Sinn von oop ist das man ableiten kann und somit nicht jedesmal am original herum basteln muss.
|
Re: Wie geerbte Ereignisse verarbeiten ??
Zitat:
Delphi-Quellcode:
unit Net7Server; interface uses SysUtils, Classes, ScktComp,Forms; // Primärheader Type TPHead=record Size :Longword; end; // Sekundärheader Type TSHead=record TPSize :Longword; //Lange komplettes Paket Size :Longword; // Länge der Kern Daten Typ : Integer; // Typ der Daten end; // Statisches Hilfspaket Type THilfspaket=record PriHead : TPHead; SecHead : TSHead; Datenbuffer : array[0..512000] of byte; end; Type TClientenverwaltung=record Con :array [0..100] of Integer; HNr :array [0..100] of Integer; isOnline :array [0..100] of boolean; end; Type AHandles=array [0..100] of Integer; ACon=array [0..100] of Integer; // Event erstellen das Datentyp und Grösse wiedergibt TDatenVerarbeitungEvent = procedure (Sender:TObject;var DatenTyp:Integer;var DatenSize:Longword) of object; const LOGFILE = 'LogFile.log'; type TNet7Server = class(TServerSocket) private { Private-Deklarationen } //Variablen für Datenempfang Statisch PriHead : TPHead; // Header Datenbuffer : Pointer; // Hauptbuffer, dort lagern die empf. Daten PriDatensize : Longword; // Grösse kompl. Paket SecDatensize : Longword; // Grösse Kerndaten BufferPosition : Longword; // Lesezeichen für Receive Buffer NetDatensize : Longword; // Grösse des TCP-Pakets Modus : Integer; // Modusschalter, Lesen oder Ignorieren ErstesPaket : Boolean; // .. fertig : boolean; // ... Dummypaket : THilfspaket; //... ExportDatentyp : Integer; // Datentyp //Clientverwaltung CV:TClientenverwaltung; CVZaehler :Integer; //Event gibt später Datentyp und Size zurück FOnVerarbeitung:TDatenVerarbeitungEvent; FOnDisconnect:TSocketNotifyEvent; //Interner Logger function DebugLog(LogString: String;Varwert:integer;Zeilennummer:integer): Integer; virtual; protected { Protected-Deklarationen } public { Public-Deklarationen } function Datenempfang(Client_Verbindungsnummer:integer):boolean; virtual; function Datenverarbeitung(var Exportdaten):boolean;virtual; function ClientListNow(var EHandles;Var EConnections):boolean;Virtual; procedure InitNet7Server;virtual; procedure ClientOnList;virtual; procedure ClientDeleteList;virtual; //function Sendedaten(var Importdaten:pointer;Importdatensize:Longword;ImportDatentyp:Integer):boolean;virtual; procedure ClientDisconnect(Socket: TCustomWinSOcket); dynamic; published { Published-Deklarationen } // Eventproperty property OnVerarbeitung:TDatenVerarbeitungEvent read FOnVerarbeitung write FOnVerarbeitung ; //property ClientDisconnect:TSocketNotifyEvent read FOnClientDisconnect write FOnClientDisconnect; end; procedure Register; implementation procedure Register; begin RegisterComponents('Marko', [TNet7Server]); end; . . . Sie ist abgeleitet von der Klasse. |
Re: Wie geerbte Ereignisse verarbeiten ??
Das hätte man aber auch auf das Notwendige kürzen können :wink: . Dein Fehler steht sowohl in meinem als auch in SirThornberrys Post.
[add]
Delphi-Quellcode:
:gruebel: ? Was willst du damit bezwecken?
FOnDisconnect:TSocketNotifyEvent;
[/add] |
Re: Wie geerbte Ereignisse verarbeiten ??
wenn du die Methode überschreiben willst darfst du nicht
Delphi-Quellcode:
schreiben sondern:
procedure ClientDisconnect(Socket: TCustomWinSOcket); dynamic;
Delphi-Quellcode:
Schließlich willst du die Methode ja überschreiben und keine virtuelle neu declarieren (schau dir mal auf Delphi-Source.de die Tutorials dazu an.
procedure ClientDisconnect(Socket: TCustomWinSOcket); override;
@Khabarakh: Wo war in meinem Post der Fehler? Ich hab die Methode gepostet welche er überschreiben muss und diese ist nunmal "dynamic". |
Re: Wie geerbte Ereignisse verarbeiten ??
Zitat:
|
Re: Wie geerbte Ereignisse verarbeiten ??
Zitat:
|
Re: Wie geerbte Ereignisse verarbeiten ??
Also ich glaube das wir uns missverstehen. :roll:
Ich möchte keine Procedure procedure ClientDisconnect(Socket: TCustomWinSOcket); neu schreiben. Ich erkläre es mal anders. Die Orginalkomponente gibt ja, wenn ein Client offline geht, ein Ereignis zurück. Im OE zu finden unter OnClientDisconnect. Wenn dieses Ereignis auftaucht, das meine abgeleitete Komponente ja auch hat, möchte ich davon Kenntniss nehmen. Um eine Procedure innerhalb der Komponente aufzurufen um zum Beispiel, Erbsen zu zählen, :mrgreen: und deren Anzahl bei bedarf zurückzugeben. :gruebel: |
Re: Wie geerbte Ereignisse verarbeiten ??
So.. habe die Lösung gefunden
Delphi-Quellcode:
eigendlich zu simpel :mrgreen:
if Assigned(OnClientDisconnect) then
Wie ich die procedure am Leben erhalte die diesen Code beinhaltet ist ein anderes Problem. Aber vielen herzlichen Dank an Euch. |
Re: Wie geerbte Ereignisse verarbeiten ??
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; |
Re: Wie geerbte Ereignisse verarbeiten ??
@SirThornberry: und was war dann an meiner Aussage oben falsch? Genau das meinte ich ja...
Dust Signs |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:26 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz