![]() |
TNotifyEvent = nil
Hi,
Also ich habe ein kleines Problem^^ Ich bin gerade eine Klasse für nen Clienten am Schreiben.
Delphi-Quellcode:
Das klappt soweit. Aber wenn ich OnConnect nichts bzw nil zweise gibts eine Zugriffsverletzung. Da hab ich mir gedacht:
TClientSocket = class
private FOnConnect: TNotifyEvent; ... public function Connect(const Timeout: Integer = -1): Boolean; property OnConnect: TNotifyEvent read FOnConnect write SetOnConnect; ... end; function TClientSocket.Connect(const Timeout: Integer = -1): Boolean; begin // bla bla OnConnect; end;
Delphi-Quellcode:
Nur dummerweise gibt es Probleme bei der If-Abfrage.. Er will bei Value einen Parameter. Wenn ich einen Parameter angebe dann heißt es "Inkompatible Typen".. Warum kann man denn einem TNotifyEvent nil zuweisen aber nicht abfragen ob es nil ist ? -.-
procedure TClientSocket.SetOnConnect(const Value: TNotifyEvent);
begin if Value = nil then FOnConnect := Value else FOnConnect := Default; // Default ist ne Leere Procedure(Sender: TObject) end; Gruß Neutral General |
Re: TNotifyEvent = nil
Delphi-Quellcode:
muss es heißen.
type
TOnConnect = procedure(Sender: TObject); ... = class(TObject); private FOnConnect: TOnConnect; public property OnConenct: TOnConnect read FOnConnect write FOnConnect; end; procedure TClientSocket.SetOnConnect; begin if Assigned(OnConnect) then FOnConnect(self); |
Re: TNotifyEvent = nil
Sehr gut. Danke :)
|
Re: TNotifyEvent = nil
Push edit.
|
Re: TNotifyEvent = nil
Eh deine neue Version funktioniert (bei mir) nicht :mrgreen:
abgesehn davon das die Zeile bei dir falsch ist :D
Delphi-Quellcode:
Gruß
property OnConenct: TOnConnect read FOnConnect write FOnConnect;
Neutral General |
Re: TNotifyEvent = nil
Nun ja, ich habe sie ja nur mal eben so schnell ihr rein gehackt, musst du natürlich noch eventuelle (Tipp)fehler ausbesser. Aber was heißt bitte sehr "funktioniert (bei mir) nicht"? :roll:
|
Re: TNotifyEvent = nil
Das gibt ne AV. Genau wie meine erste Lösung^^
Und das was du zuerst geschrieben hast das ging bei mir... |
Re: TNotifyEvent = nil
Nochwas: ich würde die Assigned() Abfrage nicht auf die Property anwenden sondern auf die Variable FOnConnect.
Ach so, unter der Voraussetzung, das man wirklich Proceduren und keine Methoden dem OnConnect zuweisen soll, dann ist Luckie's Ansatz richtig, ansonsten wäre TOnConnect durch TNotifyEvent zu ersetzen bzw. ein "Of Object" an der Typendeklaration zu ergänzen. |
Re: TNotifyEvent = nil
Zitat:
Zitat:
Delphi-Quellcode:
oder
TOnConnect = procedure(Sender: TObject);
Delphi-Quellcode:
bleibt sich wohl gleich, da TNotyfiy Event so deklariert ist:
TOnConnect = TNotifyEvent
Delphi-Quellcode:
@Superr heftig Neutral General:
type TNotifyEvent = procedure (Sender: TObject) ofobject;
Bei mir hat noch of object gefehlt bei der Typendeklaration. |
Re: TNotifyEvent = nil
Man könnte es natürllich auch gleich so machen, wie Borland es in der VCL macht:
Delphi-Quellcode:
Das ermöglicht auch einer abgeleiteten Klasse, das "Default"-Verhalten zu ändern.
protected
procedure DoConnect; virtual; public function Connect(const Timeout: Integer = -1): Boolean; property OnConnect: TNotifyEvent read FOnConnect write FOnConnect; // kein Setter ... end; function TClientSocket.Connect(const Timeout: Integer = -1): Boolean; begin // ... DoConnect; end; procedure TClientSocket.DoConnect; begin if Assigned(FOnConnect) then FOnConnect(Self) else begin // Default end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:04 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