basic.pas
来自「delphi框架可以学习, 写的很好的」· PAS 代码 · 共 758 行 · 第 1/2 页
PAS
758 行
Screen.Cursor:= FCursor;
end;
end;
procedure TfrmBasic.doPrint(Sender: TObject; var _EventNote, _State: String);
var FCursor: Integer;
ls_State: String;
begin
//打开报表进行编辑
if ReportName = '' then exit;
LoadReport(ReportName);
ls_State := CheckRepState;
if ls_State <> '' then
begin
ShowMess('打印', '报表未准备完毕:'+ ls_State, MB_ICONERROR, 10);
exit;
end;
FCursor:= Screen.Cursor;
Screen.Cursor:= crSQLWait;
try
doBeforePrint(BtnPreview);
with RBMaster do
begin
//根据本地设置修改页边距等参数
if ReadIniInt(ReportName, 'Height', 0) <>0 then
begin
RBMaster.PrinterSetup.MarginBottom:= ReadIniInt(ReportName,'Bottom',0);
RBMaster.PrinterSetup.MarginLeft := ReadIniInt(ReportName,'Left',0);
RBMaster.PrinterSetup.MarginRight := ReadIniInt(ReportName,'Right',0);
RBMaster.PrinterSetup.MarginTop := ReadIniInt(ReportName,'Top',0);
RBMaster.PrinterSetup.PaperHeight := ReadIniInt(ReportName,'Height',0);
RBMaster.PrinterSetup.PaperWidth := ReadIniInt(ReportName,'Width',0);
end;
RBMaster.PageLimit:= TppDBPipeline(RBMaster.DataPipeline).DataSource.DataSet.RecordCount;
DeviceType:= 'Printer';
Print;
end;
doAfterPrint(BtnPreview);
finally
Screen.Cursor:= FCursor;
end;
end;
procedure TfrmBasic.doSave(Sender: TObject; var _EventNote, _State: String);
begin
//保存数据
end;
procedure TfrmBasic.doUnCheck(Sender: TObject; var _EventNote, _State: String);
begin
//撤审
end;
procedure TfrmBasic.actCloseExecute(Sender: TObject);
begin
Close;
end;
procedure TfrmBasic.actOpenExecute(Sender: TObject);
begin
doAction(Sender, '打开数据', doMyOpen);
SetButtonState(UseDataSet);
end;
procedure TfrmBasic.actNewExecute(Sender: TObject);
begin
doAction(Sender, '新增数据', doNewData);
SetButtonState(UseDataSet);
end;
procedure TfrmBasic.actDeleteExecute(Sender: TObject);
begin
doAction(Sender, '删除数据', doDelete);
SetButtonState(UseDataSet);
end;
procedure TfrmBasic.actSaveExecute(Sender: TObject);
begin
doAction(Sender, '保存数据', doSave);
SetButtonState(UseDataSet);
end;
procedure TfrmBasic.actCancelExecute(Sender: TObject);
begin
doAction(Sender, '取消输入', doCancel);
SetButtonState(UseDataSet);
end;
procedure TfrmBasic.actCheckExecute(Sender: TObject);
begin
doAction(Sender, '审核数据', doCheck);
SetButtonState(UseDataSet);
end;
procedure TfrmBasic.actUncheckExecute(Sender: TObject);
begin
doAction(Sender, '撤审数据', doUnCheck);
SetButtonState(UseDataSet);
end;
procedure TfrmBasic.actPreviewExecute(Sender: TObject);
begin
doAction(Sender, '预览报表', doPreview);
end;
procedure TfrmBasic.actPrintExecute(Sender: TObject);
begin
doAction(Sender, '打印报表', doPrint);
end;
procedure TfrmBasic.actDesignExecute(Sender: TObject);
begin
doAction(Sender, '设计报表', doDesign);
end;
procedure TfrmBasic.actHelpExecute(Sender: TObject);
begin
doAction(Sender, '显示帮助', doHelp);
end;
procedure TfrmBasic.actOther1Execute(Sender: TObject);
begin
doAction(Sender, '预留动作一', doForLog1);
end;
procedure TfrmBasic.actOther2Execute(Sender: TObject);
begin
doAction(Sender, '预留动作二', doForLog2);
end;
procedure TfrmBasic.actOther3Execute(Sender: TObject);
begin
doAction(Sender, '预留动作三', doForLog3);
end;
procedure TfrmBasic.actOther4Execute(Sender: TObject);
begin
doAction(Sender, '预留动作四', doForLog4);
end;
procedure TfrmBasic.actOther5Execute(Sender: TObject);
begin
doAction(Sender, '预留动作五', doForLog5);
end;
procedure TfrmBasic.actOther6Execute(Sender: TObject);
begin
doAction(Sender, '预留动作六', doForLog6);
end;
procedure TfrmBasic.actOther7Execute(Sender: TObject);
begin
doAction(Sender, '预留动作七', doForLog7);
end;
procedure TfrmBasic.SetButtonState(DataSet: TDataSet);
begin
//设置按钮状态
with DataSet do
ButtonState(Active, IsEmpty, (State in [dsEdit, dsInsert]), False);
end;
procedure TfrmBasic.ButtonState(_IsActive, _IsEmpty, _IsModify, _IsCheck: Boolean);
begin
actSave.Enabled := _IsActive and _IsModify;
actCancel.Enabled := _IsActive and _IsModify;
actDelete.Enabled := _IsActive and not _IsEmpty and not _IsCheck;
actCheck.Enabled := _IsActive and not _IsEmpty and not _IsCheck;
actUnCheck.Enabled:= _IsActive and not _IsEmpty and _IsCheck;
end;
procedure TfrmBasic.doBeforeEdit(DataSet: TDataSet);
begin
actSave.Enabled := True;
actCancel.Enabled := True;
end;
procedure TfrmBasic.ReportMenuClick(Sender: TObject);
begin
if Sender is TMenuItem then
ReportName := (Sender as TMenuItem).Caption;
end;
procedure TfrmBasic.doBeforePrint(Sender: TObject);
begin
//打印之前要处理的事情
end;
procedure TfrmBasic.miCalcClick(Sender: TObject);
begin
winexec('CALC.EXE', SW_SHOW)
end;
function TfrmBasic.CheckRepState: String;
begin
try
if GetRc('REP', 'REPNAME =''' + ReportName + '''') = 0 then
Raise Exception.Create('报表[' + ReportName + ']还未设置!');
//if RBMaster.DataPipeline. = nil then
// Raise Exception.Create('未设置有效的数据连接!');
with UseDataSet do
begin
if not Active then Raise Exception.Create('请先打开需要打印的数据集!');
if IsEmpty then Raise Exception.Create('没有发现需要打印的数据!');
end;
except
on E: Exception do
Result := E.Message;
end;
end;
procedure TfrmBasic.RBMasterPrintDialogCreate(Sender: TObject);
begin
//必须有这个,否则报表无法打开
with RBMaster do
PageLimit:= PageCount;
end;
procedure TfrmBasic.RBMasterBeforePrint(Sender: TObject);
begin
doBeforePrint(Sender);
end;
procedure TfrmBasic.doAfterPrint(Sender: TObject);
begin
//打印之后
end;
function TfrmBasic.IsModified: Boolean;
begin
Result:= RBMaster.Modified;
if not Result then
with dm.qryRep do
begin
if Active
then Result:= Modified or (state=dsEdit)
else Result:= False;
end;
end;
procedure TfrmBasic.RBBuildClose(Sender: TObject; var Action: TCloseAction);
var ls_SQL, ls_Err: String;
begin
//保存报表至临时文件,并且提交至数据库
if IsModified then
if ShowMess('提示', '报表已经修改,现在是否保存吗? ', MB_OKCANCEL) then
begin
try
//保存至临时文件
RBMaster.Template.FileName := AppPath + 'TEMP.RTM';
RBMaster.Template.SaveToFile;
//保存至数据库
ls_SQL := 'SELECT * FROM REP WHERE REPNAME =''' + ReportName + '''';
ls_Err := OpenDataSet(dm.qryFree, ls_SQL);
if ls_Err <> '' then Raise Exception.Create(ls_Err);
with dm.qryFree do
begin
if RecordCount = 0 then Append;
Edit;
FieldByName('PCNAME').AsString := CurrentUser.MAC;
FieldByName('EMPNAME').AsString := CurrentUser.EmpName;
FieldByName('EDITDATE').AsDateTime := Now;
FieldByName('REPNAME').AsString := ReportName;
TBlobField(FieldByName('REPVALUE')).LoadFromFile(AppPath + 'TEMP.RTM');
Post;
end;
except
on E: Exception do
begin
ShowMess('保存报表', '系统无法保存报表,具体为:'+ E.Message, MB_ICONERROR);
Action := caNone;
end;
end;
Action:= caFree;
end;
end;
procedure TfrmBasic.LoadReport(_Name: String);
var
ls_where, ls_SQL, ls_ErrInfo: String;
begin
if _Name = '' then Exit;
ls_where :=' UPPER(REPNAME) =''' + _Name + '''';
ls_SQL:= 'SELECT * FROM REP WHERE '+ ls_where ;
with RBMaster.Template do
begin
ls_ErrInfo:= OpenDataSet(dm.qryRep, ls_SQL);
if ls_ErrInfo <> '' then
begin
DataBaseSettings.Name:= '';
ShowMess('错误', '无法从服务器调入报表,请重新启动应用服务器!'+#13+
'错误发生在:'+ls_ErrInfo, MB_ICONERROR);
Exit;
end;
if not dm.qryRep.IsEmpty then
begin
TBlobField(dm.qryRep.FieldByName('REPVALUE')).SaveToFile(AppPath + 'TEMP.RTM');
FileName := AppPath + 'TEMP.RTM';
LoadFromFile;
end;
end;
with RBMaster do
begin
PrinterSetup.DocumentName:= _Name;
ShowPrintDialog:= True;
ShowCancelDialog:= True;
end;
end;
procedure TfrmBasic.GetDBGridSet;
var i, li_Col: integer;
ls_name, ls_width: String;
begin
for i:=0 to Self.ComponentCount-1 do
if Self.Components[i] is TDBGridEh then
begin
ls_name := Self.Name + '_' + Self.Components[i].Name;
with (Self.Components[i] as TDBGridEh) do
for li_Col :=0 to Columns.Count-1 do
begin
ls_width := ReadIni(ls_Name, IntToStr(li_Col), '');
if ls_Width <> '' then
Columns.Items[li_Col].Width := StrToInt(ls_width);
end;
end;
end;
procedure TfrmBasic.SaveDBGridSet;
var i, li_Col: integer;
ls_name: String;
begin
for i:=0 to Self.ComponentCount-1 do
if Self.Components[i] is TDBGridEh then
begin
ls_name := Self.Name + '_' + Self.Components[i].Name;
with (Self.Components[i] as TDBGridEh) do
for li_Col :=0 to Columns.Count-1 do
begin
WriteIni(ls_Name, IntToStr(li_Col), Columns.Items[li_Col].Width);
end;
end;
end;
procedure TfrmBasic.FormActivate(Sender: TObject);
begin
if _CurrentModule = '' then Exit;
//设置报表菜单
SetReportMenu(Self, _CurrentModule);
//设置窗口权限的主入口
if not SetWindowsPower(_CurrentModule, Self.actlBase) then
Application.Terminate
else
Self.SetButtonState(Self.UseDataSet);
//记录用户行为
RecordUserAction(SetSimpleEvent('进入窗口','窗口名称:'+ Self.Caption));end;
end.
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?