Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

Как реализовать Drag and Drop в TTreeView

Delphi , Компоненты и Классы , TTreeView

Как реализовать Drag and Drop в TTreeView

Автор: Васильев Василий

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Controls, Forms,
  Dialogs, StdCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    TreeView1: TTreeView;
    Label1: TLabel;
    procedure TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
  private
    { Private declarations }
    procedure MoveNode(TargetNode, SourceNode: TTreeNode);
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

//
// Procedure which will move node and its subnodes
//

procedure TForm1.MoveNode(TargetNode, SourceNode: TTreeNode);
var
  nodeTmp: TTreeNode;
  i: Integer;
begin
  with TreeView1 do
  begin
    nodeTmp := Items.AddChild(TargetNode, SourceNode.Text);
    for i := 0 to SourceNode.Count - 1 do
    begin
      MoveNode(nodeTmp, SourceNode.Item[i]);
    end;
  end;
end;

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  TargetNode, SourceNode: TTreeNode;
begin
  with TreeView1 do
  begin
    TargetNode := GetNodeAt(X, Y); // Get target node
    SourceNode := Selected;
    if (TargetNode = nil) then
    begin
      EndDrag(False);
      Exit;
    end;
    MoveNode(TargetNode, SourceNode);
    SourceNode.Free;
  end;
end;

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if (Sender = TreeView1) then // If TRUE than accept the draged item
  begin
    Accept := True;
  end;
end;

end.

Привет! Я переведу текст на русский язык:

Код, предоставленный ниже, это реализация функциональности Drag-and-Drop в контроле TTreeView Delphi. Он позволяет пользователям выбирать узлы, перетаскивать их и оставлять в новых местах внутри дерева.

Вот разбивка кода:

  1. Процедура MoveNode используется для перемещения узла (и его подузлов) из одного места в другое. Она принимает два параметра: целевой узел и источник узла.
  2. В процедуре TreeView1DragDrop, когда узел опускается, она вызывает MoveNode, чтобы переместить выбранный узел в новое место. Затем выбранный узел освобождается для удаления из оригинального места.

Код включает:

  • Treeview1: Контрол TTreeView, позволяющий пользователям выбирать и перетаскивать узлы.
  • Label1: Контрол TLabel, используемый как метка.
  • Процедуры MoveNode, TreeView1DragDrop и TreeView1DragOver: Они являются обработчиками событий для операций перетаскивания.

Описание кода

  • В процедуре MoveNode узел и его подузлы перемещаются из одного места в другое. Это делается созданием нового дочернего узла с тем же именем, что и источник узла, а затем рекурсивным перемещением каждого подузла источника узла в новый узел.
  • Процедура TreeView1DragDrop вызывается, когда узел опускается. Она получает целевой узел по указанным координатам x и y, а затем перемещает выбранный узел (который является источником узла) в целевой узел. Затем источник узла освобождается для удаления из оригинального места.
  • В процедуре TreeView1DragOver проверяется, должен ли перетаскиваемый элемент быть принят или нет. Если отправителем является сам контрол TreeView, то операция перетаскивания принимается, и переменная Accept устанавливается в True.

Код демонстрирует, как реализовать основные функции Drag-and-Drop в контроле TTreeView.

В статье описывается реализация функции Drag и Drop в компоненте TTreeView Delphi, которая позволяет перемещать узлы дерева между собой с помощью dragging и dropping.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TTreeView ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-11-21 12:15:49/0.0036458969116211/0