![]() |
Items einer ListBox mittels DragDrop verschieben?
Kann mir jemand auf die Sprünge helfen wie ich die Items bzw. ein Item einer ListBox mittels DragDrop verschiebe?
Alex |
Re: Items einer ListBox mittels DragDrop verschieben?
OnDragOver, OnEndDrag usw.
Gruß oki |
Re: Items einer ListBox mittels DragDrop verschieben?
Ja das ist klar, aber weiter? :gruebel:
Hab jetzt folgendes gefunden, aber irgendwie funkt der Code nicht :gruebel:
Delphi-Quellcode:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); begin Accept := Source is TListbox; end; procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer); var TargetIndex : Integer; begin if (Sender is TListBox) and (Source is TListBox) then begin with Sender as TListBox do begin TargetIndex := -1; TargetIndex := ItemAtPos(Point(X, Y), True); if (ItemIndex > -1) and (TargetIndex > -1) then Items.Move(ItemIndex, TargetIndex); end; end; end; |
Re: Items einer ListBox mittels DragDrop verschieben?
Ist DragMode auf Automatic?
|
Re: Items einer ListBox mittels DragDrop verschieben?
Also in der CodeLibrary ist auch ein Beitrag (Suchbegriff dort einfach Drag Drop)
Der Code soll sogar mit MultiSelect funktionieren. |
Re: Items einer ListBox mittels DragDrop verschieben?
Hab jetzt folgende Lösung gefunden, die auch gut funktioniert. Jetzt muss ich das aber so machen, dass die Items der ListBox2 parallel mit verschoben werden müssen. Wer hat da eine Idee?
Delphi-Quellcode:
procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
State: TDragState; var Accept: Boolean); var verschieben, ItemPos, i: integer; begin Accept := false; if not (Source is TListBox) then Exit; if (Source as TListBox).MultiSelect then begin if (Source as TListBox).SelCount < 0 then Exit; end else begin if ((Source as TListBox).ItemIndex < 0) then Exit; end; with Source as TListBox do begin ItemPos := ItemAtPos(point(x,y), true); if (ItemPos < 0) or (ItemPos >= Items.Count) then Exit; if Selected[ItemPos] then ItemIndex := ItemPos; verschieben := ItemIndex - ItemPos; if verschieben <> 0 then begin if verschieben > 0 then i := 0 else i := pred(Items.Count); while (i >= 0) and (i < Items.Count) do begin if Selected[i] then begin if (i-verschieben >= 0) and (i-verschieben < Items.Count) then begin Items.Move(i, i-verschieben); Selected[i]:=false; Selected[i-verschieben]:=true; end else begin break; end; // if end; // if if verschieben > 0 then inc(i) else dec(i); end; // while end; // if end; // with Accept := true; end; |
Re: Items einer ListBox mittels DragDrop verschieben?
Na gut, damit wird aber nur zusätzlich das Verschieben aller selektierten Items anstatt nur eines realisiert. Abgesehen davon, dass in deinem vorherigen Post zwei mal auf TargetIndex > -1 geprüft wird fällt mir auf die Schnelle nicht auf.
Ach ja, wo kommt bei dir ItemIndex her? Gruß oki |
Re: Items einer ListBox mittels DragDrop verschieben?
Zitat:
|
Re: Items einer ListBox mittels DragDrop verschieben?
Zitat:
|
Re: Items einer ListBox mittels DragDrop verschieben?
Hab diesen Code hier im Forum gefunden :gruebel:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 10: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