Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi OnEvent überschreiben? (https://www.delphipraxis.net/28111-onevent-ueberschreiben.html)

Bernhard Geyer 19. Aug 2004 19:17

Re: OnEvent überschreiben?
 
Zitat:

Zitat von Pseudemys Nelsoni
Bernhard, ich glaub das ist mir auch "zu schwer"

Wieso zu schwer?

Delphi-Quellcode:
type
  TMyClass = class(TComponent)
  private
    FClientSocket: TClientSocket;
    FOnConnect: TNotifyEvent;

    function ClientSocketEvent(...);
  public
    constructor Create(AOwner: TComponent);
 
  published  
    property OnConnect: TNotifyEvent read FOnConnect write FOnConnect;
  end;  


constructor TMyClass.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  FClientSocket := TClientSocket.Create(self);
  FClientSocket.OnEvent := ClientSocketEvent;
  ...
end;

function TMyClass.ClientSocketEvent(...);
begin
  ...
  ...
  if xyz ....
    if Assigned(OnConnect) then
      OnConnect(self);
  ...
end;
Ohne Garantie auf sofortige Compilierbarkeit!

Pseudemys Nelsoni 19. Aug 2004 19:24

Re: OnEvent überschreiben?
 
hallo bernhard,

danke für den code und die mühe in zu schreiben, ich würde ihn sogar verstehen wenn ich wüsste was assigned tut (ja ich kapiers noch immer nicht :oops:)
wenn das event ausgelöst wird wieso muss dann noch mit assigned geprüft werden?

Bernhard Geyer 19. Aug 2004 20:05

Re: OnEvent überschreiben?
 
Assigned(OnConnect) entspricht if OnConnect <> nil

Nur wenn dem OnConnect-Event ein Event-Handler zugewiesen wurde, wird dieser Event aufgrufen.

z.B. wenn Du in der IDE eine TButton auf dein Formular legst und darauf doppelklickst, so wird dem Evenhandler OnClick ein Wert zugewiesen. Im Code von TButton (oder einer Basisklasse) steht dann:
Delphi-Quellcode:
  if Assigned(OnClick) then
    OnClick(self);
und dein Code wird dann bei einem Doppelklick während der Laufzeit ausgeführt.

Pseudemys Nelsoni 19. Aug 2004 20:19

Re: OnEvent überschreiben?
 
Hallo Bernhard,

Zitat:

Nur wenn dem OnConnect-Event ein Event-Handler zugewiesen wurde, wird dieser Event aufgrufen.
Wann wäre dies nicht der fall? ich meine, wann kann assigned mal "false" ausgeben? muss ja dann ein fehler im source sein oder?

Die Muhkuh 19. Aug 2004 20:20

Re: OnEvent überschreiben?
 
Ne, dann wird einfach das Ereigniss nicht ausgeführt.

Pseudemys Nelsoni 19. Aug 2004 22:09

Re: OnEvent überschreiben?
 
mannometer ich kriegs echt nicht gebacken...

ich schreib nochmal genau was ich vor habe...

ich leite eine klasse von TClientSocket ab, von der neuen klasse möchte ich das "OnConnect" ereignis
überschreiben. Das OnConnect Ereignis sollte also wenn es fertig ist so aussehen:

Delphi-Quellcode:
procedure TMyClass.OnConnect;
begin
  self.SendText('data1');
  self.SendText('data2');
  self.SendText('data3');
end;
jetzt weiss ich nichtmal wo ich das ereignis hinpacken müsste, protected oder published? letzteres ist doch für den OI gedacht oder? (was ich nichtmal bräuchte).
Dann weiss ich nicht ob da noch irgendwelche parameter beim onconnect hin müssen (Sender: TObject z.b (wozu auch immer das ist).

Hatte schon so angefangen:

Delphi-Quellcode:
type
  TTSSocketClass = class(TClientSocket)
  private
    FOnConnect: TSocketNotifyEvent;
    procedure OnConnectProc(SocketNotifyEvent: TSocketNotifyEvent);
  public
    constructor Create(AOwner: TComponent); override;
  published
    property OnConnect: TSocketNotifyEvent read FOnConnect write FOnConnect;
  end;

implementation

constructor TTSSocketClass.Create(AOwner: TComponent);
begin
  inherited;
  inherited OnConnect := OnConnectProc;
end;

procedure TTSSocketClass.OnConnectProc(Sender: TObject);
begin
  self.SendText('irgendwas eben);
end;

aber ist sicher wieder falsch oder? ich bekomme immer irgendein fehler, diesmal "liste der parameter ist unterschiedlich..."

Pseudemys Nelsoni 20. Aug 2004 22:07

Re: OnEvent überschreiben?
 
*hochschieb*

wie "überschreib" ich denn das "OnConnect"? :( wie überschreibe ich überhaupt irgendein Ereignis? ich muss irgendwie ja wissen WANN ich aus meiner klasse heraus daten senden kann, daher brauch ich das "onconnected" ja

Pseudemys Nelsoni 21. Aug 2004 22:18

Re: OnEvent überschreiben?
 
*hochschieb*

Nothine 22. Aug 2004 21:37

Re: OnEvent überschreiben?
 
is nich getestet, aber ich hab mich kurz mit der TClientSocket komponente auseinandergesetzt und das dürfte sein, wonach du suchst:
Delphi-Quellcode:
interface
  uses ScktComp;

  type TClientSocketDescendant = class(TClientSocket)
  private
  protected
    procedure Event(Socket: TCustomWinSocket; SocketEvent: TSocketEvent); override;
  public
  published
  end;

implementation

  procedure TClientSocketDescendant.Event(Socket: TCustomWinSocket; SocketEvent: TSocketEvent);
  begin
    if SocketEvent = seConnect then
      DoWhateverYouFeelLike(WithTheParamsYouWantOrNeed);
    inherited;
  end;

end;
hoffe es klappt :stupid: :roll:


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:20 Uhr.
Seite 2 von 2     12   

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