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:
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;
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:
Delphi-Quellcode:
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;
das das ganze aber nicht funktioniert (wär ja auch zu schön gewesen) die frage: wie mache ich es richtig?
ein Fehler ist zB. das ich statt "E: TEnum" eigentlich den Enum-Typen (TJvWindowsArrangeEnum) übergeben müsste