zoukankan      html  css  js  c++  java
  • 菜单树

    菜单树

    // add by cxg 2017-4-18

    unit uTree;

    interface

    uses
    SysUtils, Classes, ComCtrls, DB, DBClient;

    type
    PNodeRec = ^TNodeRec;

    TNodeRec = record // 树节点记录
    id: string;
    name: string;
    pid: string;
    formname: string; // add by cxg 2017-2-14
    bplname: string; // add by cxg 2017-4-18
    end;

    procedure CreateTree(dataset: TClientDataSet; treeview: TTreeView; id, aname, parentid: string);

    procedure FreeTree(treeview: TTreeView);

    implementation

    procedure CreateTree(dataset: TClientDataSet; treeview: TTreeView; id, aname, parentid: string);
    // table struct example: id,name,pid
    var
    List: TStringList;
    Node: TTreeNode;
    Index: Integer;
    PNode: PNodeRec;
    begin
    if not dataset.Active or dataset.IsEmpty then
    Exit;
    treeview.Items.Clear;
    List := TStringList.Create;
    try
    List.Sorted := True;
    dataset.First;
    while not dataset.Eof do
    begin
    PNode := new(PNodeRec);
    PNode^.id := dataset.FieldByName(id).Text;
    PNode^.name := dataset.FieldByName(aname).Text;
    PNode^.pid := dataset.FieldByName(parentid).Text;
    // add by cxg 2017-2-14
    if dataset.FindField('formname') <> nil then
    PNode.formname := dataset.FindField('formname').Text;
    // add by cxg 2017-4-18
    if dataset.FindField('bplname') <> nil then
    PNode.bplname := dataset.FindField('bplname').Text;
    if (dataset.FieldByName(parentid).Text = '') or (dataset.FieldByName(id).Text = dataset.FieldByName(parentid).Text) then
    // add root node
    Node := treeview.Items.AddChild(nil, dataset.FieldByName(aname).Text)
    else
    begin
    // add child node
    Index := List.IndexOf(dataset.FieldByName(parentid).Text);
    Node := treeview.Items.AddChild(TTreeNode(List.Objects[Index]), dataset.FieldByName(aname).Text);
    end;
    Node.Data := PNode;
    List.AddObject(dataset.FieldByName(id).Text, Node);
    dataset.Next;
    end;
    finally
    List.Free;
    end;
    end;

    procedure FreeTree(treeview: TTreeView);
    var
    i: Integer;
    Node: TTreeNode;
    begin
    for i := treeview.Items.Count - 1 downto 0 do
    begin
    Node := treeview.Items[i];
    Dispose(PNodeRec(Node.Data));
    end;
    end;

    end.

  • 相关阅读:
    嵌入式编程中使用 do{...} while(0) 的解释
    ESP32学习笔记(一) 环境搭建与下载
    预告:准备开个坑,集中学习一下esp32模块
    【信号与系统】多项式化简方法
    nginx二级域名代理
    nginx配置ssl证书
    springBoot使用阿里云的证书
    vue-cli3项目开启less支持并引入短链接
    一键安装系列
    centos7增加swap
  • 原文地址:https://www.cnblogs.com/hnxxcxg/p/6726558.html
Copyright © 2011-2022 走看看