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 drag & drop mit VST und Listbox (https://www.delphipraxis.net/112268-drag-drop-mit-vst-und-listbox.html)

made in Germany 17. Apr 2008 22:24


drag & drop mit VST und Listbox
 
abend,

ich grieg das mit dem drag & drop irgendwie nicht hin.

die markierten strings aus VST (daten.CPath) sollen per drag and drop in eine listbox übertragen werden.
über einen button hab ichs schon geschafft

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  node, selnode: PVirtualNode;
  daten: CTreedata;
  anz, i:integer;
begin
SelNode := VST.GetFirstSelected;
  while SelNode <> nil do
  begin
  daten := CTreedata (VST.GetNodeData(selnode)^);
  Listbox1.Items.Add(CTreedata(daten).CPath);

    SelNode := VST.GetNextSelected(SelNode);
  end;
  end;
wie grieg ich das jetzt über drag & drop zum laufen?

marabu 18. Apr 2008 06:26

Re: drag & drop mit VST und Listbox
 
Moin,

dein Code gehört in die Ereignisbehandlung für ListBox.OnDragDrop, auch für ListBox.OnDragOver solltest du eine Zeile vorsehen.

Delphi-Quellcode:
procedure TDemoForm.ListBoxDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  Accept := (Source = VST) and Assigned(VST.GetFirstSelected);
end;

procedure TDemoForm.ListBoxDragDrop(Sender, Source: TObject; X,
  Y: Integer);
var
  vn: PVirtualNode;
  nd: PNodeData;
begin
  with Sender as TListBox do
  begin
    vn := VST.GetFirstSelected;
    while Assigned(vn) do
    begin
      nd := VST.GetNodeData(vn);
      Items.Add(nd.CPath);
      vn := VST.GetNextSelected(vn);
    end;
  end;
end;
Grüße vom marabu

made in Germany 18. Apr 2008 15:45

Re: drag & drop mit VST und Listbox
 
so, hab den code noch etwas geändert.
bei
Delphi-Quellcode:
  Accept := (Source = VST) and Assigned(VST.GetFirstSelected);
kam bei mir der Fehler "Variable erforderlich".

und
Delphi-Quellcode:
  nd := VST.GetNodeData(vn);
benötigt einen zeiger oder sowas, mit
Delphi-Quellcode:
 
PNodeData(nd := VST.GetNodeData(vn)^);
funktionierts.

hier nochmal der gesamte quelltext:
Delphi-Quellcode:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  if Assigned(VST.FocusedNode) then
  Accept := (Source = VST);// and Assigned(VST.GetFirstSelected);
end;

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
  selnode: PVirtualNode;
  daten: CTreedata;
begin
  with Sender as TListBox do
  begin
    selnode := VST.GetFirstSelected;
    while Assigned(selnode) do
    begin
      daten := CTreedata (VST.GetNodeData(selnode)^);
      Items.Add(daten.CPath);
      selnode := VST.GetNextSelected(selnode);
    end;
  end;
end;

danke marabu :thumb:


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:18 Uhr.

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