Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.06.2009, 08:21   #1
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию реализация Drag /n/ Drop в TreeView

Сколько исходников перекопал ,ничерта не работает.
Спасибо.
nusik вне форума Ответить с цитированием
Старый 11.06.2009, 09:26   #2
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

После того ка дерево создано, например так:

Код:
   N1 := TreeView1.Items.Add(nil, '1');
  TreeView1.Items.AddChild(N1, '2');
  TreeView1.Items.AddChild(N1, '3');
  TreeView1.Items.AddChild(N1, '4');
  N1 := TreeView1.Items.Add(nil, '5');
  TreeView1.Items.AddChild(N1, '6');
  TreeView1.Items.AddChild(N1, '7');
  TreeView1.Items.AddChild(N1, '8');
или

Код:
   TreeView1.LoadFromFile('...');
То нужно поставить свойство
Код:
TreeView1.DragMode := dmAutomatic;
Тогда претаскивать пункты можно кодом:
Код:
 procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: integer);
var
  Src, Dst : TTreeNode;
begin
  Dst := TreeView1.GetNodeAt(X, Y);
  if Dst <> nil then begin
        Src := TreeView1.Selected;
        Src.MoveTo(Dst, naAddChildFirst);
        Dst.Expand(False);
        TreeView1.Selected := Dst;
  end;
end;
Либо целые деревья:
Код:
 procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: integer;
  State: TDragState; var Accept: Boolean);
var
  Src, Dst : TTreeNode;
begin
  Dst := TreeView1.GetNodeAt(X, Y);
  if (Src = Sender) and (Dst <> nil) then begin
        Accept := True;
        Src := TreeView1.Selected;
        while (Dst.Parent <> nil) and (Dst <> Src) do
             Dst := Dst.Parent;
        if Src = Dst then
             Accept := False;
  end else
      Accept := False;
end;
BaronTreep вне форума Ответить с цитированием
Старый 11.06.2009, 10:26   #3
BaronTreep
Форумчанин
 
Регистрация: 29.05.2009
Сообщений: 320
По умолчанию

А если имелось в виде - кинуть ФАЙЛ в TreeView. То тогда примерно так:

Код:
 uses
  ... ShellApi;

type
  TForm1 = class(TForm)
  ...
  end;

type TTreeViewMOI = class(TTreeView)
  private
    procedure DragFile(var Message: TWMDropFiles); message WM_DROPFILES;
    procedure DragFileExecute(const FileName : string);
  public
  end;

var
  Form1 : TForm1;
  TreeView1 : TTreeViewMOI;

...

procedure TTreeViewMOI.DragFileExecute(const FileName : string);
begin
  TreeView1.LoadFromFile(FileName);
end;

procedure TTreeViewMOI.DragFile(var Message: TWMDropFiles);
var
  PFileName: array [0..255] of char;
begin
  try
    if DragQueryFile(Message.Drop, 0, PFileName, MAX_PATH) > 0 then
    begin
      Message.Result := 0;
      DragFileExecute(PFileName);
    end;
  finally
    DragFinish(Message.Drop);
  end;
end;

procedure TForm1.FormShow(Sender: TObject);
begin
  TreeView1 := TTreeViewMOI.Create(Self);
  TreeView1.Parent := Self;
  DragAcceptFiles(TreeView1.Handle, True);
  TreeView1.Width := 500;
  TreeView1.Height := 400;
  // TreeView1....
end;

...
Проще что-то не догадался.
BaronTreep вне форума Ответить с цитированием
Старый 11.06.2009, 21:11   #4
nusik
Форумчанин
 
Регистрация: 13.04.2009
Сообщений: 117
По умолчанию

благодарю-с
nusik вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
drag $ drop в DBGrid AlexandrSid Общие вопросы Delphi 13 21.06.2010 10:55
Нужна помощь (Drag-And-Drop & Drag-Abd-Dock)) Arkuz Общие вопросы Delphi 1 18.04.2009 00:15
Drag and drop. Как???? Ky3Heu, Общие вопросы Delphi 2 09.04.2009 12:43
Drag and Drop в JavaScript Ruska882009 JavaScript, Ajax 1 02.04.2009 16:46
Drag and Drop Xardas Общие вопросы Delphi 8 20.01.2008 23:09