1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
|
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Déclarations privées }
public
{ Déclarations publiques }
valeur,debut,fin,increment,DebutBoucle:integer;
procedure ActionPRINT(AValue:string);
procedure InitBoucle(ParamList : TStrings);
function DoAThing ( ParamList : TStrings ) : Boolean;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ActionPRINT(AValue:string);
begin
memo1.lines.add(AValue+' '+IntToStr(valeur)); //par exemple
end;
procedure TForm1.InitBoucle(ParamList : TStrings);
var i:integer;
begin
increment:=1; //increment par defaut
for i:=0 to ParamList.Count-1 do
begin
debut:=StrToInt(ParamList.Values['start']);
increment:=StrToInt(ParamList.Values['step']);
valeur:=debut;
end;
end;
function TForm1.DoAThing ( ParamList : TStrings ) : Boolean;
var Ligne:integer;
AStringList:TStringList;
fonction,parametres:string;
begin
Ligne:=0;
while (Ligne<=ParamList.Count) do
begin
fonction:=ParamList.Names[Ligne];
parametres:=ParamList.ValueFromIndex[Ligne];
if fonction='FOR' then
begin
parametres:=copy(parametres,2,length(parametres)-2);
AStringList:=TStringList.create;
AStringList.delimiter:=';';
AStringList.DelimitedText :=parametres;
InitBoucle(AStringList);
DebutBoucle:=Ligne;
AStringList.Free;
end;
if fonction='ENDFOR' then
begin
fin:=StrToInt(parametres);
Inc(valeur,increment);
if (valeur<=fin) then
begin
Ligne:=DebutBoucle;
end;
end;
if fonction='CLS' then memo1.Clear;
if fonction='PRINT' then ActionPRINT(parametres);
inc(Ligne);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DoAThing (memo2.Lines);
end;
end. |
Partager