You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi运行时给DBTreeList添加新行及右键功能实现咨询

Delphi TreeList 实用操作方案

1. 运行时输入描述插入新行

通过输入框获取用户输入的bez描述,直接在TreeList中添加新节点,如需同步数据库可补充对应操作:

var
  NewBez: string;
  NewNode: TTreeNode;
begin
  if InputQuery('添加新行', '请输入描述(bez):', NewBez) then
  begin
    // 插入到根节点末尾
    NewNode := TreeList1.Items.Add(nil, NewBez);
    
    // 可选:同步到数据库(以ADO为例)
    // ADOTable1.Insert;
    // ADOTable1.FieldByName('bez').AsString := NewBez;
    // ADOTable1.Post;
  end;
end;

2. 右键父节点添加子节点

通过鼠标右键事件判断点击节点,仅对父节点(示例以Level=0判断,可按需调整规则)触发子节点添加:

procedure TForm1.TreeList1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
var
  HitNode: TTreeNode;
  NewBez: string;
begin
  if Button = mbRight then
  begin
    HitNode := TreeList1.GetNodeAt(X, Y);
    if Assigned(HitNode) and (HitNode.Level = 0) then
    begin
      if InputQuery('添加子节点', '请输入子节点描述(bez):', NewBez) then
        TreeList1.Items.AddChild(HitNode, NewBez);
    end;
  end;
end;

优化建议:添加TPopupMenu,右键父节点时弹出「添加子节点」菜单,操作更直观。在菜单的OnPopup事件中判断选中节点是否为父节点,动态启用/禁用菜单项。

3. 父节点实现打开脚本/文件

完全可以实现,以下是右键菜单触发的示例:

  1. 给TreeList添加右键菜单,新增「打开脚本」菜单项
  2. 在菜单项的OnClick事件中添加代码:
uses ShellAPI;

procedure TForm1.OpenScriptMenuItemClick(Sender: TObject);
var
  SelectedNode: TTreeNode;
  ScriptPath: string;
begin
  SelectedNode := TreeList1.Selected;
  if Assigned(SelectedNode) and (SelectedNode.Level = 0) then
  begin
    // 可根据实际逻辑获取脚本路径(比如从数据库、节点Data属性读取)
    ScriptPath := InputBox('打开脚本', '脚本路径:', '');
    if FileExists(ScriptPath) then
      ShellExecute(0, 'open', PChar(ScriptPath), nil, nil, SW_SHOWNORMAL);
  end;
end;

内容的提问来源于stack exchange,提问作者Kudo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 01:10:35