| 
   
    | ...drag & drop within a TListBox? |   
    | Autor: 
      Thomas Stutz |  | [ Print tip 
] |  |  |  
 
 
 
 
{This example shows how to drag&drop within a TListBox.
 The Demo Program also shows how to implement an autoscroll-feature.
 
 Dieses Beispiel zeigt, wie man drag & drop in einer TListBox realisiert.
 Im Demo-Programm wird auch eine Autoscroll-Funktion gezeigt.
 }
 
 procedure TForm1.ListBox1DragOver(Sender, Source: TObject; X, Y: Integer;
 State: TDragState; var Accept: Boolean);
 begin
 Accept := Sender is TListBox;
 end;
 
 procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);
 var
 iTemp: Integer;
 ptTemp: TPoint;
 szTemp: string;
 begin
 { change the x,y coordinates into a TPoint record }
 ptTemp.x := x;
 ptTemp.y := y;
 
 { Use a while loop instead of a for loop due to items possible being removed
 from listboxes this prevents an out of bounds exception }
 iTemp := 0;
 while iTemp <= TListBox(Source).Items.Count-1 do
 begin
 { look for the selected items as these are the ones we wish to move }
 if TListBox(Source).selected[iTemp] then
 begin
 { use a with as to make code easier to read }
 with Sender as TListBox do
 begin
 { need to use a temporary variable as when the item is deleted the
 indexing will change }
 szTemp := TListBox(Source).Items[iTemp];
 
 { delete the item that is being dragged  }
 TListBox(Source).Items.Delete(iTemp);
 
 { insert the item into the correct position in the listbox that it
 was dropped on }
 Items.Insert(itemAtPos(ptTemp, True), szTemp);
 end;
 end;
 Inc(iTemp);
 end;
 end;
 
 
 
   |