Delphi-PRAXiS
Seite 2 von 2     12   

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 Zeilen färben, On Custom DrawItem (https://www.delphipraxis.net/111722-listview-zeilen-faerben-custom-drawitem.html)

marabu 11. Apr 2008 11:13

Re: Listview Zeilen färben, On Custom DrawItem
 
Statt Insert() und Delete() könntest du Move() verwenden. Wenn die Selektion zusammenhängend ist, dann vielleicht so:

Delphi-Quellcode:
procedure MoveStrings(s: TStrings; iFrom, iTo, iCount: Integer);
var
  i: Integer;
begin
  s.BeginUpdate;
  try
    if iTo < iFrom then
      for i := 1 to iCount do
        s.Move(Pred(iFrom + iCount), iTo)
    else
      for i := 1 to iCount do
        s.Move(iFrom, Pred(iTo))
    ;
  finally
    s.EndUpdate;
  end;
end;
Andernfalls müssen die Items einzeln verschoben werden.

Centrii 11. Apr 2008 14:37

Re: Listview Zeilen färben, On Custom DrawItem
 
Danke für die Hilfe Marabu...
Dein Source geht mit kleiner Abwandlung für ein Item. Für mehrere schaff ich es nur wenn "ito < ifrom"
Wenn ich mal mehr Zeit habe schaue ich mir das nochmal genauer an, aber für jetzt hab ich es auf ein Item begrenzt.
Hier der jetztige Code

Delphi-Quellcode:
procedure TfDLMain.ListViewDragDrop(Sender, Source: TObject; X, Y: Integer);

    procedure MoveStrings(s: TStrings; iFrom, iTo, iCount: Integer);
    var
      i: Integer;
    begin
      s.BeginUpdate;
      try
        if iTo < iFrom then
            s.Move(Pred(iFrom+iCount), iTo)
        else
            s.Move(iFrom, iTo);
      finally
        s.EndUpdate;
      end;
    end;

var
DragItem, DropItem, CurrentItem, NextItem: TListItem;
i, Index1, Index2, Index3 :Integer;
begin
  if Sender = Source then begin
    if ListView.SelCount = 1 then begin
      for i:= 0 to ListItems.Count-1 do begin
        if ListItems[i].Selected = true then begin
          DropItem := ListView.GetItemAt(X, Y);
          if DropItem <> nil then begin
            Index1 := i;
            Index2 := DropItem.Index;
            Index3 := ListView.SelCount;
            ListItems[i].Selected := false;
            MoveStrings(Values,Index1,Index2,Index3);
          end;
        end;
      end;
      ListView.Invalidate;
    end
    else MessageDlg('Bitte zum verschieben von mehreren Items das "Move Up", bzw. das "Move Down" verwenden.', mtInformation, [mbOK], 0);
  end;
end;
Vielen Dank für die Anregungen Marabu :thumb:

Gruß Ruben


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:27 Uhr.
Seite 2 von 2     12   

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