Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi erweitertes Record in abgeleiteter Klasse (https://www.delphipraxis.net/147833-erweitertes-record-abgeleiteter-klasse.html)

Berni68 17. Feb 2010 08:01


erweitertes Record in abgeleiteter Klasse
 
Hallo zusammen,

ich verwende in einer Form einen VST. Die Daten werden ja in einem Record abgelegt.
Von diesem Formular erstelle ich eine abgeletete Klasse, zur Erledigung einer sehr änlichen Aufgabe.
Allerdings benötige ich hier im Datenrecord des VST eine Variable mehr.
Natürlich könnte man dieses Feld in dem Ursprungsrecord definieren und im Ur-VST ungenutzt lassen.
Aber schöner wäre es natürlich, dieses Feld erst in der abgeleiteten Klasse einzuführen.
Ist das möglich? (Gefühlsmäßig würde ich sagen es ist nicht möglich, aber ich würde mich gerne eines besseren belehren lassen.)

Danke für jede Rückmeldung.

mkinzler 17. Feb 2010 08:03

Re: erweitertes Record in abgeleiteter Klasse
 
Ein Record ist halt keine Klasse

Berni68 17. Feb 2010 08:06

Re: erweitertes Record in abgeleiteter Klasse
 
Was dann heißt es geht nicht? Auch nicht mit 'Hilfskonstruktionen'?

mkinzler 17. Feb 2010 08:12

Re: erweitertes Record in abgeleiteter Klasse
 
Da wäre die Variante, dies gleicjh in den Usprungsrecord einzubauen die einfachere

himitsu 17. Feb 2010 08:25

Re: erweitertes Record in abgeleiteter Klasse
 
Das heißt, daß Records keine Vererbungshierarchie besitzen und sowas demach auch nicht möglich ist.

vsilverlord 17. Feb 2010 09:39

Re: erweitertes Record in abgeleiteter Klasse
 
genau die gleiche Frage habe ich auch! Wenn es dafür ein Lösung gäbe, wäre das genial!

himitsu 17. Feb 2010 09:43

Re: erweitertes Record in abgeleiteter Klasse
 
Gibt es nicht ... ein Record läßt sich nicht nachträglich verändern.

Es ist grundsätzlich nicht möglich irgendwelche Typen in ihrer Größe nachträglich zu verändern.
Selbst bei Klassen geht sowas nicht, abgesehn von den Class-Helpern, aber diese fügen nur etwas ab der aktuellen Position hinzu, ohne vorher Deklariertes nachträglich zu ändern.
Genauso ist es bei Forward-Deklararionen.

Das Einzige, welches möglich wäre, ist eine nachträgliche Typkonvertierung,
aber dabei muß man höllisch aufpassen, daß man am Speichermanagement nicht zerschießt.
Delphi-Quellcode:
type
  TMyBasisRecord = record
    ...
    variabel: record
      data: array[0..1023] of byte;
    end;
  end;

  TMyChangedRecord = record
    ... // genau gleiche Deklaration, wie vorher
    variabel: record
      ... // aber nicht mehr, als 1024 Byte (siehe andere Deklaration)
           // und Strings, dynamische Arrays, Interfaces sind verboten,
           // es sei denn man fügt genau an der Selben Stelle im Basis-Record
           // einen Dummy von gleichem Typen ein
    end;
  end;

  TMyAdditionRecord = record
    ... // aber nicht mehr, als 1024 Byte (siehe andere Deklaration)
         // und Strings, dynamische Arrays, Interfaces sind verboten,
         // es sei denn man fügt genau an der Selben Stelle im Basis-Record
         // einen Dummy von gleichem Typen ein
  end;

var X: TMyBasisRecord;

  TMyChangedRecord(X)
  TMyAdditionRecord(X.variabel)
Beim VirtualTreeView wird z.B. die Variante mit dem TMyAdditionRecord für das .Data-Attribut der Nodes angewendet.

hoika 17. Feb 2010 10:11

Re: erweitertes Record in abgeleiteter Klasse
 
Hallo,

die Antwort "Record ist halt keine Klasse" ist doch schon fast die Lösung.

Entweder du machst aus deinem Record eine Klasse
im NodeDataSize (?) wäre dann SizeOf Class -> immer 4 bei 32bit ... ;)

Oder du nimmst eine Hüllklasse

Delphi-Quellcode:
type
  THullClass = class
    rec: TMyRectXXX;
  end;
Du du es erweitern willst,
wäre jetzt

Delphi-Quellcode:
  THullClass2 = class(THullClass)
    varX: Integer
  end;
Seht doof aus, ist es auch ;)
Also mache asu dem Record gleich eine Klasse.


Heiko


Alle Zeitangaben in WEZ +1. Es ist jetzt 22:15 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