|
都是AI给我写的
- unit Unit1;
- interface
- uses
- Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
- System.Classes, Vcl.Graphics,
- Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.ComCtrls, Vcl.StdCtrls,
- Vcl.ExtCtrls, Vcl.WinXCtrls, Vcl.Menus;
- type
- TForm1 = class(TForm)
- SplitView1: TSplitView;
- 展开或折叠: TButton;
- 添加选中节点同级父目录: TButton;
- 添加文件路径: TButton;
- 删除节点: TButton;
- 双击打开文件: TButton;
- 简单写入TreeView1内容测试: TButton;
- TreeView1: TTreeView;
- OpenDialog1: TOpenDialog;
- SaveDialog1: TSaveDialog;
- 简单载入TreeView1内容测试: TButton;
- Edit1: TEdit;
- PopupMenu1: TPopupMenu;
- 将TreeView1各节点转换为PopupMenu1子菜单项: TButton;
- 添加与选中节点同级子目录: TButton;
- procedure 展开或折叠Click(Sender: TObject);
- procedure 添加选中节点同级父目录Click(Sender: TObject);
- procedure 添加文件路径Click(Sender: TObject);
- procedure 删除节点Click(Sender: TObject);
- procedure 双击打开文件Click(Sender: TObject);
- procedure 简单写入TreeView1内容测试Click(Sender: TObject);
- procedure 简单载入TreeView1内容测试Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure TreeView1StartDrag(Sender: TObject; var DragObject: TDragObject);
- procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
- State: TDragState; var Accept: Boolean);
- procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
- procedure MenuItemClick(Sender: TObject);
- procedure 将TreeView1各节点转换为PopupMenu1子菜单项Click(Sender: TObject);
- procedure 添加与选中节点同级子目录Click(Sender: TObject);
- private
- FDragNode: TTreeNode; // 用于存储当前拖动的节点
- { Private declarations }
- procedure ConvertTreeViewToMenu(TreeView: TTreeView; PopupMenu: TPopupMenu);
- procedure AddMenuItem(ParentMenu: TMenuItem; Node: TTreeNode);
- public
- { Public declarations }
- end;
- var
- Form1: TForm1;
- implementation
- {$R *.dfm}
- procedure TForm1.删除节点Click(Sender: TObject);
- begin
- // 删除选中的节点
- if TreeView1.Selected <> nil then
- TreeView1.Items.Delete(TreeView1.Selected);
- end;
- procedure TForm1.双击打开文件Click(Sender: TObject);
- var
- Node: TTreeNode;
- begin
- // 双击打开文件
- Node := TreeView1.Selected;
- if (Node <> nil) and (Node.Parent <> nil) then // 如果是文件节点
- begin
- if FileExists(Node.Text) then
- // ShellExecute(0, 'open', PChar(Node.Text), nil, nil, SW_SHOWNORMAL)
- else
- ShowMessage('File not found: ' + Node.Text);
- end;
- end;
- procedure TForm1.将TreeView1各节点转换为PopupMenu1子菜单项Click(Sender: TObject);
- begin
- // 清空 PopupMenu
- PopupMenu1.Items.Clear;
- // 将 TreeView 转换为 PopupMenu
- ConvertTreeViewToMenu(TreeView1, PopupMenu1);
- // 显示 PopupMenu
- PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
- end;
- procedure TForm1.展开或折叠Click(Sender: TObject);
- begin
- SplitView1.Opened := not SplitView1.Opened; // 切换 SplitView 的展开/折叠状态
- end;
- procedure TForm1.添加与选中节点同级子目录Click(Sender: TObject);
- var
- Node: TTreeNode;
- begin
- // 添加子目录(作为选中节点的子节点)
- if TreeView1.Selected <> nil then
- begin
- Node := TreeView1.Items.AddChild(TreeView1.Selected, Edit1.Text);
- Node.ImageIndex := 1; // 设置图标(可选)
- Node.SelectedIndex := 1;
- TreeView1.Selected.Expand(True); // 展开父节点
- end
- else
- begin
- ShowMessage('请先选择一个节点!');
- end;
- end;
- procedure TForm1.添加文件路径Click(Sender: TObject);
- var
- Node: TTreeNode;
- begin
- // 添加文件路径
- if OpenDialog1.Execute then
- begin
- Node := TreeView1.Items.AddChild(TreeView1.Selected, OpenDialog1.FileName);
- Node.ImageIndex := 1; // 设置图标(可选)
- Node.SelectedIndex := 1;
- end;
- end;
- procedure TForm1.添加选中节点同级父目录Click(Sender: TObject);
- var
- Node: TTreeNode;
- begin
- // 添加目录(与选中节点同级)
- if TreeView1.Selected <> nil then
- begin
- Node := TreeView1.Items.Add(TreeView1.Selected.Parent, Edit1.Text);
- Node.ImageIndex := 0; // 设置图标(可选)
- Node.SelectedIndex := 0;
- end
- else
- begin
- ShowMessage('请先选择一个节点!');
- end;
- end;
- procedure TForm1.简单写入TreeView1内容测试Click(Sender: TObject);
- begin
- TreeView1.SaveToFile('abc.txt');
- end;
- procedure TForm1.简单载入TreeView1内容测试Click(Sender: TObject);
- begin
- TreeView1.LoadFromFile('abc.txt');
- end;
- procedure TForm1.FormCreate(Sender: TObject);
- var
- RootNode, ChildNode: TTreeNode;
- begin
- // 添加示例数据到 TreeView
- RootNode := TreeView1.Items.Add(nil, 'Root Node 1');
- ChildNode := TreeView1.Items.AddChild(RootNode, 'Child Node 1.1');
- TreeView1.Items.AddChild(ChildNode, 'Grandchild Node 1.1.1');
- TreeView1.Items.AddChild(RootNode, 'Child Node 1.2');
- RootNode := TreeView1.Items.Add(nil, 'Root Node 2');
- TreeView1.Items.AddChild(RootNode, 'Child Node 2.1');
- // 展开所有节点
- TreeView1.FullExpand;
- end;
- procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
- var
- TargetNode: TTreeNode;
- begin
- // 获取鼠标位置下的目标节点
- TargetNode := TreeView1.GetNodeAt(X, Y);
- if (TargetNode <> nil) and (FDragNode <> nil) then
- begin
- // 将拖动节点移动到目标节点下
- FDragNode.MoveTo(TargetNode, naAddChild); // naAddChild 表示作为子节点
- TargetNode.Expand(True); // 展开目标节点
- end;
- end;
- procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
- State: TDragState; var Accept: Boolean);
- var
- TargetNode: TTreeNode;
- begin
- // 获取鼠标位置下的目标节点
- TargetNode := TreeView1.GetNodeAt(X, Y);
- // 允许拖动的条件:
- // 1. 拖动源是 TreeView 自身
- // 2. 目标节点存在
- // 3. 目标节点不是拖动节点的子节点(避免循环嵌套)
- Accept := (Source = TreeView1) and (TargetNode <> nil) and
- (not FDragNode.HasAsParent(TargetNode));
- end;
- procedure TForm1.TreeView1StartDrag(Sender: TObject;
- var DragObject: TDragObject);
- begin
- // 开始拖动时,记录当前拖动的节点
- FDragNode := TreeView1.Selected;
- end;
- procedure TForm1.ConvertTreeViewToMenu(TreeView: TTreeView;
- PopupMenu: TPopupMenu);
- var
- i: Integer;
- begin
- // 遍历所有根节点
- for i := 0 to TreeView.Items.Count - 1 do
- begin
- if TreeView.Items[i].Parent = nil then // 根节点
- AddMenuItem(PopupMenu.Items, TreeView.Items[i]);
- end;
- end;
- procedure TForm1.AddMenuItem(ParentMenu: TMenuItem; Node: TTreeNode);
- var
- MenuItem: TMenuItem;
- i: Integer;
- begin
- // 创建菜单项
- MenuItem := TMenuItem.Create(Self);
- MenuItem.Caption := Node.Text;
- // 如果是叶子节点(没有子节点),绑定点击事件
- if Node.Count = 0 then
- MenuItem.OnClick := MenuItemClick;
- // 将菜单项添加到父菜单
- ParentMenu.Add(MenuItem);
- // 递归处理子节点
- for i := 0 to Node.Count - 1 do
- begin
- AddMenuItem(MenuItem, Node.Item[i]);
- end;
- end;
- procedure TForm1.MenuItemClick(Sender: TObject);
- begin
- // // 处理菜单项点击事件
- ShowMessageFmt('你点击了: %s', [TMenuItem(Sender).Caption]);
- end;
- end.
复制代码 |
|