AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Kann Klasse von Record erben?

Ein Thema von MisterNiceGuy · begonnen am 15. Dez 2009 · letzter Beitrag vom 16. Dez 2009
Antwort Antwort
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#1

Kann Klasse von Record erben?

  Alt 15. Dez 2009, 23:57
Hi, ich würde gerne TRect als Grundgerüst für eine neue Klasse verwenden. Geht das irgendwie?
Auf dem herkömmlichen Weg hab ich keinen Erfolg:
Delphi-Quellcode:
type TMyRect = class(TRect)
...
end;
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
omata

Registriert seit: 26. Aug 2004
Ort: Nebel auf Amrum
3.154 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Kann Klasse von Record erben?

  Alt 16. Dez 2009, 00:05
Da TRect ein Record ist kannst du nicht davon ableiten. Aber du könntest den Typ TRect überschreiben.
Fragt sich nur was das soll? Sinnvoll ist das auf jedenfall nicht.
  Mit Zitat antworten Zitat
Benutzerbild von semo
semo

Registriert seit: 24. Apr 2004
755 Beiträge
 
Delphi 2010 Professional
 
#3

Re: Kann Klasse von Record erben?

  Alt 16. Dez 2009, 07:07
Am einfachsten erstellst du dir eine Klasse TMyRect mit den Feldern von TRect und kannst wunderbar damit arbeiten und auch davon ableiten.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#4

Re: Kann Klasse von Record erben?

  Alt 16. Dez 2009, 09:09
Was willst du denn erreichen?

Also ableiten geht nicht, da Records und Objekte etwas unterschiedlich sind, auch wenn Objekte in Wirklichkeit ja auch Record-Pointer darstellen, also Pointer (die Objektvariable) welche auf einen record zeigen.
Allerdings mit ein paar zusätzlichen "unsichtbaren" Feldern vor den eigenen "Daten" und noch ein paar mehr RTTI-Records/Arrays im Hinterdrund.

Seit Delphi 2006 / Turbo Delphi kann man Records auch mit Funktionen, Prozeduren und Properties ausstatten. (es bleibt aber von der Speicherverwaltung her ein Record)
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#5

Re: Kann Klasse von Record erben?

  Alt 16. Dez 2009, 18:05
Ich will eine TRect-Klasse haben weil ich diese, falls sie nicht gefüllt ist auf = nil überprüfen kann, bzw ihr einen weiteren Parameter verpassen kann der sagt ob sie initialisiert ist oder nicht.

Leider ist das mit dem "kopieren" aus dem Record nicht so leicht. Folgendes bringt eine Fehlermeldung "end erwarter aber case gefunden"

Delphi-Quellcode:
type TjfRect = class
  case Integer of
    0: (Left, Top, Right, Bottom: Integer);
    1: (TopLeft, BottomRight: TPoint);
end;
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#6

Re: Kann Klasse von Record erben?

  Alt 16. Dez 2009, 18:22
Zitat von MisterNiceGuy:
Ich will eine TRect-Klasse haben weil ich diese, falls sie nicht gefüllt ist auf = nil überprüfen kann, bzw ihr einen weiteren Parameter verpassen kann der sagt ob sie initialisiert ist oder nicht.

Leider ist das mit dem "kopieren" aus dem Record nicht so leicht. Folgendes bringt eine Fehlermeldung "end erwarter aber case gefunden"

Delphi-Quellcode:
type TjfRect = class
  case Integer of
    0: (Left, Top, Right, Bottom: Integer);
    1: (TopLeft, BottomRight: TPoint);
end;
Kein Problem wenn man ein bisschen überlegt

Delphi-Quellcode:
TjfRect = class
private
  FLeft, FTop, FRight, FBottom: Integer;
public
  property Left: Integer read FLeft write FLeft;
  property Top: Integer read FTop write FTop;
  property Right: Integer read FRight write FRight;
  property Bottom: Integer read FBottom write FBottom;
 
  property TopLeft: TPoint read GetTopLeft write SetTopLeft;
  property BottomRight: TPoint read GetBottomRight write SetBottomRight;
end;

function TjfRect.GetBottomRight: TPoint;
begin
  Result := Point(FRight,FBottom);
end;

function TjfRect.GetTopLeft: TPoint;
begin
  Result := Point(FLeft,FTop);
end;

procedure TjfRect.SetBottomRight(const Value: TPoint);
begin
  FRight := Value.X;
  FBottom := Value.Y;
end;

procedure TjfRect.SetTopLeft(const Value: TPoint);
begin
  FLeft := Value.X;
  FTop := Value.Y;
end;
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#7

Re: Kann Klasse von Record erben?

  Alt 16. Dez 2009, 18:44
warum nimmst du nicht einfach PRect?
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von MisterNiceGuy
MisterNiceGuy

Registriert seit: 1. Jul 2003
Ort: Mannheim
919 Beiträge
 
Delphi 7 Personal
 
#8

Re: Kann Klasse von Record erben?

  Alt 16. Dez 2009, 18:53
Es... es gibt ein PRect?
Jonas
Wenn mich jemand sucht, ich bin im Kühlschrank!

Informationen über das Duale Studium
www.jofre.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#9

Re: Kann Klasse von Record erben?

  Alt 16. Dez 2009, 19:06
ähhhh ja


ansonsten ginge noch sowas:
Delphi-Quellcode:
type
  TMyRefRect = record
  private
    Data: PRect;
    function GetLeft: LongInt;
    procedure SetLeft (i: LongInt); // hier dafür sorgen,
    function GetTop: LongInt;
    procedure SetTop (i: LongInt); // das in Data Speicher
    function GetRight: LongInt;
    procedure SetRight (i: LongInt); // reserviert ist
    function GetBottom: LongInt;
    procedure SetBottom(i: LongInt); // und dann eventuell
    function GetTopLeft: PPoint; // die empfangenen
    function GetBottomRight: PPoint; // Daten eintragen
  public
    class operator Implicit( Rec: TMyRefRect): TRect;
    class operator Implicit(Const Data: TRect): TMyRefRect;

    property Left: LongInt read GetLeft write SetLeft;
    property Top: LongInt read GetTop write SetTop;
    property Right: LongInt read GetRight write SetRight;
    property Bottom: LongInt read GetBottom write SetBottom;

    property TopLeft: PPoint read GetTopLeft;
    property BottomRight: PPoint read GetBottomRight;

    Procedure Clear;
    Function isSet: Boolean;
  end;
Wobei ich hier von der Speicherverwaltung her eher ein Interface statt des interen PRect verwenden
oder einen String (also einfach irgendwas mit Referenzzählung) mißbrauchen würde.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:48 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