Autor Beitrag
Lannes
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2352
Erhaltene Danke: 4

Win XP, 95, 3.11, IE6
D3 Prof, D4 Standard, D2005 PE, TurboDelphi, Lazarus, D2010
BeitragVerfasst: Do 20.10.05 15:20 
ListView-Item nach oben oder unten verschieben
Mit dieser Prozedur kann ein Item einer ListView-Komponente nach oben oder unten verschoben werden. Über das Setzen der Prozedurvariable Direction wird die Richtung vorgegeben. Die bestehende Selection bleibt bestehen, diese Prozedur kann also auch im MultiSelect-Modus genutzt werden. Auch die an die Eigenschaft Data zugewiesenen Daten und zugewiesene Image-Indexe behalten ihre Zuordnung.

  • Prozedurvariablen
    LV:
    z.B. ListView1
    Direction:
    sdAbove > markiertes Item nach oben verschieben
    sdBelow > markiertes Item nach unten verschieben
  • Prozedur
    ausblenden volle Höhe Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    9:
    10:
    11:
    12:
    13:
    14:
    15:
    16:
    17:
    18:
    19:
    20:
    21:
    22:
    23:
    24:
    25:
    26:
    27:
    28:
    29:
    30:
    31:
    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;

  • Aufruf per Tastatur
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    procedure TForm1.ListView1KeyPress(Sender: TObject; var Key: Char);
    begin
      case Key of
       '+' : MoveLVItem(ListView1,sdAbove);
       '-' : MoveLVItem(ListView1,sdBelow);
      end;
    end;

  • Aufruf durch ein Menü oder Buttons
    ausblenden Delphi-Quelltext
    1:
    2:
    3:
    4:
    5:
    6:
    7:
    8:
    9:
    procedure TForm1.NachObenClick(Sender: TObject);
    begin
      MoveLVItem(ListView1,sdAbove);
    end;

    procedure TForm1.NachUntenClick(Sender: TObject);
    begin
      MoveLVItem(ListView1,sdBelow);
    end;

Moderiert von user profile iconjasocul: Beitrag geprüft am 05.05.2006

_________________
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )


Zuletzt bearbeitet von Lannes am Do 20.10.05 20:42, insgesamt 1-mal bearbeitet