www.pudn.com > byyl.rar > mainUnit.pas
unit mainUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, Buttons, ExtCtrls, ComCtrls, ToolWin, Menus, ActnList, ImgList,
ShellApi,
pcommon,plscan,plparser,plassemb;
type
TmainForm = class(TForm)
MainMenu1: TMainMenu;
StatusBar: TStatusBar;
F1: TMenuItem;
N1: TMenuItem;
O1: TMenuItem;
S1: TMenuItem;
K1: TMenuItem;
N18: TMenuItem;
N19: TMenuItem;
N20: TMenuItem;
N21: TMenuItem;
N22: TMenuItem;
N23: TMenuItem;
PageControl: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
yuanchengcu: TRichEdit;
cifafenxishuchu: TRichEdit;
yufayuyifenxishuchu: TRichEdit;
OpenDialog: TOpenDialog;
SaveDialog: TSaveDialog;
TabSheet4: TTabSheet;
mubiaodaimashuchu: TRichEdit;
errpage: TPanel;
TabSheet5: TTabSheet;
result: TMemo;
error: TRichEdit;
CoolBar1: TCoolBar;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
SpeedButton3: TSpeedButton;
SpeedButton4: TSpeedButton;
N2: TMenuItem;
N3: TMenuItem;
N5: TMenuItem;
SpeedButton6: TSpeedButton;
TabSheet6: TTabSheet;
help: TRichEdit;
procedure newButtonClick(Sender: TObject);
procedure yuanchengcuChange(Sender: TObject);
procedure SaveButtonClick(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure X1Click(Sender: TObject);
procedure OpenButtonClick(Sender: TObject);
procedure A1Click(Sender: TObject);
procedure PrintButtonClick(Sender: TObject);
procedure UndoButtonClick(Sender: TObject);
procedure CutButtonClick(Sender: TObject);
procedure CopyButtonClick(Sender: TObject);
procedure PasteButtonClick(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure N13Click(Sender: TObject);
procedure FindDialogFind(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure PL1Click(Sender: TObject);
procedure yuanchengcuSelectionChange(Sender: TObject);
procedure runClick(Sender: TObject);
procedure noerrClick(Sender: TObject);
procedure PLInterpreter;
procedure ToolButton1Click(Sender: TObject);
procedure N16Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn3Click(Sender: TObject);
procedure BitBtn4Click(Sender: TObject);
procedure init;
procedure StandardToolBarMouseMove(Sender: TObject; Shift: TShiftState;
X, Y: Integer);
procedure Panel1MouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure yuanchengcuMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure errmsgMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure cifafenxishuchuMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure yufayuyifenxishuchuMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure mubiaodaimashuchuMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure PageControlMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure resultMouseMove(Sender: TObject; Shift: TShiftState; X,
Y: Integer);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormShow(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure SpeedButton6Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
mainForm: TmainForm;
maindir,filename:string; Code0: text; runobj:boolean;
implementation
{$R *.DFM}
{ the PL interpreter }
procedure tmainform.PLInterpreter;
const
min=1;
max=8191;
type
OperationPart=(Add2,And2,Arrow2,Assign2,Bar2,Call2,constant2,Divide2,
EndPro2,EndProg2,Equal2,Fi2,Greater2,Index2,Less2,Minus2,
Modulo2,Multiply2,Not2,Or2,Proc2,Prog2,Read2,Subtract2,
Value2,Variable2,Write2);
String1=string[30];
Store=array[min..max] of integer;
var
St:Store;
p,b,s:integer; StackBottom:integer;
Running:Boolean;
// ProgramName:String1;
// Code:text;
procedure Error(LineNo:integer; text1:String1);
begin
Writeln('LineNo',LineNo:5,' ',Text1); Running:=false
end;
procedure Allocate(Words:integer);
begin {writeln; writeln(s);}
s:=s+Words; {writeln(s); }
if s>Max then begin Writeln('Stack overflow'); Running:=false end
end;
{variableAccess::="Variable"[Expression"Index"]}
procedure Variable(Level,Displ:integer);
var x:integer;
begin
Allocate(1); x:=b;
while Level>0 do begin x:=St[x]; Level:=Level-1 end;
St[s]:=x+Displ; p:=p+3
end;
procedure Index(Bound, LineNo:integer);
var i:integer;
begin
i:=St[s]; s:=s-1; p:=p+3;
if (i<1) or (i>Bound) then Error(LineNO,'Range Error')
else St[s]:=St[s]+i-1
end;
{ Factor::="constant"| VariableAccess"Value"|Expression|Factor"Not"}
procedure Constant(Value:integer);
begin
Allocate(1);
St[s]:=Value;
p:=p+2
end;
procedure Value;
begin
St[s]:=St[St[s]]; p:=p+1
end;
procedure Notx;
begin
St[s]:=1-St[s]; p:=p+1
end;
{Term::=Factor # Factor MultiplyingOperator #
MultiplyingOperator::="Multiply" | "Divide" | "Modulo" }
procedure Multiply;
begin
p:=p+1; s:=s-1; St[s]:=St[s]*St[s+1]
end;
procedure Divide;
begin
p:=p+1; s:=s-1; St[s]:=St[s] div St[s+1]
end;
procedure Modulo;
begin
P:=p+1; s:=s-1; St[s]:=St[s] mod St[s+1]
end;
{SimpleExpression::=Term["Minus"] # Term AddingOperator #
AddingOperator::="Add" | "subtract"}
procedure Minus;
begin
St[s]:=-St[s]; p:=p+1
end;
procedure Add;
begin
p:=p+1; s:=s-1; St[s]:=St[s]+St[s+1]
end;
procedure Subtract;
begin
p:=p+1; s:=s-1; St[s]:=St[s]-St[s+1]
end;
{ primaryExpression::=SimpleExpression [SimpleExpression RelationOperator]
RelationlOperator::="Less" | "Equal" | "Greater"}
procedure Less;
begin
p:=p+1; s:=s-1; St[s]:=ord(St[s]St[s+1])
end;
{Expression::=PrimaryExpression # PrimaryExpression PrimaryOperator #
PrimaryOperator::="And" | "Or" }
procedure Andx;
begin
p:=p+1; s:=s-1;
if St[s]=1 then St[s]:=St[s+1]
end;
procedure Orx;
begin
p:=p+1; s:=s-1;
if St[s]=0 then St[s]:=St[s+1]
end;
{Readstatement::=VariableList "Read"
VariableList::=VariableAccess # VariableAccess # }
procedure Readx(No:integer);
var tmpstr:string; inp,int:boolean; x,i:integer;
begin
{ Write('?');
Readln(St[St[s]]); }
p:=p+2; s:=s-No; x:=s;
while x'' then
begin
int:=true;
for i:=1 to length(TmpStr) do
if not (TmpStr[i] in ['0'..'9']) then int:=false;
if int then
begin
St[St[x]]:=strtoint(TmpStr);
result.Lines[result.Lines.Count-1]:=' 输 入 : '+ TmpStr;
inp:=true;
end
else showmessage('出错:类型不匹配!请输入整数!');
end
else showmessage('出错:输入不能为空值!请输入整数!');
end
else showmessage('出错:你必须输入一个整数,否则程序无法运行!');
end;
end;
{WriteStatement::=ExpressionList "Write"
ExpressionList::=Expression # Expression # }
procedure Writex(No:integer);
var x:integer;
begin
p:=p+2; s:=s-No; x:=s;
while x 0 do
begin x :=St[x]; Level := Level -1 end;
St[s-2] :=x; St[s-1] := b; St[s] := p +3; b:= s -2; p := Addr
end;
{ IfStatement ::= GuardedCommandList "Fi"
DoStatement ::= GuardedCommandList
GuardedCommandList ::= GuardedCommand # GuardedCommand #
GuardedCommand ::= Expression "Arrow" StatementPart "Bar" }
procedure Arrow ( Addr :integer);
begin
if St[s] = ord (true ) then p:= p+2 else p:= Addr;
s :=s-1
end;
procedure Bar (Addr :Integer);
begin
p :=Addr
end;
procedure Fi (LineNo :Integer);
begin
Error ( LineNo, 'If Statement Fails')
end;
{ ProcedureDefinition ::= "Proc" Block " EndProc"
Block ::= # ProcedureDefinition # StatementPart
Statement ::= Empty | ReadStatement | WriteStatement| AssignmentSatemnet
ProcedureStatement| IfStatement | DoStatement }
procedure Proc (VarLength, Addr :integer);
begin
Allocate (VarLength); p:= Addr
end;
procedure EndProc;
begin
s:= b-1; p := St[b +2]; b:=St[b+1]
end;
{ Program ::="Prog" Block "EndProg" }
procedure Prog (VarLength, Addr :integer);
begin
b := StackBottom; s:= b; Allocate(VarLength +2); P :=Addr
end;
procedure EndProg;
begin
Running := false
end;
procedure LoadProgram;
var x:integer;
begin
x:=Min;
While not Eof(Code0 ) do
begin
readln(Code0, St[x]);
x:= x+1
end;
StackBottom :=x
end;
procedure RunProgram;
var op, op5:integer;
begin
Running:=true;
p :=min;
while Running do
begin
op :=St[p]; op5 :=op div 5;
case op5 of
0: case op of
0 {add2} :add;
1 {And2} :Andx;
2 {Arrow2} :Arrow(St[p+1]);
3 {Assign2}:AssignValue(St[p+1]);
4 {bar2} :Bar(St[p+1])
end;
1: case op of
5 {Call2} : Callx(St[p+1],St[p+2]);
6 {constant2}: Constant (St[p+1]);
7 {divide2} :Divide;
8 {EndProc2} :EndProc;
9 {EndProg2} :EndProg
end;
2: case op of
10{Equal2} :Equal;
11{Fi2} :Fi(St[p+1]);
12{Greater2} :Greater;
13{Index2} :Index(St[p+1],St[p+2]);
14{Less2} :Less
end;
3: case op of
15{Minus2} :Minus;
16{Modulo2} :Modulo;
17{Multiply2} :Multiply;
18{not2} :Notx;
19{or2} :Orx
end;
4: case op of
20{Proc2} :Proc(St[p+1],St[p+2]);
21{Prog2} :Prog(St[p+1],St[p +2]);
22{read2} :Readx(St[p+1]);
23{subtract2} :Subtract;
24{value2} :Value
end;
5: case op of
25{variable2} :Variable(St[p+1],St[p+2]);
26{write2} :Writex(St[p+1])
end
end { case op5 }
end {while}
end;
{ PL Interpreter }
begin
result.Lines.Add(' ');
assignfile(Code0, ChangeFileExt(filename,'.COD'));
Reset(Code0);
LoadProgram;
RunProgram;
Closefile(Code0);
result.Lines.Add(' ');
StatusBar.Panels[4].Text:='程序结束!';
end;
procedure TmainForm.newButtonClick(Sender: TObject);
begin
yuanchengcu.Lines.Clear ;
yuanchengcu.Lines.Add('begin');
yuanchengcu.Lines.add(' ');
yuanchengcu.Lines.Add('end.');
filename:=maindir+'kechengshiji.pl';
init;
PageControl.ActivePage:=TabSheet1;
cifafenxishuchu.Lines.Clear ;
yufayuyifenxishuchu.Lines.Clear ;
mubiaodaimashuchu.Lines.Clear ;
result.Lines.Clear ;
end;
procedure TmainForm.yuanchengcuChange(Sender: TObject);
begin
s1.Enabled :=true;
end;
procedure TmainForm.SaveButtonClick(Sender: TObject);
begin
if filename=maindir+'kechengsiji.pl' then
A1Click(nil) //save as
else
begin
s1.Enabled :=false;
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.