AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Wie geerbte Ereignisse verarbeiten ??

Ein Thema von Net7 · begonnen am 29. Okt 2005 · letzter Beitrag vom 29. Okt 2005
Antwort Antwort
Seite 2 von 3     12 3      
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 11:57
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#12

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 12:08
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.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#13

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 12:14
Das hätte man aber auch auf das Notwendige kürzen können . Dein Fehler steht sowohl in meinem als auch in SirThornberrys Post.

[add]
FOnDisconnect:TSocketNotifyEvent; ? Was willst du damit bezwecken?
[/add]
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#14

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 12:16
wenn du die Methode überschreiben willst darfst du nicht
procedure ClientDisconnect(Socket: TCustomWinSOcket); dynamic; schreiben sondern:
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".
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#15

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 12:25
Zitat von Khabarakh:
Das hätte man aber auch auf das Notwendige kürzen können . Dein Fehler steht sowohl in meinem als auch in SirThornberrys Post.

[add]
FOnDisconnect:TSocketNotifyEvent; ? Was willst du damit bezwecken?
[/add]
Huch.. das sind noch parr überbleibsel meiner Experimente.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#16

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 12:37
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 .
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#17

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 12:47
Also ich glaube das wir uns missverstehen.

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, und deren Anzahl bei bedarf zurückzugeben.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Benutzerbild von Net7
Net7

Registriert seit: 22. Jun 2004
Ort: Lauenburg
161 Beiträge
 
Delphi 7 Professional
 
#18

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 13:18
So.. habe die Lösung gefunden

  if Assigned(OnClientDisconnect) then eigendlich zu simpel

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

Aber vielen herzlichen Dank an Euch.
Marko
So`ne Atombombe kann einem den ganzen Tag verderben!
Eine eigene DLL in C++ geschrieben wird meist ein Sklave für mein Delphi/Pascal.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#19

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 16:11
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;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Dust Signs

Registriert seit: 28. Dez 2004
Ort: Salzburg
379 Beiträge
 
#20

Re: Wie geerbte Ereignisse verarbeiten ??

  Alt 29. Okt 2005, 16:59
@SirThornberry: und was war dann an meiner Aussage oben falsch? Genau das meinte ich ja...

Dust Signs
(aka AXMD in der EE)
Die Nummer, die Sie gewählt haben, ist imaginär. Bitte drehen Sie Ihr Telefon um 90° und versuchen Sie es erneut.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:40 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