AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Event von Sub-Objekt als Property anzeigen

Ein Thema von BlueStarHH · begonnen am 5. Apr 2019 · letzter Beitrag vom 8. Apr 2019
Antwort Antwort
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
556 Beiträge
 
Delphi 10.3 Rio
 
#1

Event von Sub-Objekt als Property anzeigen

  Alt 5. Apr 2019, 14:41
Delphi-Version: 5
Hallo,

ich habe eine von TComponent abgeleitete TMyComponent erstellt. Diese besitzt ein TMyObject als Property. Wie kann ich nun das Event "OnMyEvent" des TMyObject im Objekt-Inspektor auf der Seite "Ereignisse" anzeigen lassen. Mein Versuch:

Delphi-Quellcode:
TMyObject = class(TObject)
private
  FOnMyEvent: TNotifyEvent;
published
  property OnMyEvent: TNotifyEvent read FOnMyEvent write FOnMyEvent;
end;

TMyComponent = class(TComponent)
private
  FMyObject: TMyObject;
published
  property MyObject: TMyObject read FMyObject write FMyObject;
end;
Resultat: OnMyEvent wird im Objekt-Inspektor nicht angezeigt.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
1.094 Beiträge
 
Delphi 7 Professional
 
#2

AW: Event von Sub-Objekt als Property anzeigen

  Alt 5. Apr 2019, 16:44
public statt published
  Mit Zitat antworten Zitat
TBx
(Moderator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.766 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#3

AW: Event von Sub-Objekt als Property anzeigen

  Alt 5. Apr 2019, 20:57
Schwebte dir da sowas vor:
bildschirmfoto-2019-04-05-um-20.50.05.png

Dann musst du dir ein Package bauen, in dem du deine Komponente registrierst. Außerdem muss auch dein TMyObject von TComponent abgeleitet werden und ebenfalls im Package registriert werden.
Ich habe ein Minimalbeispiel angehängt.
Installierst du das Package, so findest du danach in der Palette unter MyDemoComponent TMyComponent und TMyObject.

Wenn du das eingebettete Objekt gleich mit der Komponente erzeugen willst, lautet dein Stichwort SetSubComponent.
Angehängte Dateien
Dateityp: zip MyDemoPaxkage.zip (8,6 KB, 5x aufgerufen)
Gruß Thomas
- Moderator Delphi-Praxis -
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
556 Beiträge
 
Delphi 10.3 Rio
 
#4

AW: Event von Sub-Objekt als Property anzeigen

  Alt 8. Apr 2019, 11:36
public statt published
Bist Du Dir sicher? Ich glaube Du verwechselst da was:

Zitat:
published-Elemente haben dieselbe Sichtbarkeit wie public-Elemente. Im Unterschied zu diesen werden jedoch für published-Elemente Laufzeit-Typinformationen generiert. Sie ermöglichen einer Anwendung, die Felder und Eigenschaften eines Objekts dynamisch abzufragen und seine Methoden zu lokalisieren. Diese RTTI-Informationen werden verwendet, um beim Speichern und Laden von Formulardateien auf die Werte von Eigenschaften zuzugreifen, Eigenschaften im Objektinspektor anzuzeigen und spezielle Methoden (so genannte Ereignisbehandlungsroutinen) bestimmten Eigenschaften (den Ereignissen) zuzuordnen.
Quelle Delphi Online-Hilfe: http://docwiki.embarcadero.com/RADSt...bjekte_(Delphi)

Geändert von BlueStarHH ( 8. Apr 2019 um 11:38 Uhr)
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
556 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Event von Sub-Objekt als Property anzeigen

  Alt 8. Apr 2019, 11:37
Außerdem muss auch dein TMyObject von TComponent abgeleitet werden und ebenfalls im Package registriert werden.
Danke! Aber was mache ich, wenn ich mein TMyObject nicht von TComponent ableiten kann, weil TMyObject eine fertige Klasse von Dritten ist. Z.B. eine TObjectList<T>
  Mit Zitat antworten Zitat
peterbelow

Registriert seit: 12. Jan 2019
Ort: Hessen
372 Beiträge
 
Delphi 10.3 Rio
 
#6

AW: Event von Sub-Objekt als Property anzeigen

  Alt 8. Apr 2019, 11:43
Außerdem muss auch dein TMyObject von TComponent abgeleitet werden und ebenfalls im Package registriert werden.
Danke! Aber was mache ich, wenn ich mein TMyObject nicht von TComponent ableiten kann, weil TMyObject eine fertige Klasse von Dritten ist. Z.B. eine TObjectList<T>
Solche Objekte lassen sich leider nicht als published properties einer TComponent verwenden, die IDE erfordert, dass solche Objekte mindestens von TPersistent abgeleitet sind. Du mußt also in deinem Fall eine Wrapper-Klasse erzeugen, die von TPersistent abgeleitet ist und intern halt eine Instanz deiner eigentlichen Klasse verwendet und deren properties und events quasi nach aussen (published) sichtbar macht.
Peter Below
  Mit Zitat antworten Zitat
TBx
(Moderator)

Registriert seit: 13. Jul 2005
Ort: Stadthagen
1.766 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#7

AW: Event von Sub-Objekt als Property anzeigen

  Alt 8. Apr 2019, 11:48
was mache ich, wenn ich mein TMyObject nicht von TComponent ableiten kann, weil TMyObject eine fertige Klasse von Dritten ist.
Ich fürchte, dann wirst du eine Wrapperklasse erstellen müssen, die die gewünschten Eigernschaften entsprechend durchreicht.
Oder aber du implementierst einen eigenen PropertyEditor. Ist halt die Frage, ob der Aufwand sich lohnt.
Gruß Thomas
- Moderator Delphi-Praxis -
- Admin Delphi-Treff
- Embarcadero MVP
  Mit Zitat antworten Zitat
BlueStarHH

Registriert seit: 28. Mär 2005
Ort: Hannover-Hainholz
556 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Event von Sub-Objekt als Property anzeigen

  Alt 8. Apr 2019, 11:49
Außerdem muss auch dein TMyObject von TComponent abgeleitet werden und ebenfalls im Package registriert werden.
Danke! Aber was mache ich, wenn ich mein TMyObject nicht von TComponent ableiten kann, weil TMyObject eine fertige Klasse von Dritten ist. Z.B. eine TObjectList<T>
Solche Objekte lassen sich leider nicht als published properties einer TComponent verwenden, die IDE erfordert, dass solche Objekte mindestens von TPersistent abgeleitet sind. Du mußt also in deinem Fall eine Wrapper-Klasse erzeugen, die von TPersistent abgeleitet ist und intern halt eine Instanz deiner eigentlichen Klasse verwendet und deren properties und events quasi nach aussen (published) sichtbar macht.
Wie kann ich dann das Event nach außen hin sichtbar machen? Wie verweise ich also bei einem Event in der Wrapper-Klasse auf das Event von der gewrappten Instanz?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
26.874 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Event von Sub-Objekt als Property anzeigen

  Alt 8. Apr 2019, 12:32
Wenn es nur darum geht, dem "inneren" Objekt einen Ereignishandler zuzuweisen, kann man den doch einfach durchreichen, oder habe ich das Problem nicht verstanden?
Delphi-Quellcode:
TMyObject = class(TObject)
private
  FOnMyEvent: TNotifyEvent;
published
  property OnMyEvent: TNotifyEvent read FOnMyEvent write FOnMyEvent;
end;

TMyComponent = class(TComponent)
private
  FMyObject: TMyObject;
  function GetMyEvent: TNotifyEvent;
  procedure SetMyEvent(const Value: TNotifyEvent);
published
  property OnMyEvent: TNotifyEvent read GetMyEvent write SetMyEvent;
end;

...

function TMyComponent.GetMyEvent: TNotifyEvent;
begin
  Result := FMyObject.OnMyEvent;
end;

procedure TMyComponent.SetMyEvent(const Value: TNotifyEvent);
begin
  FMyObject.OnMyEvent := Value;
end;
Aus dem Kopf, daher ungetestet.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 07:52 Uhr.
Powered by vBulletin® Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2019 by Daniel R. Wolf