Einzelnen Beitrag anzeigen

Hawkeye219

Registriert seit: 18. Feb 2006
Ort: Stolberg
2.227 Beiträge
 
Delphi 2010 Professional
 
#12

Re: Step wie noch mal ?

  Alt 23. Apr 2009, 15:43
Hallo,

es ist eine technische Spielerei, aber ich konnte einfach nicht widerstehen:

Delphi-Quellcode:
type
  TLoop = class
  private
    FFrom : Integer;
    FTo : Integer;
    FStep : Integer;
    FCurrent : Integer;
  public
    constructor Create (const aFrom, aTo: Integer);
    function MoveNext: Boolean;
    function Step (const aStep: Integer): TLoop;
    function GetEnumerator: TLoop;
    property Current: Integer read FCurrent;
  end;

constructor TLoop.Create (const aFrom, aTo: Integer);
begin
  FFrom := aFrom;
  FTo := aTo;
  Step(1);
end;

function TLoop.Step (const aStep: Integer): TLoop;
begin
  FStep := aStep;
  FCurrent := FFrom - FStep;

  Result := Self;
end;

function TLoop.GetEnumerator: TLoop;
begin
  Result := Self;
end;

function TLoop.MoveNext: Boolean;
begin
  Inc (FCurrent, FStep);

  if (FStep < 0) then
    Result := (FCurrent >= FTo)
  else
    Result := (FCurrent <= FTo);
end;


function Range (const aFrom, aTo: Integer): TLoop;
begin
  Result := TLoop.Create(aFrom, aTo);
end;

// Anwendung:

procedure TForm1.btnEnumeratorClick (Sender: TObject);
var
  i : Integer;
begin
  Memo.Clear;

  for i in Range(12, 51).Step(7) do
    Memo.Lines.Add (IntToStr(i));

  Memo.Lines.Add('');

  for i in Range(20, 0).Step(-3) do
    Memo.Lines.Add (IntToStr(i));
end;
Die Klasse und die Hilfsfunktion Range würde man natürlich in eine eigene Unit verfrachten.

Gruß Hawkeye
  Mit Zitat antworten Zitat