Autor Beitrag
ml-kuen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 95, Win 98, Win 2000, Win XP, Win 7
Delphi 7 personal
BeitragVerfasst: Mo 06.05.13 23:09 
Hallo,

Folgender Code löst bei der Bedingung Index außerhalb des güligen Bereichs keine Exception aus. Die TypeInfo-Funktionen funktionieren aber und liefern den richtigen Aufzählungsnamen.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
  try
    Result:= TESeries(GetEnumValue(TypeInfo(TESeries), GetEnumName(TypeInfo(TESeries), Index)));
  except
    //on ERangeError
  on Exception do
    ShowMessage(Format('Expected value between %d and %d, but got %d', [Ord(Low(ESeries)) , Ord(High(ESeries)), Index]));

Bei einer Division durch 0 wird except hingegen angesprungen. Kann mir jemand einen Tipp geben?.

Michael

Moderiert von user profile iconNarses: Code- durch Delphi-Tags ersetzt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 07.05.13 07:28 
GetEnumName verschiebt einen Pointer einfach um "Index" über die Namensliste ohne zu prüfen, was dabei herauskommt kann man schön zeigen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
procedure TForm1.Button1Click(Sender: TObject);
var
 ESeries:TESeries;
 index:Integer;
begin

 for index := 0 to 200 do

 begin
    ListBox1.Items.Add(GetEnumName(TypeInfo(TESeries),index) +':'+IntToStr(Ord( GetEnumValue(TypeInfo(TESeries), GetEnumName(TypeInfo(TESeries),index)))));
 end;
end;

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
ml-kuen Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 17

Win 95, Win 98, Win 2000, Win XP, Win 7
Delphi 7 personal
BeitragVerfasst: Di 07.05.13 23:29 
Hallo bummi,

dem ist nichts zu entgegnen oder hinzuzufügen.

Danke :D

Michael