AGB  ·  Datenschutz  ·  Impressum  







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

ListView mehrere Items verschieben

Ein Thema von DelphiforEver · begonnen am 13. Jan 2008 · letzter Beitrag vom 16. Jan 2008
Antwort Antwort
DelphiforEver

Registriert seit: 13. Jan 2008
3 Beiträge
 
#1

ListView mehrere Items verschieben

  Alt 13. Jan 2008, 23:28
Hallo,
Ich habe ein Problem ich möchte in einem ListView mehrere Items, welche Selected sind nach oben und unten verschieben.
Momentan kann ich jedoch nur 1 selektiertes Item nach oben und unten verschieben, es geht also nicht mit mehreren gleichzeitig.
Ich wollte Fragen, ob man die folgende Prozedure auch so erweitern kann, sodass man mehrere Items gleichzeitig verschschieben kann?

Delphi-Quellcode:
procedure MoveLVItem(LV: TListView;Direction: TSearchDirection);
var aItem, NextItem,TmpItem : TListItem;
begin
  with LV do
  begin
   if IsEditing or not Assigned(ItemFocused) then
      exit;//raus wenn Item editiert wird oder kein Item selektiert ist
    aItem := ItemFocused;
    case Direction of
      sdAbove : if aItem.Index = 0 then
                  exit;//Erstes Item ist markiert > raus
      sdBelow : if aItem.Index = Items.Count-1 then
                  exit;//Letztes Item ist markiert > raus
    end;
    NextItem := GetNextItem(aItem,Direction,[isNone]);
    Items.BeginUpdate;
    try
      TmpItem := TListItem.Create(Items);
      TmpItem.Assign(NextItem);
      NextItem.Assign(aItem);
      aItem.Assign(TmpItem);
      aItem.Selected := NextItem.Selected;
      TmpItem.Free;
      NextItem.MakeVisible(True);
      ItemFocused := NextItem;
      Selected := NextItem;
    finally
      Items.EndUpdate;
    end;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von Mackhack
Mackhack

Registriert seit: 29. Nov 2003
Ort: San Diego, CA/USA
1.446 Beiträge
 
Delphi 2006 Architect
 
#2

Re: ListView mehrere Items verschieben

  Alt 13. Jan 2008, 23:55
Ist Multiselect auf True?
Um etwas Neues zu schaffen muss man seine Ohren vor den Nein-sagern verschliessen um seinen Geist öffnen zu können.
(George Lukas)
  Mit Zitat antworten Zitat
DelphiforEver

Registriert seit: 13. Jan 2008
3 Beiträge
 
#3

Re: ListView mehrere Items verschieben

  Alt 14. Jan 2008, 00:04
Ja, ist auf True.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#4

Re: ListView mehrere Items verschieben

  Alt 14. Jan 2008, 08:12
Hallo,

die Prozedur kommt mir irgendwie bekannt vor

Was hindert Dich daran für jedes Item die Prozedur aufzurufen?

Du könntest die Items über ein TListItems-Objekt übergeben und dann in der Prozedur eine Schleife einbauen.
Oder direkt einen Zeiger auf die Listview übergeben und in der Prozedur dann Selected auswerten.

So oder so, es ist immer eine Schleife erforderlich.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
marabu

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

Re: ListView mehrere Items verschieben

  Alt 14. Jan 2008, 09:34
Herzlich willkommen in der Delphi-PRAXiS, DelphiForEver.

Der Code zum Verschieben von mehreren ListItems lässt sich bei Verwendung der Methode MoveSelection() extrem kompakt schreiben, aber die nötigen Fallunterscheidungen für zusammenhängende und nicht zusammenhängende Auswahlmengen stellt einen vor die Wahl: Entweder für jeden Fall den optimalen Code oder ein relativ kompakter Code für alle Fälle. Ich erfreue mich an möglichst wenigen Codezeilen.

Freundliche Grüße vom marabu
Angehängte Dateien
Dateityp: zip lv-drag3_913.zip (1,9 KB, 24x aufgerufen)
  Mit Zitat antworten Zitat
DelphiforEver

Registriert seit: 13. Jan 2008
3 Beiträge
 
#6

Re: ListView mehrere Items verschieben

  Alt 15. Jan 2008, 19:27
Vielen Dank für die Hilfe. Mit dem verschieben über Drag & Drop war kein Problem, aber ich versuche die oben genannte Prozedure so umzuformen, dass sie auch mit mehreren Items funktioniert. Einfach in eine Schleife kann nicht gehen, weil die verschobenen Items erneut selected werden...
  Mit Zitat antworten Zitat
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#7

Re: ListView mehrere Items verschieben

  Alt 15. Jan 2008, 19:30
Ein Beispiel für eine ListBox gibt es in der Code-Library. Evtl. lässt sich das für einen ListView umschreiben.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#8

Re: ListView mehrere Items verschieben

  Alt 16. Jan 2008, 14:00
Hallo,

die folgende Prozedur arbeitet mit einem Objekt zur Zwischenspeicherung, sie könnte annähernd Deinen Anforderungen entsprechen. Du solltest aber noch prüfen ob alle Randbedingungen abgefangen werden
Delphi-Quellcode:
procedure MoveMultiSelectLVItem(LV: TListView;iDest: Integer);
var vLV : TListView;
    vListItems : TListItems;
    aItem : TListItem;
    z,iTempDest : Integer;
begin
  vLV := TListView.CreateParented(THandle(-3));
  vListItems := TListItems.Create(vLV);
  try
  iTempDest := iDest;
  for z := LV.Items.Count - 1 downto 0 do
    if LV.Items[z].Selected then
      begin
      aItem := vListItems.Add;
      aItem.Assign(LV.Items[z]);
      if z < iDest then
        dec(iTempDest);
      LV.Items[z].Delete;
      end;
  for z := 0 to vLV.Items.Count - 1 do
    begin
    aItem := LV.Items.Insert(iTempDest);
    aItem.Assign(vLV.Items[z]);
    aItem.Selected := True;
    end;
  finally
    vLV.Free;
    vListItems.Free;
  end;
end;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Antwort Antwort


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 06:02 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