Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

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

Re: erweitertes Record in abgeleiteter Klasse

  Alt 17. Feb 2010, 10:43
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat