unit HisRestorePointFrm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, ImgList, ZJTrees, ZJGridTrees, ZJGrid, ComCtrls, ToolWin, ExtCtrls, ZjGridDBA, ActnList, HisRestorePointDM, ConstTypeUnit, XPMenu; type TfrmRestorePoint = class(TForm) tbDeleteOne: TToolBar; tbRestorePoint: TToolButton; tbViewProject: TToolButton; tbDeletePoint: TToolButton; zgUnFixedPoint: TZJGrid; zaUnFixedPoint: TZjGridDBA; zgFixedPoint: TZJGrid; zaFixedPoint: TZjGridDBA; Splitter1: TSplitter; ActionList: TActionList; actnRestorePoint: TAction; actnViewPoint: TAction; actnDelete: TAction; XPMenu: TXPMenu; tbCloseWind: TToolButton; actnCloseWind: TAction; procedure actnDeleteExecute(Sender: TObject); procedure actnViewPointExecute(Sender: TObject); procedure actnRestorePointExecute(Sender: TObject); procedure actnCloseWindExecute(Sender: TObject); private FProject: TObject; FFileName: string; FProjName: string; FCloseProjectProc: TNotifyEvent; FOpenProjectProc: TOpenProjectProc; FDMHisResPoint: TDMHisRestorePoint; function OutOfRecordCount(var aFixed: Boolean): Boolean; procedure RestoreProject; procedure SetHisResPoint(const Value: TDMHisRestorePoint); procedure SetProject(const Value: TObject); property DMHisResPoint: TDMHisRestorePoint read FDMHisResPoint write SetHisResPoint; public property Project: TObject read FProject write SetProject; property CloseProjectProc: TNotifyEvent read FCloseProjectProc write FCloseProjectProc; property OpenProjectProc: TOpenProjectProc read FOpenProjectProc write FOpenProjectProc; end; implementation {$R *.dfm} uses ScProjectManager; { TfrmRestorePoint } procedure TfrmRestorePoint.SetHisResPoint(const Value: TDMHisRestorePoint); begin FDMHisResPoint := Value; if Assigned(FDMHisResPoint) then begin FDMHisResPoint.RefreshPoints; zaUnFixedPoint.DataSet := FDMHisResPoint.cdsUnFixedPoint; zaFixedPoint.DataSet := FDMHisResPoint.cdsFixedPoint; end else begin zaUnFixedPoint.DataSet := nil; zaFixedPoint.DataSet := nil; end; end; procedure TfrmRestorePoint.actnDeleteExecute(Sender: TObject); var bFixed: Boolean; begin if not OutOfRecordCount(bFixed) then Exit; FDMHisResPoint.DeleteCurPoint(bFixed); end; procedure TfrmRestorePoint.actnViewPointExecute(Sender: TObject); var strPath: string; bFixed: Boolean; begin if not OutOfRecordCount(bFixed) then Exit; strPath := FDMHisResPoint.GetCurPointPath(bFixed); FOpenProjectProc(strPath, 'Ô¤ÀÀ_' + TProject(FProject).ProjectName, -1, -1); end; function TfrmRestorePoint.OutOfRecordCount(var aFixed: Boolean): Boolean; begin Result := False; if zgUnFixedPoint.Focused then begin if (zgUnFixedPoint.CurRow >= zgUnFixedPoint.FixedRowCount) and (zgUnFixedPoint.CurRow < zgUnFixedPoint.FixedRowCount + zaUnFixedPoint.RecordCount) then begin aFixed := False; Result := True; end; end else if zgFixedPoint.Focused then begin if (zgFixedPoint.CurRow >= zgFixedPoint.FixedRowCount) and (zgFixedPoint.CurRow < zgFixedPoint.FixedRowCount + zaFixedPoint.RecordCount) then begin aFixed := True; Result := True; end; end; end; procedure TfrmRestorePoint.RestoreProject; var bFixed: Boolean; strFile: string; begin if not OutOfRecordCount(bFixed) then Exit; strFile := FDMHisResPoint.GetCurPointPath(bFixed); FCloseProjectProc(FProject); CopyFile(PChar(strFile), PChar(FFileName), False); FOpenProjectProc(FFileName, FProjName, -1, TProject(FProject).ID); //FDMHisResPoint.DeleteAllPoints; end; procedure TfrmRestorePoint.actnRestorePointExecute(Sender: TObject); begin Self.Hide; Screen.Cursor := crHourGlass; try RestoreProject; finally Screen.Cursor := crDefault; end; Self.Close; end; procedure TfrmRestorePoint.SetProject(const Value: TObject); begin FProject := Value; FFileName := TProject(FProject).FilePath; FProjName := TProject(FProject).ProjectName; DMHisResPoint := TProject(FProject).DMHisPoint; end; procedure TfrmRestorePoint.actnCloseWindExecute(Sender: TObject); begin Close; end; end.