Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi nonVCL Fehler mit OnRead von clientsocket (https://www.delphipraxis.net/97947-nonvcl-fehler-mit-onread-von-clientsocket.html)

gandime 19. Aug 2007 14:45


nonVCL Fehler mit OnRead von clientsocket
 
Hi,
ich versuche die OnRead property von Tclientsocket zum laufen zu bringen mein bisheriger versucht:
Delphi-Quellcode:
type
  clsocket = class
      procedure onread(Sender: TObject; Socket: TCustomWinSocket);
   end;

var
  cl:tclientsocket;

procedure onread(Sender: TObject; Socket: TCustomWinSocket);
var
  s_temp:string;
begin

end;

procedure clsocket.onread(Sender: TObject; Socket: TCustomWinSocket);
begin
  onread(Sender,Socket);
end;

begin
  clsocket.create;
  cl.OnRead:=clsocket.onread;// Fehlermeldung: Inkompatible Typen: 'TSocketNotifyEvent' und 'Procedure'
end.
was mache ich falsch?

mfg
gandime

Die Muhkuh 19. Aug 2007 14:48

Re: nonVCL Fehler mit OnRead von clientsocket
 
Hi,

1. Fehler ist, dass man Objekte nicht mit <varname>.Create erzeugt, sondern mit <varname> := <Klassenname>.Create, also bei Dir:

Delphi-Quellcode:
cl := clsocket.Create
2. Schau Dir in den Sourcen mal die OnRead-Procedure an, genau so muss Du diese auch implementieren.

gandime 19. Aug 2007 14:57

Re: nonVCL Fehler mit OnRead von clientsocket
 
also das funktioniert auch nicht:
Delphi-Quellcode:
cl := clsocket.Create
fehlermeldung:
Zitat:

Inkompatible Typen: 'TClientSocket' und 'clsocket'
im source bin ich dann auf folgenden gestoßen und wie baue ich das jetzt richtig ein?
Delphi-Quellcode:
TSocketNotifyEvent = procedure (Sender: TObject; Socket: TCustomWinSocket) of object;

Muetze1 19. Aug 2007 15:24

Re: nonVCL Fehler mit OnRead von clientsocket
 
Zitat:

Zitat von gandime
also das funktioniert auch nicht:
Delphi-Quellcode:
cl := clsocket.Create
fehlermeldung:
Zitat:

Inkompatible Typen: 'TClientSocket' und 'clsocket'

Ist doch vollkommen richtig. Du hast 2 Klassen: TClientSocket und clsocket. Du brauchst von beiden die Instanz und die willst du beide in eine Variable packen?

Also: Wo legst du die Instanz von TClientSocket ab? Grundlegend würde sich ja die Variable cl eignen, da sie schon den richtigen Typ hat. Dann bleibt noch die Frage wo du die Instanz von clsocket ablegen willst.

sirius 19. Aug 2007 15:32

Re: nonVCL Fehler mit OnRead von clientsocket
 
1. Wieso nonVCL? :gruebel:

2. Wenn ich das richtig verstehe, willst du einfach nur das Ereignis OnRead einer Methode zuweisen.
Dazu brauchst du irgendeine Klasse (die sicherlich noch mehr machen wird als nur OnRead) und setzt die property von onRead auf eine Methode mit der entspr. Deklaration:
Delphi-Quellcode:
type TSampleClass=class
        constructor create;
        destructor destroy; override;
        procedure DoOnread(Sender: TObject; Socket: TCustomWinSocket);
       private
        clientSocket:Tclientsocket;
end;

//...
constructor TSampleClass.create;
begin
  inherited;
  clientsocket:=Tclientsocket.create;
  clientsocket.OnRead:=DoOnRead;
end;
destructor TSampleClass.Destroy;
begin
  clientsocket.free;
end;

procedure TSampleClass.Doonread(Sender: TObject; Socket: TCustomWinSocket);
begin
   // hier kannst du jetzt das Ereignis handhaben
end;

gandime 19. Aug 2007 16:18

Re: nonVCL Fehler mit OnRead von clientsocket
 
danke


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:24 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