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

📄 frmdeptmngimpl.pas

📁 多媒体播放后台管理系统适用于各种字幕播放软件的后台管理,包括播放内容、时间、等级等的管理。
💻 PAS
字号:
unit FrmDeptMngImpl;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, DBGridEh, ComCtrls, ToolWin, DB, ADODB, DBClient,
  ActnList, ImgList, Provider, StdCtrls, Mask, DBCtrls, FrmMainImpl, Temp,
  ExtCtrls, SUIForm;

type
  TFrmDeptMng = class(TForm)
    sfrMain: TsuiForm;
    imgSt: TImage;
    imlAction: TImageList;
    dtsMain: TDataSource;
    cdsMain: TClientDataSet;
    cdsMainUNIT_ID: TWideStringField;
    cdsMainNAME: TWideStringField;
    cdsMainTEL: TWideStringField;
    cdsMainFAX_NO: TWideStringField;
    cdsMainREMARK: TWideStringField;
    pvdMain: TDataSetProvider;
    qryMain: TADOQuery;
    conMain: TADOConnection;
    lblUserID: TLabel;
    lblName: TLabel;
    lblTel: TLabel;
    lblFaxNo: TLabel;
    lblRemark: TLabel;
    clbMain: TCoolBar;
    tlbStandard: TToolBar;
    btnNew: TToolButton;
    btnSep1: TToolButton;
    btnSave: TToolButton;
    btnCancel: TToolButton;
    btnSep2: TToolButton;
    btnFirst: TToolButton;
    btnPrior: TToolButton;
    btnNext: TToolButton;
    btnLast: TToolButton;
    btnSep4: TToolButton;
    btnDelete: TToolButton;
    btnSep6: TToolButton;
    btnClose: TToolButton;
    grdMain: TDBGridEh;
    edtUnitID: TDBEdit;
    edtName: TDBEdit;
    edtTel: TDBEdit;
    edtFaxNo: TDBEdit;
    edtRemark: TDBMemo;
    atlAtions: TActionList;
    actNew: TAction;
    actSave: TAction;
    actCancel: TAction;
    actFirst: TAction;
    actPrior: TAction;
    actNext: TAction;
    actLast: TAction;
    actDelete: TAction;
    actClose: TAction;
    procedure FormCreate(Sender: TObject);
    procedure actFirstExecute(Sender: TObject);
    procedure actPriorExecute(Sender: TObject);
    procedure actNextExecute(Sender: TObject);
    procedure actLastExecute(Sender: TObject);
    procedure actNewExecute(Sender: TObject);
    procedure actSaveExecute(Sender: TObject);
    procedure actCancelExecute(Sender: TObject);
    procedure actDeleteExecute(Sender: TObject);
    procedure actCloseExecute(Sender: TObject);
    procedure cdsMainBeforeDelete(DataSet: TDataSet);
    procedure cdsMainAfterOpen(DataSet: TDataSet);
    procedure cdsMainAfterClose(DataSet: TDataSet);
    procedure cdsMainAfterInsert(DataSet: TDataSet);
    procedure cdsMainAfterScroll(DataSet: TDataSet);
    procedure cdsMainAfterDelete(DataSet: TDataSet);
    procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
    procedure FormShow(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure cdsMainBeforePost(DataSet: TDataSet);
    procedure FormDestroy(Sender: TObject);
    procedure dtsMainStateChange(Sender: TObject);
  private
    { Private declarations }
  protected
    FStatus: Integer;
    FModified: Boolean;
    procedure ShowActionStatus; virtual;
    function GetDeleteConfirmMessage(): string; virtual;

    function GetDocCanModify(): Boolean; virtual;
    function GetDocCanDelete(): Boolean; virtual;
    function GetDocCanCancel(): Boolean; virtual;
  public
    property DocCanModify: Boolean read GetDocCanModify;
    property DocCanDelete: Boolean read GetDocCanDelete;
    property DocCanCancel: Boolean read GetDocCanCancel;
  end;

var
  FrmDeptMng: TFrmDeptMng;

implementation

{$R *.dfm}

procedure TFrmDeptMng.FormCreate(Sender: TObject);
begin
  FStatus := STATUS_INACTIVE;
end;

procedure TFrmDeptMng.ShowActionStatus;
begin
  if (FStatus = STATUS_BROWSE) and ((cdsMain.State = dsInsert) or (cdsMain.State = dsEdit)) then
    FStatus := STATUS_EDIT;

  case FStatus of
    STATUS_INACTIVE:
    begin
      actNew.Enabled := False;
      actSave.Enabled := False;
      actCancel.Enabled := False;
      actFirst.Enabled := False;
      actPrior.Enabled := False;
      actNext.Enabled := False;
      actLast.Enabled := False;
      actDelete.Enabled := False;
    end;

    STATUS_BROWSE:
    begin
      actNew.Enabled := True;
      actSave.Enabled := False;
      actCancel.Enabled := False;
      actFirst.Enabled := dtsMain.DataSet.RecNo > 1;
      actPrior.Enabled := actFirst.Enabled;
      actNext.Enabled := (dtsMain.DataSet.RecordCount > 0)
        and (dtsMain.DataSet.RecNo < dtsMain.DataSet.RecordCount);
      actLast.Enabled := actNext.Enabled;
      actDelete.Enabled := DocCanDelete;
      (TClientDataSet(dtsMain.DataSet)).ReadOnly := False or (not DocCanModify) or
        (dtsMain.DataSet.RecordCount = 0);
    end;

    STATUS_EDIT:
    begin
      actNew.Enabled := False;
      actSave.Enabled := True;
      actCancel.Enabled := True;
      actFirst.Enabled := False;
      actPrior.Enabled := False;
      actNext.Enabled := False;
      actLast.Enabled := False;
      actDelete.Enabled := dtsMain.DataSet.RecNo > 0;
    end;
  end;
end;

procedure TFrmDeptMng.actFirstExecute(Sender: TObject);
begin
  cdsMain.First();
  ShowActionStatus();
end;

procedure TFrmDeptMng.actPriorExecute(Sender: TObject);
begin
  cdsMain.Prior();
  ShowActionStatus();
end;

procedure TFrmDeptMng.actNextExecute(Sender: TObject);
begin
  cdsMain.Next();
  ShowActionStatus();
end;

procedure TFrmDeptMng.actLastExecute(Sender: TObject);
begin
  cdsMain.Last();
  ShowActionStatus();
end;

procedure TFrmDeptMng.actNewExecute(Sender: TObject);
begin
  (TClientDataSet(dtsMain.DataSet)).ReadOnly := False;
  dtsMain.DataSet.Append;
  FStatus := STATUS_EDIT;
  FModified := True;
  if (Visible) then
    ShowActionStatus();
end;

procedure TFrmDeptMng.actSaveExecute(Sender: TObject);
begin
  if (cdsMain.State = dsEdit) or (cdsMain.State = dsInsert) then
    cdsMain.Post();

  try
    Screen.Cursor := crHourGlass;

    if (cdsMain.ApplyUpdates(0) > 0) then
    begin
      ShowMessage('更新数据失败。');
      Abort;
    end;

    cdsMain.MergeChangeLog;
    cdsMain.CancelUpdates;

    FStatus := STATUS_BROWSE;
    FModified := False;
    ShowActionStatus();

    Screen.Cursor := crDefault;
  except
    on E: Exception do
    begin
      Screen.Cursor := crDefault;
      ShowMessage(E.Message);
    end;
  end;
end;

procedure TFrmDeptMng.actCancelExecute(Sender: TObject);
begin
  (TClientDataSet(dtsMain.DataSet)).CancelUpdates();
  FStatus := STATUS_BROWSE;
  FModified := False;
  ShowActionStatus();
end;

procedure TFrmDeptMng.actDeleteExecute(Sender: TObject);
var
  boolReadOnly: Boolean;
begin
  dtsMain.DataSet.Delete;
  (TClientDataSet(dtsMain.DataSet)).ApplyUpdates(0);
  FStatus := STATUS_BROWSE;
  FModified := False;
  ShowActionStatus();
end;

procedure TFrmDeptMng.actCloseExecute(Sender: TObject);
begin
  Close();
end;

procedure TFrmDeptMng.cdsMainBeforeDelete(DataSet: TDataSet);
begin
  if (Application.MessageBox(PChar(GetDeleteConfirmMessage()),
    PChar(Caption), MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2) = ID_NO) then
    Abort;
end;

function TFrmDeptMng.GetDeleteConfirmMessage: string;
begin
  result := '您确定要删除当前记录吗?';
end;

procedure TFrmDeptMng.cdsMainAfterOpen(DataSet: TDataSet);
begin
  FStatus := STATUS_BROWSE;
  FModified := False;
  dtsMain.AutoEdit := True;
  ShowActionStatus();
end;

procedure TFrmDeptMng.cdsMainAfterClose(DataSet: TDataSet);
begin
  FStatus := STATUS_INACTIVE;
  FModified := False;
  ShowActionStatus();
end;

procedure TFrmDeptMng.cdsMainAfterInsert(DataSet: TDataSet);
var
  strTemp: string;
begin
  if (GetNextNo(qryMain, 'T_SYS_UNIT', 'UNIT_ID', strTemp, 8)) then
    DataSet.FieldByName('UNIT_ID').AsString := strTemp
  else begin
    ShowMessage('取部门ID时出错!');
    Abort;
  end;

  FStatus := STATUS_EDIT;
  FModified := True;
  ShowActionStatus();
end;

procedure TFrmDeptMng.cdsMainAfterScroll(DataSet: TDataSet);
begin
  ShowActionStatus();
end;

procedure TFrmDeptMng.cdsMainAfterDelete(DataSet: TDataSet);
begin
  FStatus := STATUS_BROWSE;
  FModified := False;
  ShowActionStatus();
end;

procedure TFrmDeptMng.FormCloseQuery(Sender: TObject;
  var CanClose: Boolean);
begin
  if (FModified) then
  begin
    case (Application.MessageBox(PChar('是否保存对当前记录的修改?'),
      PChar(Caption), MB_YESNOCANCEL + MB_ICONQUESTION + MB_DEFBUTTON1)) of
      ID_YES:
      begin
        actSave.Execute();
        CanClose := True;
      end;
      ID_NO:
      begin
        CanClose := True
      end;
      else
      begin
        CanClose := False
      end;
    end;
  end
  else begin
    CanClose := True;
  end;
end;

procedure TFrmDeptMng.FormShow(Sender: TObject);
begin
  conMain.Open;
  cdsMain.Open;
  ShowActionStatus();
end;

procedure TFrmDeptMng.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  try
    conMain.Close;
  except
  end;

  Action := caFree;
end;

procedure TFrmDeptMng.cdsMainBeforePost(DataSet: TDataSet);
var
  objField: TField;
begin
  objField := DataSet.FieldByName('NAME');
  objField.AsString := Trim(objField.AsString);
  if (objField.AsString = '') then
  begin
    ShowMessage('请输入“名称”!');
    edtName.SetFocus;
    Abort;
  end;
end;

procedure TFrmDeptMng.FormDestroy(Sender: TObject);
begin
  if (self = FrmDeptMng) then
    FrmDeptMng := Nil;
end;

function TFrmDeptMng.GetDocCanCancel: Boolean;
begin
  Result := True;
  
  if ((dtsMain.DataSet = nil) or (dtsMain.DataSet.State = dsInactive) or
    (dtsMain.DataSet.RecordCount = 0)) then
    Result := False;
end;

function TFrmDeptMng.GetDocCanDelete: Boolean;
begin
  Result := True;

  if ((dtsMain.DataSet = nil) or (dtsMain.DataSet.State = dsInactive) or
    (dtsMain.DataSet.RecordCount = 0)) then
    Result := False;
end;

function TFrmDeptMng.GetDocCanModify: Boolean;
begin
  Result := True;

  if ((dtsMain.DataSet = nil) or (dtsMain.DataSet.State = dsInactive) or
    (dtsMain.DataSet.RecordCount = 0)) then
    Result := False;
end;

procedure TFrmDeptMng.dtsMainStateChange(Sender: TObject);
begin
  if ((dtsMain.DataSet.State = dsEdit) and (FStatus <> STATUS_EDIT)) then
  begin
    FStatus := STATUS_EDIT;
    FModified := True;
    ShowActionStatus;
  end;
end;

end.

⌨️ 快捷键说明

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