Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   Komponentenableitung mit message in Implementation (https://www.delphipraxis.net/149660-komponentenableitung-mit-message-implementation.html)

mschaefer 26. Mär 2010 15:47


Komponentenableitung mit message in Implementation
 
In der Basiskomponente habe ich z.B:

procedure CMEnter (var Message: TCEMEnter); message CM_Enter;


In der davon abgeleiteten Komponente soll eine Routine mit dem gleichen
Namen liegen die dort ausgeführt wird. Die Routine der Basisklasse
soll dabei nicht aufgerufen werden.

Jetzt kann ich aber nicht einfach 'ovverride' hinter die 'message'
schreiben, dann beschwert sich der Compiler.


Grüße // Martin

shmia 26. Mär 2010 16:02

Re: Komponentenableitung mit message in Implementation
 
Schlüsselwort 'override' ist hier nicht notwendig, weil die Botschaft zuerst an deine Klasse geht.
Wird die Botschaft nicht behandelt, wird die Klassenhierarchie aufgestiegen bis zum obersten TObject (dort passiert dann gar nichts mit der Botschaft)

Du kannst selbst steuern, ob die Botschaft zu deiner Basisklasse weitergeleitet werden soll oder nicht:
Delphi-Quellcode:
procedure TDeinControl.CMEnter (var Message: TCEMEnter); message CM_Enter;
begin
  // zuerst selbst behandeln
  Color := clRed;

  if Sonnescheint and RegenbogenIsVisible then
    inherited;
end;

mschaefer 26. Mär 2010 16:07

Re: Komponentenableitung mit message in Implementation
 
Hab banal das Problem, dass mir eine Unterklasse die Events behandelt, die eine darüberliegene etwas anders abarbeiten soll. Wenn die von unten nach oben wandern entspricht das Deiner Beschreibung. Was mach ich denn nun, wenn die Unterklasse ruhig gestellt werden soll. Oder stehe ich im Moment auf dem Schlauch??

Grüße // Martin

mschaefer 26. Mär 2010 16:10

Re: Komponentenableitung mit message in Implementation
 
TObject ist oben - ok - Zeit fürn Tee

Ja hatte beim Suchen und Ersetzen einen Buchstaben im Procedurnamen der Nachfolgeklasse und schon schlug die Message mehrfach zu. Zeit fürs Wochenende. Naja sobald das Gewitter da draussen weg ist.

Grüße // Martin


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