home *** CD-ROM | disk | FTP | other *** search
/ Softwarová Záchrana 3 / Softwarova-zachrana-3.bin / ArsClip / source.zip / UnitListViewMover.pas < prev    next >
Pascal/Delphi Source File  |  2002-03-22  |  5KB  |  175 lines

  1. unit UnitListViewMover;
  2.  
  3. interface
  4. uses ComCtrls, Classes, Contnrs;
  5.  
  6. procedure MoveSelectedUp(lv : TListView);
  7. procedure MoveSelectedDown(lv : TListView);
  8. procedure MoveSelectedTop(lv : TListView);
  9. procedure MoveSelectedBottom(lv : TListView);
  10.  
  11. implementation
  12.  
  13. procedure MoveSelectedUp(lv : TListView);
  14. var i : integer;
  15.     li, liNew : TListItem;
  16.     lst1: TList;
  17. begin
  18.     lv.Items.BeginUpdate;
  19.     if (lv.SelCount > 0) then begin
  20.         lst1 := TList.Create();
  21.  
  22.         lv.SortType := stNone;
  23.         for i := 0 to (lv.Items.Count - 1) do begin
  24.             if (lv.Items.Item[i].Selected) and
  25.                 (lv.Items.Item[i].Index <> 0)then begin
  26.                 lst1.Add(lv.Items.Item[i]);
  27.             end;
  28.         end;
  29.  
  30.         for i := 0 to (lst1.Count - 1) do begin
  31.             li := TListItem( lst1.Items[i] );
  32.  
  33.             liNew := lv.Items.Insert(li.Index - 1);
  34.             liNew.Caption := li.Caption;
  35.             liNew.SubItems.AddStrings( li.SubItems );
  36.             liNew.Checked := li.Checked;
  37.             liNew.Selected := false;
  38.             liNew.ImageIndex := li.ImageIndex;
  39.             li.Delete;
  40.  
  41.             liNew.Selected := true;
  42.         end;
  43.  
  44.  
  45.         lst1.Free;
  46.     end;
  47.    lv.Items.EndUpdate;
  48. end;
  49.  
  50. procedure MoveSelectedDown(lv : TListView);
  51. var i : integer;
  52.     li, liNew : TListItem;
  53.     lst1 : TList;
  54. begin
  55.     lv.Items.BeginUpdate;
  56.     if (lv.SelCount > 0) then begin
  57.         lst1 := TList.Create();
  58.         lv.SortType := stNone;
  59.  
  60.         //
  61.         // get a list of all selected items (that are not the last item)
  62.         //
  63.         for i := (lv.Items.Count - 1) downto 0 do begin
  64.             li := lv.Items.Item[i];
  65.             if (li.Selected) and (li.Index <> lv.Items.count - 1) then begin
  66.                 lst1.Add(li);
  67.             end;
  68.         end;
  69.  
  70.         //
  71.         // insert a copy in the new position, and remove the old item
  72.         //
  73.         for i := 0 to (lst1.Count - 1) do begin
  74.             li := TListItem( lst1.Items[i] );
  75.  
  76.             if (li.Index <> (lv.items.Count - 1) ) then begin
  77.                 liNew := lv.Items.Insert(li.Index + 2);
  78.                 liNew.Caption := li.Caption;
  79.                 liNew.SubItems.AddStrings( li.SubItems );
  80.                 liNew.Checked := li.Checked;
  81.                 liNew.Selected := true;
  82.                 liNew.ImageIndex := li.ImageIndex;
  83.                 li.Delete;
  84.             end;
  85.         end;
  86.  
  87.         lst1.Free;
  88.     end;
  89.     lv.Items.EndUpdate;
  90. end;
  91.  
  92. procedure MoveSelectedTop(lv : TListView);
  93. var i : integer;
  94.     li, liNew : TListItem;
  95.     ol : TObjectList;
  96. begin
  97.     lv.Items.BeginUpdate;
  98.  
  99.     if (lv.SelCount >= 1) then begin
  100.         ol := TObjectList.Create();
  101.  
  102.         //
  103.         // find all selected items (manipulating the list while
  104.         // enumerating is BAD)
  105.         //
  106.         for i := 0 to (lv.items.count - 1) do begin
  107.             if (lv.Items.Item[i].selected) then begin
  108.                 ol.Add(lv.Items.Item[i]);
  109.             end;
  110.         end;
  111.  
  112.         //
  113.         // Move them all to the top
  114.         //
  115.         lv.SortType := stNone;
  116.         for i := (ol.Count - 1) downto 0 do begin
  117.             li := TListItem(ol.Items[i]);
  118.             liNew := lv.Items.Insert(0);
  119.             liNew.Caption := li.Caption;
  120.             liNew.SubItems.AddStrings( li.SubItems );
  121.             liNew.Checked := li.Checked;
  122.             liNew.Selected := true;
  123.             liNew.ImageIndex := li.ImageIndex;
  124.  
  125.             ol.Delete(i);
  126.         end;
  127.  
  128.         ol.Free;
  129.     end;
  130.     lv.Items.EndUpdate;
  131. end;
  132. procedure MoveSelectedBottom(lv : TListView);
  133. var i : integer;
  134.     li, liNew : TListItem;
  135.     ol : TObjectList;
  136. begin
  137.     lv.Items.BeginUpdate;
  138.     if (lv.SelCount >= 1) then begin
  139.         ol := TObjectList.Create();
  140.  
  141.         //
  142.         // find all selected items (manipulating the list while
  143.         // enumerating is BAD)
  144.         //
  145.         for i := 0 to (lv.items.count - 1) do begin
  146.             if (lv.Items.Item[i].selected) then begin
  147.                 ol.Add(lv.Items.Item[i]);
  148.             end;
  149.         end;
  150.  
  151.         //
  152.         // Move them all to the top
  153.         // delete the old items
  154.         //
  155.         lv.SortType := stNone;
  156.         for i := 0 to (ol.Count - 1) do begin
  157.             li := TListItem(ol.Items[i]);
  158.             liNew := lv.Items.Insert(lv.Items.Count);
  159.             liNew.Caption := li.Caption;
  160.             liNew.SubItems.AddStrings( li.SubItems );
  161.             liNew.Checked := li.Checked;
  162.             liNew.Selected := true;
  163.             liNew.ImageIndex := li.ImageIndex;
  164.  
  165.             //ol.Delete(i);
  166.         end;
  167.  
  168.         ol.Free;
  169.     end;
  170.     lv.Items.EndUpdate;
  171. end;
  172.  
  173.  
  174. end.
  175.