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循环怎样写才行了.

解决方案 »

  1.   

    for i:=0 to MainMenu1.Items.Count-1 do//菜单控制条件
      MainMenu1.Items.Items[i].Enabled := false;
      

  2.   

    for i:=0 to MainMenu1.Items.Count-1 do//菜单控制条件
      MainMenu1.Items[i].Enabled := false;
      

  3.   

    如果是不可见,就改成下面的
    for i:=0 to MainMenu1.Items.Count-1 do//菜单控制条件
      MainMenu1.Items[i].Visible := false;
      

  4.   

    呵呵呵呵,来CSDN_D版的都是朋友
      

  5.   

    隐藏
      (FindComponent('N'+IntTostr(i)) as TMenuItem).Visible := false;
    变灰
      (FindComponent('N'+IntTostr(i)) as TMenuItem).Enabled := false;
      

  6.   

    好像还是有一点问题啊。
    我做系统菜单是:   系统          报道单信息    公寓信息   缴费信息  新生数据
       登录系统      报道单管理    公寓管理   新生缴费  新生数据管理
       用户管理
       修改密码
       关闭系统我取用的代码是:
    for i:=0 to MainMenu1.Items.Count-1 do//菜单控制条件
      MainMenu1.Items[i].Visible := false;
    我先用admin用户(权限最大)登录,它的所有菜单全都是可见,
    如果在不关闭系统的同进,再换另外一用户'525'登录,(他的权限是  系统
                                                                登录系统
                                                                修改密码
                                                                关闭系统)
    这时候就与所设置好像有一点不符了.显示如下:
       系统             
       登录系统        
       用户管理
       修改密码
       关闭系统多(用户管理),也就是不能控制纵菜单.
    如果先关闭系统,再重新启动系统时,就用'525'登录,所显示的菜单与设置是相同的.
    这到底是什么回事啊?