Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   inherited im OnClick-Ereignis [Verständnisfrage] (https://www.delphipraxis.net/168772-inherited-im-onclick-ereignis-%5Bverstaendnisfrage%5D.html)

RWarnecke 10. Jun 2012 08:37

inherited im OnClick-Ereignis [Verständnisfrage]
 
Hallo zusammen,

ich schaue gerade einen fremden Quelltext durch. Dabei ist mir aufgefallen, dass in vielen OnClick-Ereignissen
Delphi-Quellcode:
inherited;
immer als erstes nach dem begin steht. In den bis jetzt eingesehen Quelltext wurde keine der Komponenten von den OnClick-Ereignissen zur Laufzeit erstellt.

Ich verstehe nicht, warum das so gemacht wurde, da ich das zum ersten mal sehe. Was ist der Grund dafür ?

Popov 10. Jun 2012 08:50

AW: inherited im OnClick-Ereignis [Verständnisfrage]
 
Vielleicht aus Prinzip. Auch wenn es nicht nützt, muß es auch nicht schaden. Wenn man z.B. eine neue Klasse aus TObject erstellt, baut man z.B. in Create inherited ein, obwohl es eigentlich nicht nötig ist. Da ist nichts was aufgerufen werden kann, aber es wird aus Prinzip gemacht, dann es schadet auch nicht.

jaenicke 10. Jun 2012 10:05

AW: inherited im OnClick-Ereignis [Verständnisfrage]
 
Aber Vorsicht, wenn Quelltext auch noch für alte Delphiversionen funkionieren soll. Denn wenn an da ein inheritd zu viel setzt, kann das auch ganz schnell knallen. Offenbar wird dort nicht geprüft, ob da auch ein Sprungziel dafür existiert. Zumindest bei Delphi 5 ist dieses Problem bei Quelltext aufgetreten (als ich ein inherited zu viel drin hatte), den ich mit XE geschrieben hatte. (Dort passiert da nichts wie es sein sollte.)

RWarnecke 10. Jun 2012 10:22

AW: inherited im OnClick-Ereignis [Verständnisfrage]
 
Danke erstmal für die Antworten. Der Quelltext ist komplett nur für Delphi 2010. Den werde ich auf keinen Fall auf ältere Delphi-Versionen portieren.

Zitat:

Zitat von jaenicke (Beitrag 1170189)
Aber Vorsicht, wenn Quelltext auch noch für alte Delphiversionen funkionieren soll. Denn wenn an da ein inheritd zu viel setzt, kann das auch ganz schnell knallen. Offenbar wird dort nicht geprüft, ob da auch ein Sprungziel dafür existiert. Zumindest bei Delphi 5 ist dieses Problem bei Quelltext aufgetreten (als ich ein inherited zu viel drin hatte), den ich mit XE geschrieben hatte. (Dort passiert da nichts wie es sein sollte.)

Sowas ähnliches hatte ich auch noch im Gedächtnis, aber im zusammenhang mit Klassen und ableiten von Komponenten.

Ich verstehe nur noch nicht ganz warum. Bei Klassen oder abgeleiteten Komponenten könnte ich es verstehen aber nicht bei einfachen OnClick-Ereignissen von Standard-Komponenten. Könnte das ganze ein Relikt aus älteren Zeiten sein ?

Also werde ich die Zeile mal drin stehen lassen, bis ich ein bisschen mehr Zeit habe. Dann werde ich das ganze mal testen.

ConnorMcLeod 10. Jun 2012 11:13

AW: inherited im OnClick-Ereignis [Verständnisfrage]
 
Würde sagen, das hängt davon ab, ob man die ursprüngliche Funktionalität erweitern oder abändern möchte. Bei einer Erweiterung: erstmal inherited, damit alles wie gewohnt abläuft, und danach der eigene Code. Und wenn man der Ur-Funktionalität zuvorkommen möchte, dann zuerst der eigene Code und danach inherited. Bei einer Änderung: ohne inherited => alles neu.
PS: inherited kann sich auch auf den Vorfahr des Vorfahrs beziehen.

Sir Rufo 10. Jun 2012 11:16

AW: inherited im OnClick-Ereignis [Verständnisfrage]
 
Schau doch mal nach, ob das Formular vererbt wurde, denn dann fügt die IDE automatisch das iherited ein.
Und zwar unabhängig davon, ob es im Vorfahr deklariert wurde.

Und ja, dass ist dann vorbeugend, falls im Vorgänger doch etwas deklariert wird.

RWarnecke 10. Jun 2012 11:25

AW: inherited im OnClick-Ereignis [Verständnisfrage]
 
Zitat:

Zitat von Sir Rufo (Beitrag 1170194)
Schau doch mal nach, ob das Formular vererbt wurde, denn dann fügt die IDE automatisch das iherited ein.
Und zwar unabhängig davon, ob es im Vorfahr deklariert wurde.

Und ja, dass ist dann vorbeugend, falls im Vorgänger doch etwas deklariert wird.

Hallo Sir Rufo,

dass war der entscheidene Hinweis. Jedes Formular wird von einem Masterformular abgeleitet. Dann kann ich mir den Befehl
Delphi-Quellcode:
inherited
auch in einem OnClick-Ereignis erklären. Jetzt habe ich verstanden, dass das inherited mit der Vererbung der Formulare zusammenhängt. Also bleibt alles so wie es ist.


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