помогите пожалуйста с описанием программы. (
uses
GraphABC, System.Windows.Forms;
type
Token =
(FONTNAME,FONTSIZE,SCREEN,BGCOLOR,TITLE,SPEED,S,E);
StringMessage=record
repeats,width:integer;
sColor:Color;
text:string;
end;
var
x, y, i, err, w: integer;
sfontname,stitle:string;
fsize,scrw,scrh,speed_x, speed_ms:integer;
bgclr:Color;
msgs: array of StringMessage;
g:System.Drawing.Graphics;
fl:boolean;
strar:array of string;
ch:array of char := (',');
function GetTokenType(s:string):Token;
var
t:Token;
begin
s := UpperCase(s);
t := Token.FONTNAME;
while t Token.E do
begin
if s = t.ToString() then
begin
result := t;
exit;
end;
Inc(t);
end;
result := t;
end;
procedure ReadFile(filename:string);
var
strline:string;
f: text;
begin
Assign(f, filename);
Reset(f);
while not Eof(f) do
begin
readln(f, strline);
if strline[1] = '%' then continue;
strar := strline.Split(ch);
case GetToKenType(strar[0]) of
Token.FONTNAME: begin
if strar[1].Trim().Length> 0 then sfontname := strar[1];
end;
Token.FONTSIZE: begin
Val(strar[1], fsize, err);
end;
Token.SCREEN: begin
if strar.Length = 3 then
begin
Val(strar[1], scrw, err);
Val(strar[2], scrh, err);
end
else
begin
Val(strar[1], scrw, err);
scrh := scrw;
end;
end;
Token.BGCOLOR: begin
bgclr := Color.FromName(strar[1]);
end;
Token.SPEED: begin
Val(strar[1], speed_x, err);
Val(strar[2], speed_ms, err);
end;
Token.TITLE: begin
stitle := strar[1];
end;
Token.S: begin
if msgs = nil then SetLength(msgs, 1)
else SetLength(msgs,
msgs.Length + 1);
Val(strar[1], msgs[msgs.Length-1].repeats, err);
msgs[msgs.Length-1].sColor := Color.FromName(strar[2]);
msgs[msgs.Length-1].text := strar[3]+' ';
end;
Token.E:
else MessageBox.Show('Ошибка во входном файле. ');
end;
end;
Close(f);
end;
begin
g := System.Drawing.Graphics.FromImage(System.Drawing.Bitmap.Create(1, 1));
ReadFile('input.txt');
setwindowsize(scrw, scrh);
setwindowtitle(stitle);
x := scrw;
y := scrh div 2 - fsize;
SetFontName(sfontname);
SetFontSize(fsize);
Brush.Color := bgclr;
for i := 0 to msgs.Length - 1 do
begin
msgs[i].width :=
Round(g.MeasureString(msgs[i].text,Font.NETFont).Width);
end;
LockDrawing;
while true do
begin
Window.Clear(bgclr);
w := 0;
fl := true;
for i := 0 to msgs.Length - 1 do
begin
if (msgs[i].repeats 0) or (msgs[i].repeats < 0) then
begin
fl := false;
if (x + w < scrw) and (x
+ msgs[i].width + w > 0) then
begin
Font.Color := msgs[i].sColor;
TextOut(x + w, y, msgs[i].text);
end;
w := w + msgs[i].width;
end;
end;
Sleep(speed_ms);
Redraw;
x := x - speed_x;
if x + w < 0 then
begin
for i := 0 to msgs.Length - 1 do
if msgs[i].repeats > 0 then Dec(msgs[i].repeats);
x := scrw;
end;
if fl then break;
end;
exit;
end.