Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Nachfolger-Komponente soll Ereignis vervollständigen (https://www.delphipraxis.net/42879-nachfolger-komponente-soll-ereignis-vervollstaendigen.html)

Pseudemys Nelsoni 25. Mär 2005 08:54


Nachfolger-Komponente soll Ereignis vervollständigen
 
Moin,

mal angenommen ich habe folgendes:

Delphi-Quellcode:
TEventX = procedure(Sender: TObject; var DoDef: Boolean) of object;
TComp1 = class(TComponent)
private
  FOnIrgendwas: TEventX;
  procedure SomeProc;
published
  property OnIrgendwas: TEventX read FOnIrgendwas read FOnIrgendwas;
end;

...

procedure TComp1.SomeProc;
var
  DoDef: Boolean;
begin
  DoDef := True;
  if Assigned(FOnIrgendwas) then
    FOnIrgendwas(Self, DoDef);
  if DoDef then
  begin
    // hier was tun
    // hier was tun
    // hier was tun
  end;
end;
und möchte davon eine Komponente ableiten, wie könnte ich dann in der nachfolgerkompo nach den 3x "// hier was tun" den code erweitern?
Meine einzige Idee wäre bei "if DoDef then" eine virtuelle Methode aufzurufen und dort die "// hier was tun" hineinpacke und in der nachfolgerkompo überschreibe.

Die berühmte Frage: Ist es richtig so oder macht man das anders?

Bernhard Geyer 25. Mär 2005 10:11

Re: Nachfolger-Komponente soll Ereignis vervollständigen
 
Delphi-Quellcode:
TEventX = procedure(Sender: TObject; var DoDef: Boolean) of object;
TComp1 = class(TComponent)
private
  FOnIrgendwas: TEventX;
protected
  procedure SomeProc; virtual;
published
  property OnIrgendwas: TEventX read FOnIrgendwas read FOnIrgendwas;
end;

TComp2 = class(TComp1)
protected
  procedure SomeProc; override;
end;

...

procedure TComp1.SomeProc;
var
  DoDef: Boolean;
begin
  DoDef := True;
  if Assigned(FOnIrgendwas) then
    FOnIrgendwas(Self, DoDef);
end;

procedure TComp2.SomeProc;
var
  DoDef: Boolean;
begin
  DoDef := True;
  if Assigned(FOnIrgendwas) then
    FOnIrgendwas(Self, DoDef);

  if DoDef then
  begin
    // Neuer Code
  end;
end;


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