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

📄 usermanage.pas

📁 比较完美的基于菜单的权限管理
💻 PAS
📖 第 1 页 / 共 2 页
字号:
unit UserManage;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids, Menus,UnitModule,Math;
Type
  TStringGridEx = class(TStringGrid);
  
type
  TfrmUserManage = class(TForm)
    GroupBox1: TGroupBox;
    Label1: TLabel;
    GroupBox2: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    ComboBox1: TComboBox;
    Label3: TLabel;
    GroupBox5: TGroupBox;
    Label4: TLabel;
    Edit3: TEdit;
    PopupMenu1: TPopupMenu;
    mAdd: TMenuItem;
    mModify: TMenuItem;
    mDelete: TMenuItem;
    N4: TMenuItem;
    mSave: TMenuItem;
    AddPri: TButton;
    DelPri: TButton;
    SaveMove: TButton;
    Label5: TLabel;
    ComboBox2: TComboBox;
    CheckBox1: TCheckBox;
    CheckBox2: TCheckBox;
    CheckBox3: TCheckBox;
    procedure FormCanResize(Sender: TObject; var NewWidth,
      NewHeight: Integer; var Resize: Boolean);
    procedure CheckBox2Click(Sender: TObject);
    procedure CheckBox1Click(Sender: TObject);
    procedure GridSysPriClick(Sender: TObject);
    procedure GridGroupPriClick(Sender: TObject);
    procedure mAddClick(Sender: TObject);
    procedure GridGroupSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure mSaveClick(Sender: TObject);
    procedure mModifyClick(Sender: TObject);
    procedure GridSysPriSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure GridGroupPriSelectCell(Sender: TObject; ACol, ARow: Integer;
      var CanSelect: Boolean);
    procedure mDeleteClick(Sender: TObject);
    procedure ComboBox1Change(Sender: TObject);
    procedure AddPriClick(Sender: TObject);
    procedure DelPriClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure CheckBox3Click(Sender: TObject);
    procedure ComboBox2DropDown(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
  private
    { Private declarations }
    procedure UserRegister;
    procedure UserUnregister;
    procedure ShowGroup;
    procedure HideGroup;
    procedure HidePrivilege;
    procedure ShowSysPrivilege;
    procedure ShowGroupName(ComboBox:TComboBox);
    procedure ShowGroupPrivilege(sName:string);
    Procedure GridSort(StrGrid: TStringGrid; NoColumn: Integer);
  public
    { Public declarations }
    GridGroup,GridGroupPri,GridSysPri:TStringGridEx;
  end;

  
var
  frmUserManage: TfrmUserManage;
  row1,row2,row3:integer;
implementation
uses UnitShow;
{$R *.dfm}

procedure TfrmUserManage.ShowGroup;
var
  iCount:integer;
begin
  try
    if not DataModule1.ADOConnection1.Connected then
      DataModule1.ADOConnection1.Connected := true;
    DataModule1.ADOCommand1.CommandText := '';
    DataModule1.ADOCommand1.CommandText := 'select groupId,groupName from t_group';
    DataModule1.ADOCommand1.Prepared := true;
    DataModule1.ADODataSet1.Recordset := DataModule1.ADOCommand1.Execute;
    if DataModule1.ADODataSet1.Recordset.RecordCount < 1 then
      exit
    else
    begin
      DataModule1.ADODataSet1.Recordset.MoveFirst;
      for iCount := 0 to DataModule1.ADODataSet1.Recordset.RecordCount - 1 do    // Iterate
      begin
        if iCount <> 0 then
          GridGroup.RowCount := GridGroup.RowCount + 1;
        GridGroup.Cells[0,iCount] := DataModule1.ADODataSet1.Recordset.Fields.Item[1].Value;
        GridGroup.Cells[1,iCount] := DataModule1.ADODataSet1.Recordset.Fields.Item[0].Value;
        DataModule1.ADODataSet1.Recordset.MoveNext;
      end;
    end;
  except on e: Exception do
    showmessage(e.Message);
  end;
end;

procedure TfrmUserManage.HideGroup;
var
  I: Integer;
begin
  for I := 0 to GridGroup.RowCount - 1 do    // Iterate
  begin
    GridGroup.RowCount := GridGroup.RowCount - 1;
  end;    // for
  GridGroup.Cells[0,0] := '';
  GridGroup.Cells[1,0] := '';
end;

procedure TfrmUserManage.ShowSysPrivilege;
var
  str:string;
  sTemp:string;
  iPos,i:integer;
begin
  for I := 0 to GridSysPri.RowCount - 1 do    // Iterate
  begin
    GridSysPri.RowCount := GridSysPri.RowCount - 1;
  end;    // for
  GridSysPri.Cells[0,0] := '';
  GridSysPri.Cells[1,0] := '';
  try
    if not DataModule1.ADOConnection1.Connected then
      DataModule1.ADOConnection1.Connected := true;
    DataModule1.ADOCommand1.CommandText := '';
    DataModule1.ADOCommand1.CommandText := 'select gDesc from t_group where groupId = ''01''';
    DataModule1.ADOCommand1.Prepared := true;
    DataModule1.ADODataSet1.Recordset := DataModule1.ADOCommand1.Execute;
    if DataModule1.ADODataSet1.Recordset.RecordCount < 1 then exit
    else
    begin
      str := DataModule1.ADODataSet1.Recordset.Fields.Item[0].Value;
      while pos(',',str) > 0 do
      begin
        iPos := pos(',',str);
        sTemp := Copy(str,1,iPos - 1);
        GridSysPri.RowCount := GridSysPri.RowCount + 1;
        case Length(sTemp) of
          1:
            begin
              GridSysPri.Cells[0,GridSysPri.RowCount - 2] := frmShow.MainMenu1.Items[strtoint(sTemp)].Caption;
            end;
          2:
            begin
              GridSysPri.Cells[0,GridSysPri.RowCount - 2] := '        '+frmShow.MainMenu1.Items[strtoint(copy(sTemp,1,1))].Items[strtoint(copy(sTemp,2,1))].Caption;
            end;
          3:
            begin
              GridSysPri.Cells[0,GridSysPri.RowCount - 2] := '                '+frmShow.MainMenu1.Items[strtoint(copy(sTemp,1,1))].Items[strtoint(copy(sTemp,2,1))].Items[strtoint(copy(sTemp,3,1))].Caption;
            end;
        end;    // case
        GridSysPri.Cells[1,GridSysPri.RowCount - 2] := sTemp;
        str := Copy(str,iPos + 1,Length(str));
      end; 
    end;
  except on e: Exception do
    Showmessage(e.Message);
  end;
  //GridSysPri.RowCount := GridGroupPri.RowCount - 1;
end;

procedure TfrmUserManage.HidePrivilege;
var
  i:integer;
begin
  for I := 0 to GridSysPri.RowCount - 1 do    // Iterate
  begin
    GridSysPri.RowCount := GridSysPri.RowCount - 1;
  end;    // for
  GridSysPri.Cells[0,0] := '';
  GridSysPri.Cells[1,0] := '';
  for I := 0 to GridGroupPri.RowCount - 1 do    // Iterate
  begin
    GridGrouppri.RowCount := GridGroupPri.RowCount - 1;
  end;    // for
  GridGroupPri.Cells[0,0] := '';
  GridGroupPri.Cells[1,0] := '';
end;

procedure TfrmUserManage.FormCanResize(Sender: TObject; var NewWidth,
  NewHeight: Integer; var Resize: Boolean);
begin
  Resize := false;
end;

procedure TfrmUserManage.CheckBox2Click(Sender: TObject);
begin
  if CheckBox2.Checked then
  begin
    GridGroup.Enabled := true;
    ShowGroup;
  end
  else
  begin
    GridGroup.Enabled := false;
    HideGroup;
  end;
end;


procedure TfrmUserManage.CheckBox1Click(Sender: TObject);
begin
  ComboBox1.Items.Clear;
  if CheckBox1.Checked then
  begin
    GridSysPri.Enabled := true;
    GridGroupPri.Enabled := true;
    ComboBox1.Enabled := true;
    ShowSysPrivilege;
    ShowGroupName(ComboBox1);
  end
  else
  begin
    GridSysPri.Enabled := false;
    GridGroupPri.Enabled := false;
    ComboBox1.Text := '';
    ComboBox1.Enabled := false;
    HidePrivilege;
  end;
end;

procedure TfrmUserManage.GridSysPriClick(Sender: TObject);
begin
  AddPri.Enabled := true;
  DelPri.Enabled := false;
end;

procedure TfrmUserManage.GridGroupPriClick(Sender: TObject);
begin
  AddPri.Enabled := false;
  DelPri.Enabled := true;
end;

procedure TfrmUserManage.mAddClick(Sender: TObject);
var
  iMax,iTemp:integer;
  sMax:string;
  I:integer;
begin
  iMax := 0;
  sMax := '';
  GridGroup.Options := GridGroup.Options - [goRowSelect];
  if Trim(GridGroup.Cells[0,GridGroup.RowCount-1]) <> '' then
  begin
    GridGroup.RowCount := GridGroup.RowCount + 1;
    for I := 0 to GridGroup.RowCount - 1 do    // Iterate
    begin
      if GridGroup.Cells[1,i] = '' then
        iTemp := 0
      else
        iTemp := strtoint(GridGroup.Cells[1,i]);
      iMax := Max(iMax,iTemp);
    end;    // for
    if Length(inttostr(iMax)) = 1 then
      sMax := '0' + inttostr(iMax+1);
    GridGroup.Cells[1,GridGroup.RowCount-1] := sMax;
  end
  else
  begin
    if GridGroup.RowCount <= 1 then
      GridGroup.Cells[1,0] := '01'
    else
    begin
      for I := 0 to GridGroup.RowCount - 2 do    // Iterate
      begin
        if GridGroup.Cells[1,i] = '' then
          iTemp := 0
        else
          iTemp := strtoint(GridGroup.Cells[1,i]);
        iMax := Max(iMax,iTemp);
      end;    // for
      if Length(inttostr(iMax)) = 1 then
        sMax := '0' + inttostr(iMax+1);
      GridGroup.Cells[1,GridGroup.RowCount-1] := sMax;
    end;
  end;
end;

procedure TfrmUserManage.GridGroupSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  row1 := ARow;
end;

procedure TfrmUserManage.mSaveClick(Sender: TObject);
var
  i:integer;
  sName,sNo:string;
begin
  GridGroup.Options := GridGroup.Options + [goRowSelect];
  try
    if not DataModule1.ADOConnection1.Connected then
      DataModule1.ADOConnection1.Connected := true;
    for I := 0 to GridGroup.RowCount - 1 do    // Iterate
    begin
      sName := trim(GridGroup.Cells[0,i]);
      sNo := trim(GridGroup.Cells[1,i]);
      if (sName <> '') and (sNo <> '')  then
      begin
        DataModule1.ADOCommand1.CommandText := Format('select groupName from t_group where groupId = ''%s''',[sNo]);
        DataModule1.ADOCommand1.Prepared := true;
        DataModule1.ADODataSet1.Recordset := DataModule1.ADOCommand1.Execute;
        if DataModule1.ADODataSet1.Recordset.RecordCount < 1 then
        begin
          DataModule1.ADOCommand1.CommandText := Format('insert t_group values(''%s'',''%s'','''')',[sNo,sName]);
        end
        else
        begin
          if sName <> trim(DataModule1.ADODataSet1.Recordset.Fields.Item[0].value) then
          begin
            DataModule1.ADOCommand1.CommandText := Format('update t_group set groupName = ''%s'' where groupId = ''%s''',[sName,sNo]);
          end;
        end;
        DataModule1.ADOCommand1.Prepared := true;
        DataModule1.ADOCommand1.Execute;
       
      end;
    end;
  except on e: Exception do
    begin
      showmessage(e.Message);
      exit;
    end;
  end;
  showmessage('工作组修改成功!');
end;

procedure TfrmUserManage.mModifyClick(Sender: TObject);
begin
  GridGroup.Options := GridGroup.Options - [goRowSelect];
end;

procedure TfrmUserManage.GridSysPriSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  row2 := ARow;
end;

procedure TfrmUserManage.GridGroupPriSelectCell(Sender: TObject; ACol,
  ARow: Integer; var CanSelect: Boolean);
begin
  row3 := ARow;
end;

procedure TfrmUserManage.mDeleteClick(Sender: TObject);
begin
  GridGroup.Rows[row1].Clear;
  //GridGroup.Rows[row1].Move(row1,GridGroup.RowCount-1);
end;

procedure TfrmUserManage.ShowGroupName(ComboBox:TComboBox);
var
  str:string;
  i:integer;

⌨️ 快捷键说明

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