![]() |
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; |
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; |
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