Entwickler-Ecke

Delphi Language (Object-Pascal) / CLX - Fehlermeldung Methode Create verbirgt virtuelle Methode


Tranx - So 30.10.11 19:56
Titel: Fehlermeldung Methode Create verbirgt virtuelle Methode
Ich habe da mal eine Frage:

Was soll diese Fehlermeldung?

Angeblich wird die virtuelle Methode des Basistyps einer Klasse verborgen. Ich habe Construktoren geschrieben, nach dem Typ

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
  Txx = class(TBitBtn)
    AOwner: TWinControl;
    fLinkList: TLabeledLinkList;
    fLinkLabel: TLabel;
:
:
  private
:
:
  protected
  public
    constructor Create(AOwner: TWinControl);
    destructor destroy; override;
:
:
  published
  end;

Innerhalb der Konstruktoren habe ich als ersten Befehl geschrieben:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
constructor Txx.Create(AOwner: TWinControl);
begin
  inherited Create(AOwner);
  fLinkList := Tyy(AOwner).LabeledLinkList;
  fLinkLabel := TLabel.Create(AOwner);
:
:
end;
// Erläuterung
// Tyy ist eine Groupbox, in der Txx dargestellt wird. Txx wind in einer Liste gespeichert, welche Nachfolgerin von TList ist.


Frage mich nun, was da verborgen sein soll, da ich in der Createprozedur doch den Vorgänger-Konstruktor aufrufe. Und wenn es doch ein Fehler sein soll, welche Auswirkung hätte der? Bisher stelle ich kein Fehlverhalten fest. Oder liegt das an der virtuellen Prozedur Create des Basistyps, welche ja wohl kaum etwas tut. Oder sehe ich das verkehrt?


Moderiert von user profile iconNarses: Topic aus VCL (Visual Component Library) verschoben am So 30.10.2011 um 22:19


bummi - So 30.10.11 23:23


Delphi-Quelltext
1:
constructor Create(AOwner: TComponent);  override;                    


Moderiert von user profile iconMartok: Delphi-Tags hinzugefügt


Tranx - Mo 31.10.11 13:30

Bummi, habe die Create-Prozeduren nach Deinem Schema umgeschrieben.

Es tauchen jedoch zwei Fehlermeldungen des Compilers auf:

1. Eine statische Methode kann nicht überschrieben werden (Anscheinend ist der Construktor Create der Vorgänger statisch)
2. Inkompatible Typen TComponent und TWinControl ( Die Variable AOwner kann wohl nur vom Typ TWincontrol sein).

Also muss ich wohl alles so lassen. Aber danke für den Hinweis.


bummi - Mo 31.10.11 13:45

Die älteste Delphiversion die ich noch am laufen habe ist D7, dort lande ich bei STRG+Klick auf TBitBtn Deklaration an der Stelle
TBitBtn = class(TButton)
mit

public
constructor Create(AOwner: TComponent); override;


Tranx - Mo 31.10.11 15:03

Ah, daher der Unterschied.

Ich hoffe bloß, dass neuere Delphi-Versionen da eine einfachere Übertragung ermöglicht. Es macht ja wenig Sinn, den kompletten Code nach möglichen Komponentenwechseln abzusuchen, bis dann mal ein lauffähiges Programm steht. Jetzt verstehe ich auch, wieso das damals mit Delphi 8 nicht funktionierte.


bummi - Mo 31.10.11 15:09

mhhhh, wo landest Du denn und was steht bei Dir dort wo Du landest .....


Tranx - Mo 31.10.11 16:04

Ich hatte vor ewigen Zeiten mal versucht, den Code, den ich in Delphi 5 geschrieben habe, auf Deplhi 8 zu übertragen. Doch da kamen so viel Fehlermeldungen bzw. fehlende Komponenten (obwohl ich damals gar keine eigenen Komponenten geschrieben hatte), dass ich den Versuch aufgab. Das hätte soviel Zeit beansprucht, bis das Ganze gelaufen wäre, dass ich keine Lust dazu hatte. Mit Delphi XE gings (Als Testversion, allerdings Architecture-Version) überraschend gut. Aber leider fehlt mir die Knete, diese Version mir zuzulegen.

Vielleicht kommt das ja mal in Frage. Aber jetzt eben nicht.