Сделать, чтобы графический модуль запускался после написания пути к файлу, а не перед ним - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д