Страница 1 из 1
TTreeView Drag&Dock
Добавлено: 23 дек 2005, 13:11
Blood_Magic
Ктобы мог подумать что через столько лет буду задавать такие "глупые" вопросы...
Народ, как в TTreeView сделать Drag&Dock чтобы можно было переносить элементы из одного узла в другой мышью.
в
Код: Выделить всё
procedure Tfm.TreeViewDragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
Sender и Source одно и тоже, источник скажем можно определить из TreeView.Selected а как определить приемник???
Добавлено: 23 дек 2005, 15:06
Игорь Акопян
об чём речь? в Д5 это выглядело иначе
DragOver(Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
в любом случае - Source - это то что тащим, а куда притащили получить через GetNodeAt(X, Y)
(как-то так - сорри код был чужой, разбираться времени не было)
Добавлено: 23 дек 2005, 17:10
Duncon
Код: Выделить всё
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 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);
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
begin
Accept := True;
end;
end;
end.
[/color]
Добавлено: 29 дек 2005, 15:47
Blood_Magic
Пасибо, заработало!