Componentes - fazendo drag and drop (arrastar e soltar) entre label edit e listbox

Top  Previous  Next

// drag-n-drop entre labels, edits e listboxes

 

----------------------------- unit ------------------------------

 

unit Unit1;

 

interface

 

uses Forms, Controls, StdCtrls, Classes;

 

type

  TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    ListBox1: TListBox;

    ListBox2: TListBox;

    Label1: TLabel;

    Label2: TLabel;

    procedure Edit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

    procedure Edit1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);

    procedure Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);

    procedure Label1DragDrop(Sender, Source: TObject; X, Y: Integer);

    procedure ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);

  end;

 

var

  Form1: TForm1;

 

implementation

 

{$R *.dfm}

 

procedure TForm1.Edit1MouseDown(Sender: TObject; Button: TMouseButton; Shift: TShiftState; X, Y: Integer);

begin

  if Sender is TControl then (Sender as TControl).BeginDrag(True);

end;

 

procedure TForm1.Edit1DragOver(Sender, Source: TObject; X, Y: Integer; State: TDragState; var Accept: Boolean);

begin

  Accept:= not (Source = Sender);

end;

 

procedure TForm1.Edit1DragDrop(Sender, Source: TObject; X, Y: Integer);

begin

  if Source is TEdit then

    TEdit(Sender).Text:=TEdit(Source).Text

  else

    if Source is tlabel then

      TEdit(Sender).Text:=tlabel(Source).caption

    else

      if Source is TListBox then

        TEdit(Sender).Text:=TListBox(Source).Items[TListBox(Source).ItemIndex]

end;

 

procedure TForm1.Label1DragDrop(Sender, Source: TObject; X, Y: Integer);

begin

  if Source is TEdit then

    TLabel(sender).Caption:= TEdit(Source).Text

  else

    if Source is TLabel then

      TLabel(sender).Caption := TLabel(source).caption

    else

      if Source is TListBox then

        TLabel(Sender).caption:=TListBox(Source).Items[TListBox(Source).ItemIndex]

end;

 

procedure TForm1.ListBox1DragDrop(Sender, Source: TObject; X, Y: Integer);

begin

  if Source is TEdit then

    TListBox(sender).Items.Add(tedit(source).Text)

  else

    if Source is TLabel then

      TListBox(sender).Items.Add(TLabel(source).caption)

    else

      if Source is TListBox then

        if TListBox(Source).ItemIndex >=0 then

          TListBox(Sender).Items.Add(TListBox(Source).Items[TListBox(Source).ItemIndex]);

end;

 

end.

 

------------------------------ form ----------------------------------

 

object Form1: TForm1

  Caption = 'Form1'

  object Label1: TLabel

    Caption = 'Label1'

    OnDragDrop = Label1DragDrop

    OnDragOver = Edit1DragOver

    OnMouseDown = Edit1MouseDown

  end

  object Label2: TLabel

    Caption = 'Label2'

    OnDragDrop = Label1DragDrop

    OnDragOver = Edit1DragOver

    OnMouseDown = Edit1MouseDown

  end

  object Edit1: TEdit

    Text = 'Edit1'

    OnDragDrop = Edit1DragDrop

    OnDragOver = Edit1DragOver

    OnMouseDown = Edit1MouseDown

  end

  object Edit2: TEdit

    Text = 'Edit2'

    OnDragDrop = Edit1DragDrop

    OnDragOver = Edit1DragOver

    OnMouseDown = Edit1MouseDown

  end

  object ListBox1: TListBox

    OnDragDrop = ListBox1DragDrop

    OnDragOver = Edit1DragOver

    OnMouseDown = Edit1MouseDown

  end

  object ListBox2: TListBox

    OnDragDrop = ListBox1DragDrop

    OnDragOver = Edit1DragOver

    OnMouseDown = Edit1MouseDown

  end

end.