Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
Delphi 7 Enterprise
|
Re: Integer-Aufzählungstyp deklarieren
24. Apr 2007, 11:52
Wie wärs mit ner Klasse.
Das ist sicherlich ausbaufähig:
Delphi-Quellcode:
type TIntArray=array of integer;
type MyIntegerException=class( Exception);
type TMyInteger=class
constructor Create(values: array of integer);
destructor Destroy; override;
private
FAllowedValues:TIntArray;
FValue:Integer;
procedure setvalue(newValue:integer);
procedure setAllowedValues(newvalues:TIntArray);
function inside(value:integer):boolean;
public
property AllowedValues:TIntArray read FAllowedValues write setAllowedValues;
property Value:Integer read FValue write setvalue;
class function Array2IntArray(values: array of integer):TIntarray;
end;
Delphi-Quellcode:
constructor TmyInteger.Create(values:array of integer);
begin
inherited create;
FValue:=0;
Allowedvalues:=Array2IntArray(values);
end;
destructor TmyInteger.Destroy;
begin
finalize(FAllowedValues);
inherited;
end;
function TMyInteger.inside(value:integer):boolean;
var i:integer;
begin
result:=false;
for i:=0 to high(FAllowedvalues) do begin
result:=result or (Fallowedvalues[i]=value);
if result then break;
end;
end;
procedure TMyInteger.setAllowedValues(newvalues:TIntArray);
begin
FallowedValues:=copy(newvalues);
if (not inside(FValue))and(length(FAllowedValues)>0)
then Fvalue:=FAllowedValues[0];
end;
procedure TmyInteger.setvalue(newValue:integer);
begin
if inside(newvalue) then FValue:=newvalue
else raise MyIntegerException.CreateFmt('%d ist kein %s-Typ!',[newvalue,self.ClassName]);
end;
class function TmyInteger.array2IntArray(values:array of integer):TIntArray;
var i:integer;
begin
setlength(result,length(values));
for i:=0 to high(values) do result[i]:=values[i];
end;
Anwendung:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var int:tmyinteger;
begin
int:=tmyinteger.Create([1,2,3,4]);
try
int.Value:=3;
//int.Value:=5;
int.AllowedValues:=int.Array2IntArray([10,20,30]);
int.Value:=10;
int.Value:=int.value+2;
finally
int.free;
end;
end;
Dieser Beitrag ist für Jugendliche unter 18 Jahren nicht geeignet.
|
|
Zitat
|