Сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним - Free Pascal
Формулировка задачи:
Добрый день!
Помогите пожалуйста с программой. Программа компилирует код на паскале а затем с помощью графического модуля выводит на экран результаты компиляции. В конце программа спрашивает у пользователя, продолжить работу или нет. Если работа продолжается, программа очищает экран и заново начинает работу.
У меня две проблемы:
1) Как сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним, но при этом, чтобы экран мог очищаться
2) После того как подключил графический модуль, программа не выводит надписи writeln
Пожалуйста, помогите
Program Kurs;
uses SysUtils, Process, graph, strutils, crt;
var
str, str0, otv:string;
f: file;
i,x,y: integer;
Procedure Compile(var str:string);
var
proc : TProcess;
outfile : string;
begin
outfile := ChangeFileExt(str, '.txt');
proc := TProcess.Create(nil);
proc.CommandLine := 'F:\FPC\2.6.4\bin\i386-win32\fpc.exe -b ' + str +
' -Fe' + outfile;
proc.Options := proc.Options + [poWaitOnExit];
proc.Execute;
proc.Free;
end;
Procedure DrawStr(var str2:string; x,y:integer);
var
S:integer;
begin
S:=2;
SetTextStyle(SansSerifFont,HorizDir,S);
SetColor(black);
OutTextXY(x,y,str2);
end;
Procedure Search(var str0:string; var str1:string; var str4:string);
var
f:text;
i,j,y,x,count:integer;
prov,str,str2,str3,count1:string;
flag0,flag4,flag1,flag2,flag3:boolean;
begin
Cleardevice;
y:=50;
x:=10;
SetFillStyle(SolidFill,green);
bar(0, 0, pred(getmaxx), pred(getmaxy));
assign(f,str0);
reset(f);
flag0:=true;
str1:='';
str4:='';
while not Eof(f) do
begin
if flag0=true then
begin
readln(f,str);
prov:='';
for j:=1 to length(str) do
begin
prov:=prov+str[j];
if prov='Compiling' then break;
end;
end;
if prov='Compiling' then
begin
readln(f,str);
flag0:=false;
flag1:=false;
flag2:=false;
flag4:=false;
count:=-1;
count1:='';
if pos('Fatal:',str) = 0 then
flag3:=true
else flag3:=false;
str2:='';
if flag3=true then
begin
for i:=1 to length(str) do
begin
if str[i]='(' then
flag1:=true;
if str[i+1]=')' then
flag2:=true;
if flag2=true then
begin
str1:=str1 + ' ';
flag1:=false;
flag2:=false;
end;
if str[i]='"' then
if flag4=false then
flag4:=true
else flag4:=false;
if flag4=true then
begin
count:=count+1;
end;
if flag1=true then
str1:=str1 + str[i+1];
str2:=str2+str[i];
if i=length(str) then
begin
if flag3=true then
begin
y:=y+50;
DrawStr(str2,x,y);
end;
end;
if (count>0) and (flag4=false) then
begin
System.Str(count,count1);
str4:=str4+count1+' ';
end;
end;
end;
end;
end;
end;
Procedure Draw(var f:text; numstr,numsto,numsim,k:integer; numstr1:string);
var str0,str,str1:string;
i,j:integer;
flag:boolean;
begin
str0:='';
reset(f);
i:=0;
while not Eof(f) do
begin
readln(f,str);
i:=i+1;
if i=numstr then
begin
str1:=str;
break;
end;
end;
close(f);
i:=10;
j:=45;
str0:=str0+numstr1+') ';
outtextXY(i,k,str0);
for i:=1 to length(str1) do
begin
if i=numsto-numsim then flag:=true;
if flag=true then
setcolor(12)
else setcolor(0);
if i=numsto-1 then flag:=false;
outtextXY(j+i*20,k,str1[i]);
end;
end;
Procedure Search_Err(var str0,str,str1,str4:string);
const
D=[',',' '];
var
k,n,count,numstr,numsto,numsim:integer;
numstr1,numsto1,numsim1:string;
f:text;
begin
assign(f,str);
k:=getmaxY div 2 +100;
n:=1;
count := WordCount(str1, D);
while n < Count do
begin
numsim1:='';
numstr1:=ExtractWord(n, str1, D);
numsto1:=ExtractWord(n + 1, str1, D);
for i:=1 to length(str4) do
begin
if str4[i]=' ' then
begin
delete(str4, 1, i);
break;
end
else
numsim1:=numsim1+str4[i];
end;
inc(n,2);
val(numstr1,numstr);
val(numsto1,numsto);
val(numsim1,numsim);
Draw(f,numstr,numsto,numsim,k,numstr1);
k:=k+20;
end;
end;
Procedure Output(var str0,str:string);
var
f:text;
str1,str4:string;
begin
Search(str0,str1,str4);
Search_Err(str0,str,str1,str4);
readln;
end;
begin
x:=detect;
initgraph(x,y,'');
repeat
writeln('Ââåäèòå ïóòü ê ôàéëó .pas: ');
read(str);
if str='test' then
str:='G:\Kursovaya\Test.pas';
if str='test1' then
str:='G:\Kursovaya\Lab_8\Lab_8_2.pas';
str0:=str;
for i:=length(str0) downto 1 do
if str0[i]='.' then
begin
delete(str0, i+1, length(str0)); break;
end;
str0:=str0+'txt';
assign(f,str0);
rewrite(f);
close(f);
Compile(str);
Output(str0,str);
writeln('Ïðîäîëæèòü ðàáîòó ñ ïðîãðàììîé? Y/N');
until (ReadKey='Y');
end.Решение задачи: «Сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним»
textual
Листинг программы
// ... тут процедуры
var crtf : Text;
begin
assigncrt(crtf);
rewrite(crtf);
// здесь код твоей основной программы, writeln('текст') заменяется на writeln(crtf, 'текст')
close(crtf);
end.