Delphi-PRAXiS
Seite 2 von 3     12 3      

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 11:57

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.

Net7 29. Okt 2005 12:08

Re: Wie geerbte Ereignisse verarbeiten ??
 
Zitat:

Zitat von SirThornberry
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.

mom ich geb mal bissel quellcode

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.

Khabarakh 29. Okt 2005 12:14

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:
FOnDisconnect:TSocketNotifyEvent;
:gruebel: ? Was willst du damit bezwecken?
[/add]

SirThornberry 29. Okt 2005 12:16

Re: Wie geerbte Ereignisse verarbeiten ??
 
wenn du die Methode überschreiben willst darfst du nicht
Delphi-Quellcode:
procedure ClientDisconnect(Socket: TCustomWinSOcket); dynamic;
schreiben sondern:
Delphi-Quellcode:
procedure ClientDisconnect(Socket: TCustomWinSOcket); override;
Schließlich willst du die Methode ja überschreiben und keine virtuelle neu declarieren (schau dir mal auf Delphi-Source.de die Tutorials dazu an.

@Khabarakh: Wo war in meinem Post der Fehler? Ich hab die Methode gepostet welche er überschreiben muss und diese ist nunmal "dynamic".

Net7 29. Okt 2005 12:25

Re: Wie geerbte Ereignisse verarbeiten ??
 
Zitat:

Zitat von Khabarakh
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:
FOnDisconnect:TSocketNotifyEvent;
:gruebel: ? Was willst du damit bezwecken?
[/add]

Huch.. das sind noch parr überbleibsel meiner Experimente. :mrgreen:

Khabarakh 29. Okt 2005 12:37

Re: Wie geerbte Ereignisse verarbeiten ??
 
Zitat:

Zitat von Khabarakh
Die Lösung für deinen Fehler steht sowohl in meinem als auch in SirThornberrys Post.

So ist es etwas verständlicher :stupid: .

Net7 29. Okt 2005 12:47

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:

Net7 29. Okt 2005 13:18

Re: Wie geerbte Ereignisse verarbeiten ??
 
So.. habe die Lösung gefunden

Delphi-Quellcode:
  if Assigned(OnClientDisconnect) then
eigendlich zu simpel :mrgreen:

Wie ich die procedure am Leben erhalte die diesen Code beinhaltet ist ein anderes Problem.

Aber vielen herzlichen Dank an Euch.

SirThornberry 29. Okt 2005 16:11

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;

Dust Signs 29. Okt 2005 16:59

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 19:59 Uhr.
Seite 2 von 3     12 3      

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