P
panwen
Unregistered / Unconfirmed
GUEST, unregistred user!
情况有点复杂,各位大侠一定要有耐心啊
我建了一个Form_Log的Mdi子窗口(主窗口Form_Main),这个子窗口主要是用来自动记录用户操作的一些信息的,上面放了:
一个Memo,信息就记录在这里;
一个checkbox,用来判断是否自动记录;
一个ClearButton,用来清空Memo;
一个SaveButton,用来手动保存记录;
一个LoadButton,用来打开以前的记录;
还有一个CloseButton,用来关闭子窗口。
主窗口上有一个NLog菜单用来打开子窗口。
现在常规的操作都没有问题,基本功能都能实现,但是在进行以下特殊操作时就会出错:
1.点击CheckBox,取消自动记录;
2.点击LoadButton,打开已有的记录;
3.点击CloseButton,关闭子窗口;
4.NLog菜单重新打开子窗口。
第四步之后程序就会出错,提示无法创建文件。
大侠们给看看到底是怎么回事:
//创建子窗口
procedure TForm_Log.FormCreate(Sender: TObject);
begin
TimeTitle := DatetoStr(Date) + ' ' + TimetoStr(time);
TimeTitleSave := DatetoStr(Date) + ' ' + FormatDateTime('hh-mm-ss',Time);
Form_Main.NLog.Checked := true;
CheckBox.Checked := true;
isopened := false;
Memo1.Lines.Add(TimeTitle);
end;
//关闭子窗口
procedure TForm_Log.CloseButtonClick(Sender: TObject);
begin
Close;
end;
//关闭子窗口
procedure TForm_Log.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form_Main.NLog.Checked := false;
Form_Log := nil;
Action:=caFree;
end;
//清空memo
procedure TForm_Log.ClearButtonClick(Sender: TObject);
begin
TimeTitle := DatetoStr(Date) + ' ' + TimetoStr(time);
TimeTitleSave := DatetoStr(Date) + ' ' + FormatDateTime('hh-mm-ss',Time);
Memo1.Clear;
isopened := false;
Memo1.Lines.Add(TimeTitle);
end;
//手动保存记录
procedure TForm_Log.SaveButtonClick(Sender: TObject);
var
ResultFileName : String;
begin
SaveDialog1.InitialDir := './Log';
SaveDialog1.FileName := TimeTitleSave;
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
if MessageDlg(Format('Save changes to %s?', [SaveDialog1.FileName]),
mtConfirmation, mbYesNoCancel, 0) = idYes then
begin
ResultFileName := SaveDialog1.FileName;
Memo1.Lines.SaveToFile(ResultFileName);
Exit;
end
else
Exit;
ResultFileName := SaveDialog1.FileName + '.txt';
isopened := true;
AutoSaveFile := ResultFileName;
Memo1.Lines.SaveToFile(ResultFileName);
end;
end;
//手动打开记录
procedure TForm_Log.LoadButtonClick(Sender: TObject);
var
ResultFileName : String;
begin
OpenDialog1.InitialDir := './Log';
if OpenDialog1.Execute then
begin
ResultFileName := OpenDialog1.FileName;
AutoSaveFile := ResultFileName;
isopened := true;
Memo1.Lines.LoadFromFile(ResultFileName);
end
else
Exit;
end;
//自动记录CheckBox
procedure TForm_Log.CheckBoxClick(Sender: TObject);
begin
if CheckBox.Checked = true then
begin
SaveButton.Enabled := false;
LoadButton.Enabled := false;
N1.Enabled := false;
N2.Enabled := false;
end
else
begin
SaveButton.Enabled := true;
LoadButton.Enabled := true;
N1.Enabled := true;
N2.Enabled := true;
end;
end;
//在Memo内容改变时判断时候自动记录
procedure TForm_Log.Memo1Change(Sender: TObject);
var
ResultFileName : String;
begin
if CheckBox.Checked = true then
begin
if isopened then
ResultFileName := AutoSaveFile
else
ResultFileName := './Log/' + TimeTitleSave + '.txt';
try
Memo1.Lines.SaveToFile(ResultFileName);
finally
end;
end;
end;
//这是主窗口的NLog菜单
procedure TForm_Main.NLogClick(Sender: TObject);
begin
if not assigned(Form_Log) then
Form_Log := TForm_Log.Create(Application)
else
Form_Log.Close;
end;
我建了一个Form_Log的Mdi子窗口(主窗口Form_Main),这个子窗口主要是用来自动记录用户操作的一些信息的,上面放了:
一个Memo,信息就记录在这里;
一个checkbox,用来判断是否自动记录;
一个ClearButton,用来清空Memo;
一个SaveButton,用来手动保存记录;
一个LoadButton,用来打开以前的记录;
还有一个CloseButton,用来关闭子窗口。
主窗口上有一个NLog菜单用来打开子窗口。
现在常规的操作都没有问题,基本功能都能实现,但是在进行以下特殊操作时就会出错:
1.点击CheckBox,取消自动记录;
2.点击LoadButton,打开已有的记录;
3.点击CloseButton,关闭子窗口;
4.NLog菜单重新打开子窗口。
第四步之后程序就会出错,提示无法创建文件。
大侠们给看看到底是怎么回事:
//创建子窗口
procedure TForm_Log.FormCreate(Sender: TObject);
begin
TimeTitle := DatetoStr(Date) + ' ' + TimetoStr(time);
TimeTitleSave := DatetoStr(Date) + ' ' + FormatDateTime('hh-mm-ss',Time);
Form_Main.NLog.Checked := true;
CheckBox.Checked := true;
isopened := false;
Memo1.Lines.Add(TimeTitle);
end;
//关闭子窗口
procedure TForm_Log.CloseButtonClick(Sender: TObject);
begin
Close;
end;
//关闭子窗口
procedure TForm_Log.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Form_Main.NLog.Checked := false;
Form_Log := nil;
Action:=caFree;
end;
//清空memo
procedure TForm_Log.ClearButtonClick(Sender: TObject);
begin
TimeTitle := DatetoStr(Date) + ' ' + TimetoStr(time);
TimeTitleSave := DatetoStr(Date) + ' ' + FormatDateTime('hh-mm-ss',Time);
Memo1.Clear;
isopened := false;
Memo1.Lines.Add(TimeTitle);
end;
//手动保存记录
procedure TForm_Log.SaveButtonClick(Sender: TObject);
var
ResultFileName : String;
begin
SaveDialog1.InitialDir := './Log';
SaveDialog1.FileName := TimeTitleSave;
if SaveDialog1.Execute then
begin
if FileExists(SaveDialog1.FileName) then
if MessageDlg(Format('Save changes to %s?', [SaveDialog1.FileName]),
mtConfirmation, mbYesNoCancel, 0) = idYes then
begin
ResultFileName := SaveDialog1.FileName;
Memo1.Lines.SaveToFile(ResultFileName);
Exit;
end
else
Exit;
ResultFileName := SaveDialog1.FileName + '.txt';
isopened := true;
AutoSaveFile := ResultFileName;
Memo1.Lines.SaveToFile(ResultFileName);
end;
end;
//手动打开记录
procedure TForm_Log.LoadButtonClick(Sender: TObject);
var
ResultFileName : String;
begin
OpenDialog1.InitialDir := './Log';
if OpenDialog1.Execute then
begin
ResultFileName := OpenDialog1.FileName;
AutoSaveFile := ResultFileName;
isopened := true;
Memo1.Lines.LoadFromFile(ResultFileName);
end
else
Exit;
end;
//自动记录CheckBox
procedure TForm_Log.CheckBoxClick(Sender: TObject);
begin
if CheckBox.Checked = true then
begin
SaveButton.Enabled := false;
LoadButton.Enabled := false;
N1.Enabled := false;
N2.Enabled := false;
end
else
begin
SaveButton.Enabled := true;
LoadButton.Enabled := true;
N1.Enabled := true;
N2.Enabled := true;
end;
end;
//在Memo内容改变时判断时候自动记录
procedure TForm_Log.Memo1Change(Sender: TObject);
var
ResultFileName : String;
begin
if CheckBox.Checked = true then
begin
if isopened then
ResultFileName := AutoSaveFile
else
ResultFileName := './Log/' + TimeTitleSave + '.txt';
try
Memo1.Lines.SaveToFile(ResultFileName);
finally
end;
end;
end;
//这是主窗口的NLog菜单
procedure TForm_Main.NLogClick(Sender: TObject);
begin
if not assigned(Form_Log) then
Form_Log := TForm_Log.Create(Application)
else
Form_Log.Close;
end;