アイテムをドラッグ&ドロップで移動させられるような機能のついたTTreeViewのような(派生したものでも、そうでなくとも)コンポーネントはなにかないのでしょうか?
探しては見たものの見つからなかったので皆様のお力を借りたいと重い、質問させていただきました。
一応、自分でその機能を持たせたTtreeViewはできるのですが、少し不具合があったり、コンポーネント化できなかったりと問題が多いので、このくらいのコンポーネントならどこかにないだろうか、という考えです。
もし、ないようでしたら、もう一度自分で頑張ってみようかと思います。
参考程度のものでもよいので、もしご存知の方がいらっしゃいましたらぜひ教えていただきたいです。
宜しくお願いします><
アイテムではなく、ノードですね。
間違い申し訳ないです
unit MyTreeView;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls;
type
TMyTreeView = class(TTreeView)
private
procedure DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
public
constructor Create(AOwner: TComponent); override;
end;
procedure Register;
implementation
procedure Register;
begin
RegisterComponents('Samples', [TMyTreeView]);
end;
constructor TMyTreeView.Create(AOwner: TComponent);
begin
inherited Create(AOwner);
DragMode := dmAutomatic;
OnDragDrop := DragDrop;
OnDragOver := DragOver;
end;
procedure TMyTreeView.DragDrop(Sender, Source: TObject; X, Y: Integer);
procedure MoveNode(dstNode, srcNode : TTreeNode);
var
aNode : TTreeNode;
i : Integer;
begin
with TMyTreeView(Sender) do begin
aNode := Items.AddChild(dstNode, srcNode.Text);
for i := 0 to srcNode.Count - 1 do begin
MoveNode(aNode, srcNode.Item[i]);
end;
end;
end;
var
dstNode, srcNode : TTreeNode;
begin
with TMyTreeView(Sender) do begin
srcNode := Selected;
dstNode := GetNodeAt(X, Y); // dstNodeがnilならRootにDrop
if dstNode = srcNode then exit;
MoveNode(dstNode, srcNode);
srcNode.Delete;
end;
end;
procedure TMyTreeView.DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept := (Sender = Source);
end;
end.
> 移動させれる
君はプログラム言語よりまず日本語をマスターしたまえ。
嫌韓厨房さん
ツイート | ![]() |