![]() |
Set mit voller Menge initialisieren
Angenommen ich definiere mir ein Set in Delphi
Delphi-Quellcode:
und ich möchte ein Variable immer mit dem vollen Set initialisieren - auch wenn ich nachträglich mal ein Element hinzudefiniere. Natürlich geht:
type
TMeinSetElement = (elEins, elZwei, elDrei); TMeinSet = set of TMeinSetElement;
Delphi-Quellcode:
aber hier müsste ich ja jedesmal von Hand anpassen. Habe schon ein
var x: TMeinSet;
begin x := [elEins, elZwei, elDrei];
Delphi-Quellcode:
versucht, aber das ist so nicht erlaubt. Kennst jemand einen Trick, das zu bewerkstelligen?
var x: TMeinSet;
begin x := not []; |
Re: Set mit voller Menge initialisieren
Delphi-Quellcode:
geht aber nur, wenn die Werte des Sets nicht mit anderem Index vordefiniert sind.
x := [Low(TMeinSetElement)..High(TMeinSetElement)];
also mit diesem Set würde auch die "2" (Drei) mit gesetzt
Delphi-Quellcode:
blöd ist aber, das die RTTI bei solchens Sets wichtige Infos (vorallem jene über die enthaltenen Werte des Sets) nicht speichert und man dann auch darüber nicht gehen könnte :wall:
TMeinSetElement = (elEins, elZwei, elVier=3);
(leidliche Erfahrung seitens der Entwicklung der Serialize-Funktionen in himXML) [edit] TMeinSet durch TMeinSetElement ersetzt ... siehe Post drunter |
Re: Set mit voller Menge initialisieren
Zitat:
Delphi-Quellcode:
Der Set-Elementtyp sollte in diesem Fall aber keine Lücken aufweisen wie z.B. "type TMySetElement = (A = 0, B = 2, C = 100);"
x := [Low(TMeinSetElement)..High(TMeinSetElement)];
|
Re: Set mit voller Menge initialisieren
Danke, das mit dem Low..High ist ja schonmal ein Anfang. Irgendwie blöd gemacht, dass es dazu kein "richtiges" Konstrukt gibt, wie halt "not []" - wäre mal ein Verbesserungsvorschlag ;-)
|
Re: Set mit voller Menge initialisieren
Zitat:
Gruss Reinhard |
Re: Set mit voller Menge initialisieren
bzw.
Delphi-Quellcode:
, nur das geht nur bist zu einer grösse von 32 Elementen.
integer(setvar) := -1;
|
Re: Set mit voller Menge initialisieren
Zitat:
und der Code, welcher dieses Set dann verarbeit, damit klar kommt, wenn dort auch "ungenutzte" Bits/Werte gesetzt sind. |
Re: Set mit voller Menge initialisieren
Zitat:
|
Re: Set mit voller Menge initialisieren
Zitat:
Zitat:
Delphi-Quellcode:
Type TMeinSetElement = (elEins, elZwei, elDrei);
TMeinSet = Set of TMeinSetElement; Var A, B, C: TMeinSet; Begin A := [Low(TMeinSetElement)..High(TMeinSetElement)]; B := [elEins..elDrei]; Byte(C) := $FF; If A = B Then MessageBox(0, 'A = B', '', 0); If A = C Then MessageBox(0, 'A = C', '', 0); // "A = C" wird nie angezeigt |
Re: Set mit voller Menge initialisieren
Edit: gelöscht, Vorschlag mit Fillchar war schon da.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 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