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. 父节点实现打开脚本/文件
完全可以实现,以下是右键菜单触发的示例:
- 给TreeList添加右键菜单,新增「打开脚本」菜单项
- 在菜单项的
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
相关产品推荐
相关产品推荐

