我想用Delphi做一个权限管理的程序。打算把设置权限的项目都用树型结构表示出来,这样可以看出各权限项目的操作级别。
    现在我想在权限项目前加一个复选框和一个权限项目的图标。请问应该怎样实现。
    这个问题非常急,请各位大虾帮帮忙。

解决方案 »

  1.   

    一个笨办法
    建用户数据库如下
    id name 项目名1 项目名2 项目名3 .... 项目名n选中了哪个项目你就把哪个项目下的设1
    没选中的就置0
    你就可以按此设置权限了
      

  2.   

    强列推存lstclass
    我就用上面的实现了你所要的一切:)
      

  3.   

    我说的是怎样用树型结构表示出效果来。Delphi中的树型视图控件没有复选框,应该怎样把它加进去。
      

  4.   

    帮朋友做个广告,我有个朋友,他做了一个 树形控件,带有复选框,和他联系吧
    [email protected]
      

  5.   

    谢谢 lwk_hlj(阿凯) 兄给我做广告。
    我将发布Snpack1.0的组件,是仿XP的界面组件。
    相关信息请登陆:http://Snpack.51.net
      

  6.   

    SnTreeView效果
    http://snpack.51.net/ComponentEffect.htm#TSnTreeView
      

  7.   

    可以对treeview加个图标选中或未选中的图标,根据权限来控制图标的显示。。
      

  8.   

    --------------------这是点击改变图标--------------------
    procedure TPopedomFrm.AppTreeViewClick(Sender: TObject);
    var
      SeNode,Node,GrandNode: TTreeNode;
      ii,jj    :integer ;
      ImgIndex :integer;
      checked  :boolean;
      bChecked :boolean;
    begin
       if (AppTreeView.Selected = nil) then
         exit;   SeNode := AppTreeView.Selected;
      ImgIndex := 2;
      with AppTreeView do
         begin
         if Selected.Level>0 then
            begin
            if Selected.StateIndex = 1 then
               begin
               Selected.StateIndex := 2;
               ImgIndex := 2;
               end
            else
               begin
               Selected.StateIndex := 1;
               ImgIndex := 1;
               end;
            end;
         // Self
         // Down and/or Up
         case Selected.Level of
           10: //操作员姓名
              begin
                 Node := Selected.GetFirstChild; //子节点
                 if (Node=nil) or (not Node.HasChildren ) then
                 begin
                   bChecked :=False ;
                   AppTreeViewExpanding(sender,Selected,bChecked);
    //               Selected.Expand(False);
                   Node := Selected.GetFirstChild; //子节点
                 end;
                 while Node<>nil do
                   begin
                   Node.StateIndex := ImgIndex;
                   bChecked :=False ;
                   AppTreeViewExpanding(sender,Node,bChecked);
                   if Node.HasChildren then
                      begin
                      GrandNode := Node.GetFirstChild; //孙节点
                      while GrandNode <> nil do
                         begin
                         GrandNode.StateIndex := ImgIndex;
                         GrandNode := GrandNode.GetNextChild(GrandNode);
                         end;
                      end;
                   Node := Node.GetNextSibling;
                   end;
              end;
           1: //Top Node
              begin             Node := Selected.GetFirstChild; //子节点
                 if (Node=nil) or (not Node.HasChildren ) then
                 begin
                   bChecked :=False ;
                   AppTreeViewExpanding(sender,Selected,bChecked);
    //               Selected.Expand(False);
                   Node := Selected.GetFirstChild; //子节点
                 end;
                 while Node<>nil do
                   begin
                   Node.StateIndex := ImgIndex;
                   if Node.HasChildren then
                      begin
                      GrandNode := Node.GetFirstChild; //孙节点
                      while GrandNode <> nil do
                         begin
                         GrandNode.StateIndex := ImgIndex;
                         GrandNode := GrandNode.GetNextChild(GrandNode);
                         end;
                      end;
                     Node := Node.GetNextSibling;
                   end;
                   Selected.Parent.StateIndex :=ImgIndex ;
    //               showmessage(inttostr(imgIndex));
                   if Selected.Parent.StateIndex =2 then
                   begin
                     bChecked :=False ;
                     Node :=Selected.Parent;
                     GrandNode := Node.GetFirstChild; //孙节点
                     while GrandNode <>nil do
                     begin
                       if GrandNode.StateIndex =1 then
                       begin
                         Node.StateIndex :=1 ;
                         bChecked :=True;
                         Break ;
                       end;
                       GrandNode := GrandNode.GetNextChild(GrandNode);
                     end;
                   end;
              end;
    {       2: // Middle Node
              begin
                 Node := Selected.GetFirstChild; //子节点
                 while Node<>nil do
                   begin
                   Node.StateIndex := ImgIndex;
                   Node := Node.GetNextSibling;
                   end;
                 Checked := false;  //UP
                 Node := Selected.Parent.GetFirstChild; //父节点
                 while Node <> nil do
                    begin
                    if Node.StateIndex = 1 then
                       begin
                       Checked := true;
                       break;
                       end;
                    Node := Node.GetNextSibling;
                    end;
                 if Checked then
                    Selected.Parent.StateIndex := 1
                 else
                    Selected.Parent.StateIndex := 2;            if Selected
              end; //1
              }
           2: //Bottom Node
              begin
                 //父节点
                 Checked := false;
                 Node := Selected.Parent.GetFirstChild;
                 while Node <> nil do
                    begin
                    if Node.StateIndex = 1 then
                       begin
                       Checked := true;
                       break;
                       end;
                    Node := Node.GetNextSibling;
                    end;
                 if Checked then
                    Selected.Parent.StateIndex := 1
                 else
                    Selected.Parent.StateIndex := 2;
                 //祖父节点
                 Checked := false;
                 Node := Selected.Parent.Parent.GetFirstChild;
                 while Node <> nil do
                    begin
                    if Node.StateIndex = 1 then
                       begin
                       Checked := true;
                       break;
                       end;
                    Node := Node.GetNextChild(Node);;
                    end;
                 if Checked then
                    Selected.Parent.Parent.StateIndex := 1
                 else
                    Selected.Parent.Parent.StateIndex := 2;
              end; //2
           end; //case
         end;//with     // Refresh
         AppTreeView.Selected := nil;
    end;
    -------------------可以参考一下来-----------------------------