AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Listview Zeilen färben, On Custom DrawItem

Ein Thema von Centrii · begonnen am 8. Apr 2008 · letzter Beitrag vom 11. Apr 2008
Antwort Antwort
Seite 2 von 2     12   
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#11

Re: Listview Zeilen färben, On Custom DrawItem

  Alt 11. Apr 2008, 11:13
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.
  Mit Zitat antworten Zitat
Centrii

Registriert seit: 18. Mai 2007
Ort: FDS
108 Beiträge
 
Delphi 2006 Architect
 
#12

Re: Listview Zeilen färben, On Custom DrawItem

  Alt 11. Apr 2008, 14:37
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

Gruß Ruben
Ruben
Theorie ist, wenn man alles weiss, aber nichts funktioniert. Praxis ist, wenn alles funktioniert und keiner weiss warum
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:55 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