AGB  ·  Datenschutz  ·  Impressum  







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

"inherited" in Windows-Messages?

Ein Thema von pstruh · begonnen am 16. Aug 2007 · letzter Beitrag vom 16. Aug 2007
Antwort Antwort
Seite 1 von 2  1 2      
pstruh
(Gast)

n/a Beiträge
 
#1

"inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:03
Hm, ich bin verwirrt 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
Gruß aus Hamburg
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: "inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:09
es wird zuerst der Code der entsprechenden Methode der Superklasse aufgerufen.
Markus Kinzler
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#3

Re: "inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:13
Ok, also die Superklasse wird aufgerufen - bedeutet das nun, dass dieser Aufruf immer notwendig ist?
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#4

Re: "inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:15
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
Markus Kinzler
  Mit Zitat antworten Zitat
Vjay

Registriert seit: 2. Dez 2003
Ort: Berlin/Eschede
481 Beiträge
 
Delphi 7 Professional
 
#5

Re: "inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:16
Nein, nur wenn du ihr die Bearbeitung ermöglichen möchtest.
Wer später bremst ist eher tot.
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#6

Re: "inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:19
Ok, dann bin ich jetzt schlauer! Danke
  Mit Zitat antworten Zitat
Benutzerbild von Kedariodakon
Kedariodakon

Registriert seit: 10. Sep 2004
Ort: Mönchengladbach
833 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: "inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:22
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

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.
Christian
  Mit Zitat antworten Zitat
pstruh
(Gast)

n/a Beiträge
 
#8

Re: "inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:27
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?
  Mit Zitat antworten Zitat
oki

Registriert seit: 30. Dez 2002
Ort: Brandshagen
1.819 Beiträge
 
Delphi 2007 Professional
 
#9

Re: "inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:31
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
42
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#10

Re: "inherited" in Windows-Messages?

  Alt 16. Aug 2007, 17:46
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 (was sich ja auch mit dem zitierten OH-Text deckt).
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 22:59 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