14. januar 2006 - 13:53
												Der er
									2 kommentarer													og
					1 løsning									
									
		 
		
			
Drag and drop
			Hej Eksperter.
Jeg har to listbokse, hvoraf jeg i den ene har en række navne fra en database.
Det jeg godt kunne tænke mig var at man kunne trække navne fra listbox1 over til listbox2 (De skal stadig blive i listbox 1), i listbox2, skal man gerne kunne flytte filerne op og ned også med drag and drop, og man skal kunne fjerne ellementerne fra listbox to ved at trække dem udenfor feltet.
Hvordan løser jeg dette problem?
					
		
	 
		
								
					
				14. januar 2006 - 16:08
				#1
						
		 
		
			Du skal lave tre events for de to listboxe som vist i nedenstående eksempel:
unit udragtest;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
type
  TForm1 = class(TForm)
    ListBox1: TListBox;
    ListBox2: TListBox;
    procedure ListBoxMouseDown(Sender: TObject; Button: TMouseButton;
      Shift: TShiftState; X, Y: Integer);
    procedure ListBoxDragOver(Sender, Source: TObject; X, Y: Integer;
      State: TDragState; var Accept: Boolean);
    procedure ListBoxDragDrop(Sender, Source: TObject; X, Y: Integer);
  end;
var
  Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.ListBoxMouseDown(Sender: TObject; Button: TMouseButton;
  Shift: TShiftState; X, Y: Integer);
begin
  if button=mbleft then (sender as tlistbox).begindrag(false, 10);
end;
procedure TForm1.ListBoxDragOver(Sender, Source: TObject; X, Y: Integer;
  State: TDragState; var Accept: Boolean);
begin
  accept := (source is tlistbox);
end;
procedure TForm1.ListBoxDragDrop(Sender, Source: TObject; X, Y: Integer);
var
  p, i: integer;
begin
  p := (sender as tlistbox).itematpos(point(x,y), true);
  with (source as tlistbox) do
  begin
    for i := 0 to items.Count-1 do if selected[i] then
    begin
      if (sender = source)
      then items.Move(i, p)
      else (sender as tlistbox).Items.Insert(p, items[i]);
      inc(p);
    end;
//  if sender<>source then deleteselected;  hvis afsender-element skal fjernes
  end;
end;
end.