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

📄 userauthor.pas

📁 有需要的同仁载回去慢慢研究
💻 PAS
字号:
unit UserAuthor;

interface

uses Windows, SysUtils, Classes, Graphics, Forms, Controls, StdCtrls,
  Buttons, Mask, DBCtrls, Db, DBTables, ExtCtrls, Grids, DBGrids,Dialogs;

type
  TfrmAuthor = class(TForm)
    SrcList: TListBox;
    EditList: TListBox;
    SrcLabel: TLabel;
    DstLabel: TLabel;
    BtnSel: TSpeedButton;
    BtnSelAll: TSpeedButton;
    BtnUnSel: TSpeedButton;
    BtnUnselAll: TSpeedButton;
    Label2: TLabel;
    Label3: TLabel;
    dnUser: TDBNavigator;
    BtnAppend: TSpeedButton;
    BtnDelete: TSpeedButton;
    BtnSure: TSpeedButton;
    BtnCancel: TSpeedButton;
    BtnExit: TSpeedButton;
    edDm: TEdit;
    edXm: TEdit;
    cbSuper: TCheckBox;
    BtnEdit: TSpeedButton;
    DBGrid1: TDBGrid;
    btnpass: TSpeedButton;
    procedure BtnSelClick(Sender: TObject);
    procedure BtnUnSelClick(Sender: TObject);
    procedure BtnSelAllClick(Sender: TObject);
    procedure BtnUnselAllClick(Sender: TObject);
    procedure BtnSureClick(Sender: TObject);
    procedure BtnDeleteClick(Sender: TObject);
    procedure BtnExitClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure BtnCancelClick(Sender: TObject);
    procedure BtnAppendClick(Sender: TObject);
    procedure BtnEditClick(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure cbSuperClick(Sender: TObject);
    procedure btnpassClick(Sender: TObject);
  private
    gncount:integer;
    procedure EditToTable;
    procedure FillList(List: TListBox);
    procedure GetQx(QxString:String);
    function SetQx():string;
  public
    MyStatus:String;
    procedure TableToEdit;
    procedure ShowMyButton;
  end;

var
  frmAuthor: TfrmAuthor;

implementation

uses  mycommon, DGSDM;


{$R *.DFM}

procedure TfrmAuthor.EditToTable;
begin
  with DM_GSGL do
  begin
    if MyStatus='add' then
      QryUser.Fieldbyname('密码').AsString:=Encrypt(edDm.Text);
    QryUser.Fieldbyname('用户工号').AsString:=edDm.Text;
    QryUser.Fieldbyname('姓名').AsString:=edXm.Text;
    QryUser.Fieldbyname('权限').AsString:=SetQx;
    QryUser.Fieldbyname('系统管理员').AsBoolean:=cbSuper.Checked;
  end;
end;

procedure TfrmAuthor.TableToEdit;
var
  qxstring:string;
begin
  with DM_GSGL do
  begin
    edDm.Text:=QryUser.Fieldbyname('用户工号').AsString;
    edXm.Text:=QryUser.Fieldbyname('姓名').AsString;
    cbSuper.Checked:=QryUser.Fieldbyname('系统管理员').AsBoolean;
    qxString:=QryUser.Fieldbyname('权限').AsString;
    if length(trim(qxstring))<gncount then
      qxstring:=trim(qxstring)+stringofchar('N',gncount-length(trim(qxstring)));
    GetQx(qxstring);
  end;
end;

procedure TfrmAuthor.FormShow(Sender: TObject);
begin
  MyStatus:='browse';
  with DM_GSGL do
  begin
    if QryTemp.Active=True then
      QryTemp.Close;
    QryTemp.SQL.Clear;
    QryTemp.SQL.Add('select count(功能编号) countgn from 系统功能');
    QryTemp.Open;
    gncount:=QryTemp.Fieldbyname('countgn').AsInteger;
    if QryUser.Active=True then
      QryUser.Close;
    QryUser.Open;
  end;
  TableToEdit;
  ShowMyButton;
end;

procedure TfrmAuthor.ShowMyButton;
begin
  if (MyStatus = 'browse') then
  begin
    dbgrid1.enabled:=true;
    edDm.ReadOnly:=True;
    edXm.ReadOnly:=True;
    cbSuper.Enabled:=False;
    BtnSel.Enabled:=False;
    BtnSelAll.Enabled:=False;
    BtnUnSel.Enabled:=False;
    BtnUnSelAll.Enabled:=False;
    BtnAppend.Enabled := True;
    BtnEdit.Enabled := True;
    BtnDelete.Enabled := True;
    BtnExit.Enabled := True;
    btnpass.Enabled := True;
    if (DM_GSGL.QryUser.Eof) and (DM_GSGL.QryUser.Bof=True) then
    begin
      btnpass.Enabled := False;
      BtnEdit.Enabled := False;
      BtnDelete.Enabled := False;
    end;
    BtnSure.Enabled := False;    //Sure Button
    BtnCancel.Enabled := False;  //Cancel Button
  end
  else
  begin
    dbgrid1.enabled:=False;
    btnpass.Enabled := False;
    edDm.ReadOnly:=False;
    edXm.ReadOnly:=False;
    cbSuper.Enabled:=True;
    if cbSuper.Checked=False then
    begin
      if SrcList.Items.Count>0 then
      begin
        BtnSel.Enabled:=True;
        BtnSelAll.Enabled:=True;
      end
      else
      begin
        BtnSel.Enabled:=False;
        BtnSelAll.Enabled:=False;
      end;
      if EditList.Items.Count>0 then
      begin
        BtnUnSel.Enabled:=True;
        BtnUnSelAll.Enabled:=True;
      end
      else
      begin
        BtnUnSel.Enabled:=False;
        BtnUnSelAll.Enabled:=False;
      end;
    end
    else
    begin
      BtnSel.Enabled:=False;
      BtnSelAll.Enabled:=False;
      BtnUnSel.Enabled:=False;
      BtnUnSelAll.Enabled:=False;
    end;
    BtnAppend.Enabled := False;
    BtnEdit.Enabled := False;
    BtnDelete.Enabled := False;
    BtnExit.Enabled := False;
    BtnSure.Enabled := True;   //Sure Button
    BtnCancel.Enabled := True; //Cancel Button
  end;
end;

procedure TfrmAuthor.FillList(List: TListBox);
var
  moddm,modName:String;
begin
  List.Items.Clear;
  with DM_GSGL do
  begin
    if QryXtgn.Active=False then
      QryXtgn.close;
    QryXtgn.open;
    QryXtgn.First;
    while (not QryXtgn.eof) do
    begin
      moddm:=QryXtgn.FieldByName('功能编号').AsString;
      if QryXtgn.FieldByName('功能名称').isnull then
        modname:='[]'
      else
        modname:=QryXtgn.fieldbyname('功能名称').asstring;
      list.Items.Add(moddm+StringOfChar(' ', 3-Length(moddm))+modname);
      QryXtgn.Next;
    end;
  end;
end;

procedure TfrmAuthor.GetQx(QxString:String);
var
  i:integer;
begin
  SrcList.Items.Clear;
  EditList.Items.Clear;
  FillList(SrcList);
  if cbSuper.Checked=True then
  begin
    FillList(EditList);
    SrcList.Items.Clear;
    ShowMyButton;
    exit;
  end;
  for i:=0 to gncount-1 do
  begin
    if UpperCase(QxString[i+1])='Y' then
    begin
      EditList.Items.Append(SrcList.Items[i]);
      SrcList.Selected[i]:=true;
    end;
  end;
  for i:=gncount-1 downto 0 do
    if SrcList.Selected[i] then
      SrcList.Items.Delete(i);
  ShowMyButton;
end;

procedure TfrmAuthor.BtnSelClick(Sender: TObject);
var
  i:integer;
begin
  for i:=0 to SrcList.Items.Count-1 do
    if SrcList.Selected[i] then
      EditList.Items.Add(SrcList.Items[i]);
  for i:=SrcList.Items.Count-1 downto 0 do
    if SrcList.Selected[i] then
      SrcList.Items.Delete(i);
  showMyButton;
end;

procedure TfrmAuthor.BtnUnSelClick(Sender: TObject);
var
  i:integer;
begin
  for i:=0 to EditList.Items.Count-1 do
    if EditList.Selected[i] then
      SrcList.Items.Add(EditList.Items[i]);
  for i:=EditList.Items.Count-1 downto 0 do
    if EditList.Selected[i] then
      EditList.Items.Delete(i);
  showMyButton;
end;

procedure TfrmAuthor.BtnSelAllClick(Sender: TObject);
var
  i:integer;
begin
  for i:=0 to SrcList.Items.Count-1 do
    EditList.Items.Add(SrcList.Items[i]);
  for i:=SrcList.Items.Count-1 downto 0 do
    SrcList.Items.Delete(i);
  showMyButton;
end;

procedure TfrmAuthor.BtnUnselAllClick(Sender: TObject);
var
  I: Integer;
begin
  for i:=0 to EditList.Items.Count-1 do
    SrcList.Items.Add(EditList.Items[i]);
  for i:=EditList.Items.Count-1 downto 0 do
    EditList.Items.Delete(i);
  showMyButton;
end;

function TfrmAuthor.SetQx:string;
var
  i,k:integer;
  tmpEdit:String;
begin
  if cbSuper.Checked=True then exit;
  FillList(SrcList);
  SetLength(tmpEdit,gnCount);
  tmpEdit:=stringofchar('N',gncount);
  for i:=0 to (EditList.Items.Count - 1) do
  begin
    k:=SrcList.Items.IndexOf(EditList.Items[i]);
    tmpEdit[k+1]:='Y';
  end;
  result:=tmpEdit;
end;

procedure TfrmAuthor.BtnSureClick(Sender: TObject);
var
  tmpstring:string;
begin
  tmpstring:=edDm.Text;
//  if (edDm.Text='') or (eddm.Text='Admin') then
  if (edDm.Text='') then
  begin
    Application.MessageBox('代码不能是空的!','错误',mb_ok or mb_iconError);
    edDm.SetFocus;
    exit;
  end;
  if MyStatus='add' then
  begin
    if DM_GSGL.QryUser.Locate('用户工号',edDm.Text,[loCaseInsensitive]) then
    begin
      Application.MessageBox('此用户工号已经存在!','错误',mb_ok or mb_iconError);
      edDm.SetFocus;
      exit;
    end;
    DM_GSGL.QryUser.Append;
    EditToTable;
    DM_GSGL.QryUser.Post;
    DM_GSGL.QryUser.Close;
    DM_GSGL.QryUser.Open;
    DM_GSGL.QryUser.Locate('用户工号',tmpstring,[loCaseInsensitive]);
  end;
  if MyStatus='edit' then
  begin
    with DM_GSGL do
    begin
      QryUser.Edit;
      EditToTable;
      QryUser.Post;
    end;
  end;
  MyStatus:='browse';
  TableToEdit;
  ShowMyButton;
end;

procedure TfrmAuthor.BtnDeleteClick(Sender: TObject);
begin
  if Application.MessageBox('你确实要删除当前用户吗?','确认',mb_YesNo or mb_iconQuestion)=IDYES then
    DM_GSGL.QryUser.Delete;
end;

procedure TfrmAuthor.BtnExitClick(Sender: TObject);
begin
  close;
end;

procedure TfrmAuthor.BtnCancelClick(Sender: TObject);
begin
  MyStatus:='browse';
  TableToEdit;
  ShowMyButton;
end;

procedure TfrmAuthor.BtnAppendClick(Sender: TObject);
begin
  MyStatus:='add';
  edDm.Text:='';
  edXm.Text:='';
  cbSuper.checked:=False;
  Filllist(SrcList);
  EditList.Items.Clear;
  ShowMyButton;
  edDm.SetFocus;
end;

procedure TfrmAuthor.BtnEditClick(Sender: TObject);
begin
  MyStatus:='edit';
  ShowMyButton;
end;

procedure TfrmAuthor.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  DM_GSGL.QryUser.Close;
end;

procedure TfrmAuthor.cbSuperClick(Sender: TObject);
begin
  ShowMyButton;
end;

procedure TfrmAuthor.btnpassClick(Sender: TObject);
begin
  MyStatus:='edit';
  DM_GSGL.QryUser.Edit;
  DM_GSGL.QryUser.Fieldbyname('密码').AsString:=Encrypt('1');
  DM_GSGL.QryUser.Post;
  MyStatus:='browse';
end;

end.

⌨️ 快捷键说明

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