![]() |
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:
Der Code funktioniert unter Delphi 2007, sollte aber auch mit früheren Delphi-Versionen funktionieren.
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:51 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