Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Neuen Beitrag zur Code-Library hinzufügen (https://www.delphipraxis.net/33-neuen-beitrag-zur-code-library-hinzufuegen/)
-   -   Delphi Drag&Drop in einer ListBox mit Mausevents umsetzen (https://www.delphipraxis.net/111673-drag-drop-einer-listbox-mit-mausevents-umsetzen.html)

Basic-Master 7. Apr 2008 16:56


Drag&Drop in einer ListBox mit Mausevents umsetzen
 
Um eine ListBox ohne Drag&Drop umsetzen zu können, muss man die drei Mouse-Events MouseUp, MouseMove und MouseDown der ListBox belegen und den folgenden Code verwenden:
Delphi-Quellcode:
procedure TForm1.ListBox1MouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  ListStartItem := ListBox1.ItemAtPos(Point(X, Y), True);
  ListStopItem := ListStartItem;
  ListDragging := (ListStartItem <> -1);
  ListBox1.Cursor := crDrag;
end;

procedure TForm1.ListBox1MouseMove(Sender: TObject; Shift: TShiftState; X,
  Y: Integer);
var NeuesItem: Integer;
begin
  if (not ListDragging) then exit;
  // neues Element ueber Koordinate suchen
  NeuesItem := ListBox1.ItemAtPos(Point(X, Y), True);
  if (ListStopItem = -1) or (NeuesItem = -1) or (ListStopItem = NeuesItem) then
    exit;
  // Elemente austauschen
  ListBox1.Items.Exchange(ListStopItem, NeuesItem);
  ListBox1.ItemIndex := NeuesItem;
  ListStopItem := NeuesItem;
end;

procedure TForm1.ListBox1MouseUp(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if (not ListDragging) then exit;
  // Variablen zurücksetzen
  NewsDragging := False;
  lstNews.Cursor := crDefault;
  // Testen, ob ein Austausch stattgefunden hat
  if (ListStartItem = -1) or (ListStopItem = -1) or (ListStartItem = ListStopItem) then
    exit;
  // z. B. Meldung ausgeben
  Showmessage('Bewegtes Element: ' + IntToStr(ListStartItem) + #13#10 + 'Neuer Index: ' + IntToStr(ListStopItem));
end;
Der Code funktioniert unter Delphi 2007, sollte aber auch mit früheren Delphi-Versionen funktionieren.


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