![]() |
ListBox-Einträge per Drag & Drop verschieben
Wie es möglich ist, alle selektierten Einträge einer ListBox mit der Maus zu verschieben, zeigt bitsetter in
![]() Hierfür muss DragMode auf dmAutomatic stehen.
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; Edit: Chakotays Ergänzung hinzugefügt. |
Re: ListBox-Einträge per Drag & Drop verschieben
Hallo,
die Zeilen [42..43]:
Delphi-Quellcode:
verursachen bei älteren Delphi-Versionen (im Test D3)eine Zugriffsverletzung.
Selected[i]:=false;
Selected[i-verschieben]:=true; Eine Zuweisung an Selected[x] bei der Einstellung MultiSelect := False ist die Ursache. In z.B. D2005 besteht das Problem nicht mehr. Das Problem kann so behoben werden:
Delphi-Quellcode:
[edit=CalganX]Mfg, CalganX[/edit]
//...
begin Items.Move(i, i-verschieben); if Multiselect then begin Selected[i]:=false; Selected[i-verschieben]:=true; end else ItemIndex := i-verschieben; end else begin //... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:13 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