basic.pas

来自「delphi框架可以学习, 写的很好的」· PAS 代码 · 共 758 行 · 第 1/2 页

PAS
758
字号
{*******************************************************}
{                                                       }
{       牛仔布信息系统                                  }
{                                                       }
{       版权所有 (C) 2006 前进牛仔布有限公司            }
{                                                       }
{使用说明:所有工作窗口的父类                           }
{单元名称:Basic.pas                                    }
{建立信息:由 管理员 于 2006-10-8 4:35:38               }
{工程名称:JeansIM                                      }
{*******************************************************}

unit Basic;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, RzPanel, RzButton, ImgList, ExtCtrls, ActnList, DateUtils, Menus, DB,
  ppBands, ppCache, ppClass, ppProd, ppReport, ppRelatv, ppDB, ppDBPipe,
  ppComm, ppEndUsr, DBGrideh;
type
  //声明一个用户事件类型
  TMyEvent = procedure (Sender: TObject; var _EventNote, _State: String) of Object;

  TfrmBasic = class(TForm)
    RzToolbar1: TRzToolbar;
    imglToolsbar: TImageList;
    btnOpen: TRzToolButton;
    RzSpacer1: TRzSpacer;
    BtnNew: TRzToolButton;
    BtnSave: TRzToolButton;
    BtnUndo: TRzToolButton;
    BtnDelete: TRzToolButton;
    RzSpacer2: TRzSpacer;
    BtnCheck: TRzToolButton;
    BtnUnCheck: TRzToolButton;
    RzSpacer3: TRzSpacer;
    BtnPreview: TRzToolButton;
    BtnPrint: TRzToolButton;
    BtnDesigen: TRzToolButton;
    RzSpacer4: TRzSpacer;
    BtnHelp: TRzToolButton;
    BtnExit: TRzToolButton;
    RzSpacer5: TRzSpacer;
    Btn1: TRzToolButton;
    Btn2: TRzToolButton;
    Btn3: TRzToolButton;
    Btn4: TRzToolButton;
    Btn5: TRzToolButton;
    Btn6: TRzToolButton;
    Btn7: TRzToolButton;
    actlBase: TActionList;
    actClose: TAction;
    actOpen: TAction;
    actOther2: TAction;
    actOther3: TAction;
    actOther4: TAction;
    actOther5: TAction;
    actOther6: TAction;
    actOther7: TAction;
    actOther1: TAction;
    actNew: TAction;
    BtnOther: TRzToolButton;
    pmOther: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    actDelete: TAction;
    actCancel: TAction;
    actCheck: TAction;
    actUncheck: TAction;
    actPreview: TAction;
    actPrint: TAction;
    actDesign: TAction;
    actHelp: TAction;
    actSave: TAction;
    BtnSelReport: TRzToolButton;
    pmReport: TPopupMenu;
    actEditData: TAction;
    N1005: TMenuItem;
    miCalc: TMenuItem;
    dpTemplate: TppDBPipeline;
    RBMaster: TppReport;
    ppHeaderBand1: TppHeaderBand;
    ppDetailBand1: TppDetailBand;
    ppFooterBand1: TppFooterBand;
    RBBuild: TppDesigner;
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure FormActivate(Sender: TObject);

    procedure actOpenExecute(Sender: TObject);
    procedure actNewExecute(Sender: TObject);
    procedure actSaveExecute(Sender: TObject);
    procedure actCancelExecute(Sender: TObject);
    procedure actDeleteExecute(Sender: TObject);
    procedure actCheckExecute(Sender: TObject);
    procedure actUncheckExecute(Sender: TObject);
    procedure actPreviewExecute(Sender: TObject);
    procedure actPrintExecute(Sender: TObject);
    procedure actDesignExecute(Sender: TObject);
    procedure actHelpExecute(Sender: TObject);
    procedure actCloseExecute(Sender: TObject);

    procedure actOther1Execute(Sender: TObject);
    procedure actOther2Execute(Sender: TObject);
    procedure actOther3Execute(Sender: TObject);
    procedure actOther4Execute(Sender: TObject);
    procedure actOther5Execute(Sender: TObject);
    procedure actOther6Execute(Sender: TObject);
    procedure actOther7Execute(Sender: TObject);

    procedure ReportMenuClick(Sender: TObject);
    procedure miCalcClick(Sender: TObject);
    procedure RBMasterPrintDialogCreate(Sender: TObject);
    procedure RBMasterBeforePrint(Sender: TObject);
    procedure RBBuildClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    procedure doAction(Sender: TObject; _CurrentAction: String; doSomething: TMyEvent);

    function  IsModified: Boolean;
    function  CheckRepState: String; virtual;  //检查报表状态
    procedure LoadReport(_Name: String);

    procedure GetDBGridSet;   //读取当前窗口中所有的DBGrid设置
    procedure SaveDBGridSet;  //保存当前窗口中所有的DBGrid设置
  public
    { Public declarations}
    UseDataSet: TDataSet;
    ReportName: String;

    procedure CreateParams(var Params: TCreateParams); override;
    procedure SetButtonState(DataSet: TDataSet);
    procedure ButtonState(_IsActive, _IsEmpty, _IsModify, _IsCheck :Boolean); virtual;

    procedure doBeforeEdit(DataSet: TDataSet);
    procedure doBeforePrint(Sender: TObject); virtual;
    procedure doAfterPrint(Sender: TObject); virtual;

    procedure doMyOpen(Sender: TObject;   var _EventNote, _State: String); virtual;
    procedure doNewData(Sender: TObject;  var _EventNote, _State: String); virtual;
    procedure doSave(Sender: TObject;     var _EventNote, _State: String); virtual;
    procedure doCancel(Sender: TObject;   var _EventNote, _State: String); virtual;
    procedure doDelete(Sender: TObject;   var _EventNote, _State: String); virtual;
    procedure doCheck(Sender: TObject;    var _EventNote, _State: String); virtual;
    procedure doUnCheck(Sender: TObject;  var _EventNote, _State: String); virtual;
    procedure doPreview(Sender: TObject;  var _EventNote, _State: String); virtual;
    procedure doPrint(Sender: TObject;    var _EventNote, _State: String); virtual;
    procedure doDesign(Sender: TObject;   var _EventNote, _State: String); virtual;
    procedure doHelp(Sender: TObject;     var _EventNote, _State: String); virtual;

    procedure doForLog1(Sender: TObject;  var _EventNote, _State: String); virtual;
    procedure doForLog2(Sender: TObject;  var _EventNote, _State: String); virtual;
    procedure doForLog3(Sender: TObject;  var _EventNote, _State: String); virtual;
    procedure doForLog4(Sender: TObject;  var _EventNote, _State: String); virtual;
    procedure doForLog5(Sender: TObject;  var _EventNote, _State: String); virtual;
    procedure doForLog6(Sender: TObject;  var _EventNote, _State: String); virtual;
    procedure doForLog7(Sender: TObject;  var _EventNote, _State: String); virtual;
  end;

var
  frmBasic: TfrmBasic;

implementation

uses MyPublic, dm32, PrvDlg;

{$R *.dfm}
procedure TfrmBasic.CreateParams(var Params: TCreateParams);
begin
  inherited CreateParams(Params);
  Params.Style := (Params.Style xor WS_SYSMENU);
end;

procedure TfrmBasic.doAction(Sender: TObject; _CurrentAction: String; doSomething: TMyEvent);
var
  EventLog: TEventLog;
begin
  //让子类可以有机会修改这个描述
  if _CurrentAction <> '' then EventLog.Style := _CurrentAction
                          else EventLog.Style := '未知类型';

  //记录日志
  EventLog.STime    := Now();
  EventLog.Module   := _CurrentModule;
  EventLog.UseSQL   := '';
  EventLog.State    := EV_NULL;

  //子类执行自己的动作,必须传回一个成功与否的信息
  doSomething(Sender, EventLog.Note, EventLog.State);

  EventLog.ETime   := Now();
  if EventLog.Note <> '' then RecordUserAction(EventLog);
end;

procedure TfrmBasic.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  //关闭窗口事件
  if actSave.Enabled then
  if ShowMess('询问', '尚有数据未保存!需要保存吗?', MB_OKCANCEL) then
     actSaveExecute(nil);

  //保存DBGrid
  SaveDBGridSet;

  UseDataSet.Close;
  action := caFree;
end;

procedure TfrmBasic.FormCreate(Sender: TObject);
begin
  //这样设计太死板!需要修改
  if Pos('BASE', _Para1) = 0 then _CurrentModule := Self.Name
                             else _CurrentModule := Self.Name + _Para1;

  //初始化窗口
  actSave.Enabled   := False;
  actCancel.Enabled := False;
  actDelete.Enabled := False;

  actCheck.Enabled  := False;
  actUnCheck.Enabled:= False;

  Btn1.Visible := False;     Btn2.Visible := False;
  Btn3.Visible := False;     Btn4.Visible := False;
  Btn5.Visible := False;     Btn6.Visible := False;
  Btn7.Visible := False;
  RzSpacer5.Visible := False;

  //设置报表变量
  _PrintValue1 := '';
  _PrintValue2 := '';
  _PrintValue3 := '';
  _PrintValue4 := '';
  _PrintValue5 := '';
  _PrintValue6 := '';
  _PrintValue7 := '';
  _PrintValue8 := '';
  _PrintValue9 := '';
  _PrintValue10:= '';
  _PrintValue11:= '';
  _PrintValue12:= '';
  _PrintValue13:= '';

  //初始化DBGrid
  GetDBGridSet;
end;

procedure TfrmBasic.doMyOpen(Sender: TObject; var _EventNote, _State: String);
begin
 //打开数据
end;

procedure TfrmBasic.doForLog1(Sender: TObject; var _EventNote, _State: String);
begin
  //保留事件
end;

procedure TfrmBasic.doForLog2(Sender: TObject; var _EventNote, _State: String);
begin
  //保留事件
end;

procedure TfrmBasic.doForLog3(Sender: TObject; var _EventNote, _State: String);
begin
  //保留事件
end;

procedure TfrmBasic.doForLog4(Sender: TObject; var _EventNote, _State: String);
begin
  //保留事件
end;

procedure TfrmBasic.doForLog5(Sender: TObject; var _EventNote, _State: String);
begin
  //保留事件
end;

procedure TfrmBasic.doForLog6(Sender: TObject; var _EventNote, _State: String);
begin
  //保留事件
end;

procedure TfrmBasic.doForLog7(Sender: TObject; var _EventNote, _State: String);
begin
  //保留事件
end;

procedure TfrmBasic.doCancel(Sender: TObject; var _EventNote, _State: String);
begin
  //取消当前修改
end;

procedure TfrmBasic.doNewData(Sender: TObject; var _EventNote, _State: String);
begin
  //新增
end;

procedure TfrmBasic.doCheck(Sender: TObject; var _EventNote, _State: String);
begin
  //审核数据
end;

procedure TfrmBasic.doDelete(Sender: TObject; var _EventNote, _State: String);
begin
  //删除数据
end;

procedure TfrmBasic.doDesign(Sender: TObject; var _EventNote, _State: String);
var
  OK: Boolean;
  FCursor: Integer;
begin
  if ReportName = '' then exit;
  LoadReport(ReportName);

  with RBBuild do
  if Report = nil then Report:= RBMaster;

  FCursor:= Screen.Cursor;
  Screen.Cursor:= crSQLWait;

  RBMaster.PageLimit:= 0;

  RBBuild.Caption:= '报表编辑 - <[ '+ReportName+' ]>';
  RBMaster.Modified:= False;
  RBBuild.ShowModal;

  Screen.Cursor:= FCursor;
end;

procedure TfrmBasic.doHelp(Sender: TObject; var _EventNote, _State: String);
begin
  //帮助
end;

procedure TfrmBasic.doPreview(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:= 0;
    end;
    PrintReport(RBMaster, actDesign.Enabled, ReportName);

    doAfterPrint(BtnPreview);
  finally

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?