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

Перенос элементов в TTreeView

Delphi , Синтаксис , Drag and Drop

Перенос элементов в TTreeView

Оформил: DeeCo
Автор: http://www.swissdelphicenter.ch

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.

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

Код - это программный проект на языке Delphi, который позволяет перемещать узлы в компоненте TTreeView с помощью операций перетаскивания.

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

  1. Единица Unit1 определяет форму (TForm1) с компонентом TVewView (TreeView1) и меткой (Label1). Форма имеет два приватных процедура: MoveNode и TreeView1DragDrop, а также один публичный процедура: TreeView1DragOver.

  2. Процедура MoveNode принимает два параметра: TargetNode и SourceNode, которые являются объектами типа TTreeNode. Она перемещает узел из SourceNode в TargetNode добавлением нового дочернего узла с тем же текстом, что и оригинальный узел, а затем рекурсивно перемещает все его подузлы.

  3. Процедура TreeView1DragDrop вызывается при завершении операции перетаскивания на дереве просмотра. Она получает целевой узел в месте сброса с помощью GetNodeAt, а также исходный узел из выбранного узла в дереве просмотра. Если нет целевого узла, она заканчивает операцию перетаскивания. Иначе, она перемещает узел в целевой узел и освобождает оригинальный узел.

  4. Процедура TreeView1DragOver вызывается при перетаскивании элемента над деревом просмотра. Она проверяет, является ли отправителем дерево просмотра само (т.е., не является дочерним контролем) и устанавливает параметр Accept в значение True, если это так, позволяя операции перетаскивания быть принята.

Код хорошо организован и легко понятен, с ясными именами переменных и правильным использованием отступов. Однако есть несколько минорных проблем:

  • Процедура MoveNode может быстрее работать с ошибками, если исходный узел или его подузлы не могут быть перемещены (например, из-за отсутствия прав).
  • Процедура TreeView1DragDrop освобождает оригинальный узел после перемещения, что может не всегда быть желаемым поведением. Рекомендуется вместо этого хранить ссылку на оригинальный узел.
  • Код может быстрее работать с дополнительными комментариями, объясняющими, что каждая процедура делает и как она работает.

В целом, этоsolid piece of code, который демонстрирует эффективное использование функциональности перетаскивания в Delphi.

В статье описывается реализация функции переноса элементов в компонент TTreeView Delphi с помощью обработки событий DragDrop и DragOver.


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

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




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


:: Главная :: Drag and Drop ::


реклама


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

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