Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi TTreeview und Dragdrop (https://www.delphipraxis.net/150816-ttreeview-und-dragdrop.html)

R2009 28. Apr 2010 07:31


TTreeview und Dragdrop
 
Hi DP'ler,
ich habe mal wieder ein kleines Problem weiss aber nicht warum sich der Code so verhält.
Auf meiner Form existiert ein Treeview und eine listbox. In der Listbox habe ich Dragmode auf automatic stehen.
Ziel soll sein den selektierten Eintrag aus der Listbox unter einem bestimmten Knoten im Treeview abzulegen.

In meinem Treeview habe ich folgenden Code implementiert:

Delphi-Quellcode:
procedure Tform_so.TVDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
var tn,tn1,tn2:ttreenode;
begin
  tn := TV.GetNodeAt(X, Y);
  if assigned(tn) then
    begin
      if (tn.Text='Telegramme') then
         begin
           tn.DeleteChildren;
           tn2:=TV.Items.AddChild(tn,'Aktiv Ein:'+'1,2,5,8,21 '+'Aktiv Aus'+'1,2,5,8,22');//'Dies ist ein Text';
           tn2:=TV.Items.AddChild(tn,'Passiv Ein:'+'1,2,5,8,21 '+'Passiv Aus'+'1,2,5,8,22');//'Dies ist ein Text';
           tn2:=TV.Items.AddChild(tn,'SB: 0000  TSB: 0000  TYP: 0000 GRP: 0000');//'Dies ist ein Text';
           TV.FullExpand;
           (Source as TListbox).EndDrag(False);
           accept:=true;
           application.ProcessMessages;
         end;
    end;
end;
Das Problem ist, dass sich das Programm aufhängt sobald ich den Knoten mit dem Text Telegramme erreicht habe.
Was mach ich falsch?

Grüsse
Rainer

user0815 28. Apr 2010 11:23

Re: TTreeview und Dragdrop
 
Funktioniert.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
begin
  TreeView1.DragMode := dmAutomatic;
  ListBox1.DragMode := dmAutomatic;

  ListBox1.Items.Add('A');
  ListBox1.Items.Add('B');
  ListBox1.Items.Add('C');

  TreeView1.Items.Insert(nil, '1');
  TreeView1.Items.Insert(nil, 'Telegramme');
  TreeView1.Items.Insert(nil, '3');
end;

procedure TForm1.TreeView1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := Sender = TreeView1;
end;

procedure TForm1.TreeView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  DropItem, CurrentItem : TTreeNode;
  i : Integer;
begin
  DropItem := TreeView1.GetNodeAt(X, Y);

  if assigned(DropItem) then
  begin
    if DropItem.Text = 'Telegramme' then
    begin
      DropItem.DeleteChildren;
      TreeView1.Items.AddChild(DropItem, ListBox1.Items.Strings[ListBox1.ItemIndex]);
      TreeView1.FullExpand;
    end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:01 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz