📄 mainunit.pas
字号:
yuanchengcu.Lines.SaveToFile(filename);
end;
end;
procedure TmainForm.FormCreate(Sender: TObject);
begin
runobj:=true;
maindir:=extractfilepath(paramstr(0));
newButtonClick(nil);
OpenDialog.InitialDir:=maindir;
SaveDialog.InitialDir:=maindir;
end;
procedure TmainForm.X1Click(Sender: TObject);
begin
close;
end;
procedure TmainForm.OpenButtonClick(Sender: TObject);
begin
if OpenDialog.Execute then
if fileexists(OpenDialog.FileName) then
begin
OpenDialog.InitialDir:=OpenDialog.GetNamePath;
filename:=OpenDialog.FileName;
yuanchengcu.Lines.LoadFromFile(filename);
mainform.Caption :='Project Language 1.0 - '+ChangeFileExt(ExtractFileName(filename),'');
// savebutton.Enabled:=false;
s1.Enabled :=false;
init;
PageControl.ActivePage:=TabSheet1;
cifafenxishuchu.Lines.Clear ;
yufayuyifenxishuchu.Lines.Clear ;
mubiaodaimashuchu.Lines.Clear ;
result.Lines.Clear ;
end
else
begin
showmessage('你指定的文件“'+OpenDialog.FileName
+'”不存在!请指定另外的PL程序文件!');
OpenButtonClick(nil);
end;
end;
procedure TmainForm.A1Click(Sender: TObject);
begin
if saveDialog.Execute then
begin
saveDialog.InitialDir:=saveDialog.GetNamePath;
filename:=saveDialog.FileName;
if copy(yuanchengcu.Lines[0],1,12)='$ PL Program' then
yuanchengcu.Lines[0]:='$ PL Program '+ChangeFileExt(ExtractFileName(filename),'');
mainform.Caption :='Project Language 1.0 - '+ChangeFileExt(ExtractFileName(filename),'');
yuanchengcu.Lines.SaveToFile(filename);
// savebutton.Enabled:=false;
s1.Enabled :=false;
end;
end;
procedure TmainForm.PrintButtonClick(Sender: TObject);
begin
{ if filename=maindir+'unname.pl' then
showmessage('请先保存文件再打印!')
else
if PrintDialog.Execute then
souce.Print(filename); }
end;
procedure TmainForm.UndoButtonClick(Sender: TObject);
begin
with yuanchengcu do
if HandleAllocated then SendMessage(Handle, EM_UNDO, 0, 0);
end;
procedure TmainForm.CutButtonClick(Sender: TObject);
begin
yuanchengcu.CutToClipboard ;
end;
procedure TmainForm.CopyButtonClick(Sender: TObject);
begin
yuanchengcu.CopyToClipboard ;
end;
procedure TmainForm.PasteButtonClick(Sender: TObject);
begin
yuanchengcu.PasteFromClipboard;
end;
procedure TmainForm.N11Click(Sender: TObject);
begin
yuanchengcu.SelectAll;
end;
procedure TmainForm.N13Click(Sender: TObject);
begin
{ FindDialog.Position := Point(mainForm.Left + 50, mainForm.Top+50);
FindDialog.Execute; }
end;
procedure TmainForm.FindDialogFind(Sender: TObject);
var
FoundAt: LongInt;
StartPos, ToEnd,i: Integer;
begin
with yuanchengcu do
begin
StartPos := 0;
for i:=1 to CaretPos.y do
StartPos:=StartPos+length(lines[i-1])+2 ;
StartPos:=StartPos+CaretPos.x ;
ToEnd := Length(Text) - StartPos;
// FoundAt := FindText(FindDialog.FindText, StartPos, ToEnd, [stMatchCase]);
if FoundAt <> -1 then
begin
SetFocus;
SelStart := FoundAt;
// SelLength := Length(FindDialog.FindText);
end
else
begin
// FindDialog.CloseDialog ;
// showmessage('找不到字符串“'+FindDialog.FindText+'”!');
end;
end;
end;
procedure TmainForm.N12Click(Sender: TObject);
begin
ShellExecute(0,nil,pchar(maindir+'help\plhelp.hlp'),nil,nil,SW_NORMAL);
end;
procedure TmainForm.PL1Click(Sender: TObject);
begin
// aboutbox.show;
end;
procedure TmainForm.yuanchengcuSelectionChange(Sender: TObject);
begin
StatusBar.Panels[1].Text:= ' '+inttostr(yuanchengcu.CaretPos.y+1)+' 行 ';
end;
procedure TmainForm.runClick(Sender: TObject);
var codname:string;
begin
yuanchengcu.Lines.SaveToFile(filename);
assignfile(Notes, maindir+'PLNotes.ERR' );
Rewrite(Notes);
assignfile(Input1, filename);
Reset(Input1);
assignfile(Output1, maindir+'PLTemp1.DAT' );
Rewrite(Output1);
Errors := false; Emitting := true;
Pass1; // do the first pass
Closefile(Input1);
Closefile(Output1);
cifafenxishuchu.Lines.LoadFromFile(maindir+'PLTemp1.DAT');
if not Errors then
begin
assignfile(Input1, maindir+'PLTemp1.DAT' );
Reset(Input1);
assignfile(Output1, maindir+'PLTemp2.DAT' );
Rewrite(Output1);
Pass2; // do the second pass
Closefile(Input1);
Closefile(Output1);
yufayuyifenxishuchu.Lines.LoadFromFile(maindir+'PLTemp2.DAT');
end;
if not Errors then
begin
assignfile(Input1, maindir+'PLTemp2.DAT' );
reset(Input1);
codname:=ChangeFileExt(filename,'.COD');
assignfile(Output1, codname );
Rewrite(Output1);
Emitting := false;
Pass3; // do the third pass
Closefile(Input1);
Closefile(Output1);
mubiaodaimashuchu.Lines.LoadFromFile(codname);
end;
Closefile(Notes);
if Errors then
begin
if not errpage.Visible then
begin
yuanchengcu.Height:=yuanchengcu.Height-75;
errpage.Visible:=true;
end;
error.Lines.LoadFromFile(maindir+'PLNotes.ERR');
error.Lines.add('');
error.Lines.add('程序有错,请分步执行查错!');
StatusBar.Panels[4].Text:='程序有错,无法执行,请分步执行查错!'
end
else
begin
if errpage.Visible then noerrClick(nil);
if runobj then
begin
PageControl.ActivePage:=TabSheet5;
PLInterpreter;
end
else
begin
PageControl.ActivePage:=TabSheet1;
runobj:=true;
showmessage(' 程序编译正确! ');
end;
init;
end;
end;
procedure TmainForm.noerrClick(Sender: TObject);
begin
errpage.Visible:=false;
yuanchengcu.Height:=yuanchengcu.Height+75;
end;
procedure TmainForm.ToolButton1Click(Sender: TObject);
begin
result.Lines.Clear ;
end;
procedure TmainForm.N16Click(Sender: TObject);
begin
runobj:=false;
runClick(nil);
end;
procedure TmainForm.BitBtn1Click(Sender: TObject);
begin
yuanchengcu.Lines.SaveToFile(filename);
assignfile(Notes, maindir+'PLNotes.ERR' );
Rewrite(Notes);
assignfile(Input1, filename);
Reset(Input1);
assignfile(Output1, maindir+'PLTemp1.DAT' );
Rewrite(Output1);
Errors := false; Emitting := true;
Pass1; // do the first pass
Closefile(Input1);
Closefile(Output1);
cifafenxishuchu.Lines.LoadFromFile(maindir+'PLTemp1.DAT');
Closefile(Notes);
if Errors then
begin
if not errpage.Visible then
begin
n21.Enabled :=false;
errpage.Visible:=true;
end;
error.Lines.LoadFromFile(maindir+'PLNotes.ERR');
error.Lines.add('有词法错误!');
PageControl.ActivePage:=TabSheet1;
StatusBar.Panels[4].Text:='有词法错误!';
end
else
begin
n21.Enabled :=true;
if errpage.Visible then noerrClick(nil);
PageControl.ActivePage:=TabSheet2;
StatusBar.Panels[4].Text:='通过词法分析!';
end;
n22.Enabled :=false;
n23.Enabled :=false;
yufayuyifenxishuchu.Lines.Clear ;
mubiaodaimashuchu.Lines.Clear ;
result.Lines.Clear ;
end;
procedure TmainForm.BitBtn2Click(Sender: TObject);
begin
if not Errors then
begin
assignfile(Notes, maindir+'PLNotes.ERR' );
Rewrite(Notes);
assignfile(Input1, maindir+'PLTemp1.DAT' );
Reset(Input1);
assignfile(Output1, maindir+'PLTemp2.DAT' );
Rewrite(Output1);
Pass2; // do the second pass
Closefile(Input1);
Closefile(Output1);
yufayuyifenxishuchu.Lines.LoadFromFile(maindir+'PLTemp2.DAT');
Closefile(Notes);
end;
if Errors then
begin
n22.Enabled :=false;
if not errpage.Visible then
begin
errpage.Visible:=true;
end;
error.Lines.LoadFromFile(maindir+'PLNotes.ERR');
error.Lines.add('语法或语义错误!');
PageControl.ActivePage:=TabSheet1;
StatusBar.Panels[4].Text:='有语法或语义错误!';
end
else
begin
n22.Enabled :=true;
if errpage.Visible then noerrClick(nil);
PageControl.ActivePage:=TabSheet3;
StatusBar.Panels[4].Text:='通过语法、语义分析!';
end;
n23.Enabled :=false;
end;
procedure TmainForm.BitBtn3Click(Sender: TObject);
var codname:string;
begin
if not Errors then
begin
assignfile(Notes, maindir+'PLNotes.ERR' );
Rewrite(Notes);
assignfile(Input1, maindir+'PLTemp2.DAT' );
reset(Input1);
codname:=ChangeFileExt(filename,'.COD');
assignfile(Output1, codname );
Rewrite(Output1);
Emitting := false;
Pass3; // do the third pass
Closefile(Input1);
Closefile(Output1);
mubiaodaimashuchu.Lines.LoadFromFile(codname);
Closefile(Notes);
end;
if Errors then
begin
n23.Enabled :=false;
if not errpage.Visible then
begin
yuanchengcu.Height:=yuanchengcu.Height-75;
errpage.Visible:=true;
end;
error.Lines.LoadFromFile(maindir+'PLNotes.ERR');
error.Lines.add('代码生成发生错误!');
PageControl.ActivePage:=TabSheet1;
StatusBar.Panels[4].Text:='代码生成发生错误!';
end
else
begin
n23.Enabled :=true;
if errpage.Visible then noerrClick(nil);
PageControl.ActivePage:=TabSheet4;
StatusBar.Panels[4].Text:='代码成功生成!';
end;
end;
procedure TmainForm.BitBtn4Click(Sender: TObject);
begin
if not Errors then
begin
PageControl.ActivePage:=TabSheet5;
PLInterpreter;
n21.Enabled :=false;
n22.Enabled :=false;
n23.Enabled :=false;
end;
end;
procedure TmainForm.init;
begin
if errpage.Visible then noerrClick(nil);
n21.Enabled :=false;
n22.Enabled :=false;
n23.Enabled :=false;
end;
procedure TmainForm.StandardToolBarMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.yuanchengcuMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.errmsgMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.cifafenxishuchuMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.yufayuyifenxishuchuMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.mubiaodaimashuchuMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.PageControlMouseMove(Sender: TObject;
Shift: TShiftState; X, Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.resultMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
begin
StatusBar.Panels[2].Text:='';
end;
procedure TmainForm.FormClose(Sender: TObject; var Action: TCloseAction);
var saveword:word;
begin
// if savebutton.Enabled then
begin
saveword:=MessageDlg('是否保存对程序文件“'+ChangeFileExt(ExtractFileName(filename),'')+'”的修改?',
mtWarning, mbYesNoCancel, 1);
if saveword = mrYes then
begin
SaveButtonClick(nil);
// if savebutton.Enabled then abort;
end
else if saveword = mrCancel then
abort;
end;
if fileexists(maindir+'unname.pl') then deletefile(maindir+'unname.pl');
if fileexists(maindir+'unname.cod') then deletefile(maindir+'unname.cod');
end;
procedure TmainForm.FormShow(Sender: TObject);
begin
mainForm.WindowState:=wsmaximized;
end;
procedure TmainForm.N3Click(Sender: TObject);
begin
close;
end;
procedure TmainForm.SpeedButton6Click(Sender: TObject);
begin
close;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -