Einzelnen Beitrag anzeigen

Aviator

Registriert seit: 3. Jun 2010
1.611 Beiträge
 
Delphi 10.3 Rio
 
#1

Komponentenentwicklung - Event weiterleiten - Denkfehler?

  Alt 27. Sep 2016, 13:50
Hallo Delphianer,

ich bin gerade dabei mir für einen ganz speziellen Fall eine Komponente zu basteln. Dabei bin ich auf ein Problem gestoßen für das ich aktuell keine Lösung kenne und auch nur bedingt etwas im Internet (auch bei der DP) gefunden hatte. Die vorhandenen Threads zu dem Thema haben mir leider nicht so wirklich weitergeholfen.

Nun hoffe ich, dass ihr das könnt.


Folgendes Szenario:

Ich habe folgende Klasse (allgemeingehaltene Namen zur besseren Übersicht):

Delphi-Quellcode:
TFoo = class(TCustomControl)
private
  FSomeVar: TSomeType;
protected
  procedure WM_Paint(var Msg: TMessage) message WM_PAINT;
public
  property OnGetSubComponents;
end;

Delphi-Quellcode:
TFooBar = class(TCustomControl)
private
  FSomeVar: TFoo;
protected
  procedure WM_Paint(var Msg: TMessage) message WM_PAINT;
end;

Delphi-Quellcode:
TBar = class(TCustomControl)
private
  FSomeVar: TFooBar;
protected
  procedure WM_Paint(var Msg: TMessage) message WM_PAINT;
public
  property OnGetSomeData;
end;
Jetzt habe ich das Problem, dass ich auf den Klick auf die TFoo Komponente reagieren können muss. Die einzige Möglichkeit die ich jetzt kennen würde wäre, das Event durchzuschleifen. Also in jeder Klasse ein ObGetSubComponents Event erstellen und dann den Weg TFoo (Auslöser) --> TFooBar --> TBar durchlaufen.

Irgendwie kommt mir das aber falsch vor.

Die andere Möglichkeit wäre, dass ich (hier geht es um eine Mausklickfunktion) die Mausposition bspw. auswerte und dann errechne wo ich bin. Aber die Subkomponente selbst bietet das ja schon durch die WM_LBUTTONDOWN Message an, sodass ich da eben gar nix mehr machen müsste.

Habe ich jetzt einen grundlegenden Denkfehler wie meine Klassen aufgebaut sind, oder gibt es genau hierfür schon bestimmte Lösungsansätze? Wie macht ihr das wenn ihr unterschiedliche Komponenten ineinander verschachteln müsst?

Bin über jeden Lösungsvorschlag dankbar. Falls noch Informationen fehlen sollten, dann kann ich die gerne zur Verfügung stellen.
  Mit Zitat antworten Zitat