Avatar billede lubker Nybegynder
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?
Avatar billede tauron Nybegynder
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.
Avatar billede lubker Nybegynder
14. januar 2006 - 16:21 #2
Kanon.
Det er så tæt på at være der.

Eneste problem er at man ikke må kunne overføre fra listbox2 til listbox1.
Avatar billede lubker Nybegynder
14. januar 2006 - 16:23 #3
Fandt selv ud af det...

Kanon tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester