Da ich nun keine Idee mehr habe, was ich noch ausprobieren kann frage ich einmal in die Runde.
1. Wie kann ich aus einen TComponentStyle die Anzahl der möglichen Enum-Werte erhalten?
2. Wie kann ich die Enum-Werte eines TComponentStyle in einen String umwandeln, oder aus dem String 'csInheritable' den entsprechenden Enum-Wert erhalten?
.
Enum in String und zurück umwandeln
Re: Enum in String und zurück umwandeln
2. http://www.freepascal.org/docs-html/rtl/typinfo/getenumname.html
z.B.:
[Edit]
Geht bei TComponentStyle nicht, da das ein Set of ... ist - Sorry!
z.B.:
Code: Alles auswählen
Caption := GetEnumName(TypeInfo(WindowState), Ord(WindowState));
[Edit]
Geht bei TComponentStyle nicht, da das ein Set of ... ist - Sorry!
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;
-
- Beiträge: 177
- Registriert: Mi 2. Sep 2015, 11:09
- OS, Lazarus, FPC: Lazaurus 2.2.4 FPC 3.2.2
- CPU-Target: Windows 32/64bit
Re: Enum in String und zurück umwandeln
Leider hast Du übersehen, dass es sich um TComponentStyle handelt und somit nicht zum Erfolg führt.
Dass das mit einem TWindowState funktioniert ist klar, denn das ist als "echter Enum" deklariert:
TComponentStyle hingegen ist ein "Set-Of-Enums"
[EDIT]
Habe gerade gesehen, dass Dir das schon aufgefallen ist.
.
Dass das mit einem TWindowState funktioniert ist klar, denn das ist als "echter Enum" deklariert:
Code: Alles auswählen
TWindowState = (wsNormal, wsMinimized, wsMaximized, wsFullScreen);
TComponentStyle hingegen ist ein "Set-Of-Enums"
Code: Alles auswählen
TComponentStyle = set of (csInheritable, csCheckPropAvail, csSubComponent, csTransient);
[EDIT]
Habe gerade gesehen, dass Dir das schon aufgefallen ist.
.
Re: Enum in String und zurück umwandeln
Da das Set direkt zugewiesen wurde, kann man mMn nicht auf die Enums zugreifen. Ein Workaround könnte sein, dass man das originale Set nochmals mit den Enums nachbaut (die Frage ist, ob sich das lohnt):
Code: Alles auswählen
procedure TFormMain.Button1Click(Sender: TObject);
type
TComponentStyles = (csInheritable, csCheckPropAvail, csSubComponent, csTransient);
THackComponentStyle = set of TComponentStyles;
var
ComponentStyles: TComponentStyles;
HackComponentStyle: THackComponentStyle;
begin
HackComponentStyle := THackComponentStyle(Button1.ComponentStyle);
for ComponentStyles in HackComponentStyle do
Memo1.Lines.Add(GetEnumName(TypeInfo(TComponentStyles), Ord(ComponentStyles)));
end;
Code: Alles auswählen
type
TLiveSelection = (lsMoney, lsChilds, lsTime);
TLive = Array[0..1] of TLiveSelection;