Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   "inherited" in Windows-Messages? (https://www.delphipraxis.net/97807-inherited-windows-messages.html)

pstruh 16. Aug 2007 16:03


"inherited" in Windows-Messages?
 
Hm, ich bin verwirrt :spin2: und möchte das gern einmal geklärt haben. Die Verwendung einer Windows-Message könnte z.B. wie nachstehend aussehen (nicht von mir)...

Delphi-Quellcode:
procedure TForm1.WMNCHitTest(var Message: TWMNCHitTest);
begin
  inherited;
  if Message.Result = htClient then
    Message.Result := htCaption;
end;
Warum steht vor dem individuellen Code das "inherited"? Was wird denn hier "geerbt oder vererbt"? Ich finde solche Codeschnipsel auch zuhauf ohne jedes "inherited". Auch kann ich keinen Unterscheid im Programmverhalten feststellen, egal ob mit oder ohne "inherited". Ist "inherited" nun immer/manchmal oder nie erforderlich :pale:
Gruß aus Hamburg :hi:

mkinzler 16. Aug 2007 16:09

Re: "inherited" in Windows-Messages?
 
es wird zuerst der Code der entsprechenden Methode der Superklasse aufgerufen.

pstruh 16. Aug 2007 16:13

Re: "inherited" in Windows-Messages?
 
Ok, also die Superklasse wird aufgerufen - bedeutet das nun, dass dieser Aufruf immer notwendig ist?

mkinzler 16. Aug 2007 16:15

Re: "inherited" in Windows-Messages?
 
Es kommt darauf an. wenn dein Code zusätzlich ausgeführt werden soll: ja; wenn er anstatt des geerbten Codes ausgeführt werden soll: nicht.
Beim Konstruktor z.B. würde ich es auf Jedenfall machen

Vjay 16. Aug 2007 16:16

Re: "inherited" in Windows-Messages?
 
Nein, nur wenn du ihr die Bearbeitung ermöglichen möchtest.

pstruh 16. Aug 2007 16:19

Re: "inherited" in Windows-Messages?
 
Ok, dann bin ich jetzt schlauer! Danke :hello:

Kedariodakon 16. Aug 2007 16:22

Re: "inherited" in Windows-Messages?
 
Eben es kommt immer drauf an, was du damit bewirken willst. Du reichst mit Inherited einfach nur zur geerbten Klasse weiter...

Die Hilfe hilft da auch :zwinker:

Zitat:

Das reservierte Wort inherited ist für die Polymorphie von großer Bedeutung. Es kann in Methodenimplementierungen (mit oder ohne nachfolgendem Bezeichner) angegeben werden.

Folgt auf inherited der Name eines Elements, entspricht dies einem normalen Methodenaufruf bzw. einer Referenz auf eine Eigenschaft oder ein Feld. Der einzige Unterschied besteht darin, dass die Suche nach dem referenzierten Element bei dem direkten Vorfahren der Klasse beginnt, zu der die Methode gehört. Wenn Sie beispielsweise

inherited Create(...);

in der Definition einer Methode angeben, wird die geerbte Methode Create aufgerufen.

Die Anweisung inherited ohne Bezeichner verweist auf die geerbte Methode mit demselben Namen wie die aufrufende Methode. Handelt es sich bei der aufrufenden Methode um eine Botschaftsbehandlung, verweist diese auf die geerbte Botschaftsbehandlung für dieselbe Botschaft. In diesem Fall übernimmt inherited keine expliziten Parameter, sondern der geerbten Methode werden einfach die Parameter der aufrufenden Methode übergeben. So wird beispielsweise:

inherited;

häufig in der Implementierung von Konstruktoren verwendet. Der geerbte Konstruktor wird also mit den Parametern aufgerufen, die an die abgeleitete Klasse übergeben wurden.

pstruh 16. Aug 2007 16:27

Re: "inherited" in Windows-Messages?
 
Ah, ja, ich bin seit 25 Jahren Hobby-Programmierer und habe immer noch Schwierigkeiten mit der Objektorientierung :( - diesen Hilfetext (genau den) hatte ich mir auch angesehen. Aber nun zu meinem Ehrenrettungs-Versuch: Ich hatte mir gedacht, dass die Nutzung von Windows-Messages etwas anders ist. So im Sinne von "eingeschleiftem Code", also das quasi automatisch alles "vor und hinterher" sowieso aufgerufen wird und "mein Code" einfach "dazwischengeschoben wird". Hm, ist das verständlich, was ich da gedacht hatte?

oki 16. Aug 2007 16:31

Re: "inherited" in Windows-Messages?
 
Verstädlich schon, aber eben falsch. Du fängst ja keine Botschaft ab und reichst sie weiter, sondern überschreibst die implementierte Methode der Klasse die die Botschaft verarbeitet. Damit ist das nichts anderes wie jede andere virtuelle Methode (zumindest was das inherited betrifft).

Gruß oki

Khabarakh 16. Aug 2007 16:46

Re: "inherited" in Windows-Messages?
 
Kann schon sein, dass ich mit der VCL langsam nicht mehr so vertraut bin, aber als ich das letzte Mal einen Blick in forms.pas geworfen habe, waren dort alle Botschaftsmethoden statisch :zwinker: (was sich ja auch mit dem zitierten OH-Text deckt).


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 Uhr.
Seite 1 von 2  1 2      

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