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 Listview-Einträge vertauscht nach Drag&Drop (https://www.delphipraxis.net/170771-listview-eintraege-vertauscht-nach-drag-drop.html)

marcibaer 2. Okt 2012 16:26

Listview-Einträge vertauscht nach Drag&Drop
 
Hallo zusammen!

Ich nutze den folgenden Code von den Schweizern:
Delphi-Quellcode:
  if (Sender = Source) then
    with TListView(Sender) do
      begin
        DropItem := GetItemAt(X,Y);
        CurrentItem := Selected;
        while (CurrentItem <> nil) do
          begin
            NextItem := GetNextItem(CurrentItem, SdAll, [IsSelected]);
            if (DropItem = nil) then
              DragItem := Items.Add
            else
              DragItem := Items.Insert(DropItem.Index);
            DragItem.Assign(CurrentItem);
            CurrentItem.Free;
            CurrentItem := NextItem;
          end;
      end;
Anscheinend wird beim
Delphi-Quellcode:
Assign
- im Gegensatz zu dem, was in der Hilfe steht, AUCH der Index kopiert, so dass die durch Drag&Drop vorgenommene Veränderung nicht bzw. falsch übernommen wird.
Habt Ihr das auch schon mal gehabt!?
Gibt's da Workarounds!? Der Index ist ja leider nicht "von Hand" gesetzt werden.

Viele Grüße,

Uwe Raabe 2. Okt 2012 16:59

AW: Listview-Einträge vertauscht nach Drag&Drop
 
Zitat:

Zitat von marcibaer (Beitrag 1185443)
Anscheinend wird beim
Delphi-Quellcode:
Assign
- im Gegensatz zu dem, was in der Hilfe steht, AUCH der Index kopiert,

Das wäre dann allerdings auch entgegen dem, was im Source-Code steht.

Beschreib doch mal konkret das Verhalten, was du erwartest und was du bekommst.

marcibaer 2. Okt 2012 17:26

AW: Listview-Einträge vertauscht nach Drag&Drop
 
Liste der Anhänge anzeigen (Anzahl: 2)
Anbei mal 2 Bilder:
Habe den 5. Eintrag (E) per Drag&Drop auf den 1. (A) fallen gelassen.
Leider dann NICHT die Reihenfolge EABCD, sondern DCBAE!

Viele Grüße,

marcibaer 18. Okt 2012 11:15

AW: Listview-Einträge vertauscht nach Drag&Drop
 
* push *

Hat denn keiner 'ne Idee!?

Bummi 18. Okt 2012 12:47

AW: Listview-Einträge vertauscht nach Drag&Drop
 
folgendes funktioniert bei mir ....

Delphi-Quellcode:
unit Unit3;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls;

type
  TForm3 = class(TForm)
    ListView1: TListView;
    procedure ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
    procedure ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
    procedure ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form3: TForm3;

implementation

{$R *.dfm}

procedure TForm3.FormCreate(Sender: TObject);
begin
  ReportMemoryLeaksOnShutDown := true;
end;

procedure TForm3.ListView1DragDrop(Sender, Source: TObject; X, Y: Integer);
var
 li:TListItem;
begin
    li:= TListItem.Create(ListView1.Items);
    li.Assign(ListView1.DropTarget);
    ListView1.DropTarget.Assign((ListView1.Items[ListView1.Itemindex]));
    ListView1.Items[ListView1.Itemindex].Assign(li);
    li.Free;
end;

procedure TForm3.ListView1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);
begin
  Accept := Source=Sender;

end;

procedure TForm3.ListView1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
begin
  if Button=mbLeft then ListView1.BeginDrag(false);
end;

end.


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 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