Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Set of in Ordinal umwandeln (https://www.delphipraxis.net/68615-set-ordinal-umwandeln.html)

Martin K 2. Mai 2006 17:48


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:
var i: integer;
//...
  i := Byte(Form1.Font.Style);
Das funktioniert!

Aber wie geht es umgekehrt ?
Gibts da evtl. auch eine ganz einfache Umwandlung?

Das hier:
Delphi-Quellcode:
  Form1.Font.Style := TFontStyles(i);
funzt leider nich :|

marabu 2. Mai 2006 18:38

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

Martin K 2. Mai 2006 18:42

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...

marabu 2. Mai 2006 18:47

Re: Set of in Ordinal umwandeln
 
So geht es:

Delphi-Quellcode:
var
  fs: TFontStyles;
begin
  fs := Font.Style;
  Byte(fs) := 42; // fiktiver Wert
  Font.Style := fs;
end;
marabu

Martin K 2. Mai 2006 18:55

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;

marabu 2. Mai 2006 19:20

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

Martin K 2. Mai 2006 19:34

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;

mirage228 2. Mai 2006 19:45

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

Martin K 2. Mai 2006 19:50

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