Posted by Bart van der Werf
In Reply to Cool little Coroutines function posted by Bart van der Werf
unit Example;interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Coroutine, StdCtrls; type TCounter = class(TCoroutine) protected procedure Execute; override; end; TForm1 = class(TForm) Button1: TButton; Memo1: TMemo; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private { Private declarations } Counter: TCounter; public { Public declarations } end; var Form1: TForm1; implementation uses Math; {$R *.dfm} { TCounter } procedure TCounter.Execute; var i: Integer; begin for i := 0 to 4 do begin Form1.Memo1.Lines.Append(IntToStr(i)); Yield; if IsTerminating then Exit; end; raise Exception.Create('hi'); Form1.Memo1.Lines.Append('-done-'); end; procedure TForm1.Button1Click(Sender: TObject); begin Counter.Invoke; end; procedure TForm1.FormCreate(Sender: TObject); begin Counter := TCounter.Create; end; procedure TForm1.FormDestroy(Sender: TObject); begin Counter.Free; end; end.
|