错误主要出现在下面两段程序中:
unit untMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, ComCtrls, AppEvnts, ImgList, ActnList,
StdActns, ExtActns, ToolWin;
type
TfrmMain = class(TForm)
ActionList1: TActionList;
MainMenu1: TMainMenu;
PopupMenu1: TPopupMenu;
ImageList1: TImageList;
ApplicationEvents1: TApplicationEvents;
File1: TMenuItem;
Edit1: TMenuItem;
Search1: TMenuItem;
Window1: TMenuItem;
Help1: TMenuItem;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
EditSelectAll1: TEditSelectAll;
EditUndo1: TEditUndo;
EditDelete1: TEditDelete;
RichEditBold1: TRichEditBold;
RichEditItalic1: TRichEditItalic;
RichEditUnderline1: TRichEditUnderline;
RichEditStrikeOut1: TRichEditStrikeOut;
RichEditBullets1: TRichEditBullets;
RichEditAlignLeft1: TRichEditAlignLeft;
RichEditAlignRight1: TRichEditAlignRight;
RichEditAlignCenter1: TRichEditAlignCenter;
WindowClose1: TWindowClose;
WindowCascade1: TWindowCascade;
WindowTileHorizontal1: TWindowTileHorizontal;
WindowTileVertical1: TWindowTileVertical;
WindowMinimizeAll1: TWindowMinimizeAll;
WindowArrange1: TWindowArrange;
FileOpen1: TFileOpen;
FileSaveAs1: TFileSaveAs;
FilePrintSetup1: TFilePrintSetup;
FileExit1: TFileExit;
SearchFind1: TSearchFind;
SearchFindNext1: TSearchFindNext;
SearchReplace1: TSearchReplace;
SearchFindFirst1: TSearchFindFirst;
FileNew1: TAction;
FileSave1: TAction;
FilePrintDlg1: TAction;
HelpAbout1: TAction;
Open1: TMenuItem;
SaveAs1: TMenuItem;
PrintSetup1: TMenuItem;
Exit1: TMenuItem;
New1: TMenuItem;
Save1: TMenuItem;
Print1: TMenuItem;
Cut1: TMenuItem;
Copy1: TMenuItem;
Delete1: TMenuItem;
SelectAll1: TMenuItem;
Undo1: TMenuItem;
Delete2: TMenuItem;
Bold1: TMenuItem;
Italic1: TMenuItem;
Underline1: TMenuItem;
Strikeout1: TMenuItem;
Bullets1: TMenuItem;
AlignLeft1: TMenuItem;
AlignRight1: TMenuItem;
Center1: TMenuItem;
Find1: TMenuItem;
FindNext1: TMenuItem;
Replace1: TMenuItem;
FindFirst1: TMenuItem;
Close1: TMenuItem;
Cascade1: TMenuItem;
ileHorizontally1: TMenuItem;
ileVertically1: TMenuItem;
MinimizeAll1: TMenuItem;
Arrange1: TMenuItem;
Help2: TMenuItem;
About1: TMenuItem;
ControlBar1: TControlBar;
ToolBar1: TToolBar;
ToolBar2: TToolBar;
ToolBar3: TToolBar;
ToolBar4: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
ToolButton12: TToolButton;
ToolButton13: TToolButton;
ToolButton14: TToolButton;
ToolButton15: TToolButton;
ToolButton16: TToolButton;
ToolButton17: TToolButton;
ToolButton18: TToolButton;
ToolButton19: TToolButton;
ToolButton20: TToolButton;
ToolButton21: TToolButton;
ToolButton22: TToolButton;
ToolButton23: TToolButton;
ToolButton24: TToolButton;
ToolButton25: TToolButton;
ToolButton26: TToolButton;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure ApplicationEvents1Hint(Sender: TObject);
procedure FileNew1Execute(Sender: TObject);
procedure FileOpen1Accept(Sender: TObject);
procedure FileSave1Execute(Sender: TObject);
procedure FileSave1Update(Sender: TObject);
procedure FileSaveAs1Accept(Sender: TObject);
procedure FilePrintDlg1Accept(Sender: TObject);
procedure HelpAbout1Execute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure UpdateStatusBar;
function QueryChildByFileName(AFileName:string):Integer;
procedure OpenFile(AFileName:string);
end;var
frmMain: TfrmMain;implementationuses untChild, UntAbout;procedure TfrmMain.FormCreate(Sender: TObject);
begin
FileSaveAs1.Dialog.InitialDir:=ExtractFilePath(Application.ExeName)+'Files\';
FileOpen1.Dialog.InitialDir:=ExtractFilePath(Application.ExeName)+'Files\';
end;procedure TfrmMain.ApplicationEvents1Hint(Sender: TObject);
begin
StatusBar1.Panels[0].Text:=GetLongHint(Application.Hint);
end;
procedure TfrmMain.UpdateStatusBar;
begin
if ActiveMDIChild<>nil then begin
StatusBar1.Panels[1].Text:=IntToStr((ActiveMDIChild as TfrmChild).RichEdit1.CaretPos.Y+1)+':'+IntToStr((ActiveMDIChild as TfrmChild).RichEdit1.Caretpos.X+1);
if(ActiveMDIChild as TfrmChild).IsModified then
StatusBar1.Panels[2].Text:='Modified.'
else
StatusBar1.Panels[2].Text:='Not Modified.';
end;
end;
procedure TfrmMain.FileNew1Execute(Sender: TObject);
begin
with TfrmChild.Create(Self) do;
Caption:='未命名';
end;function TfrmMain.QueryChildByFileName(AFileName:string):Integer;
var
i:Integer;
begin
for i:=0 to MDIChildCount-1 do
with MDIChildren[i] as TfrmChild do begin
if not IsNamed then
continue;
if FileName=AFileName then begin
Result:=i;
Exit;
end;
end;
Result:=-1;
end;
procedure TfrmMain.OpenFile(AFileName:string);
var
AChild:Integer;
begin
AChild:=QueryChildByFileName(AFileName);
if AChild=-1 then begin
frmChild:=TfrmChild.Create(Self);
frmChild.LoadFromFile(AFileName);
UpdateStatusBar();
end
else begin
MDIChildren[AChild].BringToFront();
UpdateStatusBar();
end;
end;procedure TfrmMain.FileOpen1Accept(Sender: TObject);
begin
OpenFile(FileOpen1.Dialog.FileName);
end;procedure TfrmMain.FileSave1Execute(Sender: TObject);
begin
if ActiveMDIChild=nil then
Exit;
with ActiveMDIChild as TfrmChild do begin
if not IsNamed then //若文件从未保存,执行另存命令
FileSaveAs1.Execute
else if IsModified then
SaveToFile(FileName);
end;
end;procedure TfrmMain.FileSave1Update(Sender: TObject);
begin
if ActiveMDIChild<>nil then
with ActiveMDIChild as TfrmChild do begin
if IsModified then
FileSave1.Enabled:=True
else
FileSave1.Enabled:=False;
end;
end;procedure TfrmMain.FileSaveAs1Accept(Sender: TObject);
begin
if ActiveMDIChild=nil then
Exit;
with ActiveMDIChild as TfrmChild do begin
SaveToFile(FileSaveAs1.Dialog.FileName);
IsModified:=False;
end;
end;
procedure TfrmMain.FilePrintDlg1Accept(Sender: TObject);
begin
frmChild.RichEdit1.Print(frmChild.FileName);
end;procedure TfrmMain.HelpAbout1Execute(Sender: TObject);
begin
frmAbout:=TfrmAbout.Create(Self);
frmAbout.ShowModal;
frmAbout.Free;
end;
end.
unit untMain;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, ExtCtrls, ComCtrls, AppEvnts, ImgList, ActnList,
StdActns, ExtActns, ToolWin;
type
TfrmMain = class(TForm)
ActionList1: TActionList;
MainMenu1: TMainMenu;
PopupMenu1: TPopupMenu;
ImageList1: TImageList;
ApplicationEvents1: TApplicationEvents;
File1: TMenuItem;
Edit1: TMenuItem;
Search1: TMenuItem;
Window1: TMenuItem;
Help1: TMenuItem;
EditCut1: TEditCut;
EditCopy1: TEditCopy;
EditPaste1: TEditPaste;
EditSelectAll1: TEditSelectAll;
EditUndo1: TEditUndo;
EditDelete1: TEditDelete;
RichEditBold1: TRichEditBold;
RichEditItalic1: TRichEditItalic;
RichEditUnderline1: TRichEditUnderline;
RichEditStrikeOut1: TRichEditStrikeOut;
RichEditBullets1: TRichEditBullets;
RichEditAlignLeft1: TRichEditAlignLeft;
RichEditAlignRight1: TRichEditAlignRight;
RichEditAlignCenter1: TRichEditAlignCenter;
WindowClose1: TWindowClose;
WindowCascade1: TWindowCascade;
WindowTileHorizontal1: TWindowTileHorizontal;
WindowTileVertical1: TWindowTileVertical;
WindowMinimizeAll1: TWindowMinimizeAll;
WindowArrange1: TWindowArrange;
FileOpen1: TFileOpen;
FileSaveAs1: TFileSaveAs;
FilePrintSetup1: TFilePrintSetup;
FileExit1: TFileExit;
SearchFind1: TSearchFind;
SearchFindNext1: TSearchFindNext;
SearchReplace1: TSearchReplace;
SearchFindFirst1: TSearchFindFirst;
FileNew1: TAction;
FileSave1: TAction;
FilePrintDlg1: TAction;
HelpAbout1: TAction;
Open1: TMenuItem;
SaveAs1: TMenuItem;
PrintSetup1: TMenuItem;
Exit1: TMenuItem;
New1: TMenuItem;
Save1: TMenuItem;
Print1: TMenuItem;
Cut1: TMenuItem;
Copy1: TMenuItem;
Delete1: TMenuItem;
SelectAll1: TMenuItem;
Undo1: TMenuItem;
Delete2: TMenuItem;
Bold1: TMenuItem;
Italic1: TMenuItem;
Underline1: TMenuItem;
Strikeout1: TMenuItem;
Bullets1: TMenuItem;
AlignLeft1: TMenuItem;
AlignRight1: TMenuItem;
Center1: TMenuItem;
Find1: TMenuItem;
FindNext1: TMenuItem;
Replace1: TMenuItem;
FindFirst1: TMenuItem;
Close1: TMenuItem;
Cascade1: TMenuItem;
ileHorizontally1: TMenuItem;
ileVertically1: TMenuItem;
MinimizeAll1: TMenuItem;
Arrange1: TMenuItem;
Help2: TMenuItem;
About1: TMenuItem;
ControlBar1: TControlBar;
ToolBar1: TToolBar;
ToolBar2: TToolBar;
ToolBar3: TToolBar;
ToolBar4: TToolBar;
ToolButton1: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
ToolButton12: TToolButton;
ToolButton13: TToolButton;
ToolButton14: TToolButton;
ToolButton15: TToolButton;
ToolButton16: TToolButton;
ToolButton17: TToolButton;
ToolButton18: TToolButton;
ToolButton19: TToolButton;
ToolButton20: TToolButton;
ToolButton21: TToolButton;
ToolButton22: TToolButton;
ToolButton23: TToolButton;
ToolButton24: TToolButton;
ToolButton25: TToolButton;
ToolButton26: TToolButton;
StatusBar1: TStatusBar;
procedure FormCreate(Sender: TObject);
procedure ApplicationEvents1Hint(Sender: TObject);
procedure FileNew1Execute(Sender: TObject);
procedure FileOpen1Accept(Sender: TObject);
procedure FileSave1Execute(Sender: TObject);
procedure FileSave1Update(Sender: TObject);
procedure FileSaveAs1Accept(Sender: TObject);
procedure FilePrintDlg1Accept(Sender: TObject);
procedure HelpAbout1Execute(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
procedure UpdateStatusBar;
function QueryChildByFileName(AFileName:string):Integer;
procedure OpenFile(AFileName:string);
end;var
frmMain: TfrmMain;implementationuses untChild, UntAbout;procedure TfrmMain.FormCreate(Sender: TObject);
begin
FileSaveAs1.Dialog.InitialDir:=ExtractFilePath(Application.ExeName)+'Files\';
FileOpen1.Dialog.InitialDir:=ExtractFilePath(Application.ExeName)+'Files\';
end;procedure TfrmMain.ApplicationEvents1Hint(Sender: TObject);
begin
StatusBar1.Panels[0].Text:=GetLongHint(Application.Hint);
end;
procedure TfrmMain.UpdateStatusBar;
begin
if ActiveMDIChild<>nil then begin
StatusBar1.Panels[1].Text:=IntToStr((ActiveMDIChild as TfrmChild).RichEdit1.CaretPos.Y+1)+':'+IntToStr((ActiveMDIChild as TfrmChild).RichEdit1.Caretpos.X+1);
if(ActiveMDIChild as TfrmChild).IsModified then
StatusBar1.Panels[2].Text:='Modified.'
else
StatusBar1.Panels[2].Text:='Not Modified.';
end;
end;
procedure TfrmMain.FileNew1Execute(Sender: TObject);
begin
with TfrmChild.Create(Self) do;
Caption:='未命名';
end;function TfrmMain.QueryChildByFileName(AFileName:string):Integer;
var
i:Integer;
begin
for i:=0 to MDIChildCount-1 do
with MDIChildren[i] as TfrmChild do begin
if not IsNamed then
continue;
if FileName=AFileName then begin
Result:=i;
Exit;
end;
end;
Result:=-1;
end;
procedure TfrmMain.OpenFile(AFileName:string);
var
AChild:Integer;
begin
AChild:=QueryChildByFileName(AFileName);
if AChild=-1 then begin
frmChild:=TfrmChild.Create(Self);
frmChild.LoadFromFile(AFileName);
UpdateStatusBar();
end
else begin
MDIChildren[AChild].BringToFront();
UpdateStatusBar();
end;
end;procedure TfrmMain.FileOpen1Accept(Sender: TObject);
begin
OpenFile(FileOpen1.Dialog.FileName);
end;procedure TfrmMain.FileSave1Execute(Sender: TObject);
begin
if ActiveMDIChild=nil then
Exit;
with ActiveMDIChild as TfrmChild do begin
if not IsNamed then //若文件从未保存,执行另存命令
FileSaveAs1.Execute
else if IsModified then
SaveToFile(FileName);
end;
end;procedure TfrmMain.FileSave1Update(Sender: TObject);
begin
if ActiveMDIChild<>nil then
with ActiveMDIChild as TfrmChild do begin
if IsModified then
FileSave1.Enabled:=True
else
FileSave1.Enabled:=False;
end;
end;procedure TfrmMain.FileSaveAs1Accept(Sender: TObject);
begin
if ActiveMDIChild=nil then
Exit;
with ActiveMDIChild as TfrmChild do begin
SaveToFile(FileSaveAs1.Dialog.FileName);
IsModified:=False;
end;
end;
procedure TfrmMain.FilePrintDlg1Accept(Sender: TObject);
begin
frmChild.RichEdit1.Print(frmChild.FileName);
end;procedure TfrmMain.HelpAbout1Execute(Sender: TObject);
begin
frmAbout:=TfrmAbout.Create(Self);
frmAbout.ShowModal;
frmAbout.Free;
end;
end.
unit untChild;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;type
TfrmChild = class(TForm)
RichEdit1: TRichEdit;
procedure FormActivate(Sender: TObject);
procedure RichEdit1MouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer);
procedure RichEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
procedure SetFileName(const Value:string);
procedure SetIsModified(const Value:Boolean);
procedure SetIsNamed(const Value:Boolean);
public
{ Public declarations }
FIsModified, FIsNamed: Boolean;
FFileName: string;
property IsModified:Boolean read FIsModified write SetIsModified;
property IsNamed:Boolean read FIsNamed write SetIsNamed;
property FileName:string read FFileName write SetFileName;
constructor Create(AOwner:TComponent);override;
procedure LoadFromFile(AFileName:string);
procedure SaveFile(AFileName:string);
end;
var
frmChild: TfrmChild;implementationuses untMain;{$R *.dfm}procedure TfrmChild.SetFileName(const Value:string);
begin
FFileName:=Value;
Caption:=Value;
end;
procedure TfrmChild.SetIsModified(const Value:Boolean);
begin
FIsModified:=Value;
end;
procedure TfrmChild.SetIsNamed(const Value:Boolean);
begin
FIsNamed:=Value;
end;
constructor TfrmChild.Create (AOwner:TComponent);
begin
inherited;
IsModified:=False;
IsNamed:=False;
FileName:='';
FileName:='未命名';
end;
procedure TfrmChild.LoadFromFile(AFileName:string);
begin
RichEdit1.Lines.loadFromFile(AFileName);
IsNamed:=True;
FileName:=AFileName;
Caption:=AFileName;
IsModified:=False;
end;
procedure TfrmChild.SaveFile(AFileName:string);
begin
IsNamed:=True;
FileName:=AFileName;
RichEdit1.Lines.SaveToFile(AFileName);
IsModified:=False;
Caption:=AFileName;
end;
procedure TfrmChild.FormActivate(Sender: TObject);
begin
frmMain.UpdateStatusBar();
end;
procedure TfrmChild.RichEdit1MouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
frmMain.UpdateStatusBar();
end;procedure TfrmChild.RichEdit1KeyUp(Sender: TObject; var Key: Word;
Shift: TShiftState);
begin
if (Key<=40) and (Key>=37) then
frmMain.UpdateStatusBar();
end;procedure TfrmChild.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
var
r:Word;
begin
if IsModified then begin
r:=MessageDlg('File'+FileName+'was modified.Save it now?',mtConfirmation,[mbYes,mbNo,mbCancel],0);
case r of
mrYes:begin
if FileName='' then
frmMain.FileSaveAs1.Execute
else
RichEdit1.Lines.SaveToFile(FileName);
CanClose:=True;
end;
mrNo:
CanClose:=True;
mrCancel:
CanClose:=False;
end;
end
else
CanClose:=True;
end;procedure TfrmChild.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Action:=caFree;
frmMain.StatusBar1.Panels[1].Text:='';
frmMain.StatusBar1.Panels[2].Text:='';
end;end.错误提示如下:
[Error] untMain.pas(216): Undeclared identifier: 'SaveToFile'
[Error] untMain.pas(236): Undeclared identifier: 'SaveToFile'
236行: SaveToFile(FileSaveAs1.Dialog.FileName);是什么东西SaveToFile ? 比如是Memo1.Lines.SaveToFile(FileName);
或者你的SaveToFile自己定义的方法,但在代码中又没看到,自己检查检查