?? pfm_rightset.pas
字號:
unit pfm_rightset;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
Menus, StdCtrls, ComCtrls, ImgList, Grids, DBGrids, Db, DBTables,
ExtCtrls, Buttons;
type
Tfm_rightset = class(TForm)
DataSource1: TDataSource;
Query1: TQuery;
Splitter1: TSplitter;
GroupBox1: TGroupBox;
Panel1: TPanel;
TVUser: TTreeView;
BBtnUser: TBitBtn;
BBtnsave: TBitBtn;
Panel2: TPanel;
btnAll12: TButton;
btnAll21: TButton;
TV1: TTreeView;
TV2: TTreeView;
Label1: TLabel;
Label2: TLabel;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure btnAll12Click(Sender: TObject);
procedure btnAll21Click(Sender: TObject);
procedure TV2DblClick(Sender: TObject);
procedure TV1DblClick(Sender: TObject);
procedure BBtnUserClick(Sender: TObject);
procedure TVUserChange(Sender: TObject; Node: TTreeNode);
procedure BBtnsaveClick(Sender: TObject);
private
{ Private declarations }
procedure TVtranfer(tvfrom:ttreeview;tvdest:ttreeview;jibie:integer);
procedure GetUser();
public
{ Public declarations }
end;
var
fm_rightset: Tfm_rightset;
implementation
uses pfm_main, pfm_userpass;
{$R *.DFM}
var
Rightmodified:boolean;
useridlist:tstringlist;
procedure Tfm_rightset.FormCreate(Sender: TObject);
var
mainmenu:TMainMenu;
//menuitem:TMenuItem;
i,j:integer;
tvnode1:TTreeNode;
begin
useridlist:=tstringlist.create;
mainmenu:=main.mainmenu1;
for i:=0 to mainmenu.items.count-1 do
begin
tvnode1:=TV1.items.add(nil,mainmenu.items[i].Caption);
TV2.items.add(nil,mainmenu.items[i].Caption);
for j:=0 to mainmenu.items.items[i].count-1 do
begin
if mainmenu.items.items[i].items[j].caption<>'-' then
begin
tv1.Items.AddChild(tvnode1,mainmenu.items.items[i].items[j].caption);
end;
end;
end;
Getuser;
end;
procedure Tfm_rightset.FormClose(Sender: TObject;
var Action: TCloseAction);
begin
if Rightmodified=true then
begin
if application.MessageBox(pchar('要先保存修改的設置嗎?'),pchar('注意'),MB_YESNO)=IDYES then
begin
bbtnsave.Click;
end;
end;
useridlist.Free;
action:=cafree;
end;
procedure Tfm_rightset.btnAll12Click(Sender: TObject);
begin
TVtranfer(tv1,tv2,0);
end;
procedure Tfm_rightset.TVtranfer(tvfrom:ttreeview;tvdest:ttreeview;jibie:integer);
var
tv1node,tvdestnode:ttreenode;
begin
Rightmodified:=true;
//如果選擇的是第一級
if tvfrom.Selected.Level=1 then
begin
//先獲得第一個
tvdestnode:=tvdest.TopItem;
while tvdestnode<>nil do
begin
if tvdestnode.text=tvfrom.Selected.Parent.text then
begin
tvdest.Items.AddChild(tvdestnode,tvfrom.Selected.Text);
break;
end;
tvdestnode:=tvdestnode.GetNext();
end;
tvfrom.Selected.Delete;
end;
//如果選擇的是第0級
if (tvfrom.Selected.Level=0) and (jibie=0) then
begin
//先獲得第一個
tvdestnode:=tvdest.TopItem;
while tvdestnode<>nil do
begin
if tvdestnode.text=tvfrom.Selected.text then
begin
tv1node:=tvfrom.Selected.getFirstChild;
while tv1node<>nil do
begin
tvdest.Items.AddChild(tvdestnode,tv1node.Text);
tv1node:=tvfrom.Selected.GetNextChild(tv1node);
end;
tvfrom.Selected.DeleteChildren;
break;
end;
tvdestnode:=tvdestnode.GetNext();
end;
end;
end;
procedure Tfm_rightset.btnAll21Click(Sender: TObject);
begin
TVtranfer(tv2,tv1,0);
end;
procedure Tfm_rightset.TV2DblClick(Sender: TObject);
begin
TVtranfer(tv2,tv1,1);
end;
procedure Tfm_rightset.TV1DblClick(Sender: TObject);
begin
TVtranfer(tv1,tv2,1);
end;
procedure Tfm_rightset.GetUser();
var
tvnode:ttreenode;
begin
tvuser.Items.Clear;
tv1.Items.clear;
tv2.items.clear;
tvnode:=tvuser.Items.Add(nil,'全部用戶');
query1.close;
query1.sql.clear;
query1.sql.add('select * from t_user');
query1.open;
while not query1.eof do
begin
TvUser.Items.Addchild(tvnode,query1.fieldbyname('username').asstring);
useridlist.add(query1.fieldbyname('username').asstring+'='+query1.fieldbyname('userid').asstring);
query1.Next;
end;
query1.close;
end;
procedure Tfm_rightset.BBtnUserClick(Sender: TObject);
begin
Application.CreateForm(Tfm_userpass, fm_userpass);
fm_userpass.showmodal;
fm_userpass.free;
getuser;
end;
procedure Tfm_rightset.TVUserChange(Sender: TObject; Node: TTreeNode);
var
mainmenu:TMainMenu;
//menuitem:TMenuItem;
i,j:integer;
tv1node,tv2node,tv1child:TTreeNode;
mCap,rightname:string;
begin
if Rightmodified=true then
begin
if application.MessageBox(pchar('要先保存修改的設置嗎?'),pchar('注意'),MB_YESNO)=IDYES then
begin
bbtnsave.Click;
end;
end;
if tvuser.Selected.Level=1 then
begin
Groupbox1.Caption:='【'+tvuser.Selected.Text+'】使用權限設置';
mainmenu:=main.mainmenu1;
tv1.Items.Clear;
tv2.Items.Clear;
for i:=0 to mainmenu.items.count-1 do
begin
//加入菜單大類
tv1node:=TV1.items.add(nil,mainmenu.items[i].Caption);
TV2.items.add(nil,mainmenu.items[i].Caption);
for j:=0 to mainmenu.items.items[i].count-1 do
begin
if mainmenu.items.items[i].items[j].caption<>'-' then
begin
tv1.Items.AddChild(tv1node,mainmenu.items.items[i].items[j].caption);
end;
end;
end;
query1.active:=false;
query1.SQL.clear;
query1.sql.Add('select t_userright.* from t_userright,t_user where t_user.userid=t_userright.userid and t_user.username='''+tvuser.selected.text+'''');
query1.active:=true;
while not query1.Eof do
begin
rightname:=query1.fieldbyname('rightname').asstring;
//先獲得子項所在的父菜單名
mCap:='';
for i:=0 to mainmenu.items.count-1 do
begin
for j:=0 to mainmenu.items.items[i].count-1 do
begin
if mainmenu.items.items[i].items[j].caption=rightname then
begin
mcap:=mainmenu.items[i].Caption;
break;
end;
end;
if mCap<>'' then
begin
break;
end;
end;
if mCap='' then
begin
query1.Next;
continue;
end;
//先查找左邊的級別用戶的權限
//先獲得第一個
tv1node:=tv1.TopItem;
while tv1node<>nil do
begin
if tv1node.text=mCap then
begin
//先獲得第一個
tv2node:=tv2.TopItem;
while tv2node<>nil do
begin
if tv2node.text=mCap then
begin
tv2.Items.AddChild(tv2node,rightname);
break;
end;
tv2node:=tv2node.GetNext();
end;
tv1child:=tv1node.getFirstChild;
while tv1child<>nil do
begin
if tv1child.text=rightname then
begin
tv1.Items.Delete(tv1child);
break;
end;
tv1child:=tv1node.GetNextChild(tv1child);
end;
break;
end;
tv1node:=tv1node.GetNext();
end;
query1.Next;
end;
query1.Active:=false;
end;
end;
procedure Tfm_rightset.BBtnsaveClick(Sender: TObject);
var
userid:string;
tv2node,tv2childnode:ttreenode;
begin
if tvuser.Selected.Level=1 then
begin
Rightmodified:=false;
userid:=useridlist.values[tvuser.selected.text];
Rightmodified:=false;
query1.Active:=false;
query1.SQL.clear;
query1.sql.add('delete from t_userright where userid='''+userid+''';');
query1.ExecSQL;
query1.sql.clear;
tv2node:=tv2.TopItem;
while tv2node<>nil do
begin
tv2childnode:=tv2node.getFirstChild();
while tv2childnode<>nil do
begin
query1.sql.Add('insert into t_userright(rightname,canuse,userid) values('''+
tv2childnode.text+''',''1'','''+userid+''');');
tv2childnode:=tv2node.GetNextChild(tv2childnode);
end;
tv2node:=tv2node.GetNext;
end;
query1.ExecSQL;
end;
end;
end.
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -