Thema: Delphi Algemeine Enumeration

Einzelnen Beitrag anzeigen

Benutzerbild von glkgereon
glkgereon

Registriert seit: 16. Mär 2004
2.287 Beiträge
 
#1

Algemeine Enumeration

  Alt 13. Apr 2006, 13:04
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
»Unlösbare Probleme sind in der Regel schwierig...«
  Mit Zitat antworten Zitat