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 Komponente Ereignis weitergeben (https://www.delphipraxis.net/127696-komponente-ereignis-weitergeben.html)

API 17. Jan 2009 12:29


Komponente Ereignis weitergeben
 
Hallo

Bei einer Komponente (TMyControl) wird im OI das Ereignis OnBCD zugewiesen.
Wie kann ich es anstellen, dass wenn in TObjx das Ereignis OnBCD ausgelöst wird, auch
OnBCD von TMyControl ausgeführt wird...?

Hoffe ihr versteht es einigermaßen...

Die Klassen sind etwa so aufgebaut:

Delphi-Quellcode:
// TObjx.....................................
type TObjx = class(TObject)
  private
    FBCDEvent: TBCDEvent;
    function Ereignis(...)..;
  public
    property OnBCD: TBCDEvent read FBCDEvent write FBCDEvent;
  end;

function TObjx.Ereignis(...)..;
begin
  if Assigned(OnBCD) then
     OnBCD(...)
end;


// TClassX.....................................
type
  TClassX = class(TPersistent)
  private
    FBCDEvent: TBCDEvent;
    procedure MachWas(..);
  published
    property OnBCD: TBCDEvent read FBCDEvent write FBCDEvent;
  end;


procedure TClassX.MachWas(..);
begin
    ObjX := TObjx.Create;
end;


// TMyControl.....................................
type
  TMyControl = class(TComponent)
  private
    FBCDEvent: TBCDEvent;
    FClassX: TClassX;
  published
    { Published declarations }
    property OnBCD: TBCDEvent read FBCDEvent write FBCDEvent;
  end;


constructor TMyControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);

  FClassX := TClassX.Create;
end;

API 17. Jan 2009 15:55

Re: Komponente Ereignis weitergeben
 
alleine diesen Code-Teil betrachtet: warum ist im OnCreate OnBCD immer NIL, obwohl im OI
dem Ereignis ein Event handler zugewiesen wurde.
Oder anders gefragt, zu welchem Zeitpunkt ist OnBCD nicht mehr NIL?

Delphi-Quellcode:
// TMyControl.....................................
type
  TMyControl = class(TComponent)
  private
    FBCDEvent: TBCDEvent;
    FClassX: TClassX;
  published
    { Published declarations } 
    property OnBCD: TBCDEvent read FBCDEvent write FBCDEvent;
  end;


constructor TMyControl.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  if assigned(OnBCD) then // -- immer NIL
  begin
   ShowMessage('OnBCD assigned');
  end;
  FClassX := TClassX.Create;
end;

Apollonius 17. Jan 2009 16:01

Re: Komponente Ereignis weitergeben
 
In der Methode Loaded, die du überschreiben kannst. Die übliche Technik, um ein Ereignis weiterzuleiten, sieht übrigens so aus:
Delphi-Quellcode:
TMyControl = class(TComponent)
private
//...
  procedure InternalBCDHandler(...);
public
  constructor Create(AOwner: TComponent); override;
end;

procedure TMyControl.InternalBCDHandler;
begin
  if Assigned(FOnBCD) then
    FOnBCD(...);
end;

constructor TMyControl.Create;
begin
  inherited;
  FClassX := TClassX.Create;
  FClassX.OnBCD := InternalBCDHandler;
end;


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