Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Event mit Parameter der sich selbst enthält (https://www.delphipraxis.net/46568-event-mit-parameter-der-sich-selbst-enthaelt.html)

Sämy 27. Mai 2005 12:22


Event mit Parameter der sich selbst enthält
 
Wie kann ich folgendes Problem bewerkstelligen?


Delphi-Quellcode:
type
  TSZOnFinishEvent = procedure (SZTestClass: TSZTestClass) of Object; // Benötigt die classe TSZTestClass, die es noch nicht gibt
  TSZTestClass = class(TComponent)
  private
    FOnFinishEvent: TSZOnFinishEvent;                                // Benötigt das Object TSZOnFinishEvent, welches es nicht gibt,
                                                                      // sofern ich das Problem oben löse und das Objekt nach der Klassen-
                                                                      // definition definiere...
  end;

Besten Dank im Voraus

Treffnix 27. Mai 2005 12:31

Re: Event mit Parameter der sich selbst enthält
 
Das sollte gehen, indem du einfach nen Dummy davorsetzt:

Delphi-Quellcode:
type
  TSZTestClass = class;
  TSZOnFinishEvent = procedure (SZTestClass: TSZTestClass) of Object; // Benötigt die classe TSZTestClass, die es noch nicht gibt
  TSZTestClass = class(TComponent)
  private
    FOnFinishEvent: TSZOnFinishEvent;                                                                    
end;

marabu 27. Mai 2005 12:36

Re: Event mit Parameter der sich selbst enthält
 
Nicht alles ist gut, was geht. Der vom FrameWork vorgelebte Standardweg sieht so aus:

Delphi-Quellcode:
type
  TSZOnFinishEvent = procedure(Sender: TObject) of object;

  TSZTestClass = class(TComponent)
  private
    FOnFinishEvent: TSZOnFinishEvent;
  end;
Grüße vom marabu

jim_raynor 27. Mai 2005 12:39

Re: Event mit Parameter der sich selbst enthält
 
Zitat:

Zitat von marabu
Nicht alles ist gut, was geht. Der vom FrameWork vorgelebte Standardweg sieht so aus:

Delphi-Quellcode:
type
  TSZOnFinishEvent = procedure(Sender: TObject) of object;

  TSZTestClass = class(TComponent)
  private
    FOnFinishEvent: TSZOnFinishEvent;
  end;
Grüße vom marabu

Dann kannst du auch gleich TNotifyEvent benutzten. Da finde ich die Lösung von Treffnix wesentlich eleganter und du ersparst dir fleißiges Typcasten in dem Event-Handler.

marabu 27. Mai 2005 14:10

Re: Event mit Parameter der sich selbst enthält
 
Zitat:

Zitat von jim_raynor
Dann kannst du auch gleich TNotifyEvent benutzten.

Wenn das von [user]sämy[/user] echter Code war und nicht ein verkürztes Beispiel - was ich anhand der Identifier geschlossen habe - dann sollte wirklich TNotifyEvent eingesetzt werden. Wenn [user]sämy[/user] seinem Event noch zusätzliche Parameter spendieren will, dann ist das Extra-Event schon in Ordnung - aber den Sender zu typisieren ist schlechter Stil. In einem frame work wird das sehr schnell zu einem Pferdefuß, im Programm eines Hobby-Programmierers bleibt es eher ohne Folgen. Wenn nur ein einziger Jung-Programmierer versteht, warum das so ist, oder zumindest darüber nachdenkt, dann hat sich mein Beitrag in diesem thread gelohnt.

Grüße vom marabu

MosiXXL 27. Mai 2005 19:59

Re: Event mit Parameter der sich selbst enthält
 
So gehts.

Delphi-Quellcode:
type
  TSZTestClass = class;

  TSZOnFinishEvent = procedure (SZTestClass: TSZTestClass) of Object; // Benötigt die classe TSZTestClass, die es noch nicht gibt

  TSZTestClass = class(TComponent)
  private
    FOnFinishEvent: TSZOnFinishEvent;                                // Benötigt das Object TSZOnFinishEvent, welches es nicht gibt,
                                                                      // sofern ich das Problem oben löse und das Objekt nach der Klassen-
                                                                      // definition definiere...
  end;


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