Форум: "WinAPI";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
ВнизDrag&Drop and TTreeView Найти похожие ветки
← →
SH (2003-06-03 16:56) [0]Как сделать, чтобы в TTreeView можно было мышкой перетаскивать строки дерева, меняя их расположение в общей структуре. Подобную фичу можно например наблюдать в The Bat (Ctrl+Shift на каком либо элементе дерева папок и стрелками перемещаем ветки ниже или выше по дереву).
← →
MBo (2003-06-03 17:12) [1]на API?
← →
DVM (2003-06-03 17:16) [2]Если на API то на MSDN есть пример как раз того что надо. Только на C. Но там все просто.
← →
SH (2003-06-03 18:49) [3]А ещё предложения есть?
← →
MBo (2003-06-03 19:02) [4]А что не нравится?
← →
SH (2003-06-16 16:22) [5]Большой очень этот MSDN, заблудился я... Нашёл что-то про DragDropEnabled Property, но на поверку сие оказалось абсолютно левым. Если не трудно, киньте прямой линк или конкреиный совет.
← →
Spawn (2003-06-16 20:45) [6]Есть примерчик)) Из книжечки Марко Кенту. Нада?
← →
ZEE (2003-06-17 17:54) [7]Я перемещаю так:
var node:TTreeNode;
...
//вверх
node:=TreeView1.Selected.GetPrevSibling;
if node<>nil then TreeView1.Selected.MoveTo(node,nainsert);
//вниз меняем GetPrevSibling на GetNextSibling
← →
SH (2003-06-19 13:35) [8]>>Есть примерчик))...
Ещё спрашиваешь! Конечно надо, давай показывай - посмотрю, что за зверь такой. Только небольшая просьба: снабди сие комментариями на русском языке, можно личного производства :-)
← →
Spawn (2003-06-20 06:18) [9]procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
var
TargetNode, SourceNode: TTreeNode;
begin
TargetNode := TreeView1.GetNodeAt (X, Y);
// accept dragging from itself
if (Source = Sender) and (TargetNode <> nil) then
begin
Accept := True;
// determines source and target
SourceNode := TreeView1.Selected;
// look up the target parent chain
while (TargetNode.Parent <> nil) and
(TargetNode <> SourceNode) do
TargetNode := TargetNode.Parent;
// if source is found
if TargetNode = SourceNode then
// do not allow dragging over a child
Accept := False;
end
else
Accept := False;
end;
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject;
X, Y: Integer);
var
TargetNode, SourceNode: TTreeNode;
begin
TargetNode := TreeView1.GetNodeAt (X, Y);
if TargetNode <> nil then
begin
SourceNode := TreeView1.Selected;
SourceNode.MoveTo (TargetNode, naAddChildFirst);
TargetNode.Expand (False);
TreeView1.Selected := TargetNode;
end;
end;
← →
SH (2003-06-24 18:46) [10]> ZEE c (17.06.03 17:54)
> Я перемещаю так: ...
Спасибо ZEE, вы мне дали хороший старт.
Для тех, кто интересуется этой веткой форума, сообщаю чего я нашёл и
сделал к этому времени. Плюс ниже про новые проблемы.
Нашёл.
--------
Прекрасная статья Бориса Новгородова про Drag&Drop прямо на этом сайте.
Статья называется "Примеры использования Drag and Drop для различных визуальных
компонентов".
Слелал.
-------
Вот этот примерчик:
procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean);
begin
Accept:=(Source=Sender);
end;
procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
SelNode,TarNode:TTreeNode;
begin
SelNode:=TreeView1.Selected;
TarNode:=TreeView1.GetNodeAt(X,Y);
if TarNode<>nil then
SelNode.MoveTo(TarNode,naInsert);
end;
-------
Чего ещё надо
-------------
Ни как не удаётся запрограммировать нужное поведение в
TreeView1DragDrop. Там сейчас используется naInsert и работает сие по
принципу чистейшей вставки, а мне надо что-то типа naSwap (чтобы не
вставлялось, а происходила замена содержимого приёмника на сод. источника,
при этом сам источник должен получить значение приёмника, которое было у
последнего до замены). Во как запутано вышло... Короче надо махнуть два
itema местами. Проблема в том, что перепахав кучу методов и свойств
TTreeView и TTreeNode я до сих пор не нашёл ничего подходящего для
операции замены. Попадается только типа: "добавь в конец", "добавь в
начало", "вставь". Попытки извратиться, (т.е. применить обычную вставку, а
потом перетасовать пару ветвей, чтобы добится нужного), пока не получили
успеха.
Может тут какая-нибудь WinApi функция нужна? Кто может помочь?
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.08.25;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.07 c