Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#5

Re: DBTreeView - drag and drop

  Alt 13. Feb 2004, 16:15
Sorry, dass ich micherst jetzt wieder melde -> Stress.

Hast du die Sources zu der Demo dazu bekommen?
Da wird ja 'ne Menge Drag 'n Drop verwendet ...

Im Normalfall kann man es so machen:

OnDragOver des Ziels:

Delphi-Quellcode:
  If Source Is TTreeView Then
    Accept := True;
OnMouseDown des UrsprungsTreeview:
Delphi-Quellcode:
  With Sender As TTreeView Do
    If Assigned(GetNodeAt(X, Y)) Then
      BeginDrag(False, 10);
OnDragDrop des Ziels:

Verschieben des Node...

Delphi-Quellcode:
Var
  drSource, drSender : TTreeView;
  drNode : TTreeNode;
  AttachMode : TNodeAttachMode;
  HT : THitTests;
Begin

  drSource := Source As TTreeView;
  drSender := Sender As TTreeView;
  
  // Wenn kein Node im HerkunftsTreeView markiert ist -> Exit...
  If drSource.Selected = Nil Then Exit;
  drNode := drSender.GetNodeAt(X, Y);
  
  HT := drSender.GetHitTestInfoAt(X, Y);

  If (HT -
    [htOnItem, htOnIcon, htNowhere, htOnIndent]
    <> HT) Then
  Begin
    If (htOnItem In HT) Or
      (htOnIcon In HT) Then
      AttachMode := naAddChild
    Else If htNowhere In HT Then
      AttachMode := naAdd
    Else If htOnIndent In HT Then
      AttachMode := naInsert;

    // Verschiebe Node ...
    drSource.Selected.MoveTo(drNode, AttachMode);
  End;

End;
Kopieren ist einfacher...

Delphi-Quellcode:
  drSource := Source As TTreeView;
  drSender := Sender As TTreeView;
  
  // Wenn kein Node im HerkunftsTreeView markiert ist -> Exit...
  If drSource.Selected = Nil Then Exit;
  drNode := drSender.GetNodeAt(X, Y);
  If Not Assigned(drNode) Then Exit;

  drSender.Items.AddChild(drNode, drSource.Selected.Text).Selected := True;
Ich hoffe ich habe keine Fehler eingebaut...
  Mit Zitat antworten Zitat