procedure TLoginForm.Button1Click(Sender: TObject);
var
a,b:integer;
i,j:integer;
s:string;
begin
with self.Query1 do
begin
MainForm.N10.Visible:=true;
MainForm.N11.Visible:=true;
MainForm.N14.Visible:=true;
MainForm.N12.Visible:=false;
MainForm.N13.Visible:=false;
MainForm.N20.Visible:=false;
MainForm.N21.Visible:=false;
MainForm.N30.Visible:=false;
MainForm.N31.Visible:=false;
MainForm.N40.Visible:=false;
MainForm.N41.Visible:=false;
MainForm.N50.Visible:=false;
MainForm.N51.Visible:=false;
Close;
SQL.Clear;
Params.Clear;
SQL.Add('select * from users,rights Where users.UserCode='''+ComboBox1.Items[ComboBox1.ItemIndex]+'''');
SQL.Add('and Pwd='''+trim(Edit1.Text)+'''');
SQL.Add('and users.UserCode=rights.UserCode order by MenuItem');
Open;
if RecordCount>0 then
Begin
First;
while not Eof do
begin
a:=StrToInt(copy(FieldByName('MenuItem').Asstring,1,1));
b:=StrToInt(copy(FieldByName('MenuItem').Asstring,2,2));
MainForm.MainMenu1.Items.Items[a].Visible:=true;
MainForm.MainMenu1.Items.Items[a].Items[b].Visible:=true;
Next;
end;
LoginForm.Close;
MainForm.StatusBar1.Panels[0].Text:=self.ComboBox1.Items[ComboBox1.ItemIndex];
MainForm.StatusBar1.Panels[1].Text:='欢迎'+self.ComboBox1.Items[ComboBox1.ItemIndex]+'使用学生报道系统';
Mainform.dlname:=self.ComboBox1.Items[ComboBox1.ItemIndex];
end
else
begin
showmessage('您的用户名或密码有误!');
Edit1.Text:='';
end;
close;
end;
end;
这样可以实现.如果菜单蛮多的话,这种方法就不可取了.
我改成这样,为什么不能啊?
procedure TLoginForm.Button1Click(Sender: TObject);
var
a,b:integer;
i,j:integer;
s:string;
begin
with self.Query1 do
begin
Close;
SQL.Clear;
Params.Clear;
SQL.Add('select * from users,rights Where users.UserCode='''+ComboBox1.Items[ComboBox1.ItemIndex]+'''');
SQL.Add('and Pwd='''+trim(Edit1.Text)+'''');
SQL.Add('and users.UserCode=rights.UserCode order by MenuItem');
Open;
for i:=1 to MainForm.MainMenu1.Items.Count-1 do//菜单控制条件
begin
MainForm.MainMenu1.Items[i].Items[0].Visible:=false;
end;
if RecordCount>0 then
Begin
First;
while not Eof do
begin
a:=StrToInt(copy(FieldByName('MenuItem').Asstring,1,1));
b:=StrToInt(copy(FieldByName('MenuItem').Asstring,2,2));
MainForm.MainMenu1.Items.Items[a].Visible:=true;
MainForm.MainMenu1.Items.Items[a].Items[b].Visible:=true;
Next;
end;
LoginForm.Close;
MainForm.StatusBar1.Panels[0].Text:=self.ComboBox1.Items[ComboBox1.ItemIndex];
MainForm.StatusBar1.Panels[1].Text:='欢迎'+self.ComboBox1.Items[ComboBox1.ItemIndex]+'使用学生报道系统';
Mainform.dlname:=self.ComboBox1.Items[ComboBox1.ItemIndex];
end
else
begin
showmessage('您的用户名或密码有误!');
Edit1.Text:='';
end;
close;
end;
end;
请问一下,这个For循环怎样写才行了.
var
a,b:integer;
i,j:integer;
s:string;
begin
with self.Query1 do
begin
MainForm.N10.Visible:=true;
MainForm.N11.Visible:=true;
MainForm.N14.Visible:=true;
MainForm.N12.Visible:=false;
MainForm.N13.Visible:=false;
MainForm.N20.Visible:=false;
MainForm.N21.Visible:=false;
MainForm.N30.Visible:=false;
MainForm.N31.Visible:=false;
MainForm.N40.Visible:=false;
MainForm.N41.Visible:=false;
MainForm.N50.Visible:=false;
MainForm.N51.Visible:=false;
Close;
SQL.Clear;
Params.Clear;
SQL.Add('select * from users,rights Where users.UserCode='''+ComboBox1.Items[ComboBox1.ItemIndex]+'''');
SQL.Add('and Pwd='''+trim(Edit1.Text)+'''');
SQL.Add('and users.UserCode=rights.UserCode order by MenuItem');
Open;
if RecordCount>0 then
Begin
First;
while not Eof do
begin
a:=StrToInt(copy(FieldByName('MenuItem').Asstring,1,1));
b:=StrToInt(copy(FieldByName('MenuItem').Asstring,2,2));
MainForm.MainMenu1.Items.Items[a].Visible:=true;
MainForm.MainMenu1.Items.Items[a].Items[b].Visible:=true;
Next;
end;
LoginForm.Close;
MainForm.StatusBar1.Panels[0].Text:=self.ComboBox1.Items[ComboBox1.ItemIndex];
MainForm.StatusBar1.Panels[1].Text:='欢迎'+self.ComboBox1.Items[ComboBox1.ItemIndex]+'使用学生报道系统';
Mainform.dlname:=self.ComboBox1.Items[ComboBox1.ItemIndex];
end
else
begin
showmessage('您的用户名或密码有误!');
Edit1.Text:='';
end;
close;
end;
end;
这样可以实现.如果菜单蛮多的话,这种方法就不可取了.
我改成这样,为什么不能啊?
procedure TLoginForm.Button1Click(Sender: TObject);
var
a,b:integer;
i,j:integer;
s:string;
begin
with self.Query1 do
begin
Close;
SQL.Clear;
Params.Clear;
SQL.Add('select * from users,rights Where users.UserCode='''+ComboBox1.Items[ComboBox1.ItemIndex]+'''');
SQL.Add('and Pwd='''+trim(Edit1.Text)+'''');
SQL.Add('and users.UserCode=rights.UserCode order by MenuItem');
Open;
for i:=1 to MainForm.MainMenu1.Items.Count-1 do//菜单控制条件
begin
MainForm.MainMenu1.Items[i].Items[0].Visible:=false;
end;
if RecordCount>0 then
Begin
First;
while not Eof do
begin
a:=StrToInt(copy(FieldByName('MenuItem').Asstring,1,1));
b:=StrToInt(copy(FieldByName('MenuItem').Asstring,2,2));
MainForm.MainMenu1.Items.Items[a].Visible:=true;
MainForm.MainMenu1.Items.Items[a].Items[b].Visible:=true;
Next;
end;
LoginForm.Close;
MainForm.StatusBar1.Panels[0].Text:=self.ComboBox1.Items[ComboBox1.ItemIndex];
MainForm.StatusBar1.Panels[1].Text:='欢迎'+self.ComboBox1.Items[ComboBox1.ItemIndex]+'使用学生报道系统';
Mainform.dlname:=self.ComboBox1.Items[ComboBox1.ItemIndex];
end
else
begin
showmessage('您的用户名或密码有误!');
Edit1.Text:='';
end;
close;
end;
end;
请问一下,这个For循环怎样写才行了.
MainMenu1.Items.Items[i].Enabled := false;
MainMenu1.Items[i].Enabled := false;
for i:=0 to MainMenu1.Items.Count-1 do//菜单控制条件
MainMenu1.Items[i].Visible := false;
(FindComponent('N'+IntTostr(i)) as TMenuItem).Visible := false;
变灰
(FindComponent('N'+IntTostr(i)) as TMenuItem).Enabled := false;
我做系统菜单是: 系统 报道单信息 公寓信息 缴费信息 新生数据
登录系统 报道单管理 公寓管理 新生缴费 新生数据管理
用户管理
修改密码
关闭系统我取用的代码是:
for i:=0 to MainMenu1.Items.Count-1 do//菜单控制条件
MainMenu1.Items[i].Visible := false;
我先用admin用户(权限最大)登录,它的所有菜单全都是可见,
如果在不关闭系统的同进,再换另外一用户'525'登录,(他的权限是 系统
登录系统
修改密码
关闭系统)
这时候就与所设置好像有一点不符了.显示如下:
系统
登录系统
用户管理
修改密码
关闭系统多(用户管理),也就是不能控制纵菜单.
如果先关闭系统,再重新启动系统时,就用'525'登录,所显示的菜单与设置是相同的.
这到底是什么回事啊?