Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Event Property erst prüfen dann setzen (https://www.delphipraxis.net/38387-event-property-erst-pruefen-dann-setzen.html)

static_cast 18. Jan 2005 15:36


Event Property erst prüfen dann setzen
 
Ahoi,

ich habe mal eine Frage oder besser gesagt ein mittleres Problem, folgender Code:

Delphi-Quellcode:
property OnMyEvent:TNotifyEvent read FMyEvent write SetMyEvent;
Delphi-Quellcode:
procedure TClass.SetMyEvent(const Value:TNotifyEvent);
begin
  FMyEvent:=Value;

  if NOT Assigned(FMyEvent) then
  begin
    FMyEvent:=Self.DefaultInternalEvent;
  end;
 
  MyComponent.Event:=FMyEvent;
end;
Und zwar tut es nicht so wie ich es gerne hätte. Der Event ist Default auf eine interne Procedure gesetzt aber man soll ihn auch überschreiben können auf eine externe Procedure, im OI oder wo auch immer...

Weiß jemand woran das liegt oder welchen Fehler ich ggf. mache (abgesehen jetzt von vllt falschen var Namen oder so, da ich den Code jetzt nur so zum zeigen des Problems erstellt habe)?

Die Delphi Version ist D5 Pro. mit Update 1

Grüße und danke schonmal im vorraus =)
Daniel

Dax 18. Jan 2005 15:39

Re: Event Property erst prüfen dann setzen
 
Wenn du als Standardverhalten eine interne Prozedur haben willst, musst du sie im Konstructor oder im AfterCunstruction zuweisen, dann brauchst du auch die Set-Prozedur nicht mehr. ;)

static_cast 18. Jan 2005 15:51

Re: Event Property erst prüfen dann setzen
 
Ne ja klar das tut er ja auch soweit ;) Nur angenommen man will dann eine andere zuweisen geht das iwi nicht :-/ (zur Designzeit jetzt).

Und die Abfrage
Delphi-Quellcode:
if NOT Assigned(FMyEvent) then
ergibt immer True.

Dax 18. Jan 2005 15:53

Re: Event Property erst prüfen dann setzen
 
Ich weiss nicht, obs hilft, aber nimm doch mal Probeweise das const weg.. Ich finde in dem Code keinen direkten Fehler :?

static_cast 18. Jan 2005 15:59

Re: Event Property erst prüfen dann setzen
 
Mööp, geht auch nicht :( Doppelklick im OI bei dem Event erstellt ihn zwar wie zuvor, aber lässt ihn leer und die Set Procedure setzt es wieder aufs internet Default, weil die Abfrage wieder True ergibt also angeblich nil.

SirThornberry 18. Jan 2005 16:28

Re: Event Property erst prüfen dann setzen
 
prüf mal ob Value zu begin der SetMethode assigned ist oder nicht.

static_cast 18. Jan 2005 16:50

Re: Event Property erst prüfen dann setzen
 
Hatte ich auch schon zu anfang, tut er genausowenig :(

static_cast 20. Jan 2005 09:51

Re: Event Property erst prüfen dann setzen
 
Da mir ja wohl anscheinden keiner helfen konnte oder wollte ;) habe ich es jetzt anders gelößt, aber komisch das es so geht... nunja egal.

Delphi-Quellcode:
constructor TClass.Create(AOwner:TComponent);
begin
  // ...
  MyComponent.Event:=DefaultInternalEvent;
  // ...
end;

procedure TClass.SetMyEvent(const Value:TNotifyEvent);
begin
  FMyEvent:=Value;
end;

procedure TClass.DefaultInternalEvent(Sender:TObject);
begin
  if Assigned(FMyEvent) then
  begin
    FMyEvent(Sender);
  end else
  begin
    // default ablauf
    // ...
  end;
end;

SirThornberry 22. Jan 2005 14:46

Re: Event Property erst prüfen dann setzen
 
dieses "MyComponent.Event:=FMyEvent;" was ist das? die eigene komponente? Ich selbst hab das selbst auch schon gemacht was du vorhattest und es hat geklappt. Ich denke es liegt an irgend etwas vom quelltext was du nicht gepostet hast.


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