⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 u_base.pas

📁 超信人力资源管理系统,一个用Delphi编写的人事管理系统
💻 PAS
📖 第 1 页 / 共 2 页
字号:

///
///===============基FORM=========//
//
unit U_base;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ExtCtrls, DBGRIDEH, StdCtrls, DB, ADODB, Buttons, ToolWin, ComCtrls,
  Wwdbcomb, wwdbedit, DBCtrls, wwdbdatetimepicker;

type
  TF_base = class(TForm)
    Q_main: TADOQuery;
    Q_detail: TADOQuery;
    DS_main: TDataSource;
    DS_detail: TDataSource;
    Panel1: TPanel;
    Btn_PRE: TSpeedButton;
    Btn_next: TSpeedButton;
    Btn_Last: TSpeedButton;
    Btn_new: TSpeedButton;
    Btn_Edit: TSpeedButton;
    BTN_First: TSpeedButton;
    Btn_Save: TSpeedButton;
    Btn_Cancel: TSpeedButton;
    Btn_Delete: TSpeedButton;
    Btn_Find: TSpeedButton;
    Btn_Print: TSpeedButton;
    BitBtn1: TBitBtn;
    procedure FormCreate(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormKeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure FormActivate(Sender: TObject);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure BTN_FirstClick(Sender: TObject);
    procedure Btn_PREClick(Sender: TObject);
    procedure Btn_nextClick(Sender: TObject);
    procedure Btn_LastClick(Sender: TObject);
    procedure Btn_newClick(Sender: TObject);
    procedure Btn_EditClick(Sender: TObject);
    procedure Btn_SaveClick(Sender: TObject);
    procedure Btn_CancelClick(Sender: TObject);
    procedure Btn_DeleteClick(Sender: TObject);
    procedure Btn_FindClick(Sender: TObject);
    procedure Btn_PrintClick(Sender: TObject);
    procedure Q_detailAfterScroll(DataSet: TDataSet);
    procedure Q_detailAfterInsert(DataSet: TDataSet);
    procedure Q_mainAfterInsert(DataSet: TDataSet);
    procedure Q_mainAfterScroll(DataSet: TDataSet);
    procedure DS_mainStateChange(Sender: TObject);
    procedure Q_mainBeforeInsert(DataSet: TDataSet);
    procedure Q_mainBeforeDelete(DataSet: TDataSet);
    procedure Q_mainAfterEdit(DataSet: TDataSet);
    procedure Q_mainAfterPost(DataSet: TDataSet);
    procedure Q_mainAfterDelete(DataSet: TDataSet);
    procedure Q_detailAfterDelete(DataSet: TDataSet);
    procedure Q_detailAfterEdit(DataSet: TDataSet);
    procedure Q_detailAfterPost(DataSet: TDataSet);
    procedure Q_mainBeforeEdit(DataSet: TDataSet);
    procedure Q_detailBeforeEdit(DataSet: TDataSet);
    procedure Q_detailBeforeDelete(DataSet: TDataSet);
    procedure Q_detailBeforeInsert(DataSet: TDataSet);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure BitBtn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    Form_SID: string; //窗体的SID值
    CLASS_MAIN_TABLE: string; //类中主表
    CLASS_DETAIL_TABLE: string; //类中从表
    CLASS_KEY_FIELD: string; //类中关键字
    CLASS_ONE_FLAG: BOOLEAN; //类中的是否单表操作
   // CLASS_OLD_CON: string;   //类的老连接

    STATE_FLAG: BOOLEAN; //主表是否在编辑状态
    //类中记录权限
    IS_INSERT, IS_EDIT, IS_DELETE, IS_FIND, IS_PRINT, IS_View, IS_EDITPRINT, IS_Other, IS_ADUIT: BOOLEAN;
    DESIGN_FLAG: BOOLEAN; //是否处于设计状态
    { Public declarations }
    procedure MY_LabelClick(Sender: TObject);
    procedure Set_billcode;
    procedure SET_BUTTON;
    procedure set_edit_enabled;
  end;

   //其中TMyWinControl类中用来是把TWinControl中的OnKeyPress 给Published!  COOL!!!
  TMyWinControl = class(TWinControl)
  public
    property OnKeyPress;
  end;



var
  F_base: TF_base;

implementation

uses U_data, U_main, U_Select, Report_Module, U_Form_Report;

{$R *.dfm}

//Initialization
//RegisterClass(TF_FORM_REG);



procedure TF_base.set_edit_enabled;
var
  I: integer;
begin
//================================================如果数据集在编辑状态
  if (DS_MAIN.DataSet.State in [DSEDIT, DSINSERT]) then
  begin
    for i := 0 to COMPONENTCOUNT - 1 do
    begin
      if COMPONENTS[i].Tag = 1 then CONTINUE;
      //对于普通的
      if (COMPONENTS[i] is TDBEDIT) then
        tDBEDIT(COMPONENTS[i]).READONLY := False
      else
        if (uppercase(COMPONENTS[i].classNAME) = 'TDBCOMBOBOX') then
          tDBCOMBOBOX(COMPONENTS[i]).READONLY := FALSE
        else
          if (uppercase(COMPONENTS[i].classNAME) = 'TDBMEMO') then
            TDBMEMO(COMPONENTS[i]).READONLY := FALSE;

     //对于WW之类的
      if (COMPONENTS[i] is TWWDBEDIT) then
        twwDBEDIT(COMPONENTS[i]).READONLY := False
      else
        if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBCOMBOBOX') then
          tWWDBCOMBOBOX(COMPONENTS[i]).READONLY := FALSE
        else
          if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBDateTimePicker') then
            TwwDBDateTimePicker(COMPONENTS[i]).Enabled := true;

    end;
  end
  //==========================================
  else //===============================================如果数据集不在编辑状态
    for i := 0 to componentcount - 1 do
    begin
      if COMPONENTS[i].Tag = 1 then CONTINUE;
      //对于普通的
      if (uppercase(COMPONENTS[i].classNAME) = 'TDBEDIT') then
        tDBEDIT(COMPONENTS[i]).READONLY := TRUE
      else
        if (uppercase(COMPONENTS[i].classNAME) = 'TDBCOMBOBOX') then
          tDBCOMBOBOX(COMPONENTS[i]).READONLY := TRUE
        else
          if (uppercase(COMPONENTS[i].classNAME) = 'TDBMEMO') then
            TDBMEMO(COMPONENTS[i]).ReadOnly := True;
     //对于ww之类的
      if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBEDIT') then
        tWWDBEDIT(COMPONENTS[i]).READONLY := TRUE
      else
        if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBCOMBOBOX') then
          tWWDBCOMBOBOX(COMPONENTS[i]).READONLY := TRUE
        else
          if (uppercase(COMPONENTS[i].classNAME) = 'TWWDBDateTimePicker') then
            TwwDBDateTimePicker(COMPONENTS[i]).Enabled := False;

    end;
   //=============================================
end;

procedure TF_base.SET_BUTTON;
begin
  BTN_FIRST.Enabled := (not DS_MAIN.DataSet.Bof) and (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]));
  BTN_PRE.Enabled := (not DS_MAIN.DataSet.Bof) and (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]));
  BTN_NEXT.Enabled := (not DS_MAIN.DataSet.Eof) and (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]));
  BTN_LAST.Enabled := (not DS_MAIN.DataSet.Eof) and (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]));
  BTN_NEW.Enabled := not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
  BTN_EDIT.Enabled := not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
  BTN_SAVE.Enabled := (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
  BTN_CANCEL.Enabled := (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
  BTN_FIND.Enabled := not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT]);
  BTN_DELETE.Enabled := (not (DS_MAIN.DataSet.STATE in [DSEDIT, DSINSERT])) and (not (DS_MAIN.DataSet.BOF and DS_MAIN.DataSet.EOF));
  BTN_Print.Enabled := (not (ds_main.DataSet.State in [Dsedit, Dsinsert])) and (not (DS_MAIN.DataSet.BOF and DS_MAIN.DataSet.EOF));
end;

procedure TF_base.SET_BILLCODE;
begin
//=================================
end;


procedure TF_base.FormKeyDown(Sender: TObject; var Key: Word;
  Shift: TShiftState);
begin
  //=-========
  if key = 115 then
    showmessage('112');

end;

procedure TF_base.MY_LabelClick(Sender: TObject);
begin
  if not DESIGN_FLAG then EXIT;
  if LOGIN_CODE <> 'SYSTEM' then EXIT;
 // F_LABEL_SET.EDIT1.TEXT := TLABEL(SENDER).CAPTION;
  //F_LABEL_SET.SHOWMODAL;
  //TLABEL(SENDER).CAPTION := F_LABEL_SET.EDIT1.TEXT;
 // SQL_S := 'DELETE T_LANGUAGE_LABEL WHERE FORM_NAME=''' + NAME + ''' AND LABEL_NAME=''' + TLABEL(SENDER).NAME + '''';
  //SQL_EXEC(SQL_S);
 // SQL_S := 'INSERT T_LANGUAGE_LABEL (FORM_NAME,LABEL_NAME,_CHINESE)VALUES(''' + NAME + ''',''' + TLABEL(SENDER).NAME + ''',''' + TLABEL(SENDER).CAPTION + ''')';
 // SQL_EXEC(SQL_S);
end;

procedure TF_base.FormCreate(Sender: TObject);
var I: INTEGER;
begin
  //COLOR := COLOR3; //窗体颜色
  FILE_NAME := NAME;
  STATE_FLAG := False; //主表的DATASET状态。。。
  self.Font.Size := 10;
  Self.ParentFont := true;
  for I := 0 to ComponentCount - 1 do //  设置DBGRID 颜色
  begin
    try
      if Components[I].ClassType = TDBGridEH then
      begin
        TDBGridEH(Components[I]).Flat := true;
          // TDBGridEH(Components[I]).FixedColor := COLOR4;
        //TDBGridEH(Components[I]).RowColorFlag := TRUE;
        //TDBGridEH(Components[I]).RowOneColor := COLOR1;
       // TDBGridEH(Components[I]).RowTWOColor := COLOR2;
      end;
    except
      CONTINUE;
    end;
  end;
end;

procedure TF_base.FormShow(Sender: TObject);
//var i: integer;
begin

//-----
//设置各组件的字体。。。
//-------------

  SQL_S := 'SELECT * FROM TB_Form WHERE FormName=''' + copy(classname, 2, 100) + '''';
  sql_open(sql_s);
//============================设置窗体的属性==================================
  width := DM.Q_TempA.fieldbyname('Width').AsInteger;
  Height := DM.Q_TempA.fieldbyname('Height').AsInteger;
  Top := DM.Q_TempA.fieldbyname('FormTop').AsInteger;
  Left := DM.Q_TempA.fieldbyname('FormLeft').AsInteger;
  Form_SID := DM.Q_TempA.Fieldbyname('SID').AsString;
//============================================================================


  //确定是否一个表
  CLASS_MAIN_TABLE := TRIM(DM.Q_tempA.FIELDBYNAME('MAIN_TABLE').ASSTRING); //加载主表
  CLASS_DETAIL_TABLE := TRIM(DM.Q_tempA.FIELDBYNAME('DETAIL_TABLE').ASSTRING); //加载从表
  CLASS_KEY_FIELD := TRIM(DM.Q_tempA.FIELDBYNAME('Key_Field').ASSTRING); //加载关键字
  CLASS_ONE_FLAG := TRIM(CLASS_DETAIL_TABLE) = ''; //断是否有从表

  SQL_S := 'INSERT INTO TB_SYS_LOG (UCODE,computer,Logintime,Dotime,Title,Havedo)VALUES(''' + LOGIN_CODE + ''',''' + computer_name + ''',Convert(varchar(20),Getdate(),20),Convert(varchar(20),Getdate(),20),''' + CAPTION + ''',''进入'')';
  Insert_log(SQL_S);

  SQL_S := 'SELECT * FROM TB_Acount_Detail WHERE CNID in (Select Sid from TB_Acount_Menu where Cnid in( Select Sid from TB_Acount where Ucode=''' + LOGIN_CODE
    + ''')) AND FORMNAME=''' + NAME + '''';
  SQL_OPEN(SQL_S);
  //showmessage(inttostr(Dm.Q_TempA.RecordCount));
  //----------------加载权限----------------------------------
  IS_INSERT := DM.Q_TEMPA.FIELDBYNAME('_INSERT').ASBOOLEAN;
  IS_EDIT := DM.Q_TEMPA.FIELDBYNAME('_EDIT').ASBOOLEAN;
  IS_DELETE := DM.Q_TEMPA.FIELDBYNAME('_DELETE').ASBOOLEAN;
  IS_FIND := DM.Q_TEMPA.FIELDBYNAME('_FIND').ASBOOLEAN;
  IS_PRINT := DM.Q_TEMPA.FIELDBYNAME('_PRINT').ASBOOLEAN;
  IS_VIEW := DM.Q_TEMPA.FIELDBYNAME('_VIEW').ASBOOLEAN;
  IS_EDITPRINT := DM.Q_TEMPA.FIELDBYNAME('_EDITPRINT').ASBOOLEAN;
  IS_ADUIT := DM.Q_TEMPA.FIELDBYNAME('_ADUIT').ASBOOLEAN;
  IS_OTHER := DM.Q_TEMPA.FIELDBYNAME('_OTHER').ASBOOLEAN; //加载可以编辑界面LABEL权限
 //-----------------------------------------------------------

  //设置窗体各个组件的属性------------------------
 { SQL_S := 'SELECT * FROM TB_Form_Comment WHERE FORMNAME=''' + NAME + '''';
  DM.Q_TEMPB.CLOSE;
  DM.Q_TEMPB.SQL.CLEAR;
  DM.Q_TEMPB.SQL.ADD(SQL_S);
  DM.Q_TEMPB.OPEN;
  for I := 0 to COMPONENTCOUNT - 1 do
    if UPPERCASE(COMPONENTS[I].CLASSNAME) = 'TLABEL' then
    begin
      TLABEL(COMPONENTS[I]).ONCLICK := MY_LabelClick;
      if DM.Q_TEMPB.Locate('CommentName', TLABEL(COMPONENTS[I]).NAME, [loCaseInsensitive]) then
      begin
        TLABEL(COMPONENTS[I]).CAPTION := DM.Q_TEMPB.FIELDBYNAME('Caption').ASSTRING;
      end;
    end;
  }

 //========================置DBEDIT等控件的。。是否能输入=======================
  set_edit_enabled;
//=============================================================================
end;


procedure TF_base.FormActivate(Sender: TObject);
begin

///======================数据交换///============================================
  MAIN_TABLE := CLASS_MAIN_TABLE; //将主表交付给全局主表
  DETAIL_TABLE := CLASS_DETAIL_TABLE; //将类从表交付给全局从表
  KEY_FIELD := CLASS_KEY_FIELD; //将类关键字交付给全局关键字
  //OLD_CON := CLASS_OLD_CON;                  //将类的连接交付给全局连接
  ONETable_FLAG := CLASS_ONE_FLAG; //  将是否单表操作交付给全局变最



  LAST_ACTIVE_FORM := NAME;
  LAST_ACTIVE_FORM_CAPTION := CAPTION;
///=============================================================================
  M_TABLE := Q_MAIN; //将主表交给全局变量度   M—table
  D_TABLE := Q_DETAIL; //将从表交付给全局变量   D_table


  SET_BUTTON; //设置BUTTON状态

  F_MAIN.Caption := '超信人力资源管理系统----' + CAPTION + ' 授权於:' + COMPANY_NAME;

  //================================设置权限====================================
  //MY_popedom.Is_Edit := IS_Edit;
 // MY_popedom.Is_Insert := IS_Insert;
 // MY_popedom.Is_Delete := IS_Delete;
 // MY_popedom.Is_Find := IS_Find;
 // MY_popedom.Is_Other := IS_Other;
 // MY_popedom.IS_View := IS_View;
 // MY_popedom.IS_Print := IS_Print;
 //MY_popedom.IS_EditPrint := IS_EditPrint;
 // MY_popedom.IS_Aduit := IS_Aduit;
 //============================================================================

end;

procedure TF_base.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
  if Q_Main.State in [dsedit, dsinsert] then
  begin
    case Application.MessageBox('数据没有存盘,是否存盘?', '', MB_YESNOCANCEL + MB_ICONASTERISK + MB_DEFBUTTON1 + MB_APPLMODAL) of
      ID_YES: BTN_SAVE.Click;
      ID_NO: BTN_CANCEL.Click;
      ID_cancel:
        begin
          CANCLOSE := FALSE;
          exit;
        end;
    end;
  end;
end;

procedure TF_base.FormClose(Sender: TObject; var Action: TCloseAction);
var
  I: INTEGER;
begin
  //关闭数据集

  Q_DETAIL.CLOSE;
  Q_MAIN.CLOSE;
  for I := Q_MAIN.FIELDCOUNT - 1 downto 0 do
    if Q_MAIN.FIELDS[I].TAG = 100 then
    begin
      Q_MAIN.Fields.Remove(Q_MAIN.FIELDS[I]);
    end;
  M_TABLE := nil;
  D_table := nil;

 //Sql_s:='Update TB_form set Width='+inttostr(self.Width)+',Height='+inttostr(self.Height)


 //退出时设置权限   释放权限
  Is_Edit := FALSE;
  Is_Insert := FALSE;
  Is_Delete := FALSE;
  Is_Find := FALSE;
  Is_Other := FALSE;
  IS_View := FALSE;
  IS_Print := FALSE;
  IS_EditPrint := FALSE;
  IS_Aduit := FALSE;
 //保存窗体上的控件各属性

 {For i:=0  to self.ComponentCount-1 do
 begin
 SQL_S:='Delete From TB_Form_Comment where CNID in (Select SID TB_Form where Formname='''+name+''')';
 SQL_Exec(Sql_s);
 //SQL_s:='Insert into TB_Form_Comment (Cnid,Formname,Comment_name,ClassType
 //TControl(self.Components[i].Name).
 end;  }





  SQL_S := 'INSERT INTO TB_SYS_LOG (UCODE,computer,logouttime,Dotime,Title,Havedo) VALUES(''' + LOGIN_CODE + ''',''' + computer_name + ''',Convert(varchar(20),Getdate(),20),Convert(varchar(20),Getdate(),20),''' + CAPTION + ''',''退出'')';
  INSERT_LOG(SQL_S);

  //===========================================保存窗体属性=====================
  SQL_S := 'Update TB_Form set width=' + inttostr(Width) + ',Height=' + inttostr(Height) + ',Formtop=' + inttostr(top) + ',FormLeft=' + inttostr(left)
    + ' where Formname=''' + name + '''';
  SQL_exec(sql_s);

  //============================================================================

  Action := cafree;

end;

procedure TF_base.BTN_FirstClick(Sender: TObject);
begin
  Q_MAIN.FIRST;
end;

procedure TF_base.Btn_PREClick(Sender: TObject);
begin
  Q_MAIN.Prior;
end;

⌨️ 快捷键说明

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