Einzelnen Beitrag anzeigen

ASM

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

AW: Listenelemente verschieben - Riesenproblem

  Alt 15. Apr 2012, 21: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