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 + -
显示快捷键?