Einzelnen Beitrag anzeigen

PeterPanino

Registriert seit: 4. Sep 2004
1.451 Beiträge
 
Delphi 10.4 Sydney
 
#1

Unerklärlicher Fehler: Compiler meldet E2217 ...

  Alt 31. Aug 2012, 21:54
Hallo! Ich verwende folgende Klassendefinition:
Delphi-Quellcode:
type
  TSelection = class(TGraphicControl)
  private
    FSelRect: Trect;
    FHitRegion: Integer;
    FHitPoint: TPoint;
    FOldSelRectWidth: Integer;
    FOldSelRectHeight: Integer;
    FHorizontalMargins: Boolean;
    FFactorV, FFactorH: Extended;
    FSelFrameRect: TRect;
    FShowSize: Boolean;
    FTheImage: TImage;
    procedure SetShowSize(const Value: Boolean);
    procedure SetTheImage(const Value: TImage);
  protected
    procedure MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure MouseUp(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); inline;
    procedure Paint; override;
    procedure Resize(Sender: TObject);
    procedure SetSelFrameMargins; inline;
  public
    Constructor Create(AOwner: TComponent); override;
    property SelFrameRect: TRect read FSelFrameRect;
  published
    property ShowSize: Boolean read FShowSize write SetShowSize;
    property TheImage: TImage read FTheImage write SetTheImage;
  end;
Ein Projekt, in dem ich diese Komponente und andere zusätzlich Standard-Komponenten verwende, compiliert ohne Probleme. ABER: Sobald ich einen TButton zum Formular hinzufüge, kommt die Compiler-Fehlermeldung:

"[DCC Fehler] Unit1.pas(13): E2217 Published-Feld 'Selection1' ist weder vom Typ class noch interface"

und der Cursor springt zu Selection1: TSelection; in der Formular-Deklaration. Aber jetzt kommt's: Auch wenn ich den Button wieder entferne, kommt immer wieder die gleiche Compiler-Fehlermeldung!!!

Die einzige Abhilfe ist die Erstellung eines völlig neuen Projektes mit den gleichen Komponenten, bis - ja bis zum Einfügen eines TButtons ...

Wer weiß, was die Ursache des Problems sein könnte und wie man eine Lösung finden könnte?

Edit: Wenn ich nach dem Entfernen des Buttons auch Vcl.StdCtrls aus der uses-Klausel entferne, dann verschwindet die Fehlermeldung wieder. Offenbar ist eine der Deklarationen in meiner Klasse inkompatibel mit Vcl.StdCtrls.
Welche Regeln muss man bei der Klassendeklaration befolgen, um solche Inkompatibilitäten mit bestehenden Klassen zu vermeiden?

Geändert von PeterPanino (31. Aug 2012 um 22:10 Uhr) Grund: Hinzufügung von Informationen
  Mit Zitat antworten Zitat