01]UniTreeview中能改变一级目录的字体和颜色

02]右建菜单,弹出结点名

03]右键删除叶结点

04]下拉,UniTreeView1选择..不用UniComboBox1

05]结点前添加CheckBox

06]数据库表TUniTreeView树的快速生成

07]勾选某结点时,同时勾选父结点

    勾选某结点时,同时勾选子结点

08]为每个结点添加自定义事件

   081]点击时的事件


01]UniTreeview中能改变一级目录的字体和颜色

function beforeInit(sender, config)

{ ID="#"+config.id;
 Ext.util.CSS.createStyleSheet(`
  ${ID} .x-tree-node-text{color:green;font-weight:800;}  
  ${ID} .x-tree-elbow-line ~ span{color:black;font-weight:400;}
`);  
}

 


  02]右建菜单,弹出结点名

拖一个  UniPopupMenu2到界面上,并添加 菜单

UniTreeView2MouseDown 事件设为

procedure TMainForm.UniTreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  UniPopupMenu2.Items[0].Caption:= UniTreeView1.Selected.Text;
  UniPopupMenu2.Popup(UniTreeView1.Left+ X, UniTreeView1.Top  + y);
end;


 03]右键删除叶结点

procedure TMainForm.UniTreeView1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
 if Button= mbRight then  begin
  UniPopupMenu1.Items[0].Caption:= '是否删除 '+ UniTreeView1.Selected.Text;
  UniPopupMenu1.Popup(UniTreeView1.Left+ X, UniTreeView1.Top  + y);
 end;
end;
procedure TMainForm.N1Click(Sender: TObject);
begin
  if uniTreeView1.Selected.IsLeaf then
     uniTreeView1.Items.Delete(uniTreeView1.Selected)
  else showMessageN('非叶子节点不能删除');
end;

04]下拉,UniTreeView1选择..不用UniComboBox1是因为,下拉 时 ,会一空白行,遮挡了下面的TreeView.

   04a]拖一个UniTreeView1(设置好数据),UniEdit1和,UniBitBtn1(设置好向下拉的图标)

 04b](1)将 UniTreeView1.Visible设为 False

        (2)UniBitBtn1的OnClick事件设为

procedure TMainForm.UniBitBtn1Click(Sender: TObject);
begin
  UniTreeView1.FullExpand;
  UniTreeView1.Show;
end;

     (3)类似地,UniTreeView1的OnClick事件设为  

 

procedure TMainForm.UniTreeView1Click(Sender: TObject);
begin
  UniTreeView1.Hide;
  UniEdit1.Text := UniTreeView1.Selected.Text;
end;


05]结点前添加CheckBox

 unitreeview1.UseCheckBox:=true;
if unitreeview1.Selected.Checked then  showmessageN(unitreeview1.Selected.Text);

 其他节点操作,请参考 ExpressDBTreeView学习(06)    给 TTreeView 添加复选框(转)


06]数据库表TUniDBTreeView树的快速生成

uniGUI学习之UniDBTreeGrid1从数据库建树

07]勾选某结点时,同时勾选父结点

function afterCreate(sender) {
  sender.on('checkchange', function(node, checked) {
    var parentNode = node.parentNode;
    while (parentNode) {
      parentNode.set('checked', checked);
      parentNode = parentNode.parentNode;
    }
  });
}


    勾选某结点时,同时勾选子结点 

function afterCreate(sender) {
  sender.on('checkchange', function(node, checked) {
    node.cascadeBy(function(childNode) {
      childNode.set('checked', checked);
    });
  });
}

同时获得父结点和子结点

function afterCreate(sender) {
  sender.on('checkchange', function(node, checked) {
    node.cascadeBy(function(childNode) {
      childNode.set('checked', checked);
    });

    var parentNode = node.parentNode;
    while (parentNode) {
      parentNode.set('checked', checked);
      parentNode = parentNode.parentNode;
    }
  });
}

 

function afterCreate(sender) {
  sender.on('checkchange', function(node, checked) {
    if (checked == true) {
      node.bubble(function(node) {
        node.set('checked', checked);
      });
      node.cascadeBy(function(node) {
        node.set('checked', checked);
      });
    } else {
      node.cascadeBy(function(node) {
        node.set('checked', checked);
      });
      node.bubble(function(node) {
        var parentChecked = false;
        node.childNodes.forEach(function(childNode) {
          if (childNode.get('checked') == true) {
            parentChecked = true;
          }
        });
        node.set('checked', parentChecked);
      });
    }
  });
}

 

测试unidbtreegrid,有个属性dgindicator,咋也不能true
好像只能用代码修改:
function beforeInit(sender, config)
{
     config.selModel = {
        selType: 'checkboxmodel',
        mode: 'SINGLE'
        //mode: 'MULTI' 多选
    };
}

 08]为每个结点添加自定义事件

 参考自带Demo:___C:\Program Files (x86)\FMSoft\Framework\uniGUI\Demos\Desktop\TreeView - SourceMenu

 081]将UniTreeView1的SourceMenu设置为UniMenuItems1,再双击UniMenuItems1,添加菜单项,然后就会在UniTreeView1里显示

 

082]再绑定结点菜单事件,放一个ActionList1,添加好Action

 083]将UniMenuItems1结点和ActionList1事件 绑定 起来,最终结点名 会以 Action的名为 准

procedure TMainForm.Action1Execute(Sender: TObject);
begin
caption:='Action1Execute结点1';
end;

    081]点击时的事件