Set of in Ordinal umwandeln
Hi,
Hab mal gelesen, dass Set of (also so was wie TFontStyles) eigentlich nur ordinale Typen sind. Hab dazu hier im Forum auch was zur Umwandlung gefunden, allerdings nur mit viel Code. Meine Frage: Das müsste doch ganz einfach gehen, hab z.B. folgendes festgestellt:
Delphi-Quellcode:
Das funktioniert!
var i: integer;
//... i := Byte(Form1.Font.Style); Aber wie geht es umgekehrt ? Gibts da evtl. auch eine ganz einfache Umwandlung? Das hier:
Delphi-Quellcode:
funzt leider nich :|
Form1.Font.Style := TFontStyles(i);
|
Re: Set of in Ordinal umwandeln
Hallo Martin,
vergiss nie, dass ein Set zwischen 1 und 32 Byte groß sein kann. Die von dir angedachte Initialisierung eines Set durch Zuweisung einer passenden Ganzzahl funktioniert generell mit Variablen. Font.Styles ist allerdings eine property, die über einen Setter bestückt wird. Freundliche Grüße vom marabu |
Re: Set of in Ordinal umwandeln
Hmm...
Und wie könnte es gehen? Ich weiß, dass das mit der Unit TypInfo und der Prozedur SetOrdProp geht, aber es muss doch auch igrgendwie allg. mit definierten Set of -Typen gehen. Das mit FontStyles war ja nur ein Beispiel... |
Re: Set of in Ordinal umwandeln
So geht es:
Delphi-Quellcode:
marabu
var
fs: TFontStyles; begin fs := Font.Style; Byte(fs) := 42; // fiktiver Wert Font.Style := fs; end; |
Re: Set of in Ordinal umwandeln
Hm...
Sieht gut aus, danke erstmal :!: Noch ein Problem: Es sollte allg. mit Set of -Typen gehen, nicht nur mit TFontStyles. Gibt es irgendwie einen allgemeinen Typ dafür, den man hier als Variable nehmen kann? Etwa so was:
Delphi-Quellcode:
var test: TSetOfTyp; //<-- gibt's irgendsowas???
begin test := Font.Style; //aber auch: test := BorderIcons; //oder: test := Anchors; end; |
Re: Set of in Ordinal umwandeln
Nach den Regeln zur Delphi Typkompatibilität: Nein. Ist auch mehr eine technische Spielerei, was wir hier machen - in hohem Maße abhängig von der Implementierung des Mengentyps. Der hier gezeigte Code darf in keinem ernsthaften Programm verwendet werden.
marabu |
Re: Set of in Ordinal umwandeln
Hm... :gruebel:
Ich würde halt gerne so etwas machen (soll eine erweiterte IniFile geben):
Delphi-Quellcode:
procedure TIniFile.WriteSetOf(const Section, Ident: String; const Value: TSetOf {???});
begin WriteInteger(Section, Ident, Byte(Value)); //ist eigentlich nicht das Problem end; function TIniFile.ReadSetOf(const Section, Ident: String; const Default: TSetOf): TSetOf {???}; begin Byte(Result) := ReadInteger(Section, Ident, Byte(Default)); end; |
Re: Set of in Ordinal umwandeln
Du könntest eine PPropInfo Variable übergeben (oder Object + String-Name der Set-Eigenschaft) und das ganze dann mit RTTI setzen.
mfG mirage228 |
Re: Set of in Ordinal umwandeln
Ja, aber damit geht es doch nur mit Object-Property's und nicht allgemein mit Set of -Typen, oder????
:gruebel: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:33 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