formcomrec.pas

来自「pasa人力资源考勤管理系统」· PAS 代码 · 共 674 行 · 第 1/2 页

PAS
674
字号
//公司行事历
unit formcomrec;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, Buttons, ComCtrls, Mask, DBCtrls, Grids, DBGrids, ExtCtrls,
  Menus,adodb,db, ToolWin, ImgList;

type
  Tformcomrecorder = class(TForm)
    DBGrid1: TDBGrid;
    PopupMenu1: TPopupMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N4: TMenuItem;
    N3: TMenuItem;
    Panel2: TPanel;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    MonthCalendar1: TMonthCalendar;
    DBEdit1: TDBEdit;
    DBEdit2: TDBEdit;
    DBEdit3: TDBEdit;
    DBEdit4: TDBEdit;
    DBEdit5: TDBEdit;
    Splitter1: TSplitter;
    Label7: TLabel;
    DBEdit6: TDBEdit;
    ImageList1: TImageList;
    CheckBox1: TCheckBox;
    Adom: TADODataSet;
    Adod: TADODataSet;
    Dsm: TDataSource;
    Dsd: TDataSource;
    Adomcomcode: TStringField;
    Adodcomcode: TStringField;
    Adodcodename: TStringField;
    Adodcomdate: TStringField;
    Adodcomweek: TStringField;
    Adodmemo: TStringField;
    Adodoperator: TStringField;
    Adodcdate: TStringField;
    DBGrid2: TDBGrid;
    Splitter2: TSplitter;
    Panel3: TPanel;
    ScrollBox1: TScrollBox;
    Label8: TLabel;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Label12: TLabel;
    Shape1: TShape;
    ComboBox1: TComboBox;
    BitBtn7: TBitBtn;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label13: TLabel;
    Label4: TLabel;
    ToolBar1: TToolBar;
    ToolButton1: TToolButton;
    ToolButton5: TToolButton;
    tbndelmany: TToolButton;
    tbnsort: TToolButton;
    tbnfind: TToolButton;
    ToolButton7: TToolButton;
    ToolButton4: TToolButton;
    DBNavigator2: TDBNavigator;
    MaskEdit1: TMaskEdit;
    MaskEdit2: TMaskEdit;
    DBRadioGroup1: TDBRadioGroup;
    RadioGroup1: TRadioGroup;
    Label14: TLabel;
    Edit4: TEdit;
    Label15: TLabel;
    Label16: TLabel;
    MaskEdit3: TMaskEdit;
    MaskEdit4: TMaskEdit;
    Button1: TButton;
    DBCheckBox1: TDBCheckBox;
    DBCheckBox2: TDBCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    ADOQuery1: TADOQuery;
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure btnnewClick(Sender: TObject);
    procedure btnsaveClick(Sender: TObject);
    procedure MonthCalendar1Click(Sender: TObject);
    procedure btneditClick(Sender: TObject);
    procedure btndeleteClick(Sender: TObject);
    procedure btnexitClick(Sender: TObject);
    procedure FormActivate(Sender: TObject);
    procedure FormKeyPress(Sender: TObject; var Key: Char);
    procedure DBNavigator1BeforeAction(Sender: TObject;
      Button: TNavigateBtn);
    procedure BitBtn7Click(Sender: TObject);
    procedure DBGrid1TitleClick(Column: TColumn);
    procedure N1Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N3Click(Sender: TObject);
    procedure Edit1Exit(Sender: TObject);
    procedure ToolButton4Click(Sender: TObject);
    procedure tbndelmanyClick(Sender: TObject);
    procedure tbnfindClick(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure ToolButton5Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure tbnsortClick(Sender: TObject);
    procedure DBEdit1Exit(Sender: TObject);
    procedure DBEdit1Change(Sender: TObject);
    procedure DBEdit2Exit(Sender: TObject);
    procedure FormKeyUp(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    procedure Button1Click(Sender: TObject);
    procedure ToolButton1Click(Sender: TObject);
    procedure AdomBeforeDelete(DataSet: TDataSet);
  private
    { Private declarations }
    manyfield:boolean;
    findex:array[1..5] of integer;
    fsort:array[1..5] of string;
    fcount:0..5;
    f:string;
  public
    { Public declarations }
  end;

var
  formcomrecorder: Tformcomrecorder;

implementation

uses datamol,main,publicfunction;

{$R *.DFM}

procedure Tformcomrecorder.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
   setdbgridwidth(dbgrid1,'p'+'comrec');
   datamod.adocomrecorder.close;
   adod.close;
   adom.close;
   action:=cafree;
   formcomrecorder:=nil;
end;

procedure Tformcomrecorder.btnnewClick(Sender: TObject);
begin
   if datamod.ADOcomrecorder.CanModify then
    begin
     datamod.ADOcomrecorder.Append;
     dbedit5.Text :=pubworkname;
    end;
end;

procedure Tformcomrecorder.btnsaveClick(Sender: TObject);
begin
  if datamod.ADOcomrecorder.Modified then
   datamod.ADOcomrecorder.Post;
end;

procedure Tformcomrecorder.MonthCalendar1Click(Sender: TObject);
begin
  if not checkbox1.Checked then
     begin
      if (datamod.ADOcomrecorder.State =dsinsert) or (datamod.ADOcomrecorder.State =dsedit) then
        begin
          datamod.ADOcomrecorder.FieldByName('comdate').asstring:=datetostr(monthcalendar1.date);
          if dayofweek(monthcalendar1.date)>1 then      //把电脑里的星期换成日常中的,一 2,二 3...六 7,天 1
           case (dayofweek(monthcalendar1.date)-1) of
            1:datamod.ADOcomrecorder.FieldByName('comweek').asstring:='一';
            2:datamod.ADOcomrecorder.FieldByName('comweek').asstring:='二';
            3:datamod.ADOcomrecorder.FieldByName('comweek').asstring:='三';
            4:datamod.ADOcomrecorder.FieldByName('comweek').asstring:='四';
            5:datamod.ADOcomrecorder.FieldByName('comweek').asstring:='五';
            6:datamod.ADOcomrecorder.FieldByName('comweek').asstring:='六';
           end
         else
           datamod.ADOcomrecorder.FieldByName('comweek').asstring:='日';
        end;
      end
    else begin
     if isdate(MaskEdit1.Text) then
       MaskEdit2.Text :=datetostr(monthcalendar1.Date)
     else
       MaskEdit1.Text :=datetostr(monthcalendar1.Date);
  end;
end;

procedure Tformcomrecorder.btneditClick(Sender: TObject);
begin
   datamod.ADOcomrecorder.Edit;
end;

procedure Tformcomrecorder.btndeleteClick(Sender: TObject);
var  i:integer;
    bookmarklist:Tbookmarklist;
    bookmark:Tbookmarkstr;
begin
   if application.messagebox('您确定要删除这些资料吗?','电脑提示',mb_okcancel)<>idok then
     exit;
   if dbgrid1.SelectedRows.Count >0 then   //多笔记录删除
    begin
     bookmark:=datamod.adocomrecorder.bookmark;
     try
       bookmarklist:=dbgrid1.SelectedRows;
       for i:=0 to bookmarklist.Count-1 do
       begin
        datamod.ADOcomrecorder.bookmark:=bookmarklist[i];
        datamod.ADOcomrecorder.DeleteRecords;
       end;
     finally
      datamod.ADOcomrecorder.bookmark:=Bookmark;
     end
    end
   else
     datamod.ADOcomrecorder.Delete;    //单笔删除
   datamod.ADOcomrecorder.Refresh;
end;

procedure Tformcomrecorder.btnexitClick(Sender: TObject);
begin
  close;
end;

procedure Tformcomrecorder.FormActivate(Sender: TObject);
begin
  getdbgridwidth(dbgrid1,'p'+'comrec');
  datamod.ADOcomrecorder.close;
  datamod.ADOcomrecorder.CursorType :=ctKeyset;
  datamod.ADOcomrecorder.LockType :=ltpessimistic;
  datamod.ADOcomrecorder.Open;
  monthcalendar1.Date :=date;
end;

procedure Tformcomrecorder.FormKeyPress(Sender: TObject; var Key: Char);
begin
   if key=#13 then
     begin
       key:=#0;
       selectnext(activecontrol,true,true);
     end;
end;

procedure Tformcomrecorder.DBNavigator1BeforeAction(Sender: TObject;
  Button: TNavigateBtn);
begin
  if button=nbinsert then
   dbedit5.text:=pubworkname;
end;

procedure Tformcomrecorder.BitBtn7Click(Sender: TObject);
var i,j:integer;
    b:boolean;
    d:Tdate;
    thingcode,codename,mem:string;
begin
  if (datamod.ADOcomrecorder.state=dsinsert) or (datamod.ADOcomrecorder.state=dsedit) then
     if application.messagebox('当前记录处在编辑状态,选择OK将存盘,否则将取消该记录','电脑提示',mb_okcancel)=IDOK then
       datamod.ADOcomrecorder.post
     else
       datamod.ADOcomrecorder.Cancel;
  thingcode:=edit1.text;
  codename:=edit2.text;
  mem:=edit3.text;
  d:=strtodatetime(MaskEdit1.text);
  if (length(trim(thingcode))=0) or (length(trim(codename))=0) then
   begin
    Application.Messagebox('对不起,行事历编码和名称不能为空,否则不能产生您要的数据!','Warning',mb_ok+mb_iconwarning);
    exit;
   end;
  if formatdatetime('yyyy'+DateSeparator+'mm'+DateSeparator+'dd',strtodatetime(MaskEdit1.text))>formatdatetime('yyyy'+DateSeparator+'mm'+DateSeparator+'dd',strtodatetime(MaskEdit2.text)) then
   begin
    Application.messagebox('前面的日期不能大于后面的日期','Warning',mb_ok+mb_iconwarning);
    exit;
   end;
  b:=false;
  for i:=1 to 7 do
    if combobox1.Text =combobox1.Items[i-1] then
     begin
      b:=true;
      j:=i;
      if j<>dayofweek(d) then
       begin
        if j<dayofweek(d) then d:=d+7-dayofweek(d)+j;
        if j>dayofweek(d) then d:=d+j-dayofweek(d);
       end;
     end;
  if not b then
   begin
    Application.messagebox('对不起,星期不能为空!','Warning',mb_ok+mb_iconwarning);
    exit;
   end;
   // if application.messagebox('您确定要产生 '+formatdatetime('yyyy/mm/dd',datetimepicker1.date)+' 和 '+formatdatetime('yyyy/mm/dd',datetimepicker2.date)+' 之间所有星期'+combobox1.text+'不用上班的记录吗?','电脑提示',mb_yesnocancel)=idyes then
  if application.MessageBox('您确定要产生这些数据吗?','电脑提示',mb_yesnocancel)=idyes then
   begin
     while formatdatetime('yyyy'+DateSeparator+'mm'+DateSeparator+'dd',d)<=formatdatetime('yyyy'+DateSeparator+'mm'+DateSeparator+'dd',strtodatetime(MaskEdit2.text)) do
     begin
       datamod.ADOcomrecorder.Append;
       datamod.adocomrecorder.fieldbyname('comcode').asstring:=thingcode;  //行事历编码
       datamod.adocomrecorder.fieldbyname('codename').asstring:=codename;   //行事历名称
       datamod.adocomrecorder.fieldbyname('comdate').asstring:=formatdatetime('yyyy'+DateSeparator+'mm'+DateSeparator+'dd',d);//日期
       datamod.adocomrecorder.fieldbyname('operator').asstring:=pubworkname;//建档人
       datamod.adocomrecorder.fieldbyname('youxin').asboolean:=checkbox2.Checked;
       datamod.adocomrecorder.fieldbyname('wuxin').asboolean:=checkbox3.Checked;
       datamod.adocomrecorder.fieldbyname('memo').asstring:=mem;        //备注
       datamod.adocomrecorder.fieldbyname('comweek').asstring:=combobox1.text;
       datamod.adocomrecorder.fieldbyname('otkind').asstring:=radiogroup1.Items[radiogroup1.itemindex];
       datamod.ADOcomrecorder.post;
       d:=d+7;
     end;
     datamod.ADOcomrecorder.Close;
     datamod.ADOcomrecorder.Open;
     dbgrid1.Refresh;
     edit1.Text :='';
     edit2.Text :='';
     edit3.Text :='';
   end;
end;

procedure Tformcomrecorder.DBGrid1TitleClick(Column: TColumn);
begin
   if f='DESC' then
     f:='ASC'
   else
     f:='DESC';
   datamod.ADOcomrecorder.Sort :=column.FieldName+' '+f;
end;

procedure Tformcomrecorder.N1Click(Sender: TObject);

⌨️ 快捷键说明

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