whats new ¦  programming tips ¦  indy articles ¦  intraweb articles ¦  informations ¦  links ¦  interviews
 misc ¦  tutorials ¦  Add&Win Game

Tips (1541)

Database (90)
Files (137)
Forms (107)
Graphic (114)
IDE (21)
Indy (5)
Internet / LAN (130)
IntraWeb (0)
Math (76)
Misc (126)
Multimedia (45)
Objects/
ActiveX (51)

OpenTools API (3)
Printing (35)
Strings (83)
System (266)
VCL (242)

Top15

Tips sort by
component


Search Tip

Add new Tip

Add&Win Game

Advertising

60 Visitors Online


 
...drag & drop within a TListBox?
Autor: Thomas Stutz
[ Print tip ]  


Tip Rating (10):  
     


{
 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;


 

Rate this tip:

poor
very good


Copyright © by SwissDelphiCenter.ch
All trademarks are the sole property of their respective owners