Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Record dynamisch (zur Laufzeit generieren) (https://www.delphipraxis.net/5723-record-dynamisch-zur-laufzeit-generieren.html)

cYaONE 16. Jun 2003 19:17


Record dynamisch (zur Laufzeit generieren)
 
Servus,

ist es möglich ein Record dynamisch zur Laufzeit zu generieren und wenn ja, wie?

Danke schonmal!

Delphianer 16. Jun 2003 19:37

Hallo,

ich hoffe, ich habe Deine Frage richtig verstanden:
Delphi-Quellcode:
type
  TMyRecord = record
    A, B: Integer;
  end;

  PMyRecord = ^TMyRecord;

var
  MyRecord: PMyRecord;

...

begin
  New(MyRecord);
  try
    MyRecord^.A := 1;
    MyRecord^.B := 2;
    ...
  finally
    Dispose(MyRecord);
  end;
end;
Viele Grüße,

Lutz

Basic-Master 18. Jun 2003 15:24

oder willste z.b. n wert C zu nem record wärend der laufzeit adden?

cYaONE 18. Jun 2003 15:37

Ich will einen weiteren Typ zum record hinzufügen

Beispiel:

Delphi-Quellcode:
type
  TMyRecord = record
    Name: String;
  end;
und nachdem ich in zur Laufzeit hinzugefügt habe sollte es beispielsweise so aussehen:

Delphi-Quellcode:
type
  TMyRecord = record
    Name: String;
    Vorname: String;
  end;
Geht das?

Chewie 18. Jun 2003 15:43

Jein. Was du machen kannst, ist einen varianten Teil in einem Record zu benutzen. Schau mal in der Delphi-Hilfe dazu nach.

Delphianer 18. Jun 2003 16:30

Du kannst aber auch z.B. ein TMemIniFile verwenden:

Delphi-Quellcode:
type
* TMyRecord = record
* * Name: String;
    VarianterTeil: TMemIniFile;
* end;
Du mußt allerdings vor dem ersten Zugriff das MemIniFile anlegen
Code:
MyRecord.VarianterTeil := TMemIniFile.Create('');
und am Schluß alle MemIniFiles aufräumen.
Besser wäre es, wenn Du den Record in ein Object kapseltst.

Lutz

[edit=Daniel B]Delphi-Tags eingefügt. MfG Daniel B.[/edit]

Christian Seehase 18. Jun 2003 19:07

Moin Cyaone,

so wie Du es beschrieben hast, wird es nicht gehen.

Du könnstest lediglich einen eigenen Typ als Pointer festlegen, und bei Bedarf dann entsprechend der erforderlichen Recordgrösse Speicher reservieren.
Zusätzlich legst Du dann ein Template fest, z.b. als Tabelle in der dann gespeichert wird ab welcher Adresse des Buffers welches Feld des Records liegt, als welcher Typ es angesehen werden soll....

Oder hast Du eine feste Maximalgrösse, und benötigst nur mehrere verschiedene Aufteilungen? Dann wäre Chewies Tip die Lösung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz