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

📄 frmusermngimpl.pas

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

interface

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

type
  TFrmUserMng = class(TForm)
    sfrMain: TsuiForm;
    imgSt: TImage;
    atlAtions: TActionList;
    actNew: TAction;
    actSave: TAction;
    actCancel: TAction;
    actFirst: TAction;
    actPrior: TAction;
    actNext: TAction;
    actLast: TAction;
    actDelete: TAction;
    actClose: TAction;
    imlAction: TImageList;
    dtsMain: TDataSource;
    cdsMain: TClientDataSet;
    cdsMainUSER_ID: TWideStringField;
    cdsMainUSER_NAME: TWideStringField;
    cdsMainUSER_PSWD: TWideStringField;
    cdsMainUNIT_ID: TWideStringField;
    pvdMain: TDataSetProvider;
    qryMain: TADOQuery;
    conMain: TADOConnection;
    qryPublic: TADOQuery;
    lblUserName: TLabel;
    lblUnitID: 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;
    edtUserName: TDBEdit;
    cmbUnitID: TDBComboBoxEh;
    cdsMainENSURE_PSWD: TWideStringField;
    lblUserPswd: TLabel;
    edtUserPswd: TDBEdit;
    lblEnsurePswd: TLabel;
    edtEnsurePswd: TDBEdit;
    grdMain: TDBGridEh;
    grpMain: TGroupBox;
    chkSA: TDBCheckBox;
    chkBCN: TDBCheckBox;
    chkMDN: TDBCheckBox;
    chkQRN: TDBCheckBox;
    cmdPublic: TADOCommand;
    cdsMainIF_ADMIN: TBooleanField;
    cdsMainIF_BCN: TBooleanField;
    cdsMainIF_MDN: TBooleanField;
    cdsMainIF_QRN: TBooleanField;
    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);
    procedure pvdMainBeforeUpdateRecord(Sender: TObject;
      SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
      UpdateKind: TUpdateKind; var Applied: Boolean);
  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
  FrmUserMng: TFrmUserMng;

implementation

{$R *.dfm}

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

procedure TFrmUserMng.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 TFrmUserMng.actFirstExecute(Sender: TObject);
begin
  cdsMain.First();
  ShowActionStatus();
end;

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

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

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

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

procedure TFrmUserMng.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 TFrmUserMng.actCancelExecute(Sender: TObject);
begin
  (TClientDataSet(dtsMain.DataSet)).CancelUpdates();
  FStatus := STATUS_BROWSE;
  FModified := False;
  ShowActionStatus();
end;

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

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

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

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

⌨️ 快捷键说明

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