Einzelnen Beitrag anzeigen

Benutzerbild von sirius
sirius

Registriert seit: 3. Jan 2007
Ort: Dresden
3.443 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Integer-Aufzählungstyp deklarieren

  Alt 24. Apr 2007, 10: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.
  Mit Zitat antworten Zitat