IDE fügt bei abgeleiteter Klasse(TFrame) falsche Eigenschaften ein



  • Hi, etwas strange.

    abgeleitete Klassen(der vcl) sind für mich relativ neu. Ich leite von TFrame eine Klasse TView ab, und hin und wieder fügt die IDE (oder der Compiler) Eigenschaften wie z.B. ClientHeight(von TForm?) in die dfm ein. Wenn das Prg dann startet, meckert er natürlich. Ich kann dann natürlich mit dem Texteditor diese Eigenschaften wieder rausnehmen, aber das nervt ein bisschen. Mach ich da etwas falsch, oder kann ich der Ide das abgewöhnen?

    Edit: Es passiert jedesmal wenn ich in den Editor(dfm) gehe, und er schaltet die Ansicht auch auf Form um(also man sieht im Editor eine Form anstatt eines Frame)

    Grüße



  • Der Formulardesigner kennt im Wesentlichen zwei Basisklassen: TFrame und TForm . Wenn du jetzt von irgendetwas anderem ableitet, erkennt er nicht, ob deine Klasse von TFrame oder TForm ableitet, und sicherheitshalber nimmt er an, daß es TForm ist.

    Die einfachste Lösung ist, eine von TFrame abgeleitete Klasse zu definieren, die alle fraglichen Eigenschaften unterstützt. Von dieser Klasse leitest du dann wieder dein TView ab. Hier ein Beispiel aus einer Klassenbibliothek von mir:

    TComponentFrame = class (TFrame)
      private
        ...
        function GetClientHeight: Integer;
        function GetClientWidth: Integer;
        procedure SetClientHeight(const Value: Integer);
        procedure SetClientWidth(const Value: Integer);
        function GetOldCreateOrder: Boolean;
        procedure SetOldCreateOrder(const Value: Boolean);
        function GetPixelsPerInch: Integer;
        procedure SetPixelsPerInch(const Value: Integer);
        function GetTextHeight: Integer;
        procedure SetTextHeight(const Value: Integer);
        ...
      published
        { workarounds for IDE bug }
        property ClientWidth: Integer read GetClientWidth write SetClientWidth stored False;
        property ClientHeight: Integer read GetClientHeight write SetClientHeight stored False;
        property OldCreateOrder: Boolean read GetOldCreateOrder write SetOldCreateOrder stored False;
        property PixelsPerInch: Integer read GetPixelsPerInch write SetPixelsPerInch stored False;
        property TextHeight: Integer read GetTextHeight write SetTextHeight stored False;
      end;
    
    { TComponentFrame }
    
    function TComponentFrame.GetOldCreateOrder: Boolean;
    begin
      Result := False;
    end;
    
    function TComponentFrame.GetPixelsPerInch: Integer;
    begin
      Result := 0;
    end;
    
    function TComponentFrame.GetTextHeight: Integer;
    begin
      Result := 0;
    end;
    
    procedure TComponentFrame.SetClientHeight(const Value: Integer);
    begin
      Height := Value;
    end;
    
    procedure TComponentFrame.SetClientWidth(const Value: Integer);
    begin
      Width := Value;
    end;
    
    procedure TComponentFrame.SetOldCreateOrder(const Value: Boolean);
    begin
    end;
    
    procedure TComponentFrame.SetPixelsPerInch(const Value: Integer);
    begin
    end;
    
    procedure TComponentFrame.SetTextHeight(const Value: Integer);
    begin
    end;
    
    function TComponentFrame.GetClientHeight: Integer;
    begin
      Result := Height;
    end;
    
    function TComponentFrame.GetClientWidth: Integer;
    begin
      Result := Width;
    end;
    


  • Supi, "Works like a charm"

    DANKE!!!


Anmelden zum Antworten