AGB  ·  Datenschutz  ·  Impressum  







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

Listview items verschieben

Ein Thema von Van HelF · begonnen am 2. Jul 2007 · letzter Beitrag vom 2. Jul 2007
Antwort Antwort
Van HelF

Registriert seit: 24. Okt 2005
Ort: Karlsbrunn
195 Beiträge
 
Delphi 7 Personal
 
#1

Listview items verschieben

  Alt 2. Jul 2007, 12:29
Ich habe folgendes Problem,
ich möchte die markierten Items einer listview mit "strg+Pfeil auf" und "strg+Pfeil" runter verschieben.
Das hochschieben der Items funktioniert ohne Probleme, jedoch das herunterschieben nicht, die Items werden aus mir unerklärlichen gründen nicht verschoben.

Delphi-Quellcode:
function MoveListViewItem(listView: TListView; ItemFrom, ItemTo: Word): Boolean;
var Source, Target: TListItem;
begin
  Result := False;
  listview.Items.BeginUpdate;
  try
    Source := listview.Items[ItemFrom];
    Target := listview.Items.Insert(ItemTo);
    Target.Assign(Source);
    Source.Free;
    Result := True;
  finally
    listview.Items.EndUpdate;
  end;
end;

procedure TForm1.items_nach_oben;
var i:integer;
begin

  for i:=0 to lv1.Items.Count-1 do
  begin
    if lv1.Items.Item[i].Selected then
    begin
      if i<>0 then
      begin
        MoveListViewItem(lv1,i,i-1);
        lv1.Items.Item[i-1].Selected:=true;
      end;
    end;
  end;
end;

procedure TForm1.items_nach_unten;
var i:integer;
begin

  for i:=0 to lv1.Items.Count-1 do
  begin
    if lv1.Items.Item[i].Selected then
    begin
      if i<lv1.Items.Count-1 then
      begin
        MoveListViewItem(lv1,i,i+1);
        lv1.Items.Item[i+1].Selected:=true;
      end;
    end;
  end;
end;



Aufruf:
  if key=38 then if KeyPressed(vk_Control) then items_nach_oben;
  if key=40 then if KeyPressed(vk_Control) then items_nach_unten;
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Listview items verschieben

  Alt 2. Jul 2007, 13:21
geh die schleife einfach mal schritt für schritt durch dann wirst du sehen das es daran liegt das du selected in der schleife änderst und somit das nächste item dann selektiert ist. Du solltest auf die Schleife ganz verzichten und direkt das selektierte Item ansteuern.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Van HelF

Registriert seit: 24. Okt 2005
Ort: Karlsbrunn
195 Beiträge
 
Delphi 7 Personal
 
#3

Re: Listview items verschieben

  Alt 2. Jul 2007, 13:48
Es sollen aber alle markierten Items verschoben werden.
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#4

Re: Listview items verschieben

  Alt 2. Jul 2007, 13:58
naja, wie gesagt solltest du da mal im einzelschritt durchgehen.
Stelle dir vor das 0te Item ist selektiert:
du verschiebst das 0te Item an Position1
dann verschiebst du das 1te Item (was früher das 0te war) an Position 2
dann verschiebst du das 2te Item (was früher das 0te war) an Position 3
etc.

Zudem kannst du die schleife auch bis count - 2 laufen lassen und kannst dir damit das if sparen.

Deine Move-Methode ist auch fehlerhaft. Willst du Beispielsweise ein Item von 2 nach 3 verschieben legst du an Position 3 ein neues Item an und löschst danach das zweite weg. dadurch wird das neue auber von position 3 auf position2 verschoben
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Van HelF

Registriert seit: 24. Okt 2005
Ort: Karlsbrunn
195 Beiträge
 
Delphi 7 Personal
 
#5

Re: Listview items verschieben

  Alt 2. Jul 2007, 16:24
Für alle die es interessiert, so funktionierts :
Delphi-Quellcode:
procedure TForm1.items_nach_unten;
var i:integer;
begin
  for i:=lv1.Items.count-2 downto 0 do
  begin
    if lv1.Items.Item[i].Selected then
    begin
      MoveListViewItem(lv1,i,i+2);
      lv1.Items.Item[i+1].Selected:=true;
    end;
  end;
end;
  Mit Zitat antworten Zitat
CCRDude
(Gast)

n/a Beiträge
 
#6

Re: Listview items verschieben

  Alt 2. Jul 2007, 16:40
Zusätzlich könntest Du noch überlegen, da es ja nur um Verschieben geht, einfach das Index des TListItem zu ändern, statt ihn in einen neu angelegten zu kopieren...
  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 04:42 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