AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente Ereignis weitergeben

Ein Thema von API · begonnen am 17. Jan 2009 · letzter Beitrag vom 17. Jan 2009
Antwort Antwort
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#1

Komponente Ereignis weitergeben

  Alt 17. Jan 2009, 13:29
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;
  Mit Zitat antworten Zitat
API

Registriert seit: 18. Apr 2004
637 Beiträge
 
#2

Re: Komponente Ereignis weitergeben

  Alt 17. Jan 2009, 16:55
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;
  Mit Zitat antworten Zitat
Apollonius

Registriert seit: 16. Apr 2007
2.325 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Komponente Ereignis weitergeben

  Alt 17. Jan 2009, 17:01
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;
Wer erweist der Welt einen Dienst und findet ein gutes Synonym für "Pointer"?
"An interface pointer is a pointer to a pointer. This pointer points to an array of pointers, each of which points to an interface function."
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:41 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