唉,不得已修改别人的代码。请大哥们给个修改方案。
代码如下:procedure TMainSaleForm.CreateMainMenu;
Var
    I1,I2,I3,i0T0,i0T1,i0T2,i0T3 : Integer;
    iPosition,iTreeNodeCount,iTreeLevelOneCount : Integer;
    s1T1,s1T2,s1T3,s1T4,s2T1,s2T2,s2T3,s2T4,s3T1,s3T2,s3T3,s3T4 : String;    miItem1,miItem2,miItem3 : TMenuItem;
    trnNode1,trnNode2,trnNode3:TTreeNode;
    fcNode1,fcNode2,fcNode3: TfcTreeNode;begin    MainMenu.Items.Clear;
    TreeViewMain.items.Clear;
    fcTreeCombo.text := '快捷菜单';
    fcTreeCombo.items.clear;    iTreeNodeCount := 0;
    iTreeLevelOneCount := 0;    fcNode1 := fcTreeCombo.items.add(nil,'');
    fcNode2 := fcTreeCombo.items.add(nil,'');
    fcNode3 := fcTreeCombo.items.add(nil,''); for I1 := 0 to P_slItem1.Count-1 do
    begin
        i0T0 := Length(P_slItem1[I1]);
        i0T1 := Pos(',',P_slItem1[I1]);
        i0T2 := i0T1+Pos(',',Copy(P_slItem1[I1],i0T1+1,i0T0));
        i0T3 := i0T2+Pos(',',Copy(P_slItem1[I1],i0T2+1,i0T0));        s1T1 := Copy(P_slItem1[I1],1,i0T1-1);
        s1T2 := Copy(P_slItem1[I1],i0T1+1,i0T2-i0T1-1);
        s1T3 := Copy(P_slItem1[I1],i0T2+1,i0T3-i0T2-1);
        s1T4 := Copy(P_slItem1[I1],i0T3+1,i0T0-i0T3);        miItem1 := TMenuItem.Create(Self);  if (Copy(s1T1,3,1) = '-') and (s1T2 <> '-') then
      miItem1.onClick := MenuItemClick;  if (s1T4 <> '') and (Copy(s1T1,3,1)='-') and (s1T2 <> '-') then
            miItem1.Action := ActionListMain.Actions[StrToInt(s1T4)];        if s1T3 <> '' then
      miItem1.ShortCut := ShortCut(StrToInt(Copy(s1T3,4,3)),TranslateShortCutState(Copy(s1T3,1,3)));        miItem1.Caption := s1T2;
        miItem1.Name := 'N' + Copy(s1T1,1,2);
        miItem1.Tag := StrToInt(Copy(s1T1,1,2));  if ((copy(s1T1,1,2) = '01') or (copy(s1T1,1,2) = '02')) and (copy(s1T1,3,1) = '+') then
        begin
            miItem1.Visible := MenuItemVisible(copy(s1T1,1,2));            if miItem1.Visible then
            begin
                trnNode1 := TreeViewMain.items.add(nil,'');
                iPosition := pos('(',s1T2);
                trnNode1.text := copy(s1T2,1,iPosition-1);
                trnNode1.ImageIndex := 0;
                trnNode1.SelectedIndex := 0;
                inc(iTreeLevelOneCount);
                setlength(L_trnTreeLevelOne,iTreeLevelOneCount);
                setlength(L_fcTreeLevelOne,iTreeLevelOneCount);
                L_trnTreeLevelOne[iTreeLevelOneCount-1] := trnNode1;                fcNode1 := fcTreeCombo.items.add(nil,'');
                iPosition := pos('(',s1T2);
                fcNode1.text := copy(s1T2,1,iPosition-1);
                L_fcTreeLevelOne[iTreeLevelOneCount-1] := fcNode1;
            end;
        end;        MainMenu.Items.Add(miItem1);  if Copy(s1T1,3,1)='+' then
        begin
            for I2 := 0 to P_slItem2.Count - 1 do
            begin
                i0T0 := Length(P_slItem2[I2]);
                i0T1 := Pos(',',P_slItem2[I2]);
                i0T2 := i0T1+Pos(',',Copy(P_slItem2[I2],i0T1 + 1,i0T0));
                i0T3 := i0T2+Pos(',',Copy(P_slItem2[I2],i0T2 + 1,i0T0));                s2T1 := Copy(P_slItem2[I2],1,i0T1 - 1);
                s2T2 := Copy(P_slItem2[I2],i0T1+1,i0T2-i0T1 - 1);
                s2T3 := Copy(P_slItem2[I2],i0T2+1,i0T3-i0T2 - 1);
                s2T4 := Copy(P_slItem2[I2],i0T3+1,i0T0-i0T3);          if Copy(s2T1,1,2) = Copy(s1T1,1,2) then
                begin
                    miItem2 := TMenuItem.Create(Self);        if (Copy(s2T1,5,1)='-') and (s2T2 <> '-') then
            miItem2.onClick := MenuItemClick;                    if (s2T4 <> '') and (Copy(s2T1,5,1)='-') and (s2T2 <> '-') then
                        miItem2.Action := ActionListMain.Actions[StrToInt(s2T4)];                    if s2T3 <> '' then
            miItem2.ShortCut := ShortCut(StrToInt(Copy(s2T3,4,3)),TranslateShortCutState(Copy(s2T3,1,3)));                    miItem2.Caption := s2T2;
                    miItem2.Name := 'N'+Copy(s2T1,1,4);
                    miItem2.Tag := StrToInt(Copy(s2T1,1,4));

解决方案 »

  1.   

    if ((copy(s1T1,1,2)='01')or(copy(s1T1,1,2)='02'))and(copy(s2T1,5,1)='+') then
                        begin
                            miItem2.Visible := MenuItemVisible(copy(s2T1,1,4));                        if miItem2.Visible then
                            begin
                                OutBar.Panels.Add;
                                OutBar.Panels.Items[iOutBar1].Text := copy(s2T2,1,iPosition-1);
                                Inc(iOutBar1);                            trnNode2 := TreeViewMain.items.addchild(trnNode1,'');
                                iPosition := pos('(',s2T2);
                                trnNode2.text := copy(s2T2,1,iPosition-1);
                                trnNode2.ImageIndex := 1;
                                trnNode2.SelectedIndex := 1;                            fcNode2 := fcTreeCombo.Items.addchild(fcNode1,'');
                                fcNode2.text := copy(s2T2,1,iPosition-1);
                                fcNode2.ImageIndex := 1;
                                fcNode2.SelectedIndex := 1;
                            end;
                        end;        miItem1.Add(miItem2);        if Copy(s2T1,5,1)='+' then
                        begin
                            for I3 := 0 to P_slItem3.Count-1 do
                            begin
                                i0T0 := Length(P_slItem3[I3]);
                                i0T1 := Pos(',',P_slItem3[I3]);
                                i0T2 := i0T1+Pos(',',Copy(P_slItem3[I3],i0T1 + 1,i0T0));
                                i0T3 := i0T2+Pos(',',Copy(P_slItem3[I3],i0T2 + 1,i0T0));
                                s3T1 := Copy(P_slItem3[I3],1,i0T1 - 1);
                                s3T2 := Copy(P_slItem3[I3],i0T1 + 1,i0T2 - i0T1 - 1);
                                s3T3 := Copy(P_slItem3[I3],i0T2 + 1,i0T3 - i0T2 - 1);
                                s3T4 := Copy(P_slItem3[I3],i0T3 + 1,i0T0 - i0T3);            if Copy(s3T1,1,4)=Copy(s2T1,1,4) then
                                begin
                                    miItem3 := TMenuItem.Create(Self);           if (s3T2 <> '-') then
                   miItem3.onClick := MenuItemClick;                                if (s3T4 <> '') and (s3T2 <> '-') then
                                        miItem3.Action := ActionListMain.Actions[StrToInt(s3T4)];                                if s3T3 <> '' then
                   miItem3.ShortCut := ShortCut(StrToInt(Copy(s3T3,4,3)),TranslateShortCutState(Copy(s3T3,1,3)));                                miItem3.Caption := s3T2;
                                    miItem3.Name := 'N'+s3T1;
                                    miItem3.Tag := StrToInt(s3T1);                                if (copy(s1T1,1,2)='01')or(copy(s1T1,1,2)='02') then
                                    begin            miItem3.Visible := MenuItemVisible(copy(s3T1,1,6));            if miItem3.Visible then
                                        begin
                                            trnNode3 := TreeViewMain.Items.AddChild(trnNode2,'');                                        inc(iTreeNodeCount);
                                            SetLength(L_iTreeNodeData,iTreeNodeCount);
                                            L_iTreeNodeData[iTreeNodeCount-1] := copy(s3T1,1,6);
                                            trnNode3.data := pchar(L_iTreeNodeData[iTreeNodeCount-1]);
                                            iPosition := pos('(',s3T2);
                                            trnNode3.text := copy(s3T2,1,iPosition-1);
                                            trnNode3.ImageIndex := 2;
                                            trnNode3.SelectedIndex := 3;                                        fcNode3 := fcTreeCombo.Items.AddChild(fcNode2,'');
                                            fcNode3.data := pchar(L_iTreeNodeData[iTreeNodeCount-1]);
                                            fcNode3.text := copy(s3T2,1,iPosition-1);
                                            fcNode3.ImageIndex := 2;
                                            fcNode3.SelectedIndex := 3;                                    end;
                                    end;                                miItem2.Add(miItem3);
                                end;
                            end;
                        end;
                    end;
                end;
            end;
        end;
    end;首先声明,不是我写的。我才不会干这种傻事,用三层循环嵌套来干四件事情:建立菜单,建立树型结构,建立组合框树型结构,判断使用权限,然后隐藏部分。大哥们不用帮我修改代码,只要给一些解决方案就可以了。多谢了。这个代码,给我的感觉就是蚂蚁搬家,一点点地搬。并且另一个感觉就是,写这个的家伙,不懂数据结构!
      

  2.   

    遍历菜单,依次判断,判断的依据是菜单的caption,可以保存在数据表里,每个菜单跟一个或者多个角色相连。