Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Array mit Type und vordefinierte Werte (https://www.delphipraxis.net/194464-array-mit-type-und-vordefinierte-werte.html)

ibp 24. Nov 2017 15:10

Delphi-Version: 7

Array mit Type und vordefinierte Werte
 
Hallo,

ich möchte gerne ein Array mit Werten vordefinieren, leider komme ich nicht weiter...

Delphi-Quellcode:
ype
  TitType = (itString, itInteger, itBoolean);

  TIdentType = packed record
    idName : String[30];
    case idType : TitType of
      itString: (idDefaultStr : String[30]);
      itInteger: (idDefaultInt : Integer);
      itBoolean: (idDefaultBool : Boolean);
  end;

  // ab hier hakt es....
  TArrayTest = array [0..2] of TIdentType : (['test';itString;'initst']);
2. Frage:
Am liebsten hätte ich das nachfolgende für den Record, geht das irgendwie, dass der Record nur aus immer 3 gleichen Bezeichnern besteht, je nach Typ?
Delphi-Quellcode:
 ...
TIdentType = packed record
    idName : String[30];
    case idType : TitType of
      itString: (idDefault : String[30]);
      itInteger: (idDefault : Integer);
      itBoolean: (idDefault : Boolean);
  end;
Danke im Voraus!

Neutral General 24. Nov 2017 15:24

AW: Array mit Type und vordefinierte Werte
 
1. Du hast das case in Records falsch verstanden. Die 3 Variablen sind immer vorhanden und müssen unterschiedlich benannt sein damit man auch darauf zugreifen kann.
Die Variablen überlappen nur im Speicher weswegen man sich entscheiden sollte welche davon man nutzt für die jeweilige Instanz des records. Bzw. man muss selbst darauf aufpassen dass man nur die Variable benutzt die zu dem ausgewählten idType passt. Da kann der Compiler nichts machen, da er ja nicht weiß welches record zur Laufzeit welchen Typ hat.

2. Type-Deklarationen können keinen Konstanten-Default Wert haben - das geht nur bei (globalen) Variablen und Konstanten:

Delphi-Quellcode:
type
  TArrayTest = array [0..2] of TIdentType;

var
  test: TArrayTest = ((idName: 'Test'; idType: itString; idDefaultStr: 'Hallo'),
                      (idName: 'Test2'; idType: itInteger; idDefaultInt: 1234),
                      (idName: 'Test3'; idType: itBoolean; idDefaultBool: false));


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