Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Zugriff auf Ereignisse in vererbter Form (https://www.delphipraxis.net/161600-zugriff-auf-ereignisse-vererbter-form.html)

yogie 11. Jul 2011 20:01

Delphi-Version: 5

Zugriff auf Ereignisse in vererbter Form
 
Guten Abend zusammen,

ich glaube ich habe gerade ein Brett vor dem Kopf.:?:
Für ein größeres Projekt möchte ich eine Basis-Form anlegen und diese dann als
Vorfahre für mehrer gleichartige (GUI) Formulare verwenden.

1. Vererbung über Eintrag im Quelltext
TForm1 = class(TFrmVorfahre) …. Geht, Form1 hat das Aussehen von FrmVorfahre
2. Verwendung von Frames …. Geht auch s.o.

Nun zum Problem : In Vorfahre ist z.B. ein ButtonOnClick definiert. Da passieren
dann allgemeine Dinge, die immer an dieser Stelle gebraucht werden.

Wie komme ich in der abgeleiteten Form an das ButtonOnClick aus der Vorfahre Form?

Für Sachen die die Form selber betreffen geht das natürlich, da kann ich z.B.

procedure TForm1.FormCreate(Sender: TObject);
begin
inherited;
// was spezielles ausführen
end;

schreiben und die Aktionen aud der Vorfahre Form werden ausgeführt.
(Delphi7 prof., WIN XP)

DeddyH 11. Jul 2011 20:04

AW: Zugriff auf Ereignisse in vererbter Form
 
Ich bin nicht sicher, ob ich Dich richtig verstanden habe, aber geht es evtl. mit
Delphi-Quellcode:
inherited Button.OnClick
:?:

Ralf Kaiser 11. Jul 2011 20:09

AW: Zugriff auf Ereignisse in vererbter Form
 
Das geht genauso wie beim z.B. FormCreate!

Wenn du im abgeleiteten Formular einen Eventhandler anlegst (also Doppelklick in z.B. OnClick im Objektinspektor) dann fügt Delphi als erste Zeile des Eventhandlers auch ein "inherited" hinzu. Dieses sorgt dafür, dass der Code aus dem Vorfahren-Eventhandler ausgeführt wird.

Nicht ganz sicher bin ich mir im Moment, ob das bei Delphi 5 (steht ja in deinem Profil) auch schon so war aber ich kann mir eigentlich nicht vorstellen, dass D5 das nicht machte...

Edit: Wo war denn jetzt der rote Kasten? Da holt man sich nen Kaffee und jemand ist schneller...

DeddyH 11. Jul 2011 20:11

AW: Zugriff auf Ereignisse in vererbter Form
 
Das automatische Einfügen von "inherited" geschieht aber IIRC nur bei virtuellen Methoden, oder irre ich mich da gerade?

yogie 11. Jul 2011 20:58

AW: Zugriff auf Ereignisse in vererbter Form
 
erst mal danke für die Tips...

@Ralf : Das Problem ist, daß ich kein OnClick anlegen kann,
weil lich in meiner abgeleiteten Form zur Entwursfzeit den
Button (oder was auch immer) garnicht sehe. Da ist einfach
nur ein leeres Formuar, erst zu Lauzeit wir der Inhalt des
Vorfahr-Formulars angezeigt.

himitsu 12. Jul 2011 02:19

AW: Zugriff auf Ereignisse in vererbter Form
 
Wenn im vorfahren Button.OnClick (mit Punkt, also das Ereignis) belegt ist, dann kann man es im Nachfahren nicht überschreiben, es sei den man merkt sich den vorhergehenden wert in einer eigenen Variable und fuft darüber die alte Methode, in seiner überschriebenen Version auf.

Ansonsten sollte die Methode hinter OnClick einfach nur .Click heißen, virtuell sein und sich somit überschreiben lassen.

Stevie 12. Jul 2011 03:36

AW: Zugriff auf Ereignisse in vererbter Form
 
Liste der Anhänge anzeigen (Anzahl: 1)
Methoden müssen nicht virtual sein, damit man sie in einer abgeleiteten Klasse überschreiben kann. Bei nicht virtuellen Methoden hat man nur keine Polymorphie.

Siehe angehangenes Beispiel

yogie 12. Jul 2011 06:26

AW: Zugriff auf Ereignisse in vererbter Form
 
erstmalmal danke für die Antworten.

@Stevie : Das Beispiel hat bei mir das Brett vor dem Kopf
beseitigt. Jetzt klappt alles wie es soll. Es funktioniert
auch bei der Verwendung von Frames.

Ich wünsche allen einen produktiven Arbeitstag:wink:

DeddyH 12. Jul 2011 07:08

AW: Zugriff auf Ereignisse in vererbter Form
 
Zitat:

Zitat von Stevie (Beitrag 1111248)
Methoden müssen nicht virtual sein, damit man sie in einer abgeleiteten Klasse überschreiben kann.

Das hat ja auch niemand behauptet, falls Du auf meinen Post anspielen solltest. Ich habe lediglich gesagt, dass IIRC die IDE das "inherited" nur bei virtuellen Methoden automatisch einfügt.

Stevie 12. Jul 2011 07:55

AW: Zugriff auf Ereignisse in vererbter Form
 
Zitat:

Zitat von DeddyH (Beitrag 1111252)
Zitat:

Zitat von Stevie (Beitrag 1111248)
Methoden müssen nicht virtual sein, damit man sie in einer abgeleiteten Klasse überschreiben kann.

Das hat ja auch niemand behauptet, falls Du auf meinen Post anspielen solltest. Ich habe lediglich gesagt, dass IIRC die IDE das "inherited" nur bei virtuellen Methoden automatisch einfügt.

Hab Himis Post aber so verstanden.


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

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