AGB  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Listenelemente verschieben - Riesenproblem

Ein Thema von Marco Steinebach · begonnen am 12. Apr 2012 · letzter Beitrag vom 18. Apr 2012
Antwort Antwort
Marco Steinebach

Registriert seit: 4. Aug 2006
397 Beiträge
 
Delphi 5 Standard
 
#1

Listenelemente verschieben - Riesenproblem

  Alt 12. Apr 2012, 08:41
Hallo zusammen,
ich möchte in einer ListView ein bestimmtes Element nach oben bzw. unten verschieben - sollte ja kein Problem darstellen.
Ich habe mir dazu einen Code gebastelt, habe, weil er nicht ging, hier in der DP geschaut, und den hier vorgestellten genommen, es bleibt aber beim selben Problem.
Das Problem ist das folgende: stehe ich z.B. auf dem dritten Listeneintrag und verschiebe diesen, sind alle Einträge, auch die, die vorher nicht markiert waren, markiert - und ich begreife absolut nicht, warum.
Würde sich das bitte mal jemand ansehen?
Für einen Tipp wäre ich wirklich sehr dankbar!
Viele Grüße
Marco
Angehängte Dateien
Dateityp: zip moveElements.zip (1,5 KB, 12x aufgerufen)
Marco Steinebach
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
397 Beiträge
 
Delphi 5 Standard
 
#2

AW: Listenelemente verschieben - Riesenproblem

  Alt 15. Apr 2012, 06:13
*** fällt denn keinem was dazu ein... *winsel! ***
Marco Steinebach
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Langeneichstädt
879 Beiträge
 
Delphi 10 Seattle Professional
 
#3

AW: Listenelemente verschieben - Riesenproblem

  Alt 15. Apr 2012, 08:42
Ich habe D 2009 und das Verschieben mittels +/- Taste geht erst mal. Was bei mir nicht geht, ist die Eigenschaft Checked. Diese wird nicht mit dem Objekt mitgenommen, sondern wird dann, mir unverständlich, an eine andere Zeile weitergegeben, die dann aber mit dem Text nicht übereinstimmt.
Matthias
Manchmal kommt es anders, wenn man denkt.
(Daniel Keiper-Knorr)
  Mit Zitat antworten Zitat
ASM

Registriert seit: 15. Aug 2004
165 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Listenelemente verschieben - Riesenproblem

  Alt 15. Apr 2012, 20:35
Der ursprüngliche Quellcode ist leider unzureichend und daher fehlerhaft.
Versuche es hiermit:
Code:
procedure MoveLVItem(LV: TListView; Direction: TSearchDirection);
var
  aItem, NextItem, TmpItem: TListItem;
  fChecked: array of Boolean;
  i: integer;
  temp: Boolean;
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;
    setlength(fchecked, items.Count);
    for i := 0 to items.count - 1 do
      fChecked[i] := Items.item[i].checked;
    case Direction of
      sdAbove:
        begin
          if aItem.Index = 0 then exit; // Erstes Item ist markiert > raus
          temp := items[aItem.Index - 1].checked;
          fChecked[aItem.Index - 1] := items[aItem.Index].checked;
          fChecked[aItem.Index] := temp;
        end;
      sdBelow:
        begin
          if aItem.Index = Items.Count - 1 then exit; // Letztes Item ist markiert > raus
          temp := items[aItem.Index + 1].checked;
          fChecked[aItem.Index + 1] := items[aItem.Index].checked;
          fChecked[aItem.Index] := temp;
        end;
    end;
    NextItem := GetNextItem(aItem, Direction, [isNone]);
    Items.BeginUpdate;
    TmpItem := TListItem.Create(Items);
    try
      TmpItem.Assign(NextItem);
      NextItem.Assign(aItem);
      aItem.Assign(TmpItem);
      aItem.Selected := NextItem.Selected;
      NextItem.MakeVisible(True);
      ItemFocused := NextItem;
      Selected := NextItem;
    finally
      TmpItem.Free;
    end;
    for i := 0 to items.count - 1 do
      items.item[i].checked := fChecked[i];
    Items.EndUpdate;
  end;
end;
  Mit Zitat antworten Zitat
Marco Steinebach

Registriert seit: 4. Aug 2006
397 Beiträge
 
Delphi 5 Standard
 
#5

AW: Listenelemente verschieben - Riesenproblem

  Alt 18. Apr 2012, 09:20
Hallo,
und ganz herzlichen Dank für die Antwort.
Ich konte echt nicht glauben, daß im eigentlichen VCL-Quellcode ein Fehler drin ist - und hab gedacht, ich wäre zu blöd.
Also gut, , speichern wir die .Checked eben erst...
Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:

Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2016, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2016 by Daniel R. Wolf