![]() |
Algemeine Enumeration
Hi,
Ich habe einige Sets, die ich als String, wie es die Delphi-IDE auch macht, ausgeben möchte. als beispiel sieht das ganze bisher so aus: (TJvWindowsArrangeEnum habe ich selbst geschrieben. TJvWindowsArrange ist jetzt set of TJvWindowsArrangeEnum. prinzipiell aber der ursprüngliche Typ.)
Delphi-Quellcode:
nun habe ich aber keine Lust für jedes Set das alles neu zu schreiben, sondern habe mir gedacht, das man das doch zusammenfassen könnte, und zwar in etwa so:
rsSetFormat = '[ %s ]';
rsSetValDivider = ', '; function WindowsArrange2String(A: TJvWindowsArrange): String; const cTexts: array [TJvWindowsArrangeEnum] of String = ( rsDown,rsLeft,rsRight,rsUp,rsBottomLeft, rsBottomRight,rsHide,rsTopLeft,rsTopRight ); var i: TJvWindowsArrangeEnum; begin Result:=rsEmpty; for i:=Low(TJvWindowsArrangeEnum) to High(TJvWindowsArrangeEnum) do if i in A then Result:=Result+rsSetValDivider+cTexts[i]; Delete(Result,1,Length(rsSetValDivider)); Result:=Format(rsSetFormat,[Result]); end;
Delphi-Quellcode:
das das ganze aber nicht funktioniert (wär ja auch zu schön gewesen) die frage: wie mache ich es richtig?
type
TEnum = Byte; TEnumSet = set of TEnum; TEnumTexts = array [TEnum] of String; function Set2String(E: TEnum; S: TEnumSet; Str: TEnumTexts): String; var i:Integer; begin Result:=''; for i:=Low(E) to High(E) do if i in S then Result:=Result+rsSetValDivider+Str[i]; Delete(Result,1,Length(rsSetValDivider)); Result:=Format(rsSetFormat,[Result]); end; ein Fehler ist zB. das ich statt "E: TEnum" eigentlich den Enum-Typen (TJvWindowsArrangeEnum) übergeben müsste |
Re: Algemeine Enumeration
Nutze doch die schöne Unit
![]() Beispiel für einen Wrapper:
Delphi-Quellcode:
Dann noch der Aufruf:
function EnumValueToString(EnumValue: Integer; Info: Pointer): string;
begin Result := GetEnumName(Info, Integer); // ich glaub so war das... end;
Delphi-Quellcode:
PS: So machts die IDE auch ;)
ShowMessage(Integer(rsDown), TypeInfo(TJvWindowsArrange));
|
Re: Algemeine Enumeration
Leider hilft mir das nicht weiter.
Das das Programm mehrsprachig ist und bleiben soll, habe ich die Arrays sowieso als Resourcestring hinterlegt. Mein Problem bleibt ja weiterhin... Ich hab es schonmal soweit gekürzt...
Delphi-Quellcode:
aber er weigert sich standhaft irgendein Set in ein TEnumSet zu Casten :(
function Set2String(S: TEnumSet; T: TEnumTexts): String;
var i:TEnum; begin Result:=''; for i:=Low(TEnum) to High(TEnum) do if i in S then Result:=Result+rsSetValDivider+T[i]; Delete(Result,1,Length(rsSetValDivider)); Result:=Format(rsSetFormat,[Result]); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:12 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